Updating GP - mk branch merge 287:292
This commit is contained in:
		@@ -2,8 +2,12 @@ package eva2.server.go.individuals.codings.gp;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
import java.util.ArrayList;
 | 
			
		||||
import java.util.Vector;
 | 
			
		||||
 | 
			
		||||
import eva2.gui.BeanInspector;
 | 
			
		||||
import eva2.gui.GenericObjectEditor;
 | 
			
		||||
import eva2.server.go.problems.InterfaceProgramProblem;
 | 
			
		||||
import eva2.tools.Pair;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/** 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
 | 
			
		||||
     * @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
 | 
			
		||||
     * @return The depth.
 | 
			
		||||
     */
 | 
			
		||||
@@ -216,4 +387,5 @@ public abstract class AbstractGPNode implements InterfaceProgram, java.io.Serial
 | 
			
		||||
     * @return boolean if equal true else false.
 | 
			
		||||
     */
 | 
			
		||||
    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 GPNodeAdd() {
 | 
			
		||||
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public GPNodeAdd(GPNodeAdd node) {
 | 
			
		||||
@@ -78,13 +77,8 @@ public class GPNodeAdd extends AbstractGPNode implements java.io.Serializable {
 | 
			
		||||
        return new Double(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() +" ";
 | 
			
		||||
        result += ")";
 | 
			
		||||
        return result;
 | 
			
		||||
    @Override
 | 
			
		||||
    public String getOpIdentifier() {
 | 
			
		||||
    	return "+";
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										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());
 | 
			
		||||
        return new Double(result);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /** This method returns a string representation
 | 
			
		||||
     * @return string
 | 
			
		||||
     */
 | 
			
		||||
    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;
 | 
			
		||||
    
 | 
			
		||||
    @Override
 | 
			
		||||
    public String getOpIdentifier() {
 | 
			
		||||
    	return "cos";
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -89,14 +89,16 @@ public class GPNodeDiv extends AbstractGPNode implements java.io.Serializable {
 | 
			
		||||
        }
 | 
			
		||||
        return new Double(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() +" ";
 | 
			
		||||
        result += ")";
 | 
			
		||||
        return result;
 | 
			
		||||
    
 | 
			
		||||
    @Override
 | 
			
		||||
    public String getOpIdentifier() {
 | 
			
		||||
    	return "/";
 | 
			
		||||
    }
 | 
			
		||||
    
 | 
			
		||||
//    /** 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);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /** 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;
 | 
			
		||||
    @Override
 | 
			
		||||
    public String getOpIdentifier() {
 | 
			
		||||
    	return "exp";
 | 
			
		||||
    }
 | 
			
		||||
//    /** 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;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /** 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;
 | 
			
		||||
    @Override
 | 
			
		||||
    public String getOpIdentifier() {
 | 
			
		||||
    	return "Exec2";
 | 
			
		||||
    }
 | 
			
		||||
    
 | 
			
		||||
//    /** 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;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /** 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;
 | 
			
		||||
    @Override
 | 
			
		||||
    public String getOpIdentifier() {
 | 
			
		||||
    	return "Exec3";
 | 
			
		||||
    }
 | 
			
		||||
//    /** 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 {
 | 
			
		||||
    private String      m_Identifier;
 | 
			
		||||
    private Object      lastValue;
 | 
			
		||||
    
 | 
			
		||||
    /** This method creates a new GPNodeInput
 | 
			
		||||
     */
 | 
			
		||||
    public GPNodeInput() {
 | 
			
		||||
        this.m_Identifier   = "X";
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /** This method creates a new GPNodeInput
 | 
			
		||||
     * @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];
 | 
			
		||||
        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
 | 
			
		||||
     * are actually the same.
 | 
			
		||||
@@ -76,14 +86,14 @@ public class GPNodeInput extends AbstractGPNode implements java.io.Serializable
 | 
			
		||||
    /** This method returns a string representation
 | 
			
		||||
     * @return string
 | 
			
		||||
     */
 | 
			
		||||
    public String getStringRepresentation() {
 | 
			
		||||
    public String getOpIdentifier() {
 | 
			
		||||
        if (this.lastValue == null) return this.m_Identifier;
 | 
			
		||||
        else {
 | 
			
		||||
            if (this.lastValue instanceof Double) {
 | 
			
		||||
                double tmpD = ((Double)this.lastValue).doubleValue();
 | 
			
		||||
                tmpD = ((long)(tmpD*10000.0 + ((tmpD>=0.0)?0.5:-0.5)))/10000.0;
 | 
			
		||||
                return ("( S:" +this.m_Identifier + " = " + tmpD + " )");
 | 
			
		||||
            } else return ("( S:" +this.m_Identifier + " = " + this.lastValue.toString() + " )");
 | 
			
		||||
                return ("S:" +this.m_Identifier + " = " + tmpD);
 | 
			
		||||
            } 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);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /** 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() +" ";
 | 
			
		||||
        result += ")";
 | 
			
		||||
        return result;
 | 
			
		||||
    @Override
 | 
			
		||||
    public String getOpIdentifier() {
 | 
			
		||||
    	return "*";
 | 
			
		||||
    }
 | 
			
		||||
//    /** 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 {
 | 
			
		||||
 | 
			
		||||
    private String      m_Identifier;
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
    public GPNodeOutput() {
 | 
			
		||||
        this.m_Identifier   = "Y";
 | 
			
		||||
    }
 | 
			
		||||
    
 | 
			
		||||
    /** This method creates a new GPNodeInput
 | 
			
		||||
     * @param identifier    The name of the sensor requested.
 | 
			
		||||
     */
 | 
			
		||||
@@ -75,10 +79,14 @@ public class GPNodeOutput extends AbstractGPNode implements java.io.Serializable
 | 
			
		||||
        return null;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /** This method returns a string representation
 | 
			
		||||
     * @return string
 | 
			
		||||
     */
 | 
			
		||||
    public String getStringRepresentation() {
 | 
			
		||||
        return ("( A:" +this.m_Identifier + " )");
 | 
			
		||||
    @Override
 | 
			
		||||
    public String getOpIdentifier() {
 | 
			
		||||
    	return "OUT:"+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);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /** 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 += ", 2)";
 | 
			
		||||
        return result;
 | 
			
		||||
    @Override
 | 
			
		||||
    public String getOpIdentifier() {
 | 
			
		||||
    	return "pow2";
 | 
			
		||||
    }
 | 
			
		||||
//    /** 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);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /** 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;
 | 
			
		||||
    @Override
 | 
			
		||||
    public String getOpIdentifier() {
 | 
			
		||||
    	return "pow3";
 | 
			
		||||
    }
 | 
			
		||||
//    /** 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);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /** 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;
 | 
			
		||||
    @Override
 | 
			
		||||
    public String getOpIdentifier() {
 | 
			
		||||
    	return "sin";
 | 
			
		||||
    }
 | 
			
		||||
//    /** 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);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /** 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;
 | 
			
		||||
    @Override
 | 
			
		||||
    public String getOpIdentifier() {
 | 
			
		||||
    	return "sqrt";
 | 
			
		||||
    }
 | 
			
		||||
    
 | 
			
		||||
//    /** 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);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /** 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() +" ";
 | 
			
		||||
        result += ")";
 | 
			
		||||
        return result;
 | 
			
		||||
    @Override
 | 
			
		||||
    public String getOpIdentifier() {
 | 
			
		||||
    	return "-";
 | 
			
		||||
    }
 | 
			
		||||
//    /** This method returns a string representation
 | 
			
		||||
//     * @return string
 | 
			
		||||
//     */
 | 
			
		||||
//    public String getStringRepresentation() {
 | 
			
		||||
//    	return AbstractGPNode.makeStringRepresentation(m_Nodes, "-");
 | 
			
		||||
//    }
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user