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(); } }
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(); }
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(); }
// 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; }
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); } }
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; }
// 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; }
// 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; }