Пример #1
0
 void Start()
 {
     _voronoiGen = _levelGenerator.GetComponent <VoronoiGenerator>();
     _voronoiGen.Generate();
     _voronoiGen.ScaleAllPolies(Scale);
     OnGenerationComplete?.Invoke();
 }
Пример #2
0
    void RoomLogic()
    {
        Time.timeScale = 1;
        SelectRooms();

        foreach (Room room in m_rooms)
        {
            room.RemoveCollider();
        }

        m_isGenerationComplete = true;

        if (OnGenerationComplete != null)
        {
            OnGenerationComplete.Invoke();
        }
    }
Пример #3
0
 void Start()
 {
     chunks = new Dictionary <WorldPosition, Chunk>();
     //chunks = new List<Chunk>();
     for (int x = 0; x < 10; x++)
     {
         for (int y = 0; y < 1; y++)
         {
             for (int z = 0; z < 10; z++)
             {
                 CreateChunk(x * 16, y * 16, z * 16);
             }
         }
     }
     if (OnGenerationComplete != null)
     {
         OnGenerationComplete.Invoke();
     }
 }
Пример #4
0
        public void Run(int evaluations, double C_t, double N_max, double V_f, double D_max)
        {
            var               scaleVector       = CalculateScaleVector(C_t, UB_vector, LB_vector);
            InducedMotion     inducedMotion     = new InducedMotion(KrillPopulation, FitnessFunction, evaluations, N_max);
            ForagingMotion    foragingMotion    = new ForagingMotion(KrillPopulation, FitnessFunction, evaluations, V_f);
            VirtualFood       virtualFood       = new VirtualFood(KrillPopulation, FitnessFunction, UB_vector, LB_vector);
            PhysicalDiffusion physicalDiffusion = new PhysicalDiffusion(D_max, evaluations, scaleVector.Count);

            // We evaluate each krill in the population
            KrillPopulation.EvaluatePopulation(FitnessFunction);

            for (int i = 1; i <= evaluations; i++)
            {
                var vf_position = virtualFood.CreateVirtualFood();

                foreach (var krill in KrillPopulation.Population)
                {
                    Vector <double> N_i = inducedMotion.GetInducedMotion(krill, i);
                    Vector <double> F_i = foragingMotion.GetForagingMotion(krill, i, vf_position);
                    Vector <double> D_i = physicalDiffusion.GetPhysicalDiffusion(i);

                    Vector <double> X_i = (F_i + N_i).Add(D_i); // EQUATION 1
                    X_i = X_i.PointwiseMultiply(scaleVector);
                    var newPosition = krill.Coordinates + X_i;

                    var bestKrillPosition = KrillPopulation.GetBestKrill().Coordinates;
                    krill.Coordinates = MathHelpers.FindLimits(newPosition, bestKrillPosition, LB_vector, UB_vector);
                }

                // We evaluate each krill in the population
                KrillPopulation.EvaluatePopulation(FitnessFunction);

                OnGenerationComplete.Invoke(KrillPopulation, new RunEventArgs(i));
            }

            OnRunComplete.Invoke(KrillPopulation, new RunEventArgs(evaluations));
        }
Пример #5
0
        public void Run(int maxEvaluations, double CR, double F)
        {
            Population.Evaluate(Parameters.FitnessFunction);

            while (maxEvaluations > 0)
            {
                List <Individual> newGeneration = new List <Individual>();

                foreach (var orginal in Population.Solutions)
                {
                    // generate unique random numbers
                    List <int> randomValues = RandomGenerator.GenerateRandom(3, 0, Population.Solutions.Count);
                    int        a            = randomValues[0];
                    int        b            = randomValues[1];
                    int        c            = randomValues[2];

                    // choose random individuals (agents) from population
                    Individual individual1 = Population.Solutions[a];
                    Individual individual2 = Population.Solutions[b];
                    Individual individual3 = Population.Solutions[c];

                    int        i         = 0;
                    int        R         = RandomGenerator.Instance.Random.Next(Population.Solutions.Count);
                    Individual candidate = new Individual();
                    foreach (var orginalElement in orginal.Elements)
                    {
                        double ri = RandomGenerator.Instance.Random.NextDouble();
                        if (ri < CR || i == R)
                        {
                            // simple mutation
                            double newElement = individual1.Elements[i] + F * (individual2.Elements[i] - individual3.Elements[i]);

                            if (CheckIfWithinDomain(newElement, Parameters))
                            {
                                candidate.Elements.Add(newElement);
                            }
                            else
                            {
                                candidate.Elements.Add(orginalElement);
                            }
                        }
                        else
                        {
                            candidate.Elements.Add(orginalElement);
                        }

                        i++;
                    }

                    if (candidate.Evaluate(Parameters.FitnessFunction) < orginal.Evaluate(Parameters.FitnessFunction))
                    {
                        newGeneration.Add(candidate);
                    }
                    else
                    {
                        newGeneration.Add(orginal);
                    }
                }

                // switch populations
                Population.Solutions = newGeneration;
                maxEvaluations--;

                OnGenerationComplete.Invoke(Population, new EventArgs());
            }

            OnRunComplete.Invoke(Population, new EventArgs());
        }