/// <summary> /// Sets up a prototypical GPIndividual with those features which it /// shares with other GPIndividuals in its species, and nothing more. /// </summary> public override void Setup(IEvolutionState state, IParameter paramBase) { base.Setup(state, paramBase); // actually unnecessary (Individual.Setup() is empty) var def = DefaultBase; // set my evaluation to false Evaluated = false; // how many trees? var t = state.Parameters.GetInt(paramBase.Push(P_NUMTREES), def.Push(P_NUMTREES), 1); // at least 1 tree for GP! if (t <= 0) { state.Output.Fatal("A GPIndividual must have at least one tree.", paramBase.Push(P_NUMTREES), def.Push(P_NUMTREES)); } // load the trees Trees = new GPTree[t]; for (var x = 0; x < t; x++) { var p = paramBase.Push(P_TREE).Push("" + x); Trees[x] = (GPTree)(state.Parameters.GetInstanceForParameterEq(p, def.Push(P_TREE).Push("" + x), typeof(GPTree))); Trees[x].Owner = this; Trees[x].Setup(state, p); } // now that our function sets are all associated with trees, // give the nodes a chance to determine whether or not this is // going to work for them (especially the ADFs). var initializer = ((GPInitializer)state.Initializer); for (var x = 0; x < t; x++) { foreach (var gpfi in Trees[x].Constraints(initializer).FunctionSet.Nodes) { foreach (var t1 in gpfi) { t1.CheckConstraints(state, x, this, paramBase); } } } // because I promised with checkConstraints(...) state.Output.ExitIfErrors(); }
/// <summary> /// Returns true if I am "genetically" the same as tree, though we may have different owners. /// </summary> public virtual bool TreeEquals(GPTree tree) { return(Child.RootedTreeEquals(tree.Child)); }
/// <summary> /// Enumerates filtered GPNodes in the tree starting with the root (tree.Child). /// Results are filtered by the nodesearch argument (0=All, 1=Terminals, 2=Nonterminals). /// </summary> public static IEnumerable <GPNode> Descendants(this GPTree tree, int nodesearch) { return(Descendants(tree.Child, nodesearch)); }
/// <summary> /// Enumerates filtered GPNodes in the tree starting with the root (tree.Child). /// Results are filtered by the GPNodeGatherer which tests each node to decide /// if it qualifies. /// </summary> public static IEnumerable <GPNode> Descendants(this GPTree tree, GPNodeGatherer gatherer) { return(Descendants(tree.Child, gatherer)); }
/// <summary> /// Enumerates all of the GPNodes in the tree starting with the root (tree.Child). /// </summary> public static IEnumerable <GPNode> Descendants(this GPTree tree) { return(Descendants(tree.Child)); }