Пример #1
0
        public IEnumerable <Strategy> GetOutbreed(List <Strategy> strategies)
        {
            var outbreedCount = (int)(strategies.Count * geneticConfig.OutbreedRatio * geneticConfig.CrossoverProb);
            var random        = new Random(Guid.NewGuid().GetHashCode());

            for (var i = 0; i < outbreedCount; i++)
            {
                var strategy1 = strategies[random.Next(strategies.Count)];
                var strategy2 = strategy1.FindMostUnlikely(strategies);
                yield return(StrategyCrossoverMethods.Crossover(strategy1, strategy2, geneticConfig.MaxStrategySize));
            }
        }
Пример #2
0
        public void CrossoverSpecies_should_return_valid_strategy()
        {
            var algo1 = new Strategy(Enumerable.
                                     Range(0, config.MaxStrategySize)
                                     .Select(i => "Forward").ToList());
            var algo2 = new Strategy(Enumerable.
                                     Range(0, config.MaxStrategySize)
                                     .Select(i => "Shoot").ToList());
            var result = StrategyCrossoverMethods.Crossover(algo1, algo2, config.MaxStrategySize);

            Assert.IsTrue(StrategiesGenerator.CheckProgram(result.commands));
        }
Пример #3
0
        public IEnumerable <Strategy> GetPanmixia(List <Strategy> strategies)
        {
            var panmixiaCount = (int)(strategies.Count * geneticConfig.PanmixiaRatio * geneticConfig.CrossoverProb);
            var random        = new Random(Guid.NewGuid().GetHashCode());

            for (var i = 0; i < panmixiaCount; i++)
            {
                var strategy1 = strategies[random.Next(strategies.Count)];
                var strategy2 = strategies[random.Next(strategies.Count)];
                yield return(StrategyCrossoverMethods.Crossover(strategy1, strategy2, geneticConfig.MaxStrategySize));
            }
        }
Пример #4
0
        public void CrossoverSpecies_should_not_overtop_maxAlgorithms_size()
        {
            var algo1 = new Strategy(Enumerable.
                                     Range(0, config.MaxStrategySize)
                                     .Select(i => "Forward").ToList());
            var algo2 = new Strategy(Enumerable.
                                     Range(0, config.MaxStrategySize)
                                     .Select(i => "Shoot").ToList());
            var result = StrategyCrossoverMethods.Crossover(algo1, algo2, config.MaxStrategySize);

            Assert.IsTrue(result.commands.Count < config.MaxStrategySize);
        }