示例#1
0
        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);
        }
示例#2
0
        public void TestMakeGaDualSorter()
        {
            const int seed          = 5234;
            const int order         = 17;
            const int stageCount    = 20;
            const int genomeCount   = 20;
            const int sortableCount = 10;

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