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