Package org.encog.ml.prg

Examples of org.encog.ml.prg.ProgramNode


   */
  @Override
  public boolean rewrite(Genome g) {
    EncogProgram program = ((EncogProgram)g);
    this.rewritten = false;
    ProgramNode rootNode = program.getRootNode();
    ProgramNode rewrite = rewriteNode(rootNode);
    if (rewrite != null) {
      program.setRootNode(rewrite);
    }
    return this.rewritten;
  }
View Full Code Here


   * @return The rewritten node, the original node, if no rewrite occured.
   */
  private ProgramNode rewriteNode(ProgramNode node) {

    // first try to rewrite the child node
    ProgramNode rewrite = tryNodeRewrite(node);
    if (rewrite != null) {
      return rewrite;
    }

    // if we could not rewrite the entire node, rewrite as many children as
    // we can
    for (int i = 0; i < node.getChildNodes().size(); i++) {
      ProgramNode childNode = (ProgramNode)node.getChildNodes().get(i);
      rewrite = rewriteNode(childNode);
      if (rewrite != null) {
        node.getChildNodes().remove(i);
        node.getChildNodes().add(i, rewrite);
        this.rewritten = true;
View Full Code Here

   * Try to rewrite the specified node.
   * @param parentNode The node to attempt rewrite.
   * @return The rewritten node, or original node, if no rewrite could happen.
   */
  private ProgramNode tryNodeRewrite(ProgramNode parentNode) {
    ProgramNode result = null;

    if (parentNode.isLeaf()) {
      return null;
    }

    if (parentNode.allConstDescendants()) {
      ExpressionValue v = parentNode.evaluate();
      double ck = v.toFloatValue();
     
      // do not rewrite if it produces a div by 0 or other bad result.
      if( Double.isNaN(ck) || Double.isInfinite(ck) ) {
        return result;
      }
     
      result = parentNode
          .getOwner()
          .getContext()
          .getFunctions()
          .factorProgramNode("#const", parentNode.getOwner(),
              new ProgramNode[] {});
     
      // is it an integer?
      if( Math.abs( ck- ((int)ck))<Encog.DEFAULT_DOUBLE_EQUAL) {
        result.getData()[0] = new ExpressionValue((int)ck);
      } else {
        result.getData()[0] = v;
      }
    }
    return result;
  }
View Full Code Here

    final int node2Size = node2.getChildNodes().size();
    final int childNodeCount = Math.max(node1Size, node2Size);

    for (int i = 0; i < childNodeCount; i++) {
      if (i < node1Size && i < node2Size) {
        final ProgramNode childNode1 = node1.getChildNode(i);
        final ProgramNode childNode2 = node2.getChildNode(i);
        newResult = compareNode(newResult, childNode1, childNode2);
      } else {
        newResult++;
      }
    }
View Full Code Here

   *            The arguments for this node.
   * @return The newly created ProgramNode.
   */
  public ProgramNode factorProgramNode(final ProgramExtensionTemplate temp,
      final EncogProgram program, final ProgramNode[] args) {
    return new ProgramNode(program, temp, args);
  }
View Full Code Here

      throw new EACompileError("Undefined function/operator: " + name
          + " with " + args.length + " args.");
    }

    final ProgramExtensionTemplate temp = this.templateMap.get(key);
    return new ProgramNode(program, temp, args);
  }
View Full Code Here

      holder.setTypes(types);
      holder.setNodeFound(parentNode);
    } else {
      holder.decreaseLevel();
      for (int i = 0; i < parentNode.getTemplate().getChildNodeCount(); i++) {
        final ProgramNode childNode = parentNode.getChildNode(i);
        final List<ValueType> childTypes = parentNode.getTemplate()
            .getParams().get(i).determineArgumentTypes(types);
        findNode(rnd, childNode, childTypes, holder);
      }
    }
View Full Code Here

      findNode(rnd, parent2.getRootNode(), types, holder2);

      if (LevelHolder.compatibleTypes(holder1.getTypes(),
          holder2.getTypes())) {
        final EncogProgram result = context.cloneProgram(parent1);
        final ProgramNode resultNode = parent1.findNode(p1Index);
        final ProgramNode p2Node = parent2.findNode(p2Index);
        final ProgramNode newInsert = context.cloneBranch(result,
            p2Node);
        result.replaceNode(resultNode, newInsert);
        offspring[0] = result;
        done = true;
      } else {
View Full Code Here

      final ProgramNode parentNode, final List<ValueType> types,
      final int[] globalIndex) {
    if (globalIndex[0] == 0) {
      globalIndex[0]--;

      final ProgramNode newInsert = this.generator.createNode(rnd,
          result, this.maxDepth, types);
      result.replaceNode(parentNode, newInsert);
    } else {
      globalIndex[0]--;
      for (int i = 0; i < parentNode.getTemplate().getChildNodeCount(); i++) {
        final ProgramNode childNode = parentNode.getChildNode(i);
        final List<ValueType> childTypes = parentNode.getTemplate()
            .getParams().get(i).determineArgumentTypes(types);
        findNode(rnd, result, childNode, childTypes, globalIndex);
      }
    }
View Full Code Here

public class TestSubtreeCrossover extends TestCase {
  public void testCrossoverOperation() {
    RenderCommonExpression render = new RenderCommonExpression();
    EncogProgram prg = new EncogProgram("1+2");
    EncogProgram prg2 = new EncogProgram("4+5");
    ProgramNode node = prg.findNode(2);
    prg.replaceNode(node, prg2.getRootNode());
    Assert.assertEquals("(1+(4+5))",render.render(prg));
  }
View Full Code Here

TOP

Related Classes of org.encog.ml.prg.ProgramNode

Copyright © 2018 www.massapicom. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.