Пример #1
0
    void Combinar()
    {
        List <Individal3> Survivers = Evolution();
        int count             = Survivers.Count;
        int missingPopulation = population.Count - count;

        for (int i = 0; i < missingPopulation; i++)
        {
            Individal3 Parent1 = Survivers[Random.Range(0, count)];
            Individal3 Parent2 = Survivers[Random.Range(0, count)];

            Individal3 ind = new Individal3();
            ind.AmplitudL = (Random.Range(0, 100) > 50) ? Parent1.AmplitudL : Parent2.AmplitudL;
            ind.AmplitudR = (Random.Range(0, 100) > 50) ? Parent1.AmplitudR : Parent2.AmplitudR;
            ind.FactorL   = (Random.Range(0, 100) > 50) ? Parent1.FactorL : Parent2.FactorL;
            ind.FactorR   = (Random.Range(0, 100) > 50) ? Parent1.FactorR : Parent2.FactorR;
            ind.OffsetXL  = (Random.Range(0, 100) > 50) ? Parent1.OffsetXL : Parent2.OffsetXL;
            ind.OffsetXR  = (Random.Range(0, 100) > 50) ? Parent1.OffsetXR : Parent2.OffsetXR;
            ind.OffsetYL  = (Random.Range(0, 100) > 50) ? Parent1.OffsetYL : Parent2.OffsetYL;
            ind.OffsetYR  = (Random.Range(0, 100) > 50) ? Parent1.OffsetYR : Parent2.OffsetYR;

            ind.AmplitudL = (Random.Range(0, 100) > MutationRate) ? ind.AmplitudL : Random.Range(-20, 20);
            ind.AmplitudR = (Random.Range(0, 100) > MutationRate) ? ind.AmplitudR : Random.Range(-20, 20);
            ind.OffsetXL  = (Random.Range(0, 100) > MutationRate) ? ind.OffsetXL : Random.Range(0, 1);
            ind.OffsetXR  = (Random.Range(0, 100) > MutationRate) ? ind.OffsetXR : Random.Range(0, 1);
            ind.OffsetYL  = (Random.Range(0, 100) > MutationRate) ? ind.OffsetYL : Random.Range(-30, 30);
            ind.OffsetYR  = (Random.Range(0, 100) > MutationRate) ? ind.OffsetYR : Random.Range(-30, 30);
            ind.FactorL   = (Random.Range(0, 100) > MutationRate) ? ind.FactorL : Random.Range(-10, 10);
            ind.FactorR   = (Random.Range(0, 100) > MutationRate) ? ind.FactorR : Random.Range(-10, 10);

            Survivers.Add(ind);
        }
        population = Survivers;
    }
Пример #2
0
 public void SetUp(Individal3 ind)
 {
     AmplitudL = ind.AmplitudL;
     AmplitudR = ind.AmplitudR;
     OffsetXR  = ind.OffsetXR;
     OffsetXL  = ind.OffsetXL;
     OffsetYR  = ind.OffsetYR;
     OffsetYL  = ind.OffsetYL;
     FactorL   = ind.FactorL;
     FactorR   = ind.FactorR;
 }
Пример #3
0
 void Score()
 {
     for (int i = 0; i < CandidateIndividuals; i++)
     {
         float puntuation = individuals[i].transform.position.x;
         puntuation = puntuation * ((individuals[i].transform.position.y > 10 || individuals[i].transform.position.y < -5) ? 0.1f : 1);
         Individal3 ind = population[i];
         ind.fitness   = puntuation;
         population[i] = ind;
         Destroy(individuals[i]);
     }
     individuals = new List <GameObject>();
 }
Пример #4
0
 void PopulationInitial()
 {
     for (int i = 0; i < CandidateIndividuals; i++)
     {
         Individal3 ind = new Individal3();
         ind.AmplitudL = Random.Range(-20, 20);
         ind.AmplitudR = Random.Range(-20, 20);
         ind.OffsetXL  = Random.Range(0, 1);
         ind.OffsetXR  = Random.Range(0, 1);
         ind.OffsetYL  = Random.Range(-30, 30);
         ind.OffsetYR  = Random.Range(-30, 30);
         ind.FactorL   = Random.Range(-10, 10);
         ind.FactorR   = Random.Range(-10, 10);
         population.Add(ind);
     }
 }
Пример #5
0
    void Organizer()
    {
        //
        bool sw = false; // WRONG

        while (!sw)
        {
            sw = true;
            for (int i = 1; i < population.Count; i++)
            {
                if (population[i].fitness > population[i - 1].fitness)
                {
                    Individal3 ind = population[i];
                    population[i]     = population[i - 1];
                    population[i - 1] = ind;
                    sw = false;
                }
            }
        }
    }