public void Start()
        {
            _trackIndex = 0;
            _tracks     = GameObject.FindGameObjectsWithTag(Tags.Track).ToList();

            foreach (var track in _tracks.Skip(1))
            {
                track.SetActive(false);
            }

            var geneticAlgorithmParameters = (GeneticAlgorithmParameters)Scenes.Data[DataTags.GeneticAlgorithmParameters];
            var fitnessAccumulatorFactory  = (IFitnessAccumulatorFactory)Scenes.Data[DataTags.FitnessAccumulatorFactory];

            _fitnessAccumulatorFactory = fitnessAccumulatorFactory;
            _geneticAlgorithm          = new GeneticAlgorithm(geneticAlgorithmParameters);
            _geneticAlgorithm.Initialize();

            _agents = Enumerable
                      .Range(0, _geneticAlgorithm.AlgorithmParameters.PopulationCount)
                      .Select(i => new Agent())
                      .ToList();

            ResetAgents();

            Time.timeScale = GeneticAlgorithmSimulationTimeScale;
            TimeScaleIndicatorText.text = $"Time scale: {Time.timeScale.ToString()}x";

            SetTimestampToNow();
        }
예제 #2
0
        public void ButtonStartOnClick()
        {
            if (!IsFormValid())
            {
                ValidationMessage.enabled = true;
                SetTimestampToNow();
                return;
            }

            var geneticAlgorithmParameters = new GeneticAlgorithmParameters()
            {
                PopulationCount    = 2 * int.Parse(PopulationPairCount.text),
                MaxGenerationCount = int.Parse(MaxGenerationCount.text),
                NeuralNetworkWeightInitializationDistribution = new Normal(0f, double.Parse(WeightInitStdDev.text)),

                MinSensorCount            = int.Parse(MinSensorCount.text),
                MaxSensorCount            = int.Parse(MaxSensorCount.text),
                MinHiddenLayerNeuronCount = int.Parse(MinHiddenLayerNeuronCount.text),
                MaxHiddenLayerNeuronCount = int.Parse(MaxHiddenLayerNeuronCount.text),
                EvolveNetworkTopology     = EvolveNetworkTopology.isOn,

                NeuralNetworkHiddenLayerActivationFunction = GetHiddenLayerActivationFunction(),
                NeuralNetworkOutputLayerActivationFunction = x => (float)Math.Tanh(x),

                SelectionStrategy = GetSelectionStrategy(),
                CrossoverStrategy = GetCrossoverStrategy()
            };

            geneticAlgorithmParameters.MutationStrategy = GetMutationStrategy(geneticAlgorithmParameters);
            IFitnessAccumulatorFactory fitnessAccumulatorFactory = GetFitnessAccumulatorFactory();

            Scenes.Data.Add(DataTags.GeneticAlgorithmParameters, geneticAlgorithmParameters);
            Scenes.Data.Add(DataTags.FitnessAccumulatorFactory, fitnessAccumulatorFactory);
            Scenes.Load(SceneId.MainScene);
        }