我正在为我正在上的软件工程课程做一个项目。目标是设计一个程序,该程序将使用遗传编程来生成适合提供的训练数据的数学表达式。
我刚刚开始研究这个项目,我正试图围绕如何创建一个允许用户定义树高度并保持每个节点分开以使交叉和突变更简单的二叉树。实施这些流程。
这是我到目前为止创建的节点类。请原谅我确信我明显缺乏经验。
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;
}
}
这完成了节点本身所需的一切,但我在试图弄清楚如何将它们变成更大的树时遇到了问题。我意识到我需要使用某种类型的集合类型,但似乎无法在库中找到一个似乎适合我正在尝试做的事情。
即使是朝着正确的方向轻推也将不胜感激。