예제 #1
0
        public static ISorter ToSorter(this GenomeSorterStageDimer genomeDimer)
        {
            var stages = genomeDimer.GenomeStageDimers
                         .SelectMany(gsd => gsd.ToPhenotype())
                         .Select(p => p.ToSorterStage(0));

            return(stages.ToSorter(Guid.NewGuid(), genomeDimer.Id));
        }
예제 #2
0
        public static GenomeSorterStageDimer Mutate(this GenomeSorterStageDimer genomeDimer, IRando rando)
        {
            var        mutantIndex  = rando.NextInt(genomeDimer.GenomeStageDimers.Length);
            var        gsdToReplace = genomeDimer.GenomeStageDimers[mutantIndex];
            StageDimer gsdMutant    = gsdToReplace.Mutate(rando);

            return(genomeDimer.GenomeStageDimers
                   .ReplaceAtIndex((uint)mutantIndex, gsdMutant)
                   .ToGenomeDimer(Guid.NewGuid()));
        }
예제 #3
0
        public static Tuple <GenomeSorterStageDimer, GenomeSorterStageDimer> RecombineFine(this IRando randy, GenomeSorterStageDimer gdA, GenomeSorterStageDimer gdB)
        {
            var al    = gdA.GenomeStageDimers.SelectMany(sd => sd.ToPermutations()).ToList();
            var aList = gdA.GenomeStageDimers.ToList();
            var bList = gdB.GenomeStageDimers.ToList();
            // var combies = aList.Recombo(bList, randy.NextUint((uint)bList.Count()));
            var combies = aList.RecomboL2(bList,
                                          randy.NextUint((uint)bList.Count()),
                                          StageDimerExt.RecomboP(randy.NextUint(4u)));

            return(new Tuple <GenomeSorterStageDimer, GenomeSorterStageDimer>(
                       combies.Item1.ToGenomeDimer(Guid.NewGuid()),
                       combies.Item1.ToGenomeDimer(Guid.NewGuid())));
        }
예제 #4
0
        public static Tuple <GenomeSorterStageDimer, GenomeSorterStageDimer> RecombineCoarse(this IRando randy, GenomeSorterStageDimer gdA, GenomeSorterStageDimer gdB)
        {
            var aList = gdA.GenomeStageDimers.ToList();
            var bList = gdB.GenomeStageDimers.ToList();
            //var combies = randy.Recombo(aList, bList);
            var combies = aList.Recombo(bList, randy.NextUint((uint)bList.Count()));

            return(new Tuple <GenomeSorterStageDimer, GenomeSorterStageDimer>(
                       combies.Item1.ToGenomeDimer(Guid.NewGuid()),
                       combies.Item2.ToGenomeDimer(Guid.NewGuid())));
        }