Updating GP - mk branch merge 287:292
This commit is contained in:
parent
b948bb9da2
commit
947ee034bd
@ -2,8 +2,12 @@ package eva2.server.go.individuals.codings.gp;
|
|||||||
|
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
import java.util.Vector;
|
||||||
|
|
||||||
|
import eva2.gui.BeanInspector;
|
||||||
|
import eva2.gui.GenericObjectEditor;
|
||||||
import eva2.server.go.problems.InterfaceProgramProblem;
|
import eva2.server.go.problems.InterfaceProgramProblem;
|
||||||
|
import eva2.tools.Pair;
|
||||||
|
|
||||||
|
|
||||||
/** This gives an abstract node, with default functionality for get and set methods.
|
/** This gives an abstract node, with default functionality for get and set methods.
|
||||||
@ -41,8 +45,175 @@ public abstract class AbstractGPNode implements InterfaceProgram, java.io.Serial
|
|||||||
/** This method returns a string representation
|
/** This method returns a string representation
|
||||||
* @return string
|
* @return string
|
||||||
*/
|
*/
|
||||||
public abstract String getStringRepresentation();
|
public String getStringRepresentation() {
|
||||||
|
StringBuffer sb = new StringBuffer();
|
||||||
|
AbstractGPNode.appendStringRepresentation(this, sb);
|
||||||
|
return sb.toString();
|
||||||
|
}
|
||||||
|
|
||||||
|
private static void appendStringRepresentation(AbstractGPNode node, StringBuffer sbuf) {
|
||||||
|
String op = node.getOpIdentifier();
|
||||||
|
sbuf.append(op);
|
||||||
|
if (node.getArity()>0) {
|
||||||
|
sbuf.append("(");
|
||||||
|
for (int i = 0; i < node.m_Nodes.length; i++) {
|
||||||
|
sbuf.append(node.m_Nodes[i].getStringRepresentation());
|
||||||
|
if (i<node.m_Nodes.length-1) sbuf.append(", ");
|
||||||
|
}
|
||||||
|
sbuf.append(")");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This method returns a string identifier of the operator name - it should be unique.
|
||||||
|
*
|
||||||
|
* @return string
|
||||||
|
*/
|
||||||
|
public abstract String getOpIdentifier();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Small parser for GP nodes from a String. Format must be (nearly) equivalent to what makeStringRepresentation produces.
|
||||||
|
* This mainly means prefix notation with braces and commata, such as in:
|
||||||
|
* AbstractGPNode node = AbstractGPNode.parseFromString("+(2.0,cos(*(pi,pi)))");
|
||||||
|
* System.out.println("Parsed GPNode: " + node.getStringRepresentation());
|
||||||
|
* node = AbstractGPNode.parseFromString(node.getStringRepresentation());
|
||||||
|
* @param str
|
||||||
|
* @param nodeTypes
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
public static Pair<AbstractGPNode,String> parseFromString(String str, Vector<AbstractGPNode> nodeTypes) {
|
||||||
|
if (nodeTypes == null) {
|
||||||
|
ArrayList<String>cls = GenericObjectEditor.getClassesFromClassPath(AbstractGPNode.class.getCanonicalName());
|
||||||
|
nodeTypes = new Vector<AbstractGPNode>(cls.size());
|
||||||
|
for (int i=0; i<cls.size(); i++) {
|
||||||
|
try {
|
||||||
|
AbstractGPNode node = (AbstractGPNode)Class.forName((String)cls.get(i)).newInstance();
|
||||||
|
nodeTypes.add(node);
|
||||||
|
} catch(Exception e) {}
|
||||||
|
}
|
||||||
|
nodeTypes.add(new GPNodeInput("X"));
|
||||||
|
}
|
||||||
|
if (nodeTypes.size()>0) {
|
||||||
|
Vector<AbstractGPNode> matchSet=AbstractGPNode.match(nodeTypes, str, true, true);
|
||||||
|
if (matchSet.size()==0) {
|
||||||
|
// try to read constant
|
||||||
|
Pair<Double, String> nextState=readDouble(str, true);
|
||||||
|
if (nextState != null) {
|
||||||
|
return new Pair<AbstractGPNode,String>(new GPNodeConst(nextState.head().doubleValue()), nextState.tail());
|
||||||
|
} else {
|
||||||
|
System.err.println("String has unknown prefix: " + str);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (matchSet.size()>1) System.err.println("String has ambiguous prefix: " + str + " -- " + BeanInspector.toString(matchSet));
|
||||||
|
else { // exactly one match:
|
||||||
|
AbstractGPNode currentNode = (AbstractGPNode)matchSet.get(0).clone();
|
||||||
|
// System.out.println("Found match: " + currentNode.getOpIdentifier() + "/" + currentNode.getArity());
|
||||||
|
int cutFront=currentNode.getOpIdentifier().length();
|
||||||
|
String restStr;
|
||||||
|
if (currentNode.getArity()==0) {
|
||||||
|
restStr = str.substring(cutFront).trim();
|
||||||
|
if (currentNode instanceof GPNodeInput) {
|
||||||
|
Pair<Double, String> nextState=readDouble(restStr, false);
|
||||||
|
if (nextState!=null) {
|
||||||
|
((GPNodeInput)currentNode).setIdentifier("X"+((int)nextState.head().doubleValue()));
|
||||||
|
restStr = nextState.tail();
|
||||||
|
} else {
|
||||||
|
((GPNodeInput)currentNode).setIdentifier("X");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return new Pair<AbstractGPNode,String>(currentNode,restStr);
|
||||||
|
} else {
|
||||||
|
restStr = str.substring(cutFront+1).trim(); // cut this op and front brace
|
||||||
|
currentNode.m_Nodes = new AbstractGPNode[currentNode.getArity()];
|
||||||
|
for (int i=0; i<currentNode.getArity(); i++) {
|
||||||
|
Pair<AbstractGPNode,String> nextState = parseFromString(restStr, nodeTypes);
|
||||||
|
currentNode.m_Nodes[i]=nextState.head();
|
||||||
|
restStr=nextState.tail().substring(1).trim(); // cut comma or brace
|
||||||
|
}
|
||||||
|
// System.out.println("lacking rest: " + restStr);
|
||||||
|
return new Pair<AbstractGPNode,String>(currentNode, restStr);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
private static Pair<Double, String> readDouble(String str, boolean expect) {
|
||||||
|
String firstArg;
|
||||||
|
int argLen = str.indexOf(',');
|
||||||
|
if (argLen<0) argLen = str.indexOf(')');
|
||||||
|
else {
|
||||||
|
int firstBrace = str.indexOf(')');
|
||||||
|
if ((firstBrace >= 0) && (firstBrace<argLen)) argLen = firstBrace;
|
||||||
|
}
|
||||||
|
firstArg=str.substring(0,argLen);
|
||||||
|
try {
|
||||||
|
Double d=Double.parseDouble(firstArg);
|
||||||
|
return new Pair<Double,String>(d, str.substring(firstArg.length()));
|
||||||
|
} catch(NumberFormatException e) {
|
||||||
|
if (expect) System.err.println("String has unknown prefix: " + str);
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This method returns a string representation
|
||||||
|
* @return string
|
||||||
|
*/
|
||||||
|
public static String makeStringRepresentation(AbstractGPNode[] nodes, String op) {
|
||||||
|
if (nodes.length==0) return op;
|
||||||
|
else if (nodes.length==1) return op+"(" + nodes[0].getStringRepresentation()+")";
|
||||||
|
else {
|
||||||
|
String result = "( "+nodes[0].getStringRepresentation();
|
||||||
|
for (int i = 1; i < nodes.length; i++) result += " " + op + " " + nodes[i].getStringRepresentation();
|
||||||
|
result += ")";
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Match available nodes by their operator identifier string. Allows the option "first longest match" only
|
||||||
|
* for ambiguous situations where several operators match.
|
||||||
|
*
|
||||||
|
* @param nodeTypes
|
||||||
|
* @param str
|
||||||
|
* @param firstLongestOnly
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
private static Vector<AbstractGPNode> match(
|
||||||
|
Vector<AbstractGPNode> nodeTypes, String str, boolean firstLongestOnly, boolean ignoreCase) {
|
||||||
|
Vector<AbstractGPNode> matching = new Vector<AbstractGPNode>();
|
||||||
|
for (int i=0; i<nodeTypes.size(); i++) {
|
||||||
|
if (str.startsWith(nodeTypes.get(i).getOpIdentifier())) matching.add(nodeTypes.get(i));
|
||||||
|
else if (ignoreCase && str.toLowerCase().startsWith(nodeTypes.get(i).getOpIdentifier().toLowerCase())) matching.add(nodeTypes.get(i));
|
||||||
|
}
|
||||||
|
if (matching.size()>1 && firstLongestOnly) { // allow only the longest match (or first longest)
|
||||||
|
int maxLen = matching.get(0).getOpIdentifier().length();
|
||||||
|
AbstractGPNode longest=matching.get(0);
|
||||||
|
for (int i=1; i<matching.size(); i++) {
|
||||||
|
if (matching.get(i).getOpIdentifier().length()>maxLen) {
|
||||||
|
longest = matching.get(i);
|
||||||
|
maxLen = longest.getOpIdentifier().length();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
matching.clear();
|
||||||
|
matching.add(longest);
|
||||||
|
}
|
||||||
|
return matching;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static AbstractGPNode parseFromString(String str) {
|
||||||
|
// System.out.println("Parsing " + str);
|
||||||
|
Pair<AbstractGPNode,String> result = AbstractGPNode.parseFromString(str, null);
|
||||||
|
return result.head();
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void main(String[] args) {
|
||||||
|
// Double d = Double.parseDouble("2.58923 + 3");
|
||||||
|
AbstractGPNode node = AbstractGPNode.parseFromString("+(x,cOs(*(pI,x1)))");
|
||||||
|
// System.out.println("Parsed GPNode: " + node.getStringRepresentation());
|
||||||
|
node = AbstractGPNode.parseFromString(node.getStringRepresentation());
|
||||||
|
}
|
||||||
|
|
||||||
/** This method returns the depth of the current node
|
/** This method returns the depth of the current node
|
||||||
* @return The depth.
|
* @return The depth.
|
||||||
*/
|
*/
|
||||||
@ -216,4 +387,5 @@ public abstract class AbstractGPNode implements InterfaceProgram, java.io.Serial
|
|||||||
* @return boolean if equal true else false.
|
* @return boolean if equal true else false.
|
||||||
*/
|
*/
|
||||||
public abstract boolean equals(Object obj);
|
public abstract boolean equals(Object obj);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -15,7 +15,6 @@ import eva2.server.go.problems.InterfaceProgramProblem;
|
|||||||
public class GPNodeAdd extends AbstractGPNode implements java.io.Serializable {
|
public class GPNodeAdd extends AbstractGPNode implements java.io.Serializable {
|
||||||
|
|
||||||
public GPNodeAdd() {
|
public GPNodeAdd() {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public GPNodeAdd(GPNodeAdd node) {
|
public GPNodeAdd(GPNodeAdd node) {
|
||||||
@ -78,13 +77,8 @@ public class GPNodeAdd extends AbstractGPNode implements java.io.Serializable {
|
|||||||
return new Double(result);
|
return new Double(result);
|
||||||
}
|
}
|
||||||
|
|
||||||
/** This method returns a string representation
|
@Override
|
||||||
* @return string
|
public String getOpIdentifier() {
|
||||||
*/
|
return "+";
|
||||||
public String getStringRepresentation() {
|
|
||||||
String result = "+( ";
|
|
||||||
for (int i = 0; i < this.m_Nodes.length; i++) result += this.m_Nodes[i].getStringRepresentation() +" ";
|
|
||||||
result += ")";
|
|
||||||
return result;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
74
src/eva2/server/go/individuals/codings/gp/GPNodeConst.java
Normal file
74
src/eva2/server/go/individuals/codings/gp/GPNodeConst.java
Normal file
@ -0,0 +1,74 @@
|
|||||||
|
package eva2.server.go.individuals.codings.gp;
|
||||||
|
|
||||||
|
import eva2.server.go.problems.InterfaceProgramProblem;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A simple constant node with the value 1.
|
||||||
|
*/
|
||||||
|
public class GPNodeConst extends AbstractGPNode implements java.io.Serializable {
|
||||||
|
double value = 1.;
|
||||||
|
|
||||||
|
public GPNodeConst() { }
|
||||||
|
|
||||||
|
public GPNodeConst(double val) {
|
||||||
|
value = val;
|
||||||
|
}
|
||||||
|
|
||||||
|
public GPNodeConst(GPNodeConst node) {
|
||||||
|
value = node.value;
|
||||||
|
this.m_Depth = node.m_Depth;
|
||||||
|
this.m_Parent = node.m_Parent;
|
||||||
|
this.m_Nodes = new AbstractGPNode[node.m_Nodes.length];
|
||||||
|
for (int i = 0; i < node.m_Nodes.length; i++) this.m_Nodes[i] = (AbstractGPNode) node.m_Nodes[i].clone();
|
||||||
|
}
|
||||||
|
|
||||||
|
/** This method allows you to determine wehter or not two subtrees
|
||||||
|
* are actually the same.
|
||||||
|
* @param obj The other subtree.
|
||||||
|
* @return boolean if equal true else false.
|
||||||
|
*/
|
||||||
|
public boolean equals(Object obj) {
|
||||||
|
if (obj instanceof GPNodeConst) {
|
||||||
|
return true;
|
||||||
|
} else {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/** This method will be used to identify the node in the GPAreaEditor
|
||||||
|
* @return The name.
|
||||||
|
*/
|
||||||
|
public String getName() {
|
||||||
|
return ""+value;
|
||||||
|
}
|
||||||
|
|
||||||
|
/** This method will return the current arity
|
||||||
|
* @return Arity.
|
||||||
|
*/
|
||||||
|
public int getArity() {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/** This method will evaluate a given node
|
||||||
|
* @param environment
|
||||||
|
*/
|
||||||
|
public Object evaluate(InterfaceProgramProblem environment) {
|
||||||
|
return new Double(value);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getOpIdentifier() {
|
||||||
|
return getName();
|
||||||
|
}
|
||||||
|
// /** This method returns a string representation
|
||||||
|
// * @return string
|
||||||
|
// */
|
||||||
|
// public String getStringRepresentation() {
|
||||||
|
// return getName();
|
||||||
|
// }
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Object clone() {
|
||||||
|
return new GPNodeConst(this);
|
||||||
|
}
|
||||||
|
}
|
@ -70,14 +70,9 @@ public class GPNodeCos extends AbstractGPNode implements java.io.Serializable {
|
|||||||
if (tmpObj instanceof Double) result = Math.sin(((Double)tmpObj).doubleValue());
|
if (tmpObj instanceof Double) result = Math.sin(((Double)tmpObj).doubleValue());
|
||||||
return new Double(result);
|
return new Double(result);
|
||||||
}
|
}
|
||||||
|
|
||||||
/** This method returns a string representation
|
@Override
|
||||||
* @return string
|
public String getOpIdentifier() {
|
||||||
*/
|
return "cos";
|
||||||
public String getStringRepresentation() {
|
|
||||||
String result = "cos( ";
|
|
||||||
for (int i = 0; i < this.m_Nodes.length; i++) result += this.m_Nodes[i].getStringRepresentation() +" ";
|
|
||||||
result += ")";
|
|
||||||
return result;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -89,14 +89,16 @@ public class GPNodeDiv extends AbstractGPNode implements java.io.Serializable {
|
|||||||
}
|
}
|
||||||
return new Double(result);
|
return new Double(result);
|
||||||
}
|
}
|
||||||
|
|
||||||
/** This method returns a string representation
|
@Override
|
||||||
* @return string
|
public String getOpIdentifier() {
|
||||||
*/
|
return "/";
|
||||||
public String getStringRepresentation() {
|
|
||||||
String result = "/( ";
|
|
||||||
for (int i = 0; i < this.m_Nodes.length; i++) result += this.m_Nodes[i].getStringRepresentation() +" ";
|
|
||||||
result += ")";
|
|
||||||
return result;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// /** This method returns a string representation
|
||||||
|
// * @return string
|
||||||
|
// */
|
||||||
|
// public String getStringRepresentation() {
|
||||||
|
// return AbstractGPNode.makeStringRepresentation(m_Nodes, "/");
|
||||||
|
// }
|
||||||
}
|
}
|
||||||
|
@ -71,13 +71,17 @@ public class GPNodeExp extends AbstractGPNode implements java.io.Serializable {
|
|||||||
return new Double(result);
|
return new Double(result);
|
||||||
}
|
}
|
||||||
|
|
||||||
/** This method returns a string representation
|
@Override
|
||||||
* @return string
|
public String getOpIdentifier() {
|
||||||
*/
|
return "exp";
|
||||||
public String getStringRepresentation() {
|
|
||||||
String result = "exp( ";
|
|
||||||
for (int i = 0; i < this.m_Nodes.length; i++) result += this.m_Nodes[i].getStringRepresentation() +" ";
|
|
||||||
result += ")";
|
|
||||||
return result;
|
|
||||||
}
|
}
|
||||||
|
// /** This method returns a string representation
|
||||||
|
// * @return string
|
||||||
|
// */
|
||||||
|
// public String getStringRepresentation() {
|
||||||
|
// String result = "exp( ";
|
||||||
|
// for (int i = 0; i < this.m_Nodes.length; i++) result += this.m_Nodes[i].getStringRepresentation() +" ";
|
||||||
|
// result += ")";
|
||||||
|
// return result;
|
||||||
|
// }
|
||||||
}
|
}
|
||||||
|
@ -72,13 +72,18 @@ public class GPNodeFlowExec2 extends AbstractGPNode implements java.io.Serializa
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
/** This method returns a string representation
|
@Override
|
||||||
* @return string
|
public String getOpIdentifier() {
|
||||||
*/
|
return "Exec2";
|
||||||
public String getStringRepresentation() {
|
|
||||||
String result = "Exec2( ";
|
|
||||||
for (int i = 0; i < this.m_Nodes.length; i++) result += this.m_Nodes[i].getStringRepresentation() +" ";
|
|
||||||
result += ")";
|
|
||||||
return result;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// /** This method returns a string representation
|
||||||
|
// * @return string
|
||||||
|
// */
|
||||||
|
// public String getStringRepresentation() {
|
||||||
|
// String result = "Exec2( ";
|
||||||
|
// for (int i = 0; i < this.m_Nodes.length; i++) result += this.m_Nodes[i].getStringRepresentation() +" ";
|
||||||
|
// result += ")";
|
||||||
|
// return result;
|
||||||
|
// }
|
||||||
}
|
}
|
||||||
|
@ -72,13 +72,17 @@ public class GPNodeFlowExec3 extends AbstractGPNode implements java.io.Serializa
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
/** This method returns a string representation
|
@Override
|
||||||
* @return string
|
public String getOpIdentifier() {
|
||||||
*/
|
return "Exec3";
|
||||||
public String getStringRepresentation() {
|
|
||||||
String result = "Exec3( ";
|
|
||||||
for (int i = 0; i < this.m_Nodes.length; i++) result += this.m_Nodes[i].getStringRepresentation() +" ";
|
|
||||||
result += ")";
|
|
||||||
return result;
|
|
||||||
}
|
}
|
||||||
|
// /** This method returns a string representation
|
||||||
|
// * @return string
|
||||||
|
// */
|
||||||
|
// public String getStringRepresentation() {
|
||||||
|
// String result = "Exec3( ";
|
||||||
|
// for (int i = 0; i < this.m_Nodes.length; i++) result += this.m_Nodes[i].getStringRepresentation() +" ";
|
||||||
|
// result += ")";
|
||||||
|
// return result;
|
||||||
|
// }
|
||||||
}
|
}
|
@ -14,6 +14,12 @@ import eva2.server.go.problems.InterfaceProgramProblem;
|
|||||||
public class GPNodeInput extends AbstractGPNode implements java.io.Serializable {
|
public class GPNodeInput extends AbstractGPNode implements java.io.Serializable {
|
||||||
private String m_Identifier;
|
private String m_Identifier;
|
||||||
private Object lastValue;
|
private Object lastValue;
|
||||||
|
|
||||||
|
/** This method creates a new GPNodeInput
|
||||||
|
*/
|
||||||
|
public GPNodeInput() {
|
||||||
|
this.m_Identifier = "X";
|
||||||
|
}
|
||||||
|
|
||||||
/** This method creates a new GPNodeInput
|
/** This method creates a new GPNodeInput
|
||||||
* @param identifier The name of the sensor requested.
|
* @param identifier The name of the sensor requested.
|
||||||
@ -29,6 +35,10 @@ public class GPNodeInput extends AbstractGPNode implements java.io.Serializable
|
|||||||
this.m_Nodes = new AbstractGPNode[node.m_Nodes.length];
|
this.m_Nodes = new AbstractGPNode[node.m_Nodes.length];
|
||||||
for (int i = 0; i < node.m_Nodes.length; i++) this.m_Nodes[i] = (AbstractGPNode) node.m_Nodes[i].clone();
|
for (int i = 0; i < node.m_Nodes.length; i++) this.m_Nodes[i] = (AbstractGPNode) node.m_Nodes[i].clone();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void setIdentifier(String str) {
|
||||||
|
m_Identifier=str;
|
||||||
|
}
|
||||||
|
|
||||||
/** This method allows you to determine wehter or not two subtrees
|
/** This method allows you to determine wehter or not two subtrees
|
||||||
* are actually the same.
|
* are actually the same.
|
||||||
@ -76,14 +86,14 @@ public class GPNodeInput extends AbstractGPNode implements java.io.Serializable
|
|||||||
/** This method returns a string representation
|
/** This method returns a string representation
|
||||||
* @return string
|
* @return string
|
||||||
*/
|
*/
|
||||||
public String getStringRepresentation() {
|
public String getOpIdentifier() {
|
||||||
if (this.lastValue == null) return this.m_Identifier;
|
if (this.lastValue == null) return this.m_Identifier;
|
||||||
else {
|
else {
|
||||||
if (this.lastValue instanceof Double) {
|
if (this.lastValue instanceof Double) {
|
||||||
double tmpD = ((Double)this.lastValue).doubleValue();
|
double tmpD = ((Double)this.lastValue).doubleValue();
|
||||||
tmpD = ((long)(tmpD*10000.0 + ((tmpD>=0.0)?0.5:-0.5)))/10000.0;
|
tmpD = ((long)(tmpD*10000.0 + ((tmpD>=0.0)?0.5:-0.5)))/10000.0;
|
||||||
return ("( S:" +this.m_Identifier + " = " + tmpD + " )");
|
return ("S:" +this.m_Identifier + " = " + tmpD);
|
||||||
} else return ("( S:" +this.m_Identifier + " = " + this.lastValue.toString() + " )");
|
} else return ("S:" +this.m_Identifier + " = " + this.lastValue.toString());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -74,13 +74,14 @@ public class GPNodeMult extends AbstractGPNode implements java.io.Serializable {
|
|||||||
return new Double(result);
|
return new Double(result);
|
||||||
}
|
}
|
||||||
|
|
||||||
/** This method returns a string representation
|
@Override
|
||||||
* @return string
|
public String getOpIdentifier() {
|
||||||
*/
|
return "*";
|
||||||
public String getStringRepresentation() {
|
|
||||||
String result = "*( ";
|
|
||||||
for (int i = 0; i < this.m_Nodes.length; i++) result += this.m_Nodes[i].getStringRepresentation() +" ";
|
|
||||||
result += ")";
|
|
||||||
return result;
|
|
||||||
}
|
}
|
||||||
|
// /** This method returns a string representation
|
||||||
|
// * @return string
|
||||||
|
// */
|
||||||
|
// public String getStringRepresentation() {
|
||||||
|
// return AbstractGPNode.makeStringRepresentation(m_Nodes, "*");
|
||||||
|
// }
|
||||||
}
|
}
|
||||||
|
18
src/eva2/server/go/individuals/codings/gp/GPNodeOne.java
Normal file
18
src/eva2/server/go/individuals/codings/gp/GPNodeOne.java
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
package eva2.server.go.individuals.codings.gp;
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A simple constant node with the value 1.
|
||||||
|
*/
|
||||||
|
public class GPNodeOne extends GPNodeConst implements java.io.Serializable {
|
||||||
|
public GPNodeOne() {
|
||||||
|
super(1.);
|
||||||
|
}
|
||||||
|
|
||||||
|
/** This method allows you to clone the Nodes
|
||||||
|
* @return the clone
|
||||||
|
*/
|
||||||
|
public Object clone() {
|
||||||
|
return (Object) new GPNodeOne();
|
||||||
|
}
|
||||||
|
}
|
@ -15,7 +15,11 @@ import eva2.server.go.problems.InterfaceProgramProblem;
|
|||||||
public class GPNodeOutput extends AbstractGPNode implements java.io.Serializable {
|
public class GPNodeOutput extends AbstractGPNode implements java.io.Serializable {
|
||||||
|
|
||||||
private String m_Identifier;
|
private String m_Identifier;
|
||||||
|
|
||||||
|
public GPNodeOutput() {
|
||||||
|
this.m_Identifier = "Y";
|
||||||
|
}
|
||||||
|
|
||||||
/** This method creates a new GPNodeInput
|
/** This method creates a new GPNodeInput
|
||||||
* @param identifier The name of the sensor requested.
|
* @param identifier The name of the sensor requested.
|
||||||
*/
|
*/
|
||||||
@ -75,10 +79,14 @@ public class GPNodeOutput extends AbstractGPNode implements java.io.Serializable
|
|||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
/** This method returns a string representation
|
@Override
|
||||||
* @return string
|
public String getOpIdentifier() {
|
||||||
*/
|
return "OUT:"+m_Identifier;
|
||||||
public String getStringRepresentation() {
|
|
||||||
return ("( A:" +this.m_Identifier + " )");
|
|
||||||
}
|
}
|
||||||
|
// /** This method returns a string representation
|
||||||
|
// * @return string
|
||||||
|
// */
|
||||||
|
// public String getStringRepresentation() {
|
||||||
|
// return ("( A:" +this.m_Identifier + " )");
|
||||||
|
// }
|
||||||
}
|
}
|
25
src/eva2/server/go/individuals/codings/gp/GPNodePi.java
Normal file
25
src/eva2/server/go/individuals/codings/gp/GPNodePi.java
Normal file
@ -0,0 +1,25 @@
|
|||||||
|
package eva2.server.go.individuals.codings.gp;
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A simple constant node with the value 1.
|
||||||
|
*/
|
||||||
|
public class GPNodePi extends GPNodeConst implements java.io.Serializable {
|
||||||
|
public GPNodePi() {
|
||||||
|
super(Math.PI);
|
||||||
|
}
|
||||||
|
|
||||||
|
/** This method allows you to clone the Nodes
|
||||||
|
* @return the clone
|
||||||
|
*/
|
||||||
|
public Object clone() {
|
||||||
|
return (Object) new GPNodePi();
|
||||||
|
}
|
||||||
|
|
||||||
|
/** This method will be used to identify the node in the GPAreaEditor
|
||||||
|
* @return The name.
|
||||||
|
*/
|
||||||
|
public String getName() {
|
||||||
|
return "pi";
|
||||||
|
}
|
||||||
|
}
|
@ -71,13 +71,16 @@ public class GPNodePow2 extends AbstractGPNode implements java.io.Serializable {
|
|||||||
return new Double(result);
|
return new Double(result);
|
||||||
}
|
}
|
||||||
|
|
||||||
/** This method returns a string representation
|
@Override
|
||||||
* @return string
|
public String getOpIdentifier() {
|
||||||
*/
|
return "pow2";
|
||||||
public String getStringRepresentation() {
|
|
||||||
String result = "pow( ";
|
|
||||||
for (int i = 0; i < this.m_Nodes.length; i++) result += this.m_Nodes[i].getStringRepresentation() +" ";
|
|
||||||
result += ", 2)";
|
|
||||||
return result;
|
|
||||||
}
|
}
|
||||||
|
// /** This method returns a string representation
|
||||||
|
// * @return string
|
||||||
|
// */
|
||||||
|
// public String getStringRepresentation() {
|
||||||
|
// String result = "";
|
||||||
|
// for (int i = 0; i < this.m_Nodes.length; i++) result += this.m_Nodes[i].getStringRepresentation() +" ";
|
||||||
|
// return "("+result+")^2";
|
||||||
|
// }
|
||||||
}
|
}
|
||||||
|
@ -71,13 +71,17 @@ public class GPNodePow3 extends AbstractGPNode implements java.io.Serializable {
|
|||||||
return new Double(result);
|
return new Double(result);
|
||||||
}
|
}
|
||||||
|
|
||||||
/** This method returns a string representation
|
@Override
|
||||||
* @return string
|
public String getOpIdentifier() {
|
||||||
*/
|
return "pow3";
|
||||||
public String getStringRepresentation() {
|
|
||||||
String result = "pow( ";
|
|
||||||
for (int i = 0; i < this.m_Nodes.length; i++) result += this.m_Nodes[i].getStringRepresentation() +" ";
|
|
||||||
result += ", 3)";
|
|
||||||
return result;
|
|
||||||
}
|
}
|
||||||
|
// /** This method returns a string representation
|
||||||
|
// * @return string
|
||||||
|
// */
|
||||||
|
// public String getStringRepresentation() {
|
||||||
|
// String result = "pow( ";
|
||||||
|
// for (int i = 0; i < this.m_Nodes.length; i++) result += this.m_Nodes[i].getStringRepresentation() +" ";
|
||||||
|
// result += ", 3)";
|
||||||
|
// return result;
|
||||||
|
// }
|
||||||
}
|
}
|
@ -71,13 +71,17 @@ public class GPNodeSin extends AbstractGPNode implements java.io.Serializable {
|
|||||||
return new Double(result);
|
return new Double(result);
|
||||||
}
|
}
|
||||||
|
|
||||||
/** This method returns a string representation
|
@Override
|
||||||
* @return string
|
public String getOpIdentifier() {
|
||||||
*/
|
return "sin";
|
||||||
public String getStringRepresentation() {
|
|
||||||
String result = "sin( ";
|
|
||||||
for (int i = 0; i < this.m_Nodes.length; i++) result += this.m_Nodes[i].getStringRepresentation() +" ";
|
|
||||||
result += ")";
|
|
||||||
return result;
|
|
||||||
}
|
}
|
||||||
|
// /** This method returns a string representation
|
||||||
|
// * @return string
|
||||||
|
// */
|
||||||
|
// public String getStringRepresentation() {
|
||||||
|
// String result = "sin( ";
|
||||||
|
// for (int i = 0; i < this.m_Nodes.length; i++) result += this.m_Nodes[i].getStringRepresentation() +" ";
|
||||||
|
// result += ")";
|
||||||
|
// return result;
|
||||||
|
// }
|
||||||
}
|
}
|
||||||
|
@ -72,13 +72,18 @@ public class GPNodeSqrt extends AbstractGPNode implements java.io.Serializable {
|
|||||||
return new Double(result);
|
return new Double(result);
|
||||||
}
|
}
|
||||||
|
|
||||||
/** This method returns a string representation
|
@Override
|
||||||
* @return string
|
public String getOpIdentifier() {
|
||||||
*/
|
return "sqrt";
|
||||||
public String getStringRepresentation() {
|
|
||||||
String result = "sqrt( ";
|
|
||||||
for (int i = 0; i < this.m_Nodes.length; i++) result += this.m_Nodes[i].getStringRepresentation() +" ";
|
|
||||||
result += ")";
|
|
||||||
return result;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// /** This method returns a string representation
|
||||||
|
// * @return string
|
||||||
|
// */
|
||||||
|
// public String getStringRepresentation() {
|
||||||
|
// String result = "sqrt( ";
|
||||||
|
// for (int i = 0; i < this.m_Nodes.length; i++) result += this.m_Nodes[i].getStringRepresentation() +" ";
|
||||||
|
// result += ")";
|
||||||
|
// return result;
|
||||||
|
// }
|
||||||
}
|
}
|
@ -76,13 +76,14 @@ public class GPNodeSub extends AbstractGPNode implements java.io.Serializable {
|
|||||||
return new Double(result);
|
return new Double(result);
|
||||||
}
|
}
|
||||||
|
|
||||||
/** This method returns a string representation
|
@Override
|
||||||
* @return string
|
public String getOpIdentifier() {
|
||||||
*/
|
return "-";
|
||||||
public String getStringRepresentation() {
|
|
||||||
String result = "-( ";
|
|
||||||
for (int i = 0; i < this.m_Nodes.length; i++) result += this.m_Nodes[i].getStringRepresentation() +" ";
|
|
||||||
result += ")";
|
|
||||||
return result;
|
|
||||||
}
|
}
|
||||||
|
// /** This method returns a string representation
|
||||||
|
// * @return string
|
||||||
|
// */
|
||||||
|
// public String getStringRepresentation() {
|
||||||
|
// return AbstractGPNode.makeStringRepresentation(m_Nodes, "-");
|
||||||
|
// }
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user