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