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)); }
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)); }
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])); } }