나는 내가 수행하고있는 소프트웨어 엔지니어링 클래스를 위해 프로젝트 작업을하고 있습니다. 목표는 제공된 프로그래밍 데이터에 적합한 수학적 표현을 생성하기 위해 유전 프로그래밍을 사용할 프로그램을 설계하는 것입니다.유전 프로그래밍 목적을위한 Java에서 이진 트리 만들기
방금 프로젝트를 시작했는데, 사용자 정의 트리 높이를 허용하고 각 노드를 분리하여 교차 및 변이를 더 간단하게 만드는 이진 트리를 작성하는 방법에 대해 머리를 쓰려고합니다. 내가 그러한 프로세스를 구현할 때.
다음은 지금까지 작성한 노드 클래스입니다. 내가 분명히 드러내는 것이 나의 명백한 경험이 아님을 용서해주십시오.
public class Node
{
Node parent;
Node leftchild;
Node rightchild;
public void setParent(Node p)
{
parent = p;
}
public void setLeftChild(Node lc)
{
lc.setParent(this);
leftchild = lc;
}
public void setRightChild(Node rc)
{
rc.setParent(this);
rightchild = rc;
}
}
public class OperatorNode extends Node
{
char operator;
public OperatorNode()
{
double probability = Math.random();
if (probability <= .25)
{
operator = '+';
}
else if (probability > .25 && probability <= .50)
{
operator = '-';
}
else if (probability > .50 && probability <= .75)
{
operator = '*';
}
else
{
operator = '/';
}
}
public void setOperator(char op)
{
if (op == '+' || op == '-' || op == '*' || op == '/')
{
operator = op;
}
}
/**
* Node that holds x variables.
*/
public class XNode extends Node
{
char x;
public XNode()
{
x = 'x';
}
}
import java.util.Random;
public class OperandNode extends Node
{
int operand;
/**
* Initializes random number generator, sets the value of the node from zero to 9.
*/
public OperandNode()
{
Random rand = new Random();
operand = rand.nextInt(10);
}
/**
* Manually changes operand.
*/
public void setOperand(int o)
{
operand = o;
}
}
이 내가 노드 자체에서 필요한 모든 기능을 수행하지만 더 큰 나무로 다음을 설정하는 방법을 알아 내려고 문제로 실행 해요. 어떤 종류의 콜렉션 유형을 사용해야한다는 것을 알았지 만, 내가하려고하는 것에 적합하다고 생각되는 라이브러리에서 찾을 수없는 것 같습니다.
올바른 방향으로 조금 움직여 주시면 대단히 감사하겠습니다.
질문에 대한 답변이 아니지만 jgap을 보았습니까? http://jgap.sourceforge.net/ –
나는 그것을 가로 지르지 만, 처음부터 그것을 구축하기위한 추가 점수를 얻었습니다. 그리고 이것은 정말로 개인적인 이익을 위해서 이해하고 싶습니다. – sitrick2