public FitnessInfo Evaluate(FastCyclicNetwork phenome) { EvaluationCount++; var fcn = FastCyclicNetworkAdapter.Convert(phenome); ProtocolManager.Open(); var cFitness = ProtocolManager.Client.calculateXorPhenotypeFitness(fcn); //ProtocolManager.Close(); adding this line implies a huge performance hit var auxFitness = new AuxFitnessInfo[cFitness.AuxFitness.Count]; for (int i = 0; i < auxFitness.Length; i++) { auxFitness[i] = new AuxFitnessInfo(cFitness.AuxFitness[i].Name, cFitness.AuxFitness[i].Value); } var fitness = new FitnessInfo(cFitness.Fitness, auxFitness); StopConditionSatisfied = cFitness.StopConditionSatisfied; if (StopConditionSatisfied) { FitnessInfo fi = _xorBlackBoxEvaluator.Evaluate(phenome); bool reallySatisfied = _xorBlackBoxEvaluator.StopConditionSatisfied; Debug.Assert((fi._fitness >= 10) == _xorBlackBoxEvaluator.StopConditionSatisfied); if (!reallySatisfied) { Console.Out.WriteLine("ERROR: really fitness is not calculated (" + fi._fitness + " versus " + cFitness.Fitness + ")"); Console.Out.WriteLine(phenome.ToString()); //throw new Exception("Wheih :("); } else { Console.Out.WriteLine("Networks is really good"); } } // We do not use the NEAT genome decoder. The NEAT genome decoder would // do the same as the following code, but provide us with an IBlackBox object. // Because we pass on the object to our Java code, we need to be aware of its // underlying structure. The additional layer of abstraction gets in the way. return(fitness); }
public List <FitnessInfo> Evaluate(List <FastCyclicNetwork> phenomes) { var populationInfo = new CPopulationInfo { Phenomes = FastCyclicNetworkAdapter.Convert(phenomes), Generation = (int)_ea.CurrentGeneration }; ProtocolManager.Open(); var fitnessInfo = ProtocolManager.Client.calculateSixMultiplexerPopulationFitness(populationInfo); EvaluationCount += (uint)fitnessInfo.EvaluationCount; var result = new List <FitnessInfo>(fitnessInfo.FitnessInfos.Count); for (var i = 0; i < fitnessInfo.FitnessInfos.Count; i++) { var fi = fitnessInfo.FitnessInfos[i]; StopConditionSatisfied |= fi.StopConditionSatisfied; // Verify that the stop condition is actually really satisfied; if not, there is an error in the Java evaluator and we throw an exception if (fi.StopConditionSatisfied) { var sharpneatFitness = _binarySixMultiplexerEvaluator.Evaluate(phenomes[i]); var reallySatisfied = sharpneatFitness._fitness >= 1000; if (!reallySatisfied) { Console.Out.WriteLine("ERROR: " + sharpneatFitness._fitness + " versus " + fi.Fitness); throw new Exception("Noes there is an error in my Java code :("); } else { Console.Out.WriteLine("Yeey, the result is really correct: " + sharpneatFitness._fitness + " versus " + fi.Fitness); } } result.Add(new FitnessInfo( fi.Fitness, fi.AuxFitness.Select(aux => new AuxFitnessInfo(aux.Name, aux.Value)).ToArray()) ); } return(result); }
public List <FitnessInfo> Evaluate(List <FastCyclicNetwork> phenomes) { var populationInfo = new CPopulationInfo { Phenomes = FastCyclicNetworkAdapter.Convert(phenomes), Generation = (int)_ea.CurrentGeneration }; var fitnessInfo = calculateSimPopulationFitness(populationInfo); EvaluationCount += (uint)fitnessInfo.EvaluationCount; var result = new List <FitnessInfo>(fitnessInfo.FitnessInfos.Count); foreach (var fi in fitnessInfo.FitnessInfos) { StopConditionSatisfied |= fi.StopConditionSatisfied; result.Add(new FitnessInfo( fi.Fitness, fi.AuxFitness.Select(aux => new AuxFitnessInfo(aux.Name, aux.Value)).ToArray()) ); } return(result); }