Exemple #1
0
        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);
        }
Exemple #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);
        }