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); }
public FedEvolver(IndividualMutateAndCrossoverPopulation population, IEvolvable evolvable, Random random) : base(population, random) { this.Evolvable = evolvable; }
public FedEvolvable(IndividualMutateAndCrossoverPopulation population, Random random) : base(population) { this.random = random; FoodNeededForMutation = 3; FoodNeededForReproduction = 10; }
public FedEvolver(IndividualMutateAndCrossoverPopulation population, Random random) : base(population, random) { }