Sto lavorando a un progetto per una classe di ingegneria del software che sto prendendo. L'obiettivo è progettare un programma che utilizzi la programmazione genetica per generare un'espressione matematica che si adatti ai dati di addestramento forniti.Creazione di un albero binario in Java per scopi di programmazione genetica
Ho appena iniziato a lavorare sul progetto, e sto cercando di capire come creare un albero binario che consenta l'altezza dell'albero definita dall'utente e mantenere ciascun nodo separato per semplificare il crossover e la mutazione quando riesco a implementare quei processi.
Ecco le classi di nodi che ho creato finora. Per favore perdoni quello che sono sicuro è la mia evidente inesperienza.
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;
}
}
Questo compie tutto quello che ho bisogno fuori dei nodi stessi, ma sto correndo in problemi cercando di capire come trasformare questi in un albero più grande. Mi rendo conto che ho bisogno di usare un tipo di raccolta di qualche tipo, ma non riesco a trovarne uno nella Libreria che sembra appropriato per quello che sto cercando di fare.
Anche una spinta nella giusta direzione sarebbe molto apprezzata.
Non è davvero una risposta alla tua domanda, ma hai guardato jgap? http://jgap.sourceforge.net/ –
L'ho incontrato, ma abbiamo ricevuto un credito extra per averlo creato da zero, e davvero, questo è qualcosa che voglio solo capire per il mio beneficio personale. – sitrick2