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 void Optimize_Load(object sender, EventArgs e) { var selection = new EliteSelection(); var crossover = new OrderedCrossover(); var mutation = new ReverseSequenceMutation(); var fitness = new TrajectoryFitness(); var chromosome = new TrajectoryChromosome(TrajectoryChromosome.ChromosomeLength(3), 3); var population = new Population(35, 40, chromosome); //72 (6) //67 (2) //49 (3) //102 (1) var ga = new GeneticAlgorithm(population, fitness, selection, crossover, mutation); var executor = new SmartThreadPoolTaskExecutor(); executor.MinThreads = 1; executor.MaxThreads = 1; ga.TaskExecutor = executor; ga.Termination = new GenerationNumberTermination(10); Console.WriteLine("GA running..."); var t = DateTime.Now; ga.Start(); Console.WriteLine("Time:" + DateTime.Now.Subtract(t).TotalSeconds); Console.WriteLine("Best solution found has {0} fitness.", int.MaxValue - ga.BestChromosome.Fitness); Console.WriteLine(ga.BestChromosome.GetGene(0).Value + " " + ga.BestChromosome.GetGene(1).Value + " " + ga.BestChromosome.GetGene(2).Value); }
public void Start_AnyTaskWithException_Exception() { var pipeline = ""; var target = new SmartThreadPoolTaskExecutor(); target.Add(() => { throw new Exception("1"); }); target.Add(() => { Thread.Sleep(5); pipeline += "2"; }); target.Add(() => { Thread.Sleep(5); pipeline += "3"; }); ExceptionAssert.IsThrowing(new Exception("1"), () => { target.Start(); }); }
public void Stop_ManyTasks_StopAll() { var pipeline = ""; var target = new SmartThreadPoolTaskExecutor(); target.Timeout = TimeSpan.FromMilliseconds(1000); target.Add(() => { Thread.Sleep(5); pipeline += "1"; }); target.Add(() => { Thread.Sleep(5); pipeline += "2"; }); target.Add(() => { Thread.Sleep(5); pipeline += "3"; }); Parallel.Invoke( () => Assert.IsTrue(target.Start()), () => { Thread.Sleep(100); target.Stop(); }); }
public void Stop_ManyTasks_StopAll() { var pipeline = ""; var target = new SmartThreadPoolTaskExecutor(); target.Timeout = TimeSpan.FromMilliseconds(1000); target.Add(() => { Thread.Sleep(5); pipeline += "1"; }); target.Add(() => { Thread.Sleep(5); pipeline += "2"; }); target.Add(() => { Thread.Sleep(5); pipeline += "3"; }); Parallel.Invoke( () => Assert.IsTrue(target.Start()), () => { Thread.Sleep(100); target.Stop(); }); }
public void Start_AnyTaskWithException_Exception() { var pipeline = ""; var target = new SmartThreadPoolTaskExecutor(); target.Add(() => { throw new Exception("1"); }); target.Add(() => { Thread.Sleep(5); pipeline += "2"; }); target.Add(() => { Thread.Sleep(5); pipeline += "3"; }); ExceptionAssert.IsThrowing(new Exception("1"), () => { target.Start(); }); }
public void Stop_Tasks_ShutdownCalled() { var pipeline = ""; var target = new SmartThreadPoolTaskExecutor(); target.Timeout = TimeSpan.FromMilliseconds(1000); target.Add(() => { Thread.Sleep(500); pipeline += "1"; }); target.Add(() => { Thread.Sleep(500); pipeline += "2"; }); target.Add(() => { Thread.Sleep(500); pipeline += "3"; }); Parallel.Invoke( () => target.Start(), () => { Thread.Sleep(100); target.Stop(); }); Assert.IsFalse(target.IsRunning); }
public void Initialize(IOptimizerConfiguration config, OptimizerFitness fitness) { _config = config; _fitness = fitness; _executor = new SmartThreadPoolTaskExecutor() { MinThreads = 1 }; _executor.MaxThreads = _config.MaxThreads > 0 ? _config.MaxThreads : 8; }
public void Start_ParallelManyGenerations_Optimization() { var taskExecutor = new SmartThreadPoolTaskExecutor(); taskExecutor.MinThreads = 100; taskExecutor.MaxThreads = 100; var selection = new EliteSelection(); var crossover = new OnePointCrossover(1); var mutation = new UniformMutation(); var chromosome = new ChromosomeStub(); FlowAssert.IsAtLeastOneAttemptOk(20, () => { var target = new GeneticAlgorithm(new Population(100, 150, chromosome), new FitnessStub() { SupportsParallel = true }, selection, crossover, mutation); target.TaskExecutor = taskExecutor; Assert.AreEqual(GeneticAlgorithmState.NotStarted, target.State); Assert.IsFalse(target.IsRunning); target.Start(); Assert.AreEqual(GeneticAlgorithmState.TerminationReached, target.State); Assert.IsFalse(target.IsRunning); Assert.IsTrue(target.Population.CurrentGeneration.Chromosomes.Count >= 100); Assert.IsTrue(target.Population.CurrentGeneration.Chromosomes.Count <= 150); Assert.IsNotNull(target.Population.BestChromosome); Assert.IsTrue(target.Population.BestChromosome.Fitness >= 0.9); Assert.IsTrue(target.Population.Generations.Count > 0); }); FlowAssert.IsAtLeastOneAttemptOk(20, () => { var target = new GeneticAlgorithm(new Population(100, 150, chromosome), new FitnessStub() { SupportsParallel = true }, selection, crossover, mutation); target.TaskExecutor = taskExecutor; target.Start(); Assert.IsTrue(target.Population.CurrentGeneration.Chromosomes.Count >= 100); Assert.IsTrue(target.Population.CurrentGeneration.Chromosomes.Count <= 150); Assert.IsNotNull(target.Population.BestChromosome); Assert.IsTrue(target.Population.BestChromosome.Fitness >= 0.9); Assert.IsTrue(target.Population.Generations.Count > 0); }); }
public void Start_Timeout_False() { var pipeline = "1"; var target = new SmartThreadPoolTaskExecutor(); target.Timeout = TimeSpan.FromMilliseconds(2); target.Add(() => { Thread.Sleep(10); pipeline += "2"; }); var actual = target.Start(); Assert.IsFalse(actual); }
public void Start_Timeout_False() { var pipeline = "1"; var target = new SmartThreadPoolTaskExecutor(); target.Timeout = TimeSpan.FromMilliseconds(2); target.Add(() => { Thread.Sleep(10); pipeline += "2"; }); var actual = target.Start(); Assert.IsFalse(actual); }
public void Start_ManyTasks_ParallelExecuted() { var pipeline = ""; var target = new SmartThreadPoolTaskExecutor (); target.Add (() => { pipeline += "1"; }); target.Add (() => { Thread.Sleep(10); pipeline += "2"; }); target.Add (() => { pipeline += "3"; }); target.Start (); Assert.AreEqual ("132", pipeline); }
public void Start_ManyTasks_ParallelExecuted() { var pipeline = ""; var target = new SmartThreadPoolTaskExecutor(); target.Add(() => { pipeline += "1"; }); target.Add(() => { Thread.Sleep(10); pipeline += "2"; }); target.Add(() => { pipeline += "3"; }); target.Start(); Assert.AreEqual("132", pipeline); }
protected void RunGeneticAlgorithm() { try { var referencePoint = new ReferencePoint(new GeoPoint3D(_view.StartLongitude, _view.StartLatitude), new Point3D(0, 0)); TrajectoryFitness.ReferencePoint = referencePoint; TrajectoryFitness.GeoEndPoint = new GeoPoint3D(_view.EndLongitude, _view.EndLatitude); TrajectoryFitness.OptimiseFuel = !_view.MinimiseNoise; TrajectoryFitness.TakeoffHeading = _view.TakeoffHeading; TrajectoryFitness.TakeoffSpeed = _view.TakeoffSpeed; TrajectoryFitness.trajectories = null; TrajectoryFitness.Best = int.MinValue; TrajectoryFitness.PopulationData = new PopulationData2("population.dat", referencePoint); var selection = new EliteSelection(); var crossover = new OrderedCrossover(); var mutation = new ReverseSequenceMutation(); var fitness = new TrajectoryFitness(); var chromosome = new TrajectoryChromosome(TrajectoryChromosome.ChromosomeLength(_view.NumberOfSegments), _view.NumberOfSegments); var population = new Population(_view.PopulationSize, _view.PopulationSize, chromosome); ga = new GeneticAlgorithm(population, fitness, selection, crossover, mutation); var executor = new SmartThreadPoolTaskExecutor(); executor.MinThreads = 1; executor.MaxThreads = 1; ga.TaskExecutor = executor; ga.Termination = new GenerationNumberTermination(_view.NumberOfGenerations); startTime = DateTime.Now; ga.TerminationReached += OptimisationCompleted; ga.GenerationRan += UpdatePercentage; ga.Start(); } catch (ThreadAbortException) { // ignore it } catch (Exception ex) { MessageBox.Show(ex.Message); } }
/// <summary> /// Initializes a new instance of the <see cref="GeneticSharp.Domain.GeneticAlgorithmCCE"/> class. /// </summary> /// <param name="species">The species for this CCE</param> public GeneticAlgorithmCCE(List <CCESpecies> species) { Species = species; TimeEvolving = TimeSpan.Zero; State = GeneticAlgorithmState.NotStarted; // TaskExecutorFitMaster = new SmartThreadPoolTaskExecutor () { // MinThreads = 4, // MaxThreads = 8 // }; TaskExecutorFitMaster = new LinearTaskExecutor(); TaskExecutorFit = new LinearTaskExecutor(); // TaskExecutorGen = new LinearTaskExecutor (); // TaskExecutorFit = new SmartThreadPoolTaskExecutor() // { // MinThreads = 5, // MaxThreads = 60 // }; TaskExecutorGen = new SmartThreadPoolTaskExecutor() { MinThreads = 4, MaxThreads = 8 }; }
public void Start() { _executor = new SmartThreadPoolTaskExecutor() { MinThreads = 1 }; _executor.MaxThreads = _config.MaxThreads > 0 ? _config.MaxThreads : 8; //create the population IList <IChromosome> list = new List <IChromosome>(); GeneFactory.Initialize(_config.Genes); for (int i = 0; i < _config.PopulationSize; i++) { list.Add(new Chromosome(true, GeneFactory.Config)); } int max = _config.PopulationSizeMaximum < _config.PopulationSize ? _config.PopulationSize * 2 : _config.PopulationSizeMaximum; _population = new PreloadPopulation(_config.PopulationSize, max, list); _population.GenerationStrategy = new PerformanceGenerationStrategy(); //create the GA itself var ga = new GeneticAlgorithm(_population, _fitness, new TournamentSelection(), _config.OnePointCrossover ? new OnePointCrossover() : new TwoPointCrossover(), new UniformMutation(true)); //subscribe to events ga.GenerationRan += GenerationRan; ga.TerminationReached += TerminationReached; ga.TaskExecutor = _executor; ga.Termination = new OrTermination(new FitnessStagnationTermination(_config.StagnationGenerations), new GenerationNumberTermination(_config.Generations)); ga.Reinsertion = new ElitistReinsertion(); ga.MutationProbability = _config.MutationProbability; ga.CrossoverProbability = _config.CrossoverProbability; //run the GA ga.Start(); }
public void Stop_Tasks_ShutdownCalled() { var pipeline = ""; var target = new SmartThreadPoolTaskExecutor(); target.Timeout = TimeSpan.FromMilliseconds(1000); target.Add(() => { Thread.Sleep(500); pipeline += "1"; }); target.Add(() => { Thread.Sleep(500); pipeline += "2"; }); target.Add(() => { Thread.Sleep(500); pipeline += "3"; }); Parallel.Invoke( () => target.Start(), () => { Thread.Sleep(100); target.Stop(); }); Assert.IsFalse(target.IsRunning); }