Exemplo n.º 1
0
        protected override IList <ChromoSome> CrossInternal(IList <ChromoSome> parents)
        {
            var parent1 = parents[0] as FloatChromoSome;
            var parent2 = parents[1] as FloatChromoSome;

            if (parent1 == null)
            {
                return(parents);
            }

            var chromoSomeLength = parent1.Length;
            var child1           = parent1.Random() as FloatChromoSome;
            var child2           = parent2.Random() as FloatChromoSome;

            for (int i = 0; i < chromoSomeLength; i++)
            {
                var gene1 = (FloatGene)parent1[i];
                var gene2 = (FloatGene)parent2[i];
                var ret1  = gene1;
                var ret2  = gene2;
                if (Util.NextDouble() < _crossProbability)
                {
                    ret1 = new FloatGene(Util.Mix(gene1.Value, gene2.Value, _mixRadio));
                    ret2 = new FloatGene(Util.Mix(gene2.Value, gene1.Value, _mixRadio));
                }
                child1[i] = ret1;
                child2[i] = ret2;
            }

            return(new List <ChromoSome>()
            {
                child1, child2
            });
        }
Exemplo n.º 2
0
    /// <summary>
    /// Create a child with possible mutation.
    /// </summary>
    /// <returns>The children.</returns>
    public FloatGene floatChildren()
    {
        FloatGene child = (FloatGene)this.MemberwiseClone();

        child.Mutate();
        return(child);
    }
Exemplo n.º 3
0
        public void BasicTest()
        {
            FloatGene a = new FloatGene();

            Assert.AreEqual(0, a.Value);

            a = new FloatGene(2);

            Assert.False(a.IsBounded);

            Assert.AreEqual(2, a.Value);

            a = new FloatGene(5, 2, -1000000);

            Assert.False(a.IsValid);
            Assert.True(a.IsBounded);

            FloatGene b = new FloatGene(-3, 1000000, 0);

            Assert.False(b.IsValid);
            Assert.True(b.IsBounded);

            FloatGene c = a.Sum(b);

            Assert.True(c.IsValid);
            Assert.True(c.IsBounded);
            Assert.AreEqual(0, c.MinValue);
            Assert.AreEqual(2, c.MaxValue);
            Assert.AreEqual(2, c.Value);

            Assert.AreEqual(5, a.Value);
            Assert.AreEqual(-3, b.Value);

            Assert.AreEqual(-1000000, a.MinValue);
            Assert.AreEqual(0, b.MinValue);

            Assert.AreEqual(2, a.MaxValue);
            Assert.AreEqual(1000000, b.MaxValue);

            a = new FloatGene(3, 4, 2);
            b = new FloatGene(4);

            c = FloatGene.MinimumBoundedGene(0, a, b);

            Assert.AreEqual(0, c.Value);
            Assert.AreEqual(2, c.MinValue);
            Assert.AreEqual(4, c.MaxValue);
            Assert.False(c.IsValid);

            c = a.Subtract(b);

            Assert.AreEqual(-1, c.Value);
            Assert.AreEqual(2, c.MinValue);
            Assert.AreEqual(4, c.MaxValue);
            Assert.False(c.IsValid);

            c = a.Divide(b);

            Assert.AreEqual(0.75, c.Value);
            Assert.AreEqual(2, c.MinValue);
            Assert.AreEqual(4, c.MaxValue);
            Assert.False(c.IsValid);

            c = a.Multiply(b);

            Assert.AreEqual(12, c.Value);
            Assert.AreEqual(2, c.MinValue);
            Assert.AreEqual(4, c.MaxValue);
            Assert.False(c.IsValid);

            a = new FloatGene(1, 0, 3);
            b = new FloatGene(1);

            Assert.AreNotEqual(a, b);
        }