コード例 #1
0
        /// <summary>
        /// Runs a prepared benchmark.
        /// </summary>
        public static void RunBenchmark()
        {
            var scale   = new IntVector2(1, 1);
            var offsets = new List <int>()
            {
                2
            };
            const bool enableCorridors = false;

            //var mapDescriptions = GetMapDescriptionsSet(scale, enableCorridors, offsets);
            var mapDescriptions = GetMapDescriptionsForThesis(false);

            var layoutGenerator = LayoutGeneratorFactory.GetDefaultChainBasedGenerator <int>();
            // var layoutGenerator = LayoutGeneratorFactory.GetChainBasedGeneratorWithCorridors<int>(offsets);

            var benchmark = Benchmark.CreateFor(layoutGenerator);

            layoutGenerator.InjectRandomGenerator(new Random(0));
            layoutGenerator.SetLayoutValidityCheck(false);

            //layoutGenerator.SetChainDecompositionCreator(mapDescription => new OldChainDecomposition<int>(new GraphDecomposer<int>()));
            //// layoutGenerator.SetChainDecompositionCreator(mapDescription => new BreadthFirstChainDecomposition<int>(new GraphDecomposer<int>(), false));
            // layoutGenerator.SetGeneratorPlannerCreator(mapDescription => new SlowGeneratorPlanner<Layout<Configuration<EnergyData>, BasicEnergyData>>());
            //layoutGenerator.SetLayoutEvolverCreator((mapDescription, layoutOperations) =>
            //{
            //	var evolver =
            //		new SimulatedAnnealingEvolver<Layout<Configuration<EnergyData>, BasicEnergyData>, int,
            //			Configuration<EnergyData>>(layoutOperations);
            //	evolver.Configure(50, 500);
            //	evolver.SetRandomRestarts(true, SimulatedAnnealingEvolver<Layout<Configuration<EnergyData>, BasicEnergyData>, int, Configuration<EnergyData>>.RestartSuccessPlace.OnAccepted, false, 0.5f);

            //	return evolver;
            //});

            var scenario = BenchmarkScenario.CreateScenarioFor(layoutGenerator);

            scenario.SetRunsCount(2);

            var setups = scenario.MakeSetupsGroup();

            setups.AddSetup("Fixed generator", (generator) => generator.InjectRandomGenerator(new Random()));

            Benchmark.WithDefaultFiles((sw, dw) =>
            {
                benchmark.Execute(layoutGenerator, scenario, mapDescriptions, 100, 1, sw, dw);
            });
        }
コード例 #2
0
        /// <summary>
        /// Benchmark our speed improvements.
        /// </summary>
        public static void CompareOldAndNew()
        {
            //var mapDescriptions = GetMapDescriptionsSet(new IntVector2(1, 1), false);
            var mapDescriptions = GetMapDescriptionsForThesis(false);

            var layoutGenerator = LayoutGeneratorFactory.GetDefaultChainBasedGenerator <int>();
            var benchmark       = Benchmark.CreateFor(layoutGenerator);

            layoutGenerator.InjectRandomGenerator(new Random(0));
            layoutGenerator.SetLayoutValidityCheck(false);

            var scenario = BenchmarkScenario.CreateScenarioFor(layoutGenerator);

            scenario.SetRunsCount(1);

            // Measure the difference between old and new approaches
            {
                var setups = scenario.MakeSetupsGroup();

                setups.AddSetup("Old", (generator) =>
                {
                    //generator.SetChainDecompositionCreator(mapDescription => new OriginalChainDecomposition());
                    generator.SetChainDecompositionCreator(mapDescription => new OldChainDecomposition <int>(new GraphDecomposer <int>()));
                    //generator.SetGeneratorPlannerCreator(mapDescription => new SlowGeneratorPlanner<Layout<Configuration<EnergyData>, BasicEnergyData>>());
                    //generator.SetLayoutEvolverCreator((mapDescription, layoutOperations) =>
                    //{
                    //	var evolver =
                    //		new SimulatedAnnealingEvolver<Layout<Configuration<EnergyData>, BasicEnergyData>, int,
                    //			Configuration<EnergyData>>(layoutOperations);
                    //	evolver.Configure(50, 500);
                    //	evolver.SetRandomRestarts(true, SimulatedAnnealingEvolver<Layout<Configuration<EnergyData>, BasicEnergyData>, int, Configuration<EnergyData>>.RestartSuccessPlace.OnAccepted, false, 0.5f);

                    //	return evolver;
                    //});

                    generator.SetGeneratorPlannerCreator(mapDescription => new BasicGeneratorPlanner <Layout <Configuration <EnergyData>, BasicEnergyData> >());
                    generator.SetLayoutEvolverCreator((mapDescription, layoutOperations) =>
                    {
                        var evolver =
                            new SimulatedAnnealingEvolver <Layout <Configuration <EnergyData>, BasicEnergyData>, int,
                                                           Configuration <EnergyData> >(layoutOperations);

                        return(evolver);
                    });

                    generator.InjectRandomGenerator(new Random(0));
                });
                setups.AddSetup("New", (generator) =>
                {
                    generator.SetChainDecompositionCreator(mapDescription =>
                                                           new BreadthFirstChainDecomposition <int>(new GraphDecomposer <int>()));
                    generator.SetGeneratorPlannerCreator(mapDescription => new BasicGeneratorPlanner <Layout <Configuration <EnergyData>, BasicEnergyData> >());
                    generator.SetLayoutEvolverCreator((mapDescription, layoutOperations) =>
                    {
                        var evolver =
                            new SimulatedAnnealingEvolver <Layout <Configuration <EnergyData>, BasicEnergyData>, int,
                                                           Configuration <EnergyData> >(layoutOperations);

                        return(evolver);
                    });

                    generator.InjectRandomGenerator(new Random(0));
                });
            }

            Benchmark.WithDefaultFiles((sw, dw) =>
            {
                benchmark.Execute(layoutGenerator, scenario, mapDescriptions, 80, 1, sw, dw);
            });
        }