Package org.encog.ml.prg

Examples of org.encog.ml.prg.ProgramNode


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


   * Attempt to rewrite the specified node.
   * @param parent The node to attempt to rewrite.
   * @return The rewritten node, or the original node, if no change was made.
   */
  private ProgramNode internalRewrite(final ProgramNode parent) {
    ProgramNode rewrittenParent = parent;

    rewrittenParent = tryAnd(rewrittenParent);

    // try children
    for (int i = 0; i < rewrittenParent.getChildNodes().size(); i++) {
      final ProgramNode childNode = (ProgramNode) rewrittenParent
          .getChildNodes().get(i);
      final ProgramNode rewriteChild = internalRewrite(childNode);
      if (childNode != rewriteChild) {
        rewrittenParent.getChildNodes().remove(i);
        rewrittenParent.getChildNodes().add(i, rewriteChild);
        this.rewritten = true;
      }
View Full Code Here

   * @param parent The node to attempt to rewrite.
   * @return The rewritten node, or the original node if not rewritten.
   */
  private ProgramNode tryAnd(final ProgramNode parent) {
    if (parent.getTemplate() == StandardExtensions.EXTENSION_AND) {
      final ProgramNode child1 = parent.getChildNode(0);
      final ProgramNode child2 = parent.getChildNode(1);

      if (isTrue(child1)
          && child2.getTemplate() != StandardExtensions.EXTENSION_CONST_SUPPORT) {
        this.rewritten = true;
        return child2;
      }

      if (isTrue(child2)
View Full Code Here

   * @param v The value that the constant represents.
   * @return The newly created node.
   */
  private ProgramNode createNumericConst(final EncogProgram prg,
      final double v) {
    final ProgramNode result = prg.getFunctions().factorProgramNode("#const",
        prg, new ProgramNode[] {});
    result.getData()[0] = new ExpressionValue(v);
    return result;
  }
View Full Code Here

   * @param prg The program to create the constant for.
   * @param v The value that the constant represents.
   * @return The newly created node.
   */
  private ProgramNode createNumericConst(final EncogProgram prg, final int v) {
    final ProgramNode result = prg.getFunctions().factorProgramNode("#const",
        prg, new ProgramNode[] {});
    result.getData()[0] = new ExpressionValue(v);
    return result;
  }
View Full Code Here

   * Attempt to rewrite the specified node.
   * @param parent The parent node to start from.
   * @return The rewritten node, or the same node if no rewrite occurs.
   */
  private ProgramNode internalRewrite(final ProgramNode parent) {
    ProgramNode rewrittenParent = parent;

    rewrittenParent = tryDoubleNegative(rewrittenParent);
    rewrittenParent = tryMinusMinus(rewrittenParent);
    rewrittenParent = tryPlusNeg(rewrittenParent);
    rewrittenParent = tryVarOpVar(rewrittenParent);
    rewrittenParent = tryPowerZero(rewrittenParent);
    rewrittenParent = tryOnePower(rewrittenParent);
    rewrittenParent = tryZeroPlus(rewrittenParent);
    rewrittenParent = tryZeroDiv(rewrittenParent);
    rewrittenParent = tryZeroMul(rewrittenParent);
    rewrittenParent = tryMinusZero(rewrittenParent);

    // try children
    for (int i = 0; i < rewrittenParent.getChildNodes().size(); i++) {
      final ProgramNode childNode = (ProgramNode) rewrittenParent
          .getChildNodes().get(i);
      final ProgramNode rewriteChild = internalRewrite(childNode);
      if (childNode != rewriteChild) {
        rewrittenParent.getChildNodes().remove(i);
        rewrittenParent.getChildNodes().add(i, rewriteChild);
        this.rewritten = true;
      }
View Full Code Here

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

   * @param parent The parent node to attempt to rewrite.
   * @return The rewritten node, if it was rewritten.
   */
  private ProgramNode tryDoubleNegative(final ProgramNode parent) {
    if (parent.getName().equals("-")) {
      final ProgramNode child = parent.getChildNode(0);
      if (child.getName().equals("-")) {
        final ProgramNode grandChild = child.getChildNode(0);
        this.rewritten = true;
        return grandChild;
      }
    }
    return parent;
View Full Code Here

   * @param parent The parent node to attempt to rewrite.
   * @return The rewritten node, if it was rewritten.
   */
  private ProgramNode tryMinusMinus(ProgramNode parent) {
    if (parent.getName().equals("-") && parent.getChildNodes().size() == 2) {
      final ProgramNode child1 = parent.getChildNode(0);
      final ProgramNode child2 = parent.getChildNode(1);

      if (child2.getName().equals("#const")) {
        final ExpressionValue v = child2.getData()[0];
        if (v.isFloat()) {
          final double v2 = v.toFloatValue();
          if (v2 < 0) {
            child2.getData()[0] = new ExpressionValue(-v2);
            parent = parent
                .getOwner()
                .getContext()
                .getFunctions()
                .factorProgramNode("+", parent.getOwner(),
                    new ProgramNode[] { child1, child2 });
          }
        } else if (v.isInt()) {
          final long v2 = v.toIntValue();
          if (v2 < 0) {
            child2.getData()[0] = new ExpressionValue(-v2);
            parent = parent
                .getOwner()
                .getContext()
                .getFunctions()
                .factorProgramNode("+", parent.getOwner(),
View Full Code Here

   * @param parent The parent node to attempt to rewrite.
   * @return The rewritten node, if it was rewritten.
   */
  private ProgramNode tryMinusZero(final ProgramNode parent) {
    if (parent.getTemplate() == StandardExtensions.EXTENSION_SUB) {
      final ProgramNode child2 = parent.getChildNode(1);
      if (isConstValue(child2, 0)) {
        final ProgramNode child1 = parent.getChildNode(0);
        return child1;
      }
    }
    return parent;
  }
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.