예제 #1
0
 /// <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;
 }
예제 #2
0
        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);
        }
예제 #3
0
 /// <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;
 }
예제 #4
0
 /// <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;
 }