Package ec.neat

Class NEATInnovation

java.lang.Object
ec.neat.NEATInnovation
All Implemented Interfaces:
Prototype, Setup, Serializable, Cloneable

public class NEATInnovation extends Object implements Prototype
NEATInnovation is a class for recording the innovation information during the evolution of neat. This information is critical to determine if two individuals have same origin. There a basic two types of innovation we want to keep track of, adding a node or adding a gene (link) to the individual. Different innovation require record different information.
See Also:
  • Field Summary

    Fields
    Modifier and Type
    Field
    Description
    int
    Two nodes specify where the link innovation took place : this is the input node.
    int
    The number assigned to the innovation.
    int
    If this is a new node innovation,then there are 2 innovations (links) added for the new node.
    int
    Either NEWNODE (0) or NEWLINK (1).
    int
    If a new node was created, this is its node id.
    double
    If a link is added, this is its weight.
    int
    If a new node was created, this is the innovation number of the gene's link it is being stuck inside.
    int
    Two nodes specify where the link innovation took place : this is the output node.
    static final String
     
    boolean
    Is the link innovation a recurrent link.
  • Constructor Summary

    Constructors
    Constructor
    Description
     
  • Method Summary

    Modifier and Type
    Method
    Description
    Creates a new individual cloned from a prototype, and suitable to begin use in its own evolutionary context.
    Returns the default base for this prototype.
    boolean
     
    int
     
    void
    reset(int inNode, int outNode, boolean recur)
    When we have a new innovation, we clone an existing NEATInnovation instance, and change its information with this reset method.
    void
    reset(int inNode, int outNode, int oldInnov)
    When we have a new innovation, we clone an existing NEATInnovation instance, and change its information with this reset method.
    void
    reset(int inNode, int outNode, int innovNum, double weight, boolean recur)
    When we have a new innovation, we clone an existing NEATInnovation instance, and change its information with this reset method.
    void
    reset(int inNode, int outNode, int innovNum1, int innovNum2, int newId, int oldInnov)
    When we have a new innovation, we clone an existing NEATInnovation instance, and change its information with this reset method.
    void
    Sets up the object by reading it from the parameters stored in state, built off of the parameter base base.

    Methods inherited from class java.lang.Object

    finalize, getClass, notify, notifyAll, toString, wait, wait, wait
  • Field Details

    • P_INNOVATION

      public static final String P_INNOVATION
      See Also:
    • innovationType

      public int innovationType
      Either NEWNODE (0) or NEWLINK (1).
    • inNodeId

      public int inNodeId
      Two nodes specify where the link innovation took place : this is the input node.
    • outNodeId

      public int outNodeId
      Two nodes specify where the link innovation took place : this is the output node.
    • innovationNum1

      public int innovationNum1
      The number assigned to the innovation.
    • innovationNum2

      public int innovationNum2
      If this is a new node innovation,then there are 2 innovations (links) added for the new node.
    • newWeight

      public double newWeight
      If a link is added, this is its weight.
    • newNodeId

      public int newNodeId
      If a new node was created, this is its node id.
    • oldInnovationNum

      public int oldInnovationNum
      If a new node was created, this is the innovation number of the gene's link it is being stuck inside.
    • recurFlag

      public boolean recurFlag
      Is the link innovation a recurrent link.
  • Constructor Details

    • NEATInnovation

      public NEATInnovation()
  • Method Details

    • setup

      public void setup(EvolutionState state, Parameter base)
      Description copied from interface: Prototype
      Sets up the object by reading it from the parameters stored in state, built off of the parameter base base. If an ancestor implements this method, be sure to call super.setup(state,base); before you do anything else.

      For prototypes, setup(...) is typically called once for the prototype instance; cloned instances do not receive the setup(...) call. setup(...) may be called more than once; the only guarantee is that it will get called at least once on an instance or some "parent" object from which it was ultimately cloned.

      Specified by:
      setup in interface Prototype
      Specified by:
      setup in interface Setup
    • defaultBase

      public Parameter defaultBase()
      Description copied from interface: Prototype
      Returns the default base for this prototype. This should generally be implemented by building off of the static base() method on the DefaultsForm object for the prototype's package. This should be callable during setup(...).
      Specified by:
      defaultBase in interface Prototype
    • reset

      public void reset(int inNode, int outNode, int innovNum1, int innovNum2, int newId, int oldInnov)
      When we have a new innovation, we clone an existing NEATInnovation instance, and change its information with this reset method.
    • reset

      public void reset(int inNode, int outNode, int oldInnov)
      When we have a new innovation, we clone an existing NEATInnovation instance, and change its information with this reset method.
    • reset

      public void reset(int inNode, int outNode, int innovNum, double weight, boolean recur)
      When we have a new innovation, we clone an existing NEATInnovation instance, and change its information with this reset method.
    • reset

      public void reset(int inNode, int outNode, boolean recur)
      When we have a new innovation, we clone an existing NEATInnovation instance, and change its information with this reset method.
    • clone

      public Object clone()
      Description copied from interface: Prototype
      Creates a new individual cloned from a prototype, and suitable to begin use in its own evolutionary context.

      Typically this should be a full "deep" clone. However, you may share certain elements with other objects rather than clone hem, depending on the situation:

      • If you hold objects which are shared with other instances, don't clone them.
      • If you hold objects which must be unique, clone them.
      • If you hold objects which were given to you as a gesture of kindness, and aren't owned by you, you probably shouldn't clone them.
      • DON'T attempt to clone: Singletons, Cliques, or Populations, or Subpopulation.
      • Arrays are not cloned automatically; you may need to clone an array if you're not sharing it with other instances. Arrays have the nice feature of being copyable by calling clone() on them.

      Implementations.

      • If no ancestor of yours implements clone(), and you have no need to do clone deeply, and you are abstract, then you should not declare clone().
      • If no ancestor of yours implements clone(), and you have no need to do clone deeply, and you are not abstract, then you should implement it as follows:

         public Object clone() 
             {
             try
                 { 
                 return super.clone();
                 }
             catch ((CloneNotSupportedException e)
                 { throw new InternalError(); } // never happens
             }
                
      • If no ancestor of yours implements clone(), but you need to deep-clone some things, then you should implement it as follows:

         public Object clone() 
             {
             try
                 { 
                 MyObject myobj = (MyObject) (super.clone());
        
                 // put your deep-cloning code here...
                 }
             catch ((CloneNotSupportedException e)
                 { throw new InternalError(); } // never happens
             return myobj;
             } 
                
      • If an ancestor has implemented clone(), and you also need to deep clone some things, then you should implement it as follows:

         public Object clone() 
             { 
             MyObject myobj = (MyObject) (super.clone());
        
             // put your deep-cloning code here...
        
             return myobj;
             } 
                
      Specified by:
      clone in interface Prototype
      Overrides:
      clone in class Object
    • hashCode

      public int hashCode()
      Overrides:
      hashCode in class Object
    • equals

      public boolean equals(Object obj)
      Overrides:
      equals in class Object