void Start() { _voronoiGen = _levelGenerator.GetComponent <VoronoiGenerator>(); _voronoiGen.Generate(); _voronoiGen.ScaleAllPolies(Scale); OnGenerationComplete?.Invoke(); }
void RoomLogic() { Time.timeScale = 1; SelectRooms(); foreach (Room room in m_rooms) { room.RemoveCollider(); } m_isGenerationComplete = true; if (OnGenerationComplete != null) { OnGenerationComplete.Invoke(); } }
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(); } }
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)); }
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()); }