Tôi đang làm việc trên một dự án cho một lớp kỹ nghệ phần mềm tôi đang dùng. Mục tiêu là thiết kế một chương trình sẽ sử dụng lập trình di truyền để tạo ra một biểu thức toán học phù hợp với dữ liệu đào tạo được cung cấp.Tạo cây nhị phân trong Java cho mục đích lập trình di truyền
Tôi mới bắt đầu làm việc với dự án và cố gắng tạo ra cây nhị phân cho phép chiều cao cây do người dùng xác định và giữ riêng từng nút để tạo sự giao nhau và đột biến đơn giản hơn khi tôi thực hiện các quy trình đó.
Đây là các lớp nút mà tôi đã tạo cho đến thời điểm này. Xin hãy tha thứ cho những gì tôi chắc chắn là sự thiếu kinh nghiệm của tôi.
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;
}
}
Điều này hoàn thành mọi thứ tôi cần ra khỏi các nút, nhưng tôi đang gặp khó khăn khi tìm cách biến chúng thành một cây lớn hơn. Tôi nhận ra rằng tôi cần phải sử dụng một loại bộ sưu tập của một số loại, nhưng dường như không thể tìm thấy một trong thư viện có vẻ thích hợp cho những gì tôi đang cố gắng làm.
Ngay cả khi di chuyển đúng hướng sẽ được đánh giá cao.
Không thực sự là câu trả lời cho câu hỏi của bạn, nhưng bạn đã xem xét jgap chưa? http://jgap.sourceforge.net/ –
Tôi muốn chạy qua nó, nhưng chúng tôi nhận được thêm tín dụng để xây dựng nó từ đầu, và thực sự, đây là một cái gì đó tôi chỉ muốn hiểu cho lợi ích cá nhân của tôi. – sitrick2