-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathFunctionGenerator.java
More file actions
93 lines (76 loc) · 2.6 KB
/
FunctionGenerator.java
File metadata and controls
93 lines (76 loc) · 2.6 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
package gp_project;
public class FunctionGenerator {
void addChildrenFullMethod(Node node, int currentD, int maxD) {
GPConfig config = GPConfig.getInstance();
if (config == null | node == null) {
throw new IllegalArgumentException("INVALID");
}
if (currentD == maxD) {
node.setRightNode(new Node(config.getRandOperand(),
NodeType.OPERAND));
node.setLeftNode(new Node(config.getRandOperand(), NodeType.OPERAND));
return;
} else {
node.setRightNode(new Node(config.getRandOperator(),
NodeType.OPERATOR));
node.setLeftNode(new Node(config.getRandOperator(),
NodeType.OPERATOR));
}
addChildrenFullMethod(node.getRightNode(), currentD + 1, maxD);
addChildrenFullMethod(node.getLeftNode(), currentD + 1, maxD);
return;
}
void addChildrenGrowMethod(Node node, int currentD, int maxD) {
GPConfig config = GPConfig.getInstance();
if (config == null | node == null) {
throw new IllegalArgumentException("INVALID");
}
if (node.getNodeType() == NodeType.OPERAND) {
return;
} else if (currentD == maxD) {
node.setRightNode(new Node(config.getRandOperand(),
NodeType.OPERAND));
node.setLeftNode(new Node(config.getRandOperand(), NodeType.OPERAND));
return;
} else if (node.getNodeType() == NodeType.OPERATOR) {
int randNum = GPConfig.getInstance().getRand().nextInt(2);
// Pick Random number for Right Node
if (randNum == 1) {
node.setRightNode(new Node(config.getRandOperator(),
NodeType.OPERATOR));
} else {
node.setRightNode(new Node(config.getRandOperand(),
NodeType.OPERAND));
}
// Pick Random number for Left Node
randNum = GPConfig.getInstance().getRand().nextInt(2);
if (randNum == 1) {
node.setLeftNode(new Node(config.getRandOperator(),
NodeType.OPERATOR));
} else {
node.setLeftNode(new Node(config.getRandOperand(),
NodeType.OPERAND));
}
} else {
throw new IllegalArgumentException(
"Invalid Tree encountered during grow method");
}
addChildrenGrowMethod(node.getRightNode(), currentD + 1, maxD);
addChildrenGrowMethod(node.getLeftNode(), currentD + 1, maxD);
return;
}
public Tree GenerateFullTree(int maxDepth) {
GPConfig config = GPConfig.getInstance();
Tree tree = new Tree(config.getRandOperator());
int currentDepth = 1;
addChildrenFullMethod(tree.getRootNode(), currentDepth, maxDepth);
return tree;
}
public Tree GenerateGrowTree(int maxDepth) {
GPConfig config = GPConfig.getInstance();
Tree tree = new Tree(config.getRandOperator());
int currentDepth = 1;
addChildrenGrowMethod(tree.getRootNode(), currentDepth, maxDepth);
return tree;
}
}