私は、取り組んでいるソフトウェアエンジニアリングクラスのプロジェクトに取り組んでいます。目標は、提供されたトレーニングデータに適合する数学的表現を生成するために遺伝的プログラミングを使用するプログラムを設計することです。遺伝的プログラミングの目的で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