public override void OnePointCrossover(BaseGenome mom, BaseGenome dad, int point) { GenomeBinaryStringRaw64 m = mom as GenomeBinaryStringRaw64; GenomeBinaryStringRaw64 d = dad as GenomeBinaryStringRaw64; ulong mask = AllOnes << point; bits = (mask & m.bits) | (~mask & d.bits); }
public override void OnePointCrossover(BaseGenome mom, BaseGenome dad, int point) { GenomeBinaryStringRaw32 m = mom as GenomeBinaryStringRaw32; GenomeBinaryStringRaw32 d = dad as GenomeBinaryStringRaw32; uint mask = 0xFFFFFFFF << point; bits = (mask & m.bits) | (~mask & d.bits); }
public override void OnePointCrossover(BaseGenome mom, BaseGenome dad, int point) { GenomeBinaryString m = mom as GenomeBinaryString; GenomeBinaryString d = dad as GenomeBinaryString; for (int i = 0; i < bits.Length; i++) { bits[i] = (i < point ? m : d).bits[i]; } }
public override float CalculateFitness(BaseGenome genome) { BaseGenomeBinary g = genome as BaseGenomeBinary; int nrOnes = 0; for (int i = 0; i < g.Length; i++) nrOnes += g.IsSet(i) ? 1 : 0; return nrOnes; }
public void ShouldCreateWithoutParameters() { BaseGenome <int, int> genome = new BaseGenome <int, int>(); Assert.IsNotNull(genome); Assert.IsNotNull(genome.Genes); Assert.AreEqual(0, genome.Genes.Count); Assert.AreEqual(0, genome.Value); }
public virtual void Init(BaseGenome genome) { gameObject.transform.rotation = startRotation; gameObject.transform.position = startPosition; duration = 0; isDone = false; initialized = true; }
public override void CloneFrom(BaseGenome source) { GenomeFloatString s = source as GenomeFloatString; for (int i = 0; i < floats.Length; i++) { floats[i] = s.floats[i]; } }
public override void CloneFrom(BaseGenome source) { GenomeBinaryString s = source as GenomeBinaryString; for (int i = 0; i < bits.Length; i++) { bits[i] = s.bits[i]; } }
public override void OnePointCrossover(BaseGenome mom, BaseGenome dad, int point) { GenomeFloatString m = mom as GenomeFloatString; GenomeFloatString d = dad as GenomeFloatString; for (int i = 0; i < floats.Length; i++) { floats[i] = (i < point ? m : d).floats[i]; } }
public override void Init(BaseGenome genome) { base.Init(genome); GenomeFloatString gfs = genome as GenomeFloatString; neuralNet = new NeuralNet(new int[]{5, 8, 3}, gfs.GetArray()); sensors = new float[5+1]; sensors[5] = 0; totalDistance = 0; }
public override float CalculateFitness(BaseGenome genome) { BaseGenomeBinary g = genome as BaseGenomeBinary; int nrOnes = 0; for (int i = 0; i < g.Length; i++) { nrOnes += g.IsSet(i) ? 1 : 0; } return(nrOnes); }
public override void Mate(SelectionBuffer selected, Population newPopulation, GeneticAlgorithm.NextStepDelegate callback) { // The new population is populated with 2 children each iteration. for (int i = 0; i < newPopulation.Size; i += 2) { BaseGenome mom = selected[Random.Range(0, selected.Size)]; // TODO: mom and dad can be the same.. BaseGenome dad = selected[Random.Range(0, selected.Size)]; int point = Random.Range(0, mom.Length); newPopulation[i].Genome.OnePointCrossover(mom, dad, point); newPopulation[i + 1].Genome.OnePointCrossover(mom, dad, point); } callback(); }
public override BaseGenome GetBaseGenome() { BaseGenome res = new BaseGenome(); // required ones res.AddKey("baseHunger", 2.0f, 2.0f); res.AddKey("baseStamina", 2.0f, 2.0f); res.AddKey("maxStamina", 5.0f, 10.0f); res.AddKey("maxFood", 5.0f, 10.0f); // for weighting behaviors res.AddKey("easilySpooked", 0.5f, 0.9f); res.AddKey("curiosity", 0.2f, 0.4f); res.AddKey("extrovertednes", 0.3f, 0.7f); return(res); }
public override void Mutate(Population population, GeneticAlgorithm.NextStepDelegate callback) { for (int i = 0; i < population.Size; i++) { if (Random.value > mutationProbability) { continue; } BaseGenome genome = population[i].Genome; int nrMutations = Random.Range(0, (int)Mathf.Round(bitMutationFraction * genome.Length)); for (int j = 0; j < nrMutations; j++) { genome.Modify(Random.Range(0, genome.Length)); } } callback(); }
public void ShouldCreateWithGenes() { List <int> genes = new List <int>(); genes.Add(1); genes.Add(2); genes.Add(3); BaseGenome <int, int> genome = new BaseGenome <int, int>(genes); Assert.IsNotNull(genome); Assert.IsNotNull(genome.Genes); Assert.AreEqual(3, genome.Genes.Count); Assert.AreEqual(1, genome.Genes[0]); Assert.AreEqual(2, genome.Genes[1]); Assert.AreEqual(3, genome.Genes[2]); Assert.AreEqual(0, genome.Value); }
/// <summary> /// Populates the population /// </summary> public void Populate() { if (BaseGenome == null) { throw new Exception("BaseGenome has to be set first!"); } if (Mutator == null) { throw new Exception("Mutator has to be set first!"); } //Add mutated versions of the base genome for (var i = 0; i < PopulationSize; i++) { FindSpecies(CurrentPopulation, Mutator.Mutate(BaseGenome.Clone())); } }
// 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; }
public override void CloneFrom(BaseGenome a) { bits = (a as GenomeBinaryStringRaw32).bits; }
public abstract void CloneFrom(BaseGenome source);
public virtual float CalculateFitness(BaseGenome genome) { return(0); }
// Mating or crossovers public abstract void OnePointCrossover(BaseGenome mom, BaseGenome dad, int point);
public override void CloneFrom(BaseGenome source) { GenomeBinaryString s = source as GenomeBinaryString; for (int i = 0; i < bits.Length; i++) bits[i] = s.bits[i]; }
public PhenomeDescription(BaseGenome genome) { this.genome = genome; // phenome = }
public virtual float CalculateFitness(BaseGenome genome) { return 0; }
public override void CloneFrom(BaseGenome source) { GenomeFloatString s = source as GenomeFloatString; for (int i = 0; i < floats.Length; i++) floats[i] = s.floats[i]; }