コード例 #1
0
        public static void evalNet(Object input)
        {
            evalPack e = (evalPack)input;

            if (e.g == null || (!HyperNEATParameters.reevaluateEveryGeneration && e.g.EvaluationCount != 0))
            {
                sem.Release();
                return;
            }
            sem2.WaitOne();
            INetwork network = e.g.Decode(e.Activation);

            sem2.Release();
            if (network == null)
            {   // Future genomes may not decode - handle the possibility.
                e.g.Fitness     = EvolutionAlgorithm.MIN_GENOME_FITNESS;
                e.g.RealFitness = e.g.Fitness;
            }
            else
            {
                BehaviorType behavior;
                e.g.Fitness     = Math.Max(e.NetworkEvaluator.threadSafeEvaluateNetwork(network, sem2, out behavior, e.ThreadNumber), EvolutionAlgorithm.MIN_GENOME_FITNESS);
                e.g.Behavior    = behavior;
                e.g.RealFitness = e.g.Fitness;
            }

            // Reset these genome level statistics.
            e.g.TotalFitness    += e.g.Fitness;
            e.g.EvaluationCount += 1;
            sem.Release();
        }
コード例 #2
0
        public void EvaluatePopulation(Population pop, EvolutionAlgorithm ea)
        {
            int      count = pop.GenomeList.Count;
            evalPack e;
            IGenome  g;
            int      i;

            for (i = 0; i < count; i++)
            {
                //Console.WriteLine(i);
                sem.WaitOne();
                g = pop.GenomeList[i];
                e = new evalPack(networkEvaluator, activationFn, g, i % HyperNEATParameters.numThreads, (int)ea.Generation);
                ThreadPool.QueueUserWorkItem(new WaitCallback(evalNet), e);
                // Update master evaluation counter.
                evaluationCount++;
            }
            //Console.WriteLine("waiting for last threads..");
            for (int j = 0; j < HyperNEATParameters.numThreads; j++)
            {
                sem.WaitOne();
                //  Console.WriteLine("waiting");
            }
            for (int j = 0; j < HyperNEATParameters.numThreads; j++)
            {
                //Console.WriteLine("releasing");

                sem.Release();
            }
            //Console.WriteLine("generation done...");
            //calulate novelty scores...
            if (ea.NeatParameters.noveltySearch)
            {
                if (ea.NeatParameters.noveltySearch)
                {
                    ea.CalculateNovelty();
                }
            }
        }