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(); }
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); }