private CPopulationFitness calculateSimPopulationFitness(CPopulationInfo populationInfo)
 {
     try
     {
         ProtocolManager.Open();
         Console.WriteLine("Evaluating generation " + populationInfo.Generation);
         return(ProtocolManager.Client.calculateSimPopulationFitness(populationInfo));
     }
     catch (Exception exception)
     {
         Console.WriteLine("Lost connection to evaluator (" + exception.StackTrace + ")");
         Console.WriteLine("Sleeping for 2 seconds, creating new connection.");
         ProtocolManager.Close();
         Thread.Sleep(2000);
         return(calculateSimPopulationFitness(populationInfo));
     }
 }
Beispiel #2
0
        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);
        }