Çalıştığım bir yazılım mühendisliği sınıfı için bir proje üzerinde çalışıyorum. Amaç, sağlanan eğitim verilerine uyan bir matematiksel ifade oluşturmak için genetik programlama kullanacak bir program tasarlamaktır.Genetik Programlama Amaçlı Java'da bir ikili ağaç oluşturma
Proje üzerinde çalışmaya başladım ve kafamı, kullanıcı tanımlı ağaç yüksekliğine izin verecek ve her düğümün geçişini ve mutasyonunu daha basit hale getirmek için ayrı tutulacak bir ikili ağacın nasıl oluşturulacağı üzerine sarmaya çalışıyorum bu süreçleri uygulamaya başladığımda.
Şimdiye kadar oluşturduğum düğüm sınıfları. Lütfen emin olduğum şeyden dolayı acımasız tecrübemden özür dilerim.
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;
}
}
Bu benim düğümler kendileri dışında gereken her şeyi yapar, ama daha büyük bir ağaca bunlar nasıl açacağınızı anlamaya çalışıyorum sorunlarla çalıştırıyorum. Bir çeşit koleksiyon türü kullanmam gerektiğinin farkındayım, ancak Kütüphanede, yapmaya çalıştığım şey için uygun görünen bir tane bulunamıyor gibi görünebilir.
Doğru yönde bir dürtme bile büyük ölçüde takdir edilecektir.
Sorunuza gerçekten bir cevap değil, jgap'a baktınız mı? http://jgap.sourceforge.net/ –
Karşılıklı olarak koşabilirdim, ama bunu sıfırdan yapmak için fazladan krediye sahibiz ve gerçekten, bu sadece kişisel çıkarlarımı anlamak istediğim bir şey. – sitrick2