Estoy trabajando en un proyecto para una clase de ingeniería de software que estoy tomando. El objetivo es diseñar un programa que utilizará la programación genética para generar una expresión matemática que se ajuste a los datos de capacitación proporcionados.Crear un árbol binario en Java para fines de programación genética
Acabo de empezar a trabajar en el proyecto, y estoy tratando de entender cómo crear un árbol binario que permita la altura del árbol definida por el usuario y mantener cada nodo separado para simplificar el cruce y la mutación cuando llego a implementar esos procesos.
Aquí están las clases de nodo que he creado hasta ahora. Perdón por lo que estoy seguro es mi evidente inexperiencia.
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;
}
}
Con esto se logran todo lo que necesito salir de los propios nodos, pero estoy corriendo en problemas tratando de encontrar la manera de convertirlas en un árbol grande. Me doy cuenta de que necesito usar algún tipo de colección, pero parece que no puedo encontrar una en la Biblioteca que me parezca apropiada para lo que estoy tratando de hacer.
Incluso un pequeño empujón en la dirección correcta sería muy apreciado.
Realmente no es una respuesta a su pregunta, pero ¿ha mirado a jgap? http://jgap.sourceforge.net/ –
Me gustaría encontrarlo, pero recibimos crédito adicional por construirlo desde cero, y realmente, esto es algo que solo quiero entender para mi beneficio personal. – sitrick2