private double RateOrganism(IGEPOrganism o, IRegistry inputRegistry) { var behavior = o.Behave(new GEPSurroundings(inputRegistry)); const double worstFitness = 15000; if (behavior.Success) { var resultsRegistry = o.ResultsRegistry; resultsRegistry.MoveToZero(); var resultValue = resultsRegistry.Read().Value; if (double.IsNaN(resultValue) || double.IsInfinity(resultValue)) return worstFitness; var desiredOutput = this.Function(inputRegistry.ReadAt(0).Value); var fitness = Math.Abs(resultValue - desiredOutput); if(double.IsNaN(fitness) || double.IsInfinity(fitness)) return worstFitness; return fitness; } else return worstFitness; }