示例#1
0
 public GeneticAlgorithm(int _genome_size, IProcreator <T> _procreator, ISelector <T> _selector, IPopulationGenerator <T> _generator, Goal _goal, Random _random, string _name)
 {
     procreator  = _procreator;
     selector    = _selector;
     generator   = _generator;
     goal        = _goal;
     genome_size = _genome_size;
     name        = _name;
     random      = _random;
 }
示例#2
0
        public void Step(int survivors, ISelector selector, IProcreator procreator, IEvaluator evaluator, Random random)
        {
            pooledPopulation.Clear();

            for (int i = 0; i < survivors; i++)
            {
                pooledPopulation.Append().GetChromosome().AddRange(CurrentPopulation.ReadOnlyIndividuals[i].Chromosome);
            }

            selector.Initialize(CurrentPopulation);
            while (pooledPopulation.Individuals.Count < CurrentPopulation.ReadOnlyIndividuals.Count)
            {
                procreator.Procreate(pooledPopulation.Append().GetChromosome(), selector, random);
            }

            pooledPopulation.Freeze(evaluator);

            Population temp = (Population)CurrentPopulation;

            CurrentPopulation = pooledPopulation;
            GenerationCount++;
            pooledPopulation = temp;
        }
示例#3
0
        private void ensureInitialized()
        {
            if (precedenceTree == null)
            {
                precedenceTree = new PathTree(paths);

                evaluator = new TravelCostEvaluator(precedenceTree);
                selector  = new RouletteWheelSelector();
                IMutator mutator = new ReverseSequenceMutator();
                procreator = new SexualProcreator(new ShortestTravelCrossover(precedenceTree), mutator, 0.5);

                Population genesis = new Population();

                Individual individual0         = genesis.Append();
                IReadOnlyList <PathNode> nodes = precedenceTree.NearestNeighborTraversal();
                List <int> chromosome0         = individual0.GetChromosome();
                chromosome0.AddRange(nodes.Select(node => node.Id));
                //chromosome0.AddRange(Enumerable.Range(0, precedenceTree.Nodes.Count));
                evaluator.Baseline(chromosome0);

                //List<int> lastChromosome = chromosome0;
                for (int i = 1; i < 100; i++)
                {
                    List <int> chromosome = genesis.Append().GetChromosome();
                    chromosome.AddRange(chromosome0);
                    //chromosome.AddRange(lastChromosome);
                    mutator.Mutate(chromosome, random);
                    //lastChromosome = chromosome;
                }

                genesis.Freeze(evaluator);

                optimizer         = new GeneticOptimizer(genesis);
                maxFitness        = double.MinValue;
                optimalPriorities = new List <int>();
            }
        }