예제 #1
0
        public void TestAddCandidate()
        {
            var candidateA = BreedingCandidateMocks.CreateMock(0.4);
            var candidateB = BreedingCandidateMocks.CreateMock(1.5);

            _population.Add(candidateA);
            _population.Add(candidateB);

            Assert.AreEqual(1.9, _population.TotalFitness);
            Assert.AreEqual(2, _population.Size);
        }
예제 #2
0
 public virtual void AddEntitiesToPopulation(IPopulation population, IEntityList entities)
 {
     for (int i = 0; i < entities.Count; i++)
     {
         population.Add(entities[i]);
     }
 }
        public override IEntityList Replace(IPopulation targetPopulation, IEntityList offspring, IEntityList parents, IPopulation sourcePopulation)
        {
            var inserted       = new EntityList(1);
            var populationSize = Parameters.GetValue(Algorithm.ParameterNames.PopulationSize);

            //TODO: FitnessComparer.SelectWorst, SelectBest

            if (offspring.Count == 0)
            {
                return(inserted);
            }

            var entityToRemove = FitnessComparer.Dominates(parents[0].Fitness, parents[1].Fitness) ? parents[0] : parents[1];
            var entityToAdd    = (offspring.Count > 1 && FitnessComparer.Dominates(offspring[0].Fitness, offspring[1].Fitness)) ? offspring[1] : offspring[0];

            if (FitnessComparer.Dominates(entityToRemove.Fitness, entityToAdd.Fitness))
            {
                targetPopulation.Add(entityToAdd);
                inserted.Add(entityToAdd);

                if (sourcePopulation.Count > populationSize)
                {
                    sourcePopulation.Remove(entityToRemove);
                }
            }

            return(inserted);
        }
        public override IEntityList Replace(IPopulation population, IEntityList offspring, IEntityList parents, IPopulation sourcePopulation)
        {
            var inserted       = new EntityList(offspring.Count);
            int tournamentSize = Parameters.GetInt(ParameterNames.TournamentSize);

            for (int i = 0; i < offspring.Count; i++)
            {
                var entityForRemove = SelectOne(population, tournamentSize);
                population.RemoveAt(entityForRemove);
                population.Add(offspring[i]);
                inserted.Add(offspring[i]);
            }

            return(inserted);
        }