void Update()
    {
        if (!simulating)
        {
            return;
        }

        // Update cars...
        bool everyoneDone = true;

        for (int i = 0; i < cars.Length; i++)
        {
            everyoneDone = everyoneDone && cars[i].IsDone();
            if (!everyoneDone)
            {
                break;
            }
        }

        if (everyoneDone)
        {
            simulating = false;
            for (int i = 0; i < population.Size; i++)
            {
                PhenomeDescription pd = population[i];
                pd.Fitness = CalculateFitness(cars[i]);
            }

            CalculateMinMaxTotal(population);
            Debug.Log(population.MaxFitness + " " + population.MinFitness + " " + population.TotalFitness);
            doneCallback();
        }
    }
Esempio n. 2
0
    public override void FitnessFunction(Population population, GeneticAlgorithm.NextStepDelegate callback)
    {
        for (int i = 0; i < population.Size; i++)
        {
            PhenomeDescription pd = population[i];
            pd.Fitness = CalculateFitness(pd.Genome as BaseGenomeBinary);
        }

        CalculateMinMaxTotal(population);
        callback();
    }
Esempio n. 3
0
    public virtual void FitnessFunctionSimple(Population population, GeneticAlgorithm.NextStepDelegate callback)
    {
        for (int i = 0; i < population.Size; i++)
        {
            PhenomeDescription pd = population[i];
            pd.Fitness = CalculateFitness(pd.Genome);
        }

        CalculateMinMaxTotal(population);
        callback();
    }
Esempio n. 4
0
    // TODO: One calculate function with bitmask.
    public void CalculateMinMax(Population population)
    {
        float minFitness = Mathf.Infinity;
        float maxFitness = -Mathf.Infinity;

        for (int i = 0; i < population.Size; i++)
        {
            PhenomeDescription pd = population[i];
            maxFitness = Mathf.Max(maxFitness, pd.Fitness);
            minFitness = Mathf.Min(minFitness, pd.Fitness);
        }

        population.MinFitness = minFitness;
        population.MaxFitness = maxFitness;
    }
Esempio n. 5
0
    public override void FitnessFunction(Population population, GeneticAlgorithm.NextStepDelegate callback)
    {
        this.population = population;

        for (int i = 0; i < population.Size; i++)
        {
            PhenomeDescription pd = population[i];
            phenomeBuffer[i].Init(pd.Genome);
        }

        InitiateNewSimulation();

        simulating   = true;
        doneCallback = callback;
    }
 void InitiateNewSimulation()
 {
     if (cars != null)
     {
         for (int i = 0; i < cars.Length; i++)
         {
             Destroy(cars[i].gameObject);
         }
     }
     cars = new Car[population.Size];
     for (int i = 0; i < population.Size; i++)
     {
         PhenomeDescription pd = population[i];
         cars[i] = Helper.Instansiate <Car>(CarPrefab);
         cars[i].Init(pd.Genome as GenomeFloatString);
     }
 }
Esempio n. 7
0
    public void CalculateMinMaxTotal(Population population)
    {
        float minFitness = Mathf.Infinity;
        float maxFitness = -Mathf.Infinity;
        float total      = 0;

        for (int i = 0; i < population.Size; i++)
        {
            PhenomeDescription pd = population[i];
            float f = pd.Fitness;
            maxFitness = Mathf.Max(maxFitness, f);
            minFitness = Mathf.Min(minFitness, f);
            total     += f;
        }

        population.MinFitness   = minFitness;
        population.MaxFitness   = maxFitness;
        population.TotalFitness = total;
    }
Esempio n. 8
0
    // Adaptive GAs
    // In CAGA (clustering-based adaptive genetic algorithm)
    void Start()
    {
        settings       = GetComponent <GASettings>();
        populationSize = settings.PopulationSize;
        nrGenerations  = settings.NumberOfGenerations;
        blocking       = settings.RunAsFastAsPossible;

        environment.Settings       = settings;
        selectionStrategy.Settings = settings;
        matingStrategy.Settings    = settings;
        mutationStrategy.Settings  = settings;

        population      = new Population(populationSize);
        selectionBuffer = new SelectionBuffer(populationSize);

        statistics = GetComponent <Statistics>();
        if (statistics == null)
        {
            statistics = gameObject.AddComponent <Statistics>();
        }

        statistics.Population = population;

        BasePhenome phenomeTemplate = Helper.InstansiateAndGet <BasePhenome>(phenomePrefab);
        BaseGenome  genomeTemplate  = phenomeTemplate.Genome;

        for (int i = 0; i < populationSize; i++)
        {
            BaseGenome genome = genomeTemplate.CreateRandom();             // Should be possible to generate these by hand (seeded)
            population[i] = new PhenomeDescription(genome);
        }
        for (int i = 0; i < populationSize; i++)
        {
            BaseGenome genome = genomeTemplate.CreateRandom();             // Should be possible to generate these by hand (seeded)
            selectionBuffer[i] = genome;
        }

        nextStepDelegate = NextStep;
        currentState     = State.FitnessTest;
    }
Esempio n. 9
0
    // Adaptive GAs
    // In CAGA (clustering-based adaptive genetic algorithm)
    void Start()
    {
        settings = GetComponent<GASettings>();
        populationSize = settings.PopulationSize;
        nrGenerations = settings.NumberOfGenerations;
        blocking = settings.RunAsFastAsPossible;

        environment.Settings = settings;
        selectionStrategy.Settings = settings;
        matingStrategy.Settings = settings;
        mutationStrategy.Settings = settings;

        population = new Population(populationSize);
        selectionBuffer = new SelectionBuffer(populationSize);

        statistics = GetComponent<Statistics>();
        if (statistics == null)
            statistics = gameObject.AddComponent<Statistics>();

        statistics.Population = population;

        BasePhenome phenomeTemplate = Helper.InstansiateAndGet<BasePhenome>(phenomePrefab);
        BaseGenome genomeTemplate = phenomeTemplate.Genome;

        for (int i = 0; i < populationSize; i++) {
            BaseGenome genome = genomeTemplate.CreateRandom(); // Should be possible to generate these by hand (seeded)
            population[i] = new PhenomeDescription(genome);
        }
        for (int i = 0; i < populationSize; i++) {
            BaseGenome genome = genomeTemplate.CreateRandom(); // Should be possible to generate these by hand (seeded)
            selectionBuffer[i] = genome;
        }

        nextStepDelegate = NextStep;
        currentState = State.FitnessTest;
    }