public void GeneratePopulation()
        {
            var       populationHandler  = new PositionPopulationHandler <int>();
            const int popSize            = 4;
            var       expectedVectorsPos = Enumerable.Range(0, popSize).Select(p => new[] { p, p % 2 }).ToArray();
            var       vectors            = Enumerable.Range(0, 4).Select(v => new TagVector <int>(expectedVectorsPos[v], v % 2))
                                           .ToList();
            var pop = populationHandler.GeneratePopulation(vectors, popSize);
            var expectedVectorPosSeq = expectedVectorsPos.SelectMany(e => e).ToArray();
            var diffCnt = 0;

            Assert.AreEqual(popSize, pop.Length);

            foreach (var entity in pop)
            {
                var entitySeq = entity.SelectMany(e => e).ToArray();
                Assert.That(entitySeq, Is.EquivalentTo(expectedVectorPosSeq));
                if (!entitySeq.SequenceEqual(expectedVectorPosSeq))
                {
                    diffCnt++;
                }
            }

            Assert.True(diffCnt > popSize / 2);
        }
        public void GetBreedersChild()
        {
            var populationHandler = new PositionPopulationHandler <string>();
            var parent1           = new[] { new[] { 0, 2 }, new[] { 2, 2 } };
            var parent2           = new[] { new[] { 1, 2 }, new[] { 1, 1 } };

            populationHandler.GetBreedersChild(parent1, parent2);
            var expectedChild = new[] { new[] { 0, 2 }, new[] { 1, 1 } };

            Assert.That(expectedChild[0], Is.EquivalentTo(parent1[0]));
            Assert.That(expectedChild[1], Is.EquivalentTo(parent2[1]));
        }
        public void EvaluatePopulation()
        {
            var populationHandler = new PositionPopulationHandler <int>();
            var vectors           = Enumerable.Range(1, 4).Select(i => new TagVector <int>(new int[2], i % 2)).ToList(); // 1 0 1 0
            var pop = Enumerable.Range(0, 2)
                      .Select(i => Enumerable.Range(0, 4).Select(l => new[] { l / 2, l % 2 }).ToArray()).ToArray();
            var tmp = pop[0][0];

            pop[0][0] = pop[0][3];
            pop[0][3] = tmp;

            var scoredPop = populationHandler.EvaluatePopulation(pop, vectors);

            Assert.That(scoredPop.Keys.First(), Is.EquivalentTo(pop[0]));
            Assert.AreEqual(0, scoredPop.Values.First());
        }
Example #4
0
        public void InjectorTests()
        {
            var inj = new Injector();

            inj.Bind <DateTime>(DateTime.Now);
            // inj.Bind<IVectorHandler<string>, VectorUtils<string>>();
            // inj.Bind<IEnumerableStrategyByIndex,ArrayByIndex>();
            inj.Bind <IErrorTester, YPositionError>();
            PositionPopulationHandler <string> popHandler = inj.Resolve <PositionPopulationHandler <string> >();

            popHandler.ToString();
            var date1 = inj.Resolve <DateTime>();
            var date2 = inj.Resolve <DateTime>();

            Assert.AreEqual(date1, date2);
        }
        public void CrossBreed()
        {
            var populationHandler = new PositionPopulationHandler <string>();
            var pop = new[]
            {
                new[] { new[] { 0, 2 }, new[] { 2, 2 } },
                new[] { new[] { 1, 2 }, new[] { 1, 1 } }
            };
            var child            = populationHandler.CrossBreed(pop, 1)[0];
            var expectedChildren = new[]
            {
                new[] { new[] { 0, 2 }, new[] { 1, 1 } },
                new[] { new[] { 1, 2 }, new[] { 2, 2 } }
            };

            Assert.True(expectedChildren.Any(expectedChild =>
                                             expectedChild[0].SequenceEqual(child[0]) && expectedChild[1].SequenceEqual(child[1])));
        }
        public void SelectBreeders()
        {
            var       populationHandler = new PositionPopulationHandler <string>();
            const int breedersCnt       = 2;
            var       scoredPop         = new Dictionary <int[][], int>
            {
                { new int [0][], 1 },
                { new int [0][], 2 },
                { new int [0][], 3 }
            };
            var breeders         = populationHandler.SelectBreeders(scoredPop, breedersCnt);
            var expectedBreeders = scoredPop.OrderBy(kv => kv.Value).Select(kv => kv.Key).Take(breedersCnt).ToArray();

            Assert.AreEqual(breedersCnt, breeders.Length);
            for (var i = 0; i < breedersCnt; i++)
            {
                Assert.AreSame(breeders[i], expectedBreeders[i]);
            }
        }
        public void MutatePop()
        {
            var mutationRates = new[] { 1.0f, 0.0f };
            var asserts       = new List <Action <bool> > {
                Assert.IsFalse, Assert.IsTrue
            };
            var populationHandler = new PositionPopulationHandler <string>();

            for (var i = 0; i < asserts.Count; i++)
            {
                var pops = Enumerable.Range(0, 2).Select(c =>
                                                         Enumerable.Range(0, 4)
                                                         .Select(e => Enumerable.Range(0, 4).Select(p => new[] { p / 2, p % 2 }).ToArray()).ToArray())
                           .ToList();

                populationHandler.MutatePop(pops[0], mutationRates[i]);
                asserts[i](Enumerable.Range(0, pops[1].Length).All(j =>
                                                                   Enumerable.Range(0, pops[1][j].Length).All(k => pops[0][j][k].SequenceEqual(pops[1][j][k])))
                           );
            }
        }