protected override IEvolvable crossover(IEvolvable other)
 {
     if (other is IndividualMutateAndCrossoverPopulation)
     {
         IndividualMutateAndCrossoverPopulation mate = (IndividualMutateAndCrossoverPopulation)other;
         return(new IndividualMutateAndCrossoverPopulation(
                    this.ParentPopulation,
                    Evolution.RandomInterpolation(random, this.MaxSize, mate.MaxSize),
                    new List <IEvolvable>(),
                    (int)Evolution.RandomInterpolation(random, this.FoodForPopulation, mate.FoodForPopulation),
                    random,
                    random.NextDouble() < 0.5 ? this.Creator : mate.Creator,
                    0, 0, 0,
                    this.Fitness > mate.Fitness ? this.FitnessHistory.Select(a => a).ToList() : mate.FitnessHistory.Select(a => a).ToList(),
                    this.individuals.Union(mate.individuals).OrderByDescending(a => a.Fitness).Take((int)Evolution.RandomInterpolation(random, this.PopulationSize, mate.PopulationSize)).ToList(),
                    this.BestOfAllTime.Fitness > mate.BestOfAllTime.Fitness ? this.BestOfAllTime : mate.BestOfAllTime,
                    0, 0, Mutations + mate.Mutations, Crossovers + mate.Crossovers, FitnessEvaluations + mate.FitnessEvaluations, 0
                    ));
     }
     else
     {
         return(base.crossover(other));
     }
 }
 protected IndividualMutateAndCrossoverPopulation(IndividualMutateAndCrossoverPopulation original) : base(original)
 {
     construct(original.MaxSize, original.newBorns, original.FoodForPopulation);
 }
Esempio n. 3
0
 public FedEvolver(IndividualMutateAndCrossoverPopulation population, IEvolvable evolvable, Random random) : base(population, random)
 {
     this.Evolvable = evolvable;
 }
Esempio n. 4
0
 public FedEvolvable(IndividualMutateAndCrossoverPopulation population, Random random) : base(population)
 {
     this.random               = random;
     FoodNeededForMutation     = 3;
     FoodNeededForReproduction = 10;
 }
Esempio n. 5
0
 public FedEvolver(IndividualMutateAndCrossoverPopulation population, Random random) : base(population, random)
 {
 }