Package ec.gp

# Class GPFunctionSet

java.lang.Object
ec.gp.GPFunctionSet

All Implemented Interfaces:
  `Clique`, `Setup`, `Serializable`

Direct Known Subclasses:
  `PTCFunctionSet`

public class GPFunctionSet extends Object implements Clique
GPFunctionSet is a Clique which represents a set of GPNode prototypes forming a standard function set for forming certain trees in individuals. GPFunctionSets instances have unique names with which they're referenced by GPTreeConstraints objects indicating that they're used for certain trees. GPFunctionSets store their GPNode Prototypes in three hashtables, one for all nodes, one for nonterminals, and one for terminals. Each hashed item is an array of GPNode objects, hashed by the return type of the GPNodes in the array. GPFunctionSets also contain prototypical GPNode nodes which they clone to form their arrays.

Parameters

base.`name` String | (name of function set. Must be different from other function set instances)
base.`size` int >= 1 | (number of functions in the function set)
base.`func.`n classname, inherits and != ec.gp.GPNode | (class of function node n in the set)

Parameter bases

base.`func.`n | function node n

See Also:
  - Serialized Form

- ## Field Summary

  Fields
  Modifier and Type
  Field
  Description
  `String`
  `name`
  Name of the GPFunctionSet
  `GPNode[][]`
  `nodes`
  The nodes that our GPTree can use: nodes[type][thenodes].
  `Hashtable`
  `nodes_h`
  The nodes that our GPTree can use: arrays of nodes hashed by type.
  `GPNode[][][]`
  `nodesByArity`
  Nodes == a given arity, that is: nodesByArity[type][arity][thenodes]
  `Hashtable`
  `nodesByName`
  The nodes that our GPTree can use, hashed by name().
  `GPNode[][]`
  `nonterminals`
  The nonterminals our GPTree can use: nonterminals[type][thenodes].
  `Hashtable`
  `nonterminals_h`
  The nonterminals our GPTree can use: arrays of nonterminals hashed by type.
  `GPNode[][][]`
  `nonterminalsOverArity`
  Nonterminals >= a given arity, that is: nonterminalsOverArity[type][arity][thenodes] -- this will be O(n^2).
  `GPNode[][][]`
  `nonterminalsUnderArity`
  Nonterminals invalid input: '<'= a given arity, that is: nonterminalsUnderArity[type][arity][thenodes] -- this will be O(n^2).
  `static final String`
  `P_FUNC`
  `static final String`
  `P_NAME`
  `static final String`
  `P_SIZE`
  `GPNode[][]`
  `terminals`
  The terminals our GPTree can use: terminals[type][thenodes].
  `Hashtable`
  `terminals_h`
  The terminals our GPTree can use: arrays of terminals hashed by type.

- ## Constructor Summary

  Constructors
  Constructor
  Description
  `GPFunctionSet()`

- ## Method Summary

  Modifier and Type
  Method
  Description
  `static GPFunctionSet`
  `functionSetFor(String functionSetName, EvolutionState state)`
  Returns the function set for a given name.
  `void`
  `postProcessFunctionSet()`
  Sets up the arrays based on the hashtables
  `void`
  `setup(EvolutionState state, Parameter base)`
  Must be done after GPType and GPNodeConstraints have been set up
  `String`
  `toString()`
  Returns the name.

  ### Methods inherited from class java.lang.Object

  `clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait`

- ## Field Details

  - ### P_NAME

    public static final String P_NAME
    See Also:
      - Constant Field Values

  - ### P_FUNC

    public static final String P_FUNC
    See Also:
      - Constant Field Values

  - ### P_SIZE

    public static final String P_SIZE
    See Also:
      - Constant Field Values

  - ### name

    public String name
    Name of the GPFunctionSet

  - ### nodes_h

    public Hashtable nodes_h
    The nodes that our GPTree can use: arrays of nodes hashed by type.

  - ### nodes

    public GPNode[][] nodes
    The nodes that our GPTree can use: nodes[type][thenodes].

  - ### nonterminals_h

    public Hashtable nonterminals_h
    The nonterminals our GPTree can use: arrays of nonterminals hashed by type.

  - ### nonterminals

    public GPNode[][] nonterminals
    The nonterminals our GPTree can use: nonterminals[type][thenodes].

  - ### terminals_h

    public Hashtable terminals_h
    The terminals our GPTree can use: arrays of terminals hashed by type.

  - ### terminals

    public GPNode[][] terminals
    The terminals our GPTree can use: terminals[type][thenodes].

  - ### nodesByName

    public Hashtable nodesByName
    The nodes that our GPTree can use, hashed by name().

  - ### nodesByArity

    public GPNode[][][] nodesByArity
    Nodes == a given arity, that is: nodesByArity[type][arity][thenodes]

  - ### nonterminalsUnderArity

    public GPNode[][][] nonterminalsUnderArity
    Nonterminals invalid input: '<'= a given arity, that is: nonterminalsUnderArity[type][arity][thenodes] -- this will be O(n^2). Obviously, the number of nonterminals at arity slot 0 is 0.

  - ### nonterminalsOverArity

    public GPNode[][][] nonterminalsOverArity
    Nonterminals >= a given arity, that is: nonterminalsOverArity[type][arity][thenodes] -- this will be O(n^2). Obviously, the number of nonterminals at arity slot 0 is all the nonterminals of that type.

- ## Constructor Details

  - ### GPFunctionSet

    public GPFunctionSet()

- ## Method Details

  - ### toString

    public String toString()
    Returns the name.
    Overrides:
      `toString` in class `Object`

  - ### postProcessFunctionSet

    public void postProcessFunctionSet()
    Sets up the arrays based on the hashtables

  - ### setup

    public void setup(EvolutionState state, Parameter base)
    Must be done after GPType and GPNodeConstraints have been set up
    Specified by:
      `setup` in interface `Setup`

  - ### functionSetFor

    public static GPFunctionSet functionSetFor(String functionSetName, EvolutionState state)
    Returns the function set for a given name. You must guarantee that after calling functionSetFor(...) one or several times, you call state.output.exitIfErrors() once.