示例#1
0
        public async Task Can_Evolve_Until_Termination_Condition_Fulfilled_Or_Canceled_Without_Throwing()
        {
            const int delay      = 100;
            var       strategy   = MockObject.CreateOperationStrategy();
            var       population = MockObject.CreatePopulation();

            population.Chromosomes = MockObject.CreateChromosomes(10).ToImmutableHashSet();
            IGeneticAlgorithm genetic = new GeneticAlgorithm(strategy);

            using (var cts = new CancellationTokenSource())
            {
                var preEvolutionStates = genetic.EvolutionStates;
                var evolution          = genetic.TryEvolveUntil(population, _ => false, cts.Token);
                await Task.Delay(delay);

                cts.Cancel();
                var(result, succeed) = await evolution;
                Assert.False(succeed);
                var afterEvolutionStates = genetic.EvolutionStates;
                Assert.True(afterEvolutionStates.EvolutionCount > preEvolutionStates.EvolutionCount);
                Assert.True(afterEvolutionStates.EvolutionTime > preEvolutionStates.EvolutionTime);
                var differentTime = afterEvolutionStates.EvolutionTime - preEvolutionStates.EvolutionTime;
                Assert.True(differentTime >= MockObject.CreateProximateAccuracyTimeSpan(delay));
                Assert.Equal(afterEvolutionStates.EvolutionCount - preEvolutionStates.EvolutionCount,
                             result.EvolutionCount);
                Assert.Equal(afterEvolutionStates.EvolutionTime - preEvolutionStates.EvolutionTime,
                             result.EvolutionTime);
            }

            using (var cts = new CancellationTokenSource())
            {
                const int time      = 50;
                var       evolution = genetic.TryEvolveUntil(
                    population,
                    s => s.EvolutionTime >= TimeSpan.FromMilliseconds(time),
                    cts.Token);
                await Task.Delay(delay);

                var(result, succeed) = await evolution;
                Assert.True(succeed);
                Assert.True(result.EvolutionTime >= MockObject.CreateProximateAccuracyTimeSpan(time));
            }
        }
示例#2
0
        public async Task Can_Evolve_Until_Cancelled_Whithout_Throwing()
        {
            const int time       = 100;
            var       population = MockObject.CreatePopulation();

            population.Chromosomes = MockObject.CreateChromosomes(10).ToImmutableHashSet();
            IGeneticAlgorithm genetic = new Core.GeneticAlgorithm(MockObject.CreateOperationStrategy());

            using (var cts = new CancellationTokenSource())
            {
                var evolution = genetic.TryEvolve(population, cts.Token);
                await Task.Delay(time);

                cts.Cancel();
                var result = await evolution;
                Assert.True(result.EvolutionTime >= MockObject.CreateProximateAccuracyTimeSpan(time));
                Assert.True(cts.IsCancellationRequested);
            }
        }