Beispiel #1
0
        public InnovationPool(Monsters monsters, Map currentMap, Delegate callback)
        {
            this.monsters = monsters;
            this.callback = callback;

            originalMap = currentMap.CloneJson() as Map;

            InitialPopulation   = 30;
            GenerationLimit     = 30;
            MutationPercentage  = 0.35;
            CrossOverPercentage = 0.4;
            ElitismPercentage   = 10;

            running     = false;
            HasSolution = false;

            cells = originalMap.SpawnCells;



            Chromosome chrom = ChromosomeUtils.ChromosomeFromMap(originalMap);

            string binaryString = chrom.ToBinaryString();


            fitness = new ConvergenceFitness(cells, binaryString);

            //we can create an empty population as we will be creating the
            //initial solutions manually.
            population = new Population(InitialPopulation, cells.Count * ChromosomeUtils.NUMBER_GENES, true, true, ParentSelectionMethod.FitnessProportionateSelection);
        }
Beispiel #2
0
        public ConvergencePool(Monsters monsters, Map currentMap, Delegate callback)
        {
            this.monsters = monsters;
            this.callback = callback;

            originalMap = currentMap.CloneJson() as Map;

            InitialPopulation   = 30;
            GenerationLimit     = 30;
            MutationPercentage  = 0.4;
            CrossOverPercentage = 0.8;
            ElitismPercentage   = 10;

            running     = false;
            HasSolution = false;


            cells = originalMap.SpawnCells;

            Chromosome chrom = ChromosomeUtils.ChromosomeFromMap(originalMap);

            string binaryString = chrom.ToBinaryString();

            fitness = new ConvergenceFitness(cells, binaryString);

            population = new Population(InitialPopulation, cells.Count * ChromosomeUtils.NUMBER_GENES, true, true, ParentSelectionMethod.FitnessProportionateSelection);

            population.Solutions.Clear();

            for (int i = 0; i < 5; i++)
            {
                population.Solutions.Add(new Chromosome(binaryString));
            }
            for (int i = 0; i < 25; i++)
            {
                population.Solutions.Add(new Chromosome(cells.Count * ChromosomeUtils.NUMBER_GENES));
            }
        }
Beispiel #3
0
        internal void Run(AreaManager areaManager, Population conv, Population inno, Population obj)
        {
            if (running)
            {
                return;
            }

            cells = originalMap.SpawnCells;


            Chromosome chrom = ChromosomeUtils.ChromosomeFromMap(originalMap);

            string binaryString = chrom.ToBinaryString();

            convergenceFitness = new ConvergenceFitness(cells, binaryString);
            guidelineFitness   = new Guideline(cells, areaManager, MaxMonsters, MaxItens, HordesPercentage)
            {
                MaxItemsLever      = LeverMaxItem,
                MaxMonstersLever   = LeverMaxMonster,
                AmountHordesLever  = LeverAmountHordes,
                DangerLever        = LeverDanger,
                AccessibilityLever = LeverAccessibility
            };

            double total = GuidelinePercentage + UserPercentage + InnovationPercentage;

            guidelineLevel   = GuidelinePercentage / total;
            ConvergenceLevel = UserPercentage / total;
            innovationLevel  = InnovationPercentage / total;

            //we can create an empty population as we will be creating the
            //initial solutions manually.
            var population = new Population(InitialPopulation, cells.Count * ChromosomeUtils.NUMBER_GENES, true, true, ParentSelectionMethod.StochasticUniversalSampling);

            population.Solutions.Clear();

            population.Solutions.AddRange(obj.GetTop(10));
            population.Solutions.AddRange(inno.GetTop(10));
            population.Solutions.AddRange(conv.GetTop(10));

            //create the elite operator
            var elite = new Elite(ElitismPercentage);

            //create the crossover operator
            var crossover = new CrossoverIndex(CrossOverPercentage, ChromosomeUtils.NUMBER_GENES, true, GAF.Operators.CrossoverType.DoublePoint, ReplacementMethod.GenerationalReplacement);

            //create the mutation operator
            var mutate = new BinaryMutate(MutationPercentage);
            //create the GA
            var ga = new GeneticAlgorithm(population, CalculateFitness);

            //add the operators
            ga.Operators.Add(elite);
            ga.Operators.Add(crossover);
            //ga.Operators.Add(mutate);

            ga.OnRunComplete += OnRunComplete;

            //run the GA
            running = true;
            ga.Run(TerminateFunction);
        }