Exemplo n.º 1
0
        public static GenomeSorterDual Mutate(this
                                              GenomeSorterDual genomeDualSorter, IRando randy)
        {
            var mutantIndex = randy.NextUint(genomeDualSorter.StageCount);
            var newChromA   = genomeDualSorter.ChromosomeA;
            var newChromB   = genomeDualSorter.ChromosomeB;

            var newChoices = genomeDualSorter.Choices;

            if (randy.NextBool(0.5))
            {
                var mutantStage = randy.RewireSorterStage(genomeDualSorter.ChromoA(mutantIndex));
                newChromA = newChromA.ReplaceAtIndex(mutantIndex, mutantStage);
            }
            else
            {
                var mutantStage = randy.RewireSorterStage(genomeDualSorter.ChromoB(mutantIndex));
                newChromB = newChromB.ReplaceAtIndex(mutantIndex, mutantStage);
            }

            return(new GenomeSorterDual(
                       id: Guid.NewGuid(),
                       chromA: newChromA,
                       chromB: newChromB,
                       choices: newChoices));
        }
Exemplo n.º 2
0
 public static GenomeSorterDual ToDualSorterGenome(this IRando randy, uint order, uint stageCount)
 {
     return(new GenomeSorterDual(
                id: Guid.NewGuid(),
                chromA: 0u.CountUp(stageCount)
                .Select(i => randy.ToFullSorterStage(order, i)),
                chromB: 0u.CountUp(stageCount)
                .Select(i => randy.ToFullSorterStage(order, i)),
                choices: 0u.CountUp(stageCount)
                .Select(i => randy.NextBool(0.5))
                ));
 }
Exemplo n.º 3
0
        public static GenomeSorterConjOrbit Mutate(this GenomeSorterConjOrbit genomeConjOrbit, IRando randy)
        {
            var newTs   = genomeConjOrbit.TwoCycle;
            var newPerm = genomeConjOrbit.Conj;

            if (randy.NextBool(0.5))
            {
                newTs = newTs.ConjugateByRandomSingleTwoCycle(randy);
            }
            else
            {
                newPerm = newPerm.ConjugateByRandomPermutation(randy);
            }

            return(new GenomeSorterConjOrbit(
                       id: Guid.NewGuid(),
                       twoCycle: newTs,
                       conj: newPerm,
                       order: genomeConjOrbit.Order,
                       stageCount: genomeConjOrbit.Stagecount));
        }
Exemplo n.º 4
0
        public static Tuple <GenomeSorterDual, GenomeSorterDual> Recombine(
            this GenomeSorterDual genomeDualSorterA,
            GenomeSorterDual genomeDualSorterB,
            IRando randy)
        {
            var cA        = genomeDualSorterA.ChromosomeA.ToList();
            var cB        = genomeDualSorterA.ChromosomeB.ToList();
            var recombin1 = cA.Recombo(cB, randy.NextUint((uint)cA.Count()));
            var recombin2 = cB.Recombo(cA, randy.NextUint((uint)cA.Count()));

            if (randy.NextBool(0.5))
            {
                return(new Tuple <GenomeSorterDual, GenomeSorterDual>(
                           item1: new GenomeSorterDual(
                               id: Guid.NewGuid(),
                               chromA: recombin1.Item1,
                               chromB: recombin1.Item2,
                               choices: genomeDualSorterA.Choices),
                           item2: new GenomeSorterDual(
                               id: Guid.NewGuid(),
                               chromA: recombin2.Item1,
                               chromB: recombin2.Item2,
                               choices: genomeDualSorterA.Choices)
                           ));
            }

            return(new Tuple <GenomeSorterDual, GenomeSorterDual>(
                       item1: new GenomeSorterDual(
                           id: Guid.NewGuid(),
                           chromA: recombin1.Item2,
                           chromB: recombin1.Item1,
                           choices: genomeDualSorterA.Choices),
                       item2: new GenomeSorterDual(
                           id: Guid.NewGuid(),
                           chromA: recombin2.Item2,
                           chromB: recombin2.Item1,
                           choices: genomeDualSorterA.Choices)
                       ));
        }