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)
    {
        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)
 {
     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];
     }
 }
Example #5
0
    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 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;
 }
Example #7
0
        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);
        }
Example #8
0
    public virtual void Init(BaseGenome genome)
    {
        gameObject.transform.rotation = startRotation;
        gameObject.transform.position = startPosition;

        duration    = 0;
        isDone      = false;
        initialized = true;
    }
Example #9
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];
        }
    }
    public override void CloneFrom(BaseGenome source)
    {
        GenomeBinaryString s = source as GenomeBinaryString;

        for (int i = 0; i < bits.Length; i++)
        {
            bits[i] = s.bits[i];
        }
    }
Example #11
0
    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];
        }
    }
Example #12
0
	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);
    }
Example #14
0
    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();
    }
Example #15
0
    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);
    }
Example #16
0
    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();
    }
Example #17
0
        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);
        }
Example #18
0
        /// <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()));
            }
        }
Example #19
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;
    }
 public override void CloneFrom(BaseGenome a)
 {
     bits = (a as GenomeBinaryStringRaw32).bits;
 }
Example #21
0
 public abstract void CloneFrom(BaseGenome source);
Example #22
0
 public override void CloneFrom(BaseGenome a)
 {
     bits = (a as GenomeBinaryStringRaw32).bits;
 }
Example #23
0
 public virtual float CalculateFitness(BaseGenome genome)
 {
     return(0);
 }
Example #24
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];
 }
Example #26
0
 public PhenomeDescription(BaseGenome genome)
 {
     this.genome = genome;
     // phenome =
 }
Example #27
0
 public virtual float CalculateFitness(BaseGenome genome)
 {
     return 0;
 }
Example #28
0
 // Mating or crossovers
 public abstract void OnePointCrossover(BaseGenome mom, BaseGenome dad, int point);
Example #29
0
 public abstract void CloneFrom(BaseGenome source);
Example #30
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];
 }