Example #1
0
 public Neat()
 {
     Neural       = new NeuralParameters();
     Mutation     = new MutationParameters();
     Speciation   = new SpeciationParameters();
     Reproduction = new ReproductionParameters();
     Structure    = new StructureParameters();
 }
Example #2
0
        public XorNetworkSearch(
            PopulationParameters populationParameters,
            NetworkParameters networkParameters,
            ReproductionParameters reproductionParameters)
        {
            _populationParameters = populationParameters;
            _neatPopulation       = new Population(networkParameters, reproductionParameters);
            _genomes = Enumerable.Range(0, _populationParameters.PopulationSize)
                       .AsParallel()
                       .Select(_ => _neatPopulation.CreateInitialGenome()).
                       ToList(_populationParameters.PopulationSize);

            _archiveSize = _populationParameters.PopulationSize / 30;
            _archive     = new List <ParetoFrontPoint>(_archiveSize);
            _isRecurrent = networkParameters.IsRecurrent;
        }
Example #3
0
        public void NetworkReset()
        {
            var initialParameters = new NetworkParameters(10, 5, NetworkType.FeedForward)
            {
                InitialConnectionDensity = 1f
            };

            var reproductionParameters = new ReproductionParameters()
            {
                WeightMutations = new WeightMutations
                {
                    OverallRouletteWheelShare = 0
                },
                AddConnectionRouletteWheelShare    = 2f,
                RemoveConnectionRouletteWheelShare = 1f,
                SplitConnectionRouletteWheelShare  = 1f
            };

            var neatPopulation = new Population(initialParameters, reproductionParameters);

            var genomes = Enumerable.Range(0, 100).Select(_ => neatPopulation.CreateInitialGenome()).ToArray();

            for (var i = 0; i < 500; i++)
            {
                var sensorValues = Enumerable.Range(0, initialParameters.SensorCount)
                                   .Select(_ => (float)new Random().NextDouble()).ToArray();

                foreach (var genome in genomes)
                {
                    var network = genome.Network;

                    for (var j = 0; j < initialParameters.SensorCount; j++)
                    {
                        network.Sensors[j] = sensorValues[j];
                    }
                    network.Activate();
                    var effectors = network.Effectors.ToArray();

                    network.Activate();

                    Assert.Equal(effectors, network.Effectors);
                }

                genomes = genomes.Select(g => neatPopulation.Replicator.Reproduce(g)).ToArray();
            }
        }
Example #4
0
        public void AsexualReproduction()
        {
            var initialParameters = new NetworkParameters(2, 3, NetworkType.FeedForward)
            {
                InitialConnectionDensity = 0.5f
            };

            var reproductionParameters = new ReproductionParameters()
            {
                WeightMutations = new WeightMutations
                {
                    OverallRouletteWheelShare = 50
                },
                AddConnectionRouletteWheelShare    = 5f,
                RemoveConnectionRouletteWheelShare = 5f,
                SplitConnectionRouletteWheelShare  = 5f
            };

            var neatPopulation = new Population(initialParameters, reproductionParameters);
            var sensorValues   = Enumerable.Range(0, initialParameters.SensorCount)
                                 .Select(_ => (float)new Random().NextDouble()).ToArray();

            var genome  = neatPopulation.CreateInitialGenome();
            var network = genome.Network;

            for (var i = 0; i < initialParameters.SensorCount; i++)
            {
                network.Sensors[i] = sensorValues[i];
            }
            network.Activate();

            for (var i = 0; i < 50000; i++)
            {
                genome = neatPopulation.Replicator.Reproduce(genome);
                var newNetwork = genome.Network;
                for (var s = 0; s < initialParameters.SensorCount; s++)
                {
                    newNetwork.Sensors[s] = sensorValues[s];
                }
                newNetwork.Activate();
            }
        }
Example #5
0
            public SplitConnectionWeightsSearch(
                PopulationParameters populationParameters,
                NetworkParameters networkParameters,
                ReproductionParameters reproductionParameters)
            {
                _populationParameters = populationParameters;
                _neatPopulation       = new Population(networkParameters, reproductionParameters, false);
                _genomes = Range(0, _populationParameters.PopulationSize)
                           .Select(_ => _neatPopulation.CreateInitialGenome());

                _archiveSize = _populationParameters.PopulationSize / 2;
                _archive     = new List <ParetoFrontPoint>(_archiveSize);

                WeightSamples = Range(0, 300)
                                .Select(_ => RandomSource.Range(0, MaxAbsWeightValue))
                                .ToArray();

                InputSamples = Range(0, 60)
                               .Select(_ => RandomSource.Range(0, 1))
                               .ToArray();
            }