コード例 #1
0
        public void ChromosomeGenesCanBeForcedForTestPurpose()
        {
            var chromosome = new StretchChromosome(5, 2, 4, 1);
            var positions  = chromosome.GetGenes().Select(g => (int)g.Value).ToArray();

            Assert.That(positions[0], Is.EqualTo(4));
            Assert.That(positions[1], Is.EqualTo(1));
        }
コード例 #2
0
 private void DrawNodes(StretchChromosome chromosome)
 {
     foreach (var p in m_fitness.GetPositionsFor(chromosome))
     {
         Context.Layout.SetMarkup("<span color='blue'>{0}</span>".With(p.Node.Name));
         Context.Buffer.DrawLayout(Context.GC, ScaleX(p.X, 0), ScaleY(p.Y, 0), Context.Layout);
     }
 }
コード例 #3
0
        public void ChromosomeGenesArePositionsWithinTheDefinedGrid()
        {
            var chromosome = new StretchChromosome(5, 2);
            var positions  = chromosome.GetGenes().Select(g => (int)g.Value).ToArray();

            Assert.That(positions.Length, Is.EqualTo(2));
            Assert.That(positions[0], Is.Not.EqualTo(positions[1]));
            Assert.That(positions[0], Is.InRange(0, 4));
            Assert.That(positions[1], Is.InRange(0, 4));
        }
コード例 #4
0
        public void EvaluateFitnessAllInOneRow()
        {
            var fitness    = new StretchFitness(definitionSample);
            var chromosome = new StretchChromosome(24, 5, 0, 1, 2, 3, 4);

            Assert.That(
                fitness.WeightedDistanceFor(chromosome),
                Is.EqualTo(1 * 7 + 2 * 4 + 3 * 2 + 1 * 6)
                );
            Assert.AreEqual(0.2437085, fitness.Evaluate(chromosome), precision);
        }
コード例 #5
0
        public void NewChromosomeHasSameStructureAsExistingOne()
        {
            var chromosomeRef = new StretchChromosome(5, 2);
            var chromosome    = chromosomeRef.CreateNew();
            var positions     = chromosome.GetGenes().Select(g => (int)g.Value).ToArray();

            Assert.That(positions.Length, Is.EqualTo(2));
            Assert.That(positions[0], Is.Not.EqualTo(positions[1]));
            Assert.That(positions[0], Is.InRange(0, 4));
            Assert.That(positions[1], Is.InRange(0, 4));
        }
コード例 #6
0
        public void EvaluateFitnessWithDiagonal()
        {
            var fitness    = new StretchFitness(definitionSample);
            var chromosome = new StretchChromosome(24, 5, 0, 7, 14, 21, 16);
            var sqrt2      = Math.Sqrt(2);

            Assert.AreEqual(
                fitness.WeightedDistanceFor(chromosome),
                sqrt2 * 7 + 2 * sqrt2 * 4 + 3 * sqrt2 * 2 + sqrt2 * 6,
                precision
                );
            Assert.AreEqual(0.3446559, fitness.Evaluate(chromosome), precision);
        }
コード例 #7
0
        public void EvaluateGeneralFitness()
        {
            var fitness    = new StretchFitness(definitionSample);
            var chromosome = new StretchChromosome(24, 5, 5, 12, 19, 0, 23);
            var diag       = Math.Sqrt(34);
            var diag2      = Math.Sqrt(25);
            var diag3      = Math.Sqrt(29);

            Assert.AreEqual(
                fitness.WeightedDistanceFor(chromosome),
                diag3 * 7 + diag2 * 4 + 5 * 2 + diag * 6,
                precision
                );
            Assert.AreEqual(0.9268313, fitness.Evaluate(chromosome), precision);
        }
コード例 #8
0
        public void GeneForSpecifiedIndexCanHaveAllKindOfExpectedValues()
        {
            var kindOfGenes = Enumerable.Repeat(0, 5).ToArray();
            var chromosome  = new StretchChromosome(5, 2);

            for (;;)
            {
                var newGene = chromosome.GenerateGene(0);
                kindOfGenes[(int)newGene.Value] = 1;
                if (kindOfGenes.Sum() == 5)
                {
                    break;
                }
            }
        }
コード例 #9
0
        public void RandomChromosomesEnsureThatWhenTryingEnoughNewChromosomeHasFullyDifferentGenes()
        {
            var chromosomeRef = new StretchChromosome(5, 2);
            var positionsRef  = chromosomeRef.GetGenes().Select(g => (int)g.Value).ToArray();

            for (;;)
            {
                var chromosome = chromosomeRef.CreateNew();
                var positions  = chromosome.GetGenes().Select(g => (int)g.Value).ToArray();
                if (positions[0] != positionsRef[0] && positions[1] != positionsRef[1])
                {
                    break;
                }
            }
        }
コード例 #10
0
        public void RandomChromosomesEnsureThatWhenTryingEnoughWeCanAllKindOfGenes()
        {
            var kindOfGenes = Enumerable.Repeat(0, 2 * 5).ToArray();

            for (;;)
            {
                var chromosome = new StretchChromosome(5, 2);
                var positions  = chromosome.GetGenes().Select(g => (int)g.Value).ToArray();
                kindOfGenes[positions[0]]     = 1;
                kindOfGenes[5 + positions[1]] = 1;
                if (kindOfGenes.Sum() == 10)
                {
                    break;
                }
            }
        }
コード例 #11
0
 private void DrawPairs(StretchChromosome chromosome)
 {
     if (!m_showPairs)
     {
         return;
     }
     Context.GC.RgbFgColor = new Gdk.Color(255, 0, 0);
     foreach (var pair in m_fitness.GetPairsFor(chromosome))
     {
         if (pair.Weigth == 0)
         {
             continue;
         }
         Context.GC.SetLineAttributes(pair.Weigth, Gdk.LineStyle.DoubleDash, Gdk.CapStyle.Butt, Gdk.JoinStyle.Round);
         Context.Buffer.DrawLine(Context.GC, ScaleX(pair.P1.X, 2), ScaleY(pair.P1.Y, 2), ScaleX(pair.P2.X, 2), ScaleY(pair.P2.Y, 2));
     }
 }