Пример #1
0
    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());
    }