Exemplo n.º 1
0
        public static Func <IReadOnlyList <T>, IReadOnlyList <T> > StandardMutator <T>
        (
            double deletionRate,
            double insertionRate,
            double mutationRate,
            Func <T> geneMutator,
            IRando rando
        )
        {
            return(list =>
            {
                var lp = new ListPropigator <T>
                         (
                    deletor: (l, i) => l.RemoveAt(i),
                    deletionFrequency: deletionRate,
                    inserter: (l, i) => l.Insert(i, geneMutator.Invoke()),
                    insertionFrequency: insertionRate,
                    mutator: (l, i) => l.SetItem(i, geneMutator.Invoke()),
                    mutationFrequency: mutationRate,
                    finalIndex: list.Count
                         );

                return list.Mutate(lp, rando);
            });
        }
Exemplo n.º 2
0
        public void TestListPropigatorMutate()
        {
            const int startLen = 40;
            const int finalLen = 40;

            var lp = new ListPropigator <int>
                     (
                deletor: Deletor,
                deletionFrequency: 0.0,
                inserter: Inserter,
                insertionFrequency: 0.0,
                mutator: Mutator,
                mutationFrequency: 1.0,
                finalIndex: finalLen
                     );

            var randy = Rando.Fast(123);

            var track = new Tuple <IImmutableList <int>, int>
                        (
                ImmutableList <int> .Empty.AddRange(Enumerable.Range(0, startLen)),
                0
                        );

            while (track.Item2 < lp.FinalIndex)
            {
                track = lp.Propigate(track.Item1, randy, track.Item2);
            }

            Assert.AreEqual(track.Item1.Count, finalLen);
            Assert.IsTrue(track.Item1.All(t => t == 55));
        }