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)); } }
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)); }
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)); } }
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); }