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();
            });
        }
Example #4
0
        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();
                });
        }
Example #6
0
        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();
            });
        }
Example #7
0
        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);
        }
Example #11
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_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);
            }
        }
Example #15
0
        /// <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
            };
        }
Example #16
0
        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);
        }