protected IBreeding <Synapse> NewBreeding(System.Random random) { ISelection <Synapse> selector; if (roulteWheelSelection) { selector = new RouletteWheelSelection <Synapse>(random, 2); } else { selector = new EliteSelection <Synapse>(2); } var crossover = new SinglePointCrossover <Synapse>(random); var mutator = new FixedNeuralNetMutation( random, geneMutChance, mutRange); return(new BreedingBase <Synapse>( poplLne - (int)(poplLne * reinsertPart), selector, crossover, mutator)); }
public void Start_TplManySlowFitness_Timeout() { var taskExecutor = new TplTaskExecutor(); taskExecutor.Timeout = TimeSpan.FromMilliseconds(1000); var selection = new RouletteWheelSelection(); var crossover = new OnePointCrossover(1); var mutation = new UniformMutation(); var chromosome = new ChromosomeStub(); var target = new GeneticAlgorithm(new TplPopulation(100, 150, chromosome), new FitnessStub() { SupportsParallel = true, ParallelSleep = 1500 }, selection, crossover, mutation); target.OperatorsStrategy = new TplOperatorsStrategy(); target.TaskExecutor = taskExecutor; Assert.Catch <TimeoutException>(() => { target.Start(); }, "The fitness evaluation reached the 00:00:01 timeout."); Assert.IsFalse(target.IsRunning); Assert.AreEqual(GeneticAlgorithmState.Stopped, target.State); }
public void CheckIfAllAreSelected() { var selection = new RouletteWheelSelection(); var generationMng = new GenerationManagerKeepLast(); var genomes = new List <GenomeBase>(50); for (int i = 0; i < genomes.Count; i++) { var newGenome = new GenomeBase { Fitness = i - 25 }; genomes.Add(newGenome); } generationMng.RegisterNewGeneration(new Generation(genomes.ToArray(), 0)); var roulette = new RouletteWheelSelection(); roulette.Prepare(generationMng.GetGenomes().ToArray(), null, null, genomes.Count); var selected = roulette.Select(genomes.Count).ToArray(); Assert.True(selected.Count() == genomes.Count); Assert.False(selected.Any(x => x == null)); foreach (var genome in selected) { Assert.True(selected.Count(x => x == genome) == 1); } }
public void Start_InvalidFitnessEvaluateResult_Exception() { var selection = new RouletteWheelSelection(); var crossover = new OnePointCrossover(1); var mutation = new UniformMutation(); var chromosome = new ChromosomeStub(); var fitness = MockRepository.GenerateMock <IFitness>(); fitness.Expect(f => f.Evaluate(null)).IgnoreArguments().Return(1.1); var target = new GeneticAlgorithm( new Population(20, 20, chromosome), fitness, selection, crossover, mutation); ExceptionAssert.IsThrowing(new FitnessException(fitness, "The {0}.Evaluate returns a fitness with value 1.1. The fitness value should be between 0.0 and 1.0.".With(fitness.GetType())), () => { target.Start(); }); fitness = MockRepository.GenerateMock <IFitness>(); fitness.Expect(f => f.Evaluate(null)).IgnoreArguments().Return(-0.1); target = new GeneticAlgorithm( new Population(20, 20, chromosome), fitness, selection, crossover, mutation); ExceptionAssert.IsThrowing(new FitnessException(fitness, "The {0}.Evaluate returns a fitness with value -0.1. The fitness value should be between 0.0 and 1.0.".With(fitness.GetType())), () => { target.Start(); }); }
public ISelection RouletteWheel() { var target = new RouletteWheelSelection(); target.SelectChromosomes(_chromosomesNumber, _generation); return(target); }
public void SelectChromosomes_Generation_ChromosomesZeroFitness() { var target = new RouletteWheelSelection(); var c1 = Substitute.ForPartsOf <ChromosomeBase>(2); c1.Fitness = 0; var c2 = Substitute.ForPartsOf <ChromosomeBase>(2); c2.Fitness = 0; var c3 = Substitute.ForPartsOf <ChromosomeBase>(2); c3.Fitness = 0; var c4 = Substitute.ForPartsOf <ChromosomeBase>(2); c4.Fitness = 0; var generation = new Generation(1, new List <IChromosome>() { c1, c2, c3, c4 }); var actual = target.SelectChromosomes(2, generation); Assert.AreEqual(0, actual.Count); }
public void OnCollisionEnter2D(Collision2D collision) { NotifyObservers("UpdateScore"); Instantiate(RouletteWheelSelection.GetRandomByWeight(posiblesPowerUPS, weights), this.transform.position, this.transform.rotation); Instantiate(explosion, this.transform.position, this.transform.rotation); _enemyPool.ReturnEnemyToPool(this); }
public void Start_ParallelManySlowFitness_Timeout() { var taskExecutor = new SmartThreadPoolTaskExecutor(); taskExecutor.MinThreads = 100; taskExecutor.MaxThreads = 100; taskExecutor.Timeout = TimeSpan.FromMilliseconds(1000); var selection = new RouletteWheelSelection(); var crossover = new OnePointCrossover(1); var mutation = new UniformMutation(); var chromosome = new ChromosomeStub(); var target = new GeneticAlgorithm(new Population(100, 150, chromosome), new FitnessStub() { SupportsParallel = true, ParallelSleep = 1500 }, selection, crossover, mutation); target.TaskExecutor = taskExecutor; ExceptionAssert.IsThrowing(new TimeoutException("The fitness evaluation rech the 00:00:01 timeout."), () => { target.Start(); }); Assert.IsFalse(target.IsRunning); Assert.AreEqual(GeneticAlgorithmState.Stopped, target.State); }
private BreedingBase <int> NewBreeding( int poplLen, double partToReinsert, double geneMutChance, int mutRange) { BreedingBase <int> result; ISelection <int> selector; ICrossover <int> crossover; IMutation <int> mutator; //selector = new EliteSelection<int>(2, partToBeElites: 0.5d); selector = new RouletteWheelSelection <int>(RandomInst, 2); crossover = new SinglePointCrossover <int>(RandomInst, 1); mutator = new ES_Mutation(RandomInst, geneMutChance, mutRange); result = new BreedingBase <int>( poplLen - (int)(partToReinsert * poplLen), selector, crossover, mutator ); return(result); }
public void ItHasAValidConstructor() { var parentSelection = new RouletteWheelSelection(); parentSelection.Setup(_pool, GATestHelper.GetTravelingSalesmanDefaultConfiguration()); parentSelection.GetParents(); }
public void ItConstructsProperlyIfAllFitnessScoresAreAboveOrEqualToZero() { var genome = GATestHelper.GetTravelingSalesmanPopulation(); var parentSelection = new RouletteWheelSelection(); parentSelection.Setup(genome, GATestHelper.GetTravelingSalesmanDefaultConfiguration()); }
public static GeneticSharp.Domain.GeneticAlgorithm MakeDefault(Func <double[], double> func, Tuple <double, double>[] minmax) { var population = new Population(20, 40, chromosome.CreateFloatChromosone(minmax)); var fitness = new FuncFitness((c) => { var fc = c as FloatingPointChromosome; var values = fc.ToFloatingPoints(); return(func(values)); }); var selection = new RouletteWheelSelection(); var crossover = new UniformCrossover(0.5f); var mutation = new FlipBitMutation(); var ga = new GeneticSharp.Domain.GeneticAlgorithm( population, fitness, selection, crossover, mutation); var termination = new GenerationNumberTermination(1000); ga.Termination = termination; Console.WriteLine("Generation: (x1, y1), (x2, y2) = distance"); return(ga); }
private void Start() { var fitness = new TspFitness(m_numberOfCities); var chromosome = new TspChromosome(m_numberOfCities); // This operators are classic genetic algorithm operators that lead to a good solution on TSP, // but you can try others combinations and see what result you get. var crossover = new OrderedCrossover(); var mutation = new ReverseSequenceMutation(); var selection = new RouletteWheelSelection(); var population = new Population(50, 100, chromosome); m_ga = new GeneticAlgorithm(population, fitness, selection, crossover, mutation); m_ga.Termination = new TimeEvolvingTermination(System.TimeSpan.FromHours(1)); // The fitness evaluation of whole population will be running on parallel. m_ga.TaskExecutor = new ParallelTaskExecutor { MinThreads = 100, MaxThreads = 200 }; // Everty time a generation ends, we log the best solution. m_ga.GenerationRan += delegate { var distance = ((TspChromosome)m_ga.BestChromosome).Distance; Debug.Log($"Generation: {m_ga.GenerationsNumber} - Distance: ${distance}"); }; DrawCities(); // Starts the genetic algorithm in a separate thread. m_gaThread = new Thread(() => m_ga.Start()); m_gaThread.Start(); }
private Species GetKey(Vector3 worldPos) { var sqr = radius * radius; var nears = lifes .Where(v => (v.transform.position - worldPos).sqrMagnitude < sqr); var count = nears.Count(); int modelIndex = -1; int colorIndex = -1; if (count > 0 && !Interfered()) { var modelTabs = new Tabulator <int, float>(); foreach (var n in nears.Select(v => v.CurrentKey)) { modelTabs[n.model]++; } var max = modelTabs.Values.Max(); int valueIndex; if (RouletteWheelSelection.Sample(out valueIndex, 100, max, modelTabs.ValuesAsList)) { modelIndex = modelTabs.KeysAsList[valueIndex]; } var colors = nears.Where(v => v.CurrentKey.model == modelIndex); var colorCount = colors.Count(); if (colorCount > 0 && !Interfered()) { var colorTabs = new Tabulator <int, float>(); foreach (var n in colors.Select(v => v.CurrentKey)) { colorTabs[n.color]++; } var maxColor = colorTabs.Values.Max(); int colorTabIndex; if (RouletteWheelSelection.Sample(out colorTabIndex, 100, maxColor, colorTabs.ValuesAsList)) { colorIndex = colorTabs.KeysAsList[colorTabIndex]; } } } if (modelIndex < 0) { modelIndex = Random.Range(0, LifeStrage.Instance.models.Length); } var model = LifeStrage.Instance.GetModel(modelIndex); if (colorIndex < 0) { colorIndex = Random.Range(0, model.colors.Length); } var spec = new Species(modelIndex, colorIndex); Debug.LogFormat("Chosen key={0} neighbors={1}", spec, count); return(spec); }
public void SelectChromosomes_NullGeneration_Exception() { var target = new RouletteWheelSelection(); ExceptionAssert.IsThrowing(new ArgumentNullException("generation"), () => { target.SelectChromosomes(2, null); }); }
public void ItFailsIfANegativeFitnessScoreIsPassed() { var genome = GATestHelper.GetTravelingSalesmanPopulation(); genome[0].FitnessScore = -1; var parentSelection = new RouletteWheelSelection(); parentSelection.Setup(genome, GATestHelper.GetTravelingSalesmanDefaultConfiguration()); }
public void ItCanGetAValidParent() { var parentSelection = new RouletteWheelSelection(); parentSelection.Setup(_pool, GATestHelper.GetTravelingSalesmanDefaultConfiguration()); var parent = parentSelection.GetParent(0.22); Assert.IsNotNull(parent); }
public void SelectChromosomes_NullGeneration_Exception() { var target = new RouletteWheelSelection(); var actual = Assert.Catch <ArgumentNullException>(() => { target.SelectChromosomes(2, null); }); Assert.AreEqual("generation", actual.ParamName); }
public void ItCantReturnTheSameParentTwice() { var parentSelection = new RouletteWheelSelection(); parentSelection.Setup(_pool, GATestHelper.GetTravelingSalesmanDefaultConfiguration()); for (int i = 0; i < 1000; i++) { var parent = parentSelection.GetParents(); Assert.IsFalse(ReferenceEquals(parent.Father, parent.Mother)); } }
public void ItCanReturnParents() { var parentSelection = new RouletteWheelSelection(); parentSelection.Setup(_pool, GATestHelper.GetTravelingSalesmanDefaultConfiguration()); var parent = parentSelection.GetParents(); Assert.IsNotNull(parent); Assert.IsNotNull(parent.Father); Assert.IsNotNull(parent.Mother); }
static void Main(string[] args) { ICrossOperator crossOperator = new OnePointCross(); IMutationOperator mutationOperator = new Mutatation(); ISelectionOperator selectionOperator = new RouletteWheelSelection(); Func <double, double> function = FitnessFunction; GeneticAlgorithm algorithm = new GeneticAlgorithm(20, 5, crossOperator, mutationOperator, selectionOperator, function); for (int i = 0; i < 10; i++) { Console.WriteLine(algorithm.RunSimulation(100).Fitness); } Console.ReadLine(); }
public void Initialize(int numberOfCities, int areaWidth, int areaHeight) { Stop(); Fitness = new TspFitness(numberOfCities, areaWidth, areaHeight); var chromosome = new TspChromosome(numberOfCities); // This operators are classic genetic algorithm operators that lead to a good solution on TSP, // but you can try others combinations and see what result you get. var crossover = new OrderedCrossover(); var mutation = new ReverseSequenceMutation(); var selection = new RouletteWheelSelection(); var population = new Population(50, 100, chromosome); _ga = new GeneticAlgorithm(population, Fitness, selection, crossover, mutation); }
public void Start_FitnessEvaluationFailed_FitnessException() { var selection = new RouletteWheelSelection(); var crossover = new OnePointCrossover(1); var mutation = new UniformMutation(); var chromosome = new ChromosomeStub(); var fitness = new FuncFitness((c) => throw new Exception("TEST")); var target = new GeneticAlgorithm(new Population(100, 150, chromosome), fitness, selection, crossover, mutation); Assert.Catch <FitnessException>(target.Start); Assert.IsFalse(target.IsRunning); Assert.AreEqual(GeneticAlgorithmState.Stopped, target.State); }
public void SelectChromosomes_InvalidNumber_Exception() { var target = new RouletteWheelSelection(); ExceptionAssert.IsThrowing(new ArgumentOutOfRangeException("number", "The number of selected chromosomes should be at least 2."), () => { target.SelectChromosomes(-1, null); }); ExceptionAssert.IsThrowing(new ArgumentOutOfRangeException("number", "The number of selected chromosomes should be at least 2."), () => { target.SelectChromosomes(0, null); }); ExceptionAssert.IsThrowing(new ArgumentOutOfRangeException("number", "The number of selected chromosomes should be at least 2."), () => { target.SelectChromosomes(1, null); }); }
public static void NextGen() { Genome c1 = new Genome(false); Genome c2 = new Genome(false); RouletteWheelSelection select = new RouletteWheelSelection(); CrossOver cross = new CrossOver(); cross.SinglePointCrossOver(select.RouletteWheelSelect(), select.RouletteWheelSelect(), ref c1, ref c2); Mutate(ref c1); Mutate(ref c2); genome.Add(c1); genome.Add(c2); if (genome.Count == DNAattributes.PopulationSize) { DNAattributes.pop = genome; } }
private void GenerateLevelGS() { Level = new LevelElement[LevelSize]; for (var i = 0; i < nChunks; i++) { var dcParams = DifficultyCurveParams; var difficulty = DifficultyCurve(i, dcParams.a, dcParams.b, dcParams.k); var eParams = EvolutionParams; var chunkSize = LevelSize / nChunks; var fitness = new LevelChunkFitness(difficulty); var chromosome = new LevelChunkChromosome(chunkSize); var crossover = new OnePointCrossover(chunkSize / 2); var mutation = new UniformMutation(allGenesMutable: true); var selection = new RouletteWheelSelection(); var population = new Population(50, 100, chromosome); var m_ga = new GeneticAlgorithm(population, fitness, selection, crossover, mutation) { Termination = new TimeEvolvingTermination(new TimeSpan(0, 0, 1)) }; m_ga.TaskExecutor = new ParallelTaskExecutor { MinThreads = 2, MaxThreads = 5 }; m_ga.Start(); // Everty time a generation ends, we log the best solution. /*m_ga.GenerationRan += delegate * { * var f = m_ga.BestChromosome.Fitness; * Debug.Log($"Generation: {m_ga.GenerationsNumber} - Fitness: ${f}"); * };*/ var genes = m_ga.BestChromosome.GetGenes(); for (int j = 0; j < chunkSize; j++) { Level[i * chunkSize + j] = (LevelElement)genes[j].Value; } Debug.Log($"Fitness: {m_ga.BestChromosome.Fitness}"); } }
public void SelectChromosomes_InvalidNumber_Exception() { var target = new RouletteWheelSelection(); Assert.Catch <ArgumentOutOfRangeException>(() => { target.SelectChromosomes(-1, null); }, "The number of selected chromosomes should be at least 2."); Assert.Catch <ArgumentOutOfRangeException>(() => { target.SelectChromosomes(0, null); }, "The number of selected chromosomes should be at least 2."); Assert.Catch <ArgumentOutOfRangeException>(() => { target.SelectChromosomes(1, null); }, "The number of selected chromosomes should be at least 2."); }
public void SelectChromosomes_NullFitness_Exception() { var target = new RouletteWheelSelection(); var generation = new Generation(1, new List <IChromosome> { new TspChromosome(10), new TspChromosome(10), new TspChromosome(10), new TspChromosome(10), new TspChromosome(10) }); var actual = Assert.Catch <SelectionException>(() => { target.SelectChromosomes(2, generation); }); Assert.AreEqual("RouletteWheelSelection: There are chromosomes with null fitness.", actual.Message); }
public IChromosome Solve(List <Span> spans) { var selection = new RouletteWheelSelection(); var crossover = new TwoPointCrossover(); var mutation = new UniformMutation(); var fitness = new Fitness(); var chromosome = new Chromosome(spans); var population = new Population(100, 100, chromosome); var ga = new GeneticAlgorithm(population, fitness, selection, crossover, mutation); ga.Termination = new GenerationNumberTermination(100); ga.CrossoverProbability = 0.8F; ga.MutationProbability = 0.1F; ga.Start(); return(ga.BestChromosome); }
protected override GeneticAlgorithm CreateGA() { var size = (int)Camera.main.orthographicSize - 1; m_fitness = new TspFitness(m_numberOfCities, -size, size, -size, size); var chromosome = new TspChromosome(m_numberOfCities); var crossover = new OrderedCrossover(); var mutation = new ReverseSequenceMutation(); var selection = new RouletteWheelSelection(); var population = new Population(50, 100, chromosome); var ga = new GeneticAlgorithm(population, m_fitness, selection, crossover, mutation); ga.Termination = new TimeEvolvingTermination(System.TimeSpan.FromDays(1)); ga.TaskExecutor = new ParallelTaskExecutor { MinThreads = 100, MaxThreads = 200 }; return(ga); }