public TicTacToeGenetic(FeedforwardNetwork network,
                                bool reset, int populationSize,
                                double mutationPercent, double percentToMate,
                                Type opponent)
        {
            this.setOpponent(opponent);
            this.MutationPercent  = mutationPercent;
            this.MatingPopulation = percentToMate * 2;
            this.PopulationSize   = populationSize;
            this.PercentToMate    = percentToMate;

            this.Chromosomes = new TicTacToeChromosome[this.PopulationSize];
            for (int i = 0; i < this.Chromosomes.Length; i++)
            {
                FeedforwardNetwork chromosomeNetwork = (FeedforwardNetwork)network
                                                       .Clone();
                if (reset)
                {
                    chromosomeNetwork.Reset();
                }

                TicTacToeChromosome c = new TicTacToeChromosome(this,
                                                                chromosomeNetwork);
                c.UpdateGenes();
                SetChromosome(i, c);
            }
            SortChromosomes();
        }
        /// <summary>
        /// Construct a genetic algorithm for a neural network that uses training sets.
        /// </summary>
        /// <param name="network">The neural network.</param>
        /// <param name="reset">Should each neural network be reset to random values.</param>
        /// <param name="input">The input training set.</param>
        /// <param name="ideal">The ideal values for the input training set.</param>
        /// <param name="populationSize">The initial population size.</param>
        /// <param name="mutationPercent">The mutation percentage.</param>
        /// <param name="percentToMate">The percentage of the population allowed to mate.</param>
        public TrainingSetNeuralGeneticAlgorithm(FeedforwardNetwork network,
                 bool reset, double[][] input,
                 double[][] ideal, int populationSize,
                 double mutationPercent, double percentToMate)
        {

            this.MutationPercent = mutationPercent;
            this.MatingPopulation = percentToMate * 2;
            this.PopulationSize = populationSize;
            this.PercentToMate = percentToMate;

            this.input = input;
            this.ideal = ideal;

            this.Chromosomes = new TrainingSetNeuralChromosome[this.PopulationSize];
            for (int i = 0; i < this.Chromosomes.Length; i++)
            {
                FeedforwardNetwork chromosomeNetwork = (FeedforwardNetwork)network
                       .Clone();
                if (reset)
                {
                    chromosomeNetwork.Reset();
                }

                TrainingSetNeuralChromosome c = new TrainingSetNeuralChromosome(
                       this, chromosomeNetwork);
                c.UpdateGenes();
                SetChromosome(i, c);
            }
            SortChromosomes();
        }
        /// <summary>
        /// Construct a genetic algorithm for a neural network that uses training sets.
        /// </summary>
        /// <param name="network">The neural network.</param>
        /// <param name="reset">Should each neural network be reset to random values.</param>
        /// <param name="input">The input training set.</param>
        /// <param name="ideal">The ideal values for the input training set.</param>
        /// <param name="populationSize">The initial population size.</param>
        /// <param name="mutationPercent">The mutation percentage.</param>
        /// <param name="percentToMate">The percentage of the population allowed to mate.</param>
        public TrainingSetNeuralGeneticAlgorithm(FeedforwardNetwork network,
                                                 bool reset, double[][] input,
                                                 double[][] ideal, int populationSize,
                                                 double mutationPercent, double percentToMate)
        {
            this.MutationPercent  = mutationPercent;
            this.MatingPopulation = percentToMate * 2;
            this.PopulationSize   = populationSize;
            this.PercentToMate    = percentToMate;

            this.input = input;
            this.ideal = ideal;

            this.Chromosomes = new TrainingSetNeuralChromosome[this.PopulationSize];
            for (int i = 0; i < this.Chromosomes.Length; i++)
            {
                FeedforwardNetwork chromosomeNetwork = (FeedforwardNetwork)network
                                                       .Clone();
                if (reset)
                {
                    chromosomeNetwork.Reset();
                }

                TrainingSetNeuralChromosome c = new TrainingSetNeuralChromosome(
                    this, chromosomeNetwork);
                c.UpdateGenes();
                SetChromosome(i, c);
            }
            SortChromosomes();
        }
        public TrainingSetNeuralGeneticAlgorithm(FeedforwardNetwork network, bool reset, double[][] input, double[][] ideal,
                                                 int populationSize, double mutationPercent, double allowedPercentageToMate)
        {
            MutationPercent  = mutationPercent;
            MatingPopulation = allowedPercentageToMate * 2;
            PopulationSize   = populationSize;
            PercentToMate    = allowedPercentageToMate;

            Input = input;
            Ideal = ideal;

            Chromosomes = new TrainingSetNeuralChromosome[PopulationSize];
            for (var i = 0; i < Chromosomes.Length; i++)
            {
                var chromosomeNetwork = (FeedforwardNetwork)network.Clone();
                if (reset)
                {
                    chromosomeNetwork.Reset();
                }

                var c = new TrainingSetNeuralChromosome(this, chromosomeNetwork);
                c.UpdateGenes();
                SetChromosome(i, c);
            }
            SortChromosomes();
        }
Esempio n. 5
0
        public TicTacToeGenetic(FeedforwardNetwork network,
                                bool reset, int populationSize,
                                double mutationPercent, double percentToMate,
                                Type opponent)
        {
            this.setOpponent(opponent);
            this.MutationPercent  = mutationPercent;
            this.MatingPopulation = percentToMate * 2;
            this.PopulationSize   = populationSize;
            this.PercentToMate    = percentToMate;

            this.Chromosomes = new TicTacToeChromosome[this.PopulationSize];
            var rangePartitioner = Partitioner.Create(0, this.Chromosomes.Length);

            //Parallel.ForEach(rangePartitioner, (range, loopState) =>
            {
                for (int i = 0; i < Chromosomes.Length; i++)
                {
                    Console.WriteLine("step: " + i);
                    FeedforwardNetwork chromosomeNetwork = (FeedforwardNetwork)network
                                                           .Clone();
                    if (reset)
                    {
                        chromosomeNetwork.Reset();
                    }

                    TicTacToeChromosome c = new TicTacToeChromosome(this,
                                                                    chromosomeNetwork);
                    c.UpdateGenes();
                    lock (_locker)
                    {
                        SetChromosome(i, c);
                    }
                }
            };
            Console.WriteLine("PreEpoch # Error:" + getScore());
            SortChromosomes();
        }
        public TrainingSetNeuralGeneticAlgorithm(FeedforwardNetwork network, bool reset, double[][] input, double[][] ideal, 
			int populationSize, double mutationPercent, double allowedPercentageToMate)
        {
			MutationPercent = mutationPercent;
            MatingPopulation = allowedPercentageToMate * 2;
            PopulationSize = populationSize;
            PercentToMate = allowedPercentageToMate;

            Input = input;
            Ideal = ideal;

            Chromosomes = new TrainingSetNeuralChromosome[PopulationSize];
            for (var i = 0; i < Chromosomes.Length; i++)
            {
                var chromosomeNetwork = (FeedforwardNetwork)network.Clone();
                if (reset)
                    chromosomeNetwork.Reset();

                var c = new TrainingSetNeuralChromosome(this, chromosomeNetwork);
                c.UpdateGenes();
                SetChromosome(i, c);
            }
            SortChromosomes();
        }