Exemple #1
0
        public void ChromosomeCrossover()
        {
            var protoChrom = Initialization.MakeProtoChromosome();
            var a          = Initialization.MakeRandomChromosome(NetworkType.Rnn, protoChrom, 0);
            var b          = Initialization.MakeRandomChromosome(NetworkType.Rnn, protoChrom, 0);

            a.ShouldNotLookLike(b);

            var crossedOverChroms = Functions.CrossOverChromosomes(a, b);

            AssertIsCrossedOverVersionOf(crossedOverChroms, Tuple2.Create(a, b));
        }
Exemple #2
0
        public void GenericCrossOver()
        {
            var a = new[] { 1, 2, 3, 4, 5 };
            var b = new[] { 10, 20, 30, 40, 50 };

            var z = Functions.CrossOver(a, b, (x, y) => Tuple2.Create(y, x), x => x.ToList());

            z.Item1.ShouldBeOfType <List <int> >();
            z.Item2.ShouldBeOfType <List <int> >();
            z.Item1.ShouldEnumerateLike(b);
            z.Item2.ShouldEnumerateLike(a);

            var q = Functions.CrossOver(a, b, (x, y) => x % 2 == 1 ? Tuple2.Create(x, y) : Tuple2.Create(y, x), x => x.ToList());

            q.Item1.ShouldEnumerateLike(Lists.Create(1, 20, 3, 40, 5));
            q.Item2.ShouldEnumerateLike(Lists.Create(10, 2, 30, 4, 50));
        }
Exemple #3
0
        public void MixtureCrossover()
        {
            var db         = new Database(TestHelpers.GetCleanDatabase());
            var protoChrom = Initialization.MakeProtoChromosome();
            var protoRun   = new ProtoRun(db, "MixtureCrossoverTest", -1, protoChrom, 2, 6, 4, 10, 0.05);
            var run        = new Run(protoRun, protoChrom);
            var seed       = MakeTrainingSet(db, "11/11/2001", "12/11/2001");
            var gen        = Initialization.MakeInitialGeneration(seed, run, new LocalParallelTrainer());

            gen.Mixtures.Length.ShouldEqual(2);
            var m1 = gen.Mixtures[0];
            var m2 = gen.Mixtures[1];

            var prev = Tuple2.Create(m1.Chromosomes, m2.Chromosomes);
            var cmis = Functions.CombineTwoMixtures(gen.Mixtures.Select(m => new MixtureEval(m, 1)).ToList());
            var curr = Tuple2.Create(cmis.Item1.Chromosomes, cmis.Item2.Chromosomes);

            for (int i = 0; i < m1.Chromosomes.Length; i++)
            {
                AssertIsCrossedOverVersionOf(Tuple2.Create(curr.Item1[i], curr.Item2[i]),
                                             Tuple2.Create(prev.Item1[i], prev.Item2[i]));
            }
        }