/// <summary> /// Sets a predefined chromosome for the AIPlayer /// </summary> /// <param name="chromosome"></param> public AIPlayer(Chromosome chromosome, AIPlayer parent1, AIPlayer parent2, NNMaker neuralNetworkMaker) { Parent1 = parent1; Parent2 = parent2; neuralNetwork = neuralNetworkMaker.MakeNeuralNetwork(chromosome); Chromosome = chromosome; fitness = -1; }
public Simulation(AITrainableGame game, int populationSize = 100, double crossOverBredAmount = 0.5, double mutateAfterCrossoverAmount = 0.1, double mutationRate = 0.05, int allowSinglePointCrossover = 1, int allowTwoPointCrossover = 1, int allowUniformCrossover = 1, int offspringSelectionPolicy = 0, double initialMutation = 0.0, double initialSimilarity = 0.0, int mainDiversityMeasure = 0) { PopulationSize = populationSize; CrossoverBredAmount = crossOverBredAmount; MutateAfterCrossoverAmount = mutateAfterCrossoverAmount; MutationRate = mutationRate; AllowSinglePointCrossover = allowSinglePointCrossover == 1 ? true : false; AllowTwoPointCrossover = allowTwoPointCrossover == 1 ? true : false; AllowUniformCrossover = allowUniformCrossover == 1 ? true : false; ReplacementRule = offspringSelectionPolicy; InitialMutation = initialMutation; InitialSimilarity = initialSimilarity; DiversityMeasure = mainDiversityMeasure; allowedCrossoverMethods = new List <CrossoverMethod>(); if (AllowSinglePointCrossover) { allowedCrossoverMethods.Add(new SinglePointCrossover()); } if (AllowTwoPointCrossover) { allowedCrossoverMethods.Add(new TwoPointCrossover()); } if (AllowUniformCrossover) { allowedCrossoverMethods.Add(new UniformCrossover()); } switch (ReplacementRule) { case 0: offspringMerger = new NaiveReplacementRule(); break; case 1: offspringMerger = new AncestorElitismNoExtinctionReplacementRule(); break; case 2: offspringMerger = new AncestorElitismReplacementRule(); break; case 3: offspringMerger = new SingleParentElitismReplacementRule(); break; case 4: offspringMerger = new ExploreExploitT30ReplacementRule(); break; case 5: offspringMerger = new ExploreExploitT20ReplacementRule(); break; case 6: offspringMerger = new ExploreExploitT40ReplacementRule(); break; case 7: offspringMerger = new ExploreExploitB30ReplacementRule(); break; default: throw new Exception("Wrong offspring merge type: " + ReplacementRule); } diversityMeasure = diversityMeasures[0]; Game = game; NeuralNetworkMaker = new SimpleNNMaker(game); }
/// <summary> /// Sets a predefined chromosome for the AIPlayer /// </summary> /// <param name="chromosome"></param> public AIPlayer(Chromosome chromosome, NNMaker neuralNetworkMaker) { neuralNetwork = neuralNetworkMaker.MakeNeuralNetwork(chromosome); Chromosome = chromosome; fitness = -1; }
/// <summary> /// Makes a new individual with a random chromosome /// </summary> /// <param name="random">true if chromosome string should be random, false if no chromosome string should be made</param> public AIPlayer(NNMaker neuralNetworkMaker) { Chromosome = new Chromosome(neuralNetworkMaker.ChromosomeLength()); neuralNetwork = neuralNetworkMaker.MakeNeuralNetwork(Chromosome); fitness = -1; }