public IEnumerator RunGeneration() { for (int i = 0; i < population.Length; i++) { ParameterFitness pf = new ParameterFitness(); if (fitnesses.ContainsKey(population[i])) { pf = fitnesses[population[i]]; if (i > 1 || (2 * pf.GetVariance() / Math.Sqrt(pf.n) < 0.1 * pf.average && r.Next(pf.n + 1) != 0)) { continue; } } SimulationInitializer.SetSimulation(population[i], RUNNING_SPEED); simulationTimer.Restart(); while (simulationTimer.Elapsed.TotalSeconds < singleSimulationTime) { yield return(new WaitForSeconds(1)); _current_simulation_timer = (int)simulationTimer.Elapsed.TotalSeconds; } double fitness = GetFitness(); UpdateFitnesses(population[i], fitness); if (_current_best_fitness < fitness) { _current_best_fitness = fitness; _current_best_fitness_variance = fitnesses[population[i]].GetVariance(); } text.text = "i=" + i + " gen: " + _generation + " timer:" + _current_simulation_timer + " fitness = " + fitness + "avg:" + pf.average + " var=" + pf.GetVariance() + " n:" + pf.n + " Z:" + (2 * pf.GetVariance() / Math.Sqrt(pf.n)) + "<" + (0.1 * pf.average) + " best:" + _current_best_fitness + " bestVar:" + _current_best_fitness_variance; Save(); } CreateNewGeneration(); completed = true; }
private void ExtractParameters(InitializationParameters parameters) { storage = parameters.CostStorage; var com = parameters.ComCostFactory.GetCalculator(storage, parameters.CellsPerSectionSingleDim, parameters.ParticleReductionFactor); fieldCalculator = new FieldCalculator(com, new ConstSolveCostCalculator(storage)); simulationInitializer = new SimulationInitializer(new Random(0), parameters.CoreFactory, parameters.SectionFactory); var sortingCostCalculator = new SortingCostCalculator(parameters.ParticleReductionFactor, storage); sorter = parameters.SorterFactory.GetSorter(sortingCostCalculator); mover = parameters.ParticleMoverFactory.GetIParticleMover(new MovementCostCalculator(storage, parameters.ParticleReductionFactor)); stepSize = parameters.TimeStep; steps = parameters.TotalSteps; structure = simulationInitializer.InitializeSimulation(mover, parameters); var visualizationBuilder = new VisualizationBuilder(parameters.VisualizationParameters); stepVisualizer = visualizationBuilder.GetStepVisualizer(storage); finalVisualizer = visualizationBuilder.GetFinalVisualizer(storage); }
public void Start() { SimulationInitializer.SetSimulation(new Parameters(), SimulationParameters.game_speed); SerializationManager.InstantiateSaveObject(SerializationManager.Load()); }