public void TestRefineGa() { const int seed = 7234; const int order = 36; const int stageCount = 12; const int genomeCount = 256; const int sortableCount = 128; const int selectionFactor = 16; const int rounds = 75; const int srounds = 4; var sw = new Stopwatch(); sw.Start(); var randy = Rando.Standard(seed); var genomePoolDualSorter = randy.ToGenomePoolDualSorter(order, stageCount, genomeCount); var randomSortablePool = randy.ToRandomSortablePool( order: order, poolCount: sortableCount); var gaDualSorter = new GaDualSorter( genomePoolDualSorter: genomePoolDualSorter, sortablePool: randomSortablePool, randy: randy); var gaDualSorterR = new GaDualSorter( genomePoolDualSorter: genomePoolDualSorter, sortablePool: randomSortablePool, randy: randy); Console.WriteLine("n_Avg n_Min r_Avg r_Min"); for (var i = 0; i < rounds; i++) { SortingResults eval = null; SortingResults evalR = null; for (var j = 0; j < srounds; j++) { eval = gaDualSorter.Eval(false); evalR = gaDualSorterR.Eval(false); gaDualSorter = gaDualSorter.EvolveSorters(eval.SorterResults, randy, selectionFactor); gaDualSorterR = gaDualSorterR.EvolveSortersRecomb(eval.SorterResults, randy, selectionFactor); } var avgE = eval.SorterResults.Select(sr => sr.Value.AverageSortedness).ToList(); var avgR = evalR.SorterResults.Select(sr => sr.Value.AverageSortedness).ToList(); Console.WriteLine($"{avgE.Average()} {avgE.Min()} {avgR.Average()} {avgR.Min()}"); } sw.Stop(); Console.WriteLine("\nElapsed={0}", sw.Elapsed); }
public static GaData Eval(this GaData sortingGaData) { var data = sortingGaData.Data.Copy(); var sorterPool = data.GetSorterPool(); var sortablePool = data.GetSortablePool(); var sr = sortablePool.AsParallel() .SelectMany( sb => sorterPool.Select(st => st.Sort(sb))); var sortingResults = new SortingResults(sr, false); data.SetSortingResults(sortingResults); return(new GaData(data: data)); }
public static string CompareReport(this GaData sgdNew, GaData sgdOld) { var newData = sgdNew.Data; var oldData = sgdOld.Data; var sorterPool = newData.GetSorterPool(); var sortablePool = oldData.GetSortablePool(); var srtt = sortablePool.AsParallel() .SelectMany( sb => sorterPool.Select(st => st.Sort(sb))); var sortingResults = new SortingResults(srtt, false); var avgAllSorters = sortingResults.SorterResults.Average(sr => sr.Value.AverageSortedness); var avgBestSorters = newData.GetBestSorterPool().Sorters.Values .Select(s => sortingResults.SorterResults[s.Id]) .Average(sr => sr.AverageSortedness); return($"{avgAllSorters} "); }
public static void SetSortingResults(this Dictionary <string, object> dictionary, SortingResults sorterPool) { dictionary[kSortingResults] = sorterPool; }