public float RunNetworkFeedbackEvaluation(ICPPNetwork inetwork) { var network = (CPPNetwork)inetwork; double Fitness = 0.0; foreach (Rule rule in ruleSet) { network.ActivateOutputNodes(rule); var actives = network.outputNodes; var wantedState = rule.Result; foreach (var inode in actives.Values) { var node = (OutputNetworkNode)inode; if (node.representedState == wantedState) { Fitness += Math.Pow(Math.Abs(0 - node.Activation), 2.0); } else { Fitness -= Math.Pow(Math.Abs(0 - node.Activation), 2.0); } } /*bool same = network.GetNextState(rule) == wantedState; * if(same) Fitness += 1; * else Fitness -= 2;*/ network.ResetNetwork(); } return((float)Fitness); }
public override void Evaluate(int speciesCount) { network = new CPPNetwork(genome, Neat.parameters.CPPN); //Fitness = Neat.evaluator.RunEvaluation(network.GetNextState); Fitness = ((LambdaExperiment)(Neat.evaluator)).RunNetworkFeedbackEvaluation(network); //trial thing. might have it Inside the RunEvaluation call if (Fitness >= Neat.parameters.CA.MaxFitnessPossible) { Fitness = Fitness / speciesCount; } else { Fitness = Fitness; } }