예제 #1
0
파일: Algorithm.cs 프로젝트: PabloSzPz/sGA
        //Evolve population
        public static Population evolvePopulation(Population pop)
        {
            Population newPopulation    = new Population(pop.size(), false);
            Individual fittestOfThisPop = null;

            //keep your best individual
            if (Elitism)
            {
                //get fittest of the CURRENT pop
                fittestOfThisPop = newPopulation.saveIndividual(0, FitnessCalc.getFittest());

                //SAVE best of the algorithm
                if (bestSolution != null)
                {
                    if (betterFitness(bestSolution, fittestOfThisPop))
                    {
                        bestSolution = fittestOfThisPop;
                    }
                }
                else
                {
                    bestSolution = fittestOfThisPop;
                }
            }

            //Crossover population
            int elitismOffset;

            if (Elitism)
            {
                elitismOffset = 1;
            }
            else
            {
                elitismOffset = 0;
            }

            //loop over tje population size and create new individuals with crossover
            for (int i = elitismOffset; i < pop.size(); i++)
            {
                Individual indiv1   = rouletteSelection(pop);
                Individual indiv2   = rouletteSelection(pop);
                Individual newIndiv = crossover(indiv1, indiv2);
                newPopulation.saveIndividual(i, newIndiv);
            }

            //Mutate population
            for (int i = elitismOffset; i < newPopulation.size(); i++)
            {
                mutate(newPopulation.getIndividual(i));
            }

            // fitless die & replace by fittest
            if (DieFactor)
            {
                if (elitism)
                {
                    newPopulation.saveIndividual(FitnessCalc.getFitlessIndex(), fittestOfThisPop);
                }
                else
                {
                    newPopulation.saveIndividual(FitnessCalc.getFitlessIndex(), FitnessCalc.getFittest());
                }
            }



            return(newPopulation);
        }
예제 #2
0
파일: Algorithm.cs 프로젝트: PabloSzPz/sGA
        //Evolve population
        public static Population evolvePopulation(Population pop)
        {
            Population newPopulation = new Population(pop.size(), false);
            Individual fittestOfThisPop = null;
            //keep your best individual
            if (Elitism) {
                //get fittest of the CURRENT pop
                fittestOfThisPop = newPopulation.saveIndividual(0, FitnessCalc.getFittest());

                //SAVE best of the algorithm
                if(bestSolution != null) {
                    if (betterFitness(bestSolution, fittestOfThisPop)) {
                        bestSolution = fittestOfThisPop;
                    }
                } else {
                    bestSolution = fittestOfThisPop;
                }
            }

            //Crossover population
            int elitismOffset;
            if (Elitism) {
                elitismOffset = 1;
            } else {
                elitismOffset = 0;
            }

            //loop over tje population size and create new individuals with crossover
            for(int i = elitismOffset; i<pop.size();i++) {
                Individual indiv1 = rouletteSelection(pop);
                Individual indiv2 = rouletteSelection(pop);
                Individual newIndiv = crossover(indiv1, indiv2);
                newPopulation.saveIndividual(i, newIndiv);
            }

            //Mutate population
            for (int i=elitismOffset; i<newPopulation.size();i++) {
                mutate(newPopulation.getIndividual(i));
            }

            // fitless die & replace by fittest
            if (DieFactor) {
                if (elitism) {
                    newPopulation.saveIndividual(FitnessCalc.getFitlessIndex(), fittestOfThisPop);
                } else {
                    newPopulation.saveIndividual(FitnessCalc.getFitlessIndex(), FitnessCalc.getFittest());
                }
            }

            return newPopulation;
        }