Exemplo n.º 1
0
        public async Task <GeneticEvolutionStates> EvolveUntil(
            IPopulation population,
            Func <GeneticEvolutionStates, bool> termination,
            CancellationToken token = default)
        {
            var statesHolder = new StatesHolder();

            await Evolve(population, termination, token, statesHolder);

            return(statesHolder.States);
        }
Exemplo n.º 2
0
        public async Task <(GeneticEvolutionStates, bool)> TryEvolveUntil(
            IPopulation population,
            Func <GeneticEvolutionStates, bool> termination,
            CancellationToken token)
        {
            var statesHolder = new StatesHolder();

            try
            {
                await Evolve(population, termination, token, statesHolder);
            }
            catch (OperationCanceledException)
            {
                return(statesHolder.States, false);
            }

            return(statesHolder.States, true);
        }
Exemplo n.º 3
0
        private async Task Evolve(
            IPopulation population,
            Func <GeneticEvolutionStates, bool> termination,
            CancellationToken token,
            StatesHolder statesHolder)
        {
            try
            {
                while (!termination.Invoke(statesHolder.States))
                {
                    var startTime = DateTime.Now;
                    var offspring = await _strategy.Operate(population.Chromosomes, population.Capacity, token);

                    statesHolder.EvolutionTime += DateTime.Now - startTime;
                    population.Chromosomes      = offspring;
                    statesHolder.EvolutionCount++;
                }
            }
            finally
            {
                _statesHolder.Extend(statesHolder.States);
            }
        }