private void RunGreedyVsNoGreedy() { var resultsFile = $"{ResultsFolder}greedy_vs_ilp_{DateTime.Now.ToString("yyyy-dd-M-HH-mm-ss")}.csv"; using (var writer = new StreamWriter(resultsFile)) using (var csv = new CsvWriter(writer, CultureInfo.InvariantCulture)) { csv.WriteHeader(typeof(GreedyVsILPResult)); csv.NextRecord(); } for (int i = 1; i <= NumberOfInstances; i++) { using (var stream = File.Open(resultsFile, FileMode.Append)) using (var writer = new StreamWriter(stream)) using (var csv = new CsvWriter(writer, CultureInfo.InvariantCulture)) { csv.Configuration.HasHeaderRecord = false; var instanceFile = $"{InstancesFolder}/Exact{i}.txt"; var configFile = $"{ConfigsFolder}tune_Exact{i}_0.prm"; var cinemaILP = CinemaReader.Read(instanceFile); var cinemaGreedy = CinemaReader.Read(instanceFile);; var solverILP = new ILPSolver(cinemaILP); var timesILP = solverILP.Solve(false, Options.Debug, paramFile: configFile); var greedySolver = new GreedySolver(cinemaGreedy); var timesGreedy = greedySolver.Solve(); var result = new GreedyVsILPResult { InstanceFile = instanceFile, ConfigFile = configFile, TotalNumberOfGroups = cinemaILP.TotalNumberOfGroups, TotalNumberOfPeople = cinemaILP.TotalNumberOfPeople, ILPTime = timesILP["Total"], GreedyTime = timesGreedy["Total"], SeatedGreedy = cinemaGreedy.CountSeated(), SeatedILP = cinemaILP.CountSeated(), ValidGreedy = cinemaGreedy.Verify(), ValidILP = cinemaILP.Verify(), Capacity = cinemaGreedy.InitialCapacity }; csv.WriteRecord(result); csv.NextRecord(); } } }
private void RunTuneVsNoTune() { var resultsFile = $"{ResultsFolder}tune_vs_no_tune_{DateTime.Now.ToString("yyyy-dd-M-HH-mm-ss")}.csv"; using (var writer = new StreamWriter(resultsFile)) using (var csv = new CsvWriter(writer, CultureInfo.InvariantCulture)) { csv.WriteHeader(typeof(TuneVsNoTuneResult)); csv.NextRecord(); } for (int i = 1; i <= NumberOfInstances; i++) { using (var stream = File.Open(resultsFile, FileMode.Append)) using (var writer = new StreamWriter(stream)) using (var csv = new CsvWriter(writer, CultureInfo.InvariantCulture)) { csv.Configuration.HasHeaderRecord = false; var instanceFile = $"{InstancesFolder}/Exact{i}.txt"; var configFile = $"{ConfigsFolder}tune_Exact{i}_0.prm"; var cinemaTuned = CinemaReader.Read(instanceFile); var cinemaNotTuned = CinemaReader.Read(instanceFile);; var solverTuned = new ILPSolver(cinemaTuned); var timesTuned = solverTuned.Solve(false, Options.Debug, paramFile: configFile); var solverNotTuned = new ILPSolver(cinemaNotTuned); var timesNotuned = solverNotTuned.Solve(false, Options.Debug); var result = new TuneVsNoTuneResult { InstanceFile = instanceFile, ConfigFileTuned = configFile, TotalNumberOfGroups = cinemaTuned.TotalNumberOfGroups, TotalNumberOfPeople = cinemaTuned.TotalNumberOfPeople, OptimizationTimeNotTuned = timesNotuned["Optimizing"], OptimizationTimeTuned = timesTuned["Optimizing"], SeatedNotTuned = cinemaNotTuned.CountSeated(), SeatedTuned = cinemaTuned.CountSeated(), ValidNotTuned = cinemaNotTuned.Verify(), ValidTuned = cinemaTuned.Verify() }; csv.WriteRecord(result); csv.NextRecord(); } } }
private void RunNormalSolver() { var resultsFile = $"{ResultsFolder}normal_solver_{DateTime.Now.ToString("yyyy-dd-M-HH-mm-ss")}.csv"; using (var writer = new StreamWriter(resultsFile)) using (var csv = new CsvWriter(writer, CultureInfo.InvariantCulture)) { csv.WriteHeader(typeof(NormalILPSolverResult)); csv.NextRecord(); } for (int i = 1; i <= NumberOfInstances; i++) { using (var stream = File.Open(resultsFile, FileMode.Append)) using (var writer = new StreamWriter(stream)) using (var csv = new CsvWriter(writer, CultureInfo.InvariantCulture)) { csv.Configuration.HasHeaderRecord = false; var instanceFile = $"{InstancesFolder}/Exact{i}.txt"; var configFile = $"{ConfigsFolder}tune_Exact{i}_0.prm"; var cinema = CinemaReader.Read(instanceFile); var solver = new ILPSolver(cinema); var times = solver.Solve(false, Options.Debug, paramFile: configFile); var result = new NormalILPSolverResult { InstanceFile = instanceFile, ConfigFile = configFile, TotalNumberOfGroups = cinema.TotalNumberOfGroups, TotalNumberOfPeople = cinema.TotalNumberOfPeople, OptimizationTime = times["Optimizing"], ConstraintTime = times["Add Constraints"], Seated = cinema.CountSeated(), Valid = cinema.Verify(), Capacity = cinema.InitialCapacity }; csv.WriteRecord(result); csv.NextRecord(); } } }
private void RunTuning() { var resultsFile = $"{ResultsFolder}greedy_vs_ilp_{DateTime.Now.ToString("yyyy-dd-M-HH-mm-ss")}.csv"; using (var writer = new StreamWriter(resultsFile)) using (var csv = new CsvWriter(writer, CultureInfo.InvariantCulture)) { csv.WriteHeader(typeof(GreedyVsILPResult)); csv.NextRecord(); } for (int i = 1; i <= NumberOfInstances; i++) { var instanceFile = $"{InstancesFolder}/Exact{i}.txt"; var configFile = $"{ConfigsFolder}tune_Exact{i}_0.prm"; var tuneFile = $"{TuneFolder}tune_Exact{i}_0.prm"; var cinemaILP = CinemaReader.Read(instanceFile); var solverILP = new ILPSolver(cinemaILP); solverILP.Solve(true, Options.Debug, tuneFile, configFile); } }
private void RunTryGreedyFirst() { var resultsFile = $"{ResultsFolder}greedy_first_{DateTime.Now.ToString("yyyy-dd-M-HH-mm-ss")}.csv"; using (var writer = new StreamWriter(resultsFile)) using (var csv = new CsvWriter(writer, CultureInfo.InvariantCulture)) { csv.WriteHeader(typeof(TryGreedyFirstResult)); csv.NextRecord(); } for (int i = 1; i <= NumberOfInstances; i++) { using (var stream = File.Open(resultsFile, FileMode.Append)) using (var writer = new StreamWriter(stream)) using (var csv = new CsvWriter(writer, CultureInfo.InvariantCulture)) { csv.Configuration.HasHeaderRecord = false; var instanceFile = $"{InstancesFolder}/Exact{i}.txt"; var configFile = $"{ConfigsFolder}tune_Exact{i}_0.prm"; var cinema = CinemaReader.Read(instanceFile); var greedyCinema = CinemaReader.Read(instanceFile); var greedySolver = new GreedySolver(greedyCinema); var totalTime = Utils.TimeAction(() => { var times = greedySolver.Solve(); if (cinema.TotalNumberOfPeople != greedyCinema.CountSeated()) { var ilpCinema = CinemaReader.Read(instanceFile); var ilpSolver = new ILPSolver(ilpCinema); times = ilpSolver.Solve(Options.Tune, Options.Debug, Options.TuneOutputFile, configFile); cinema = ilpCinema; } else { cinema = greedyCinema; } }, "Time"); var result = new TryGreedyFirstResult { InstanceFile = instanceFile, ConfigFile = configFile, TotalNumberOfGroups = cinema.TotalNumberOfGroups, TotalNumberOfPeople = cinema.TotalNumberOfPeople, TotalTime = totalTime, Seated = cinema.CountSeated(), Valid = cinema.Verify(), Capacity = cinema.InitialCapacity }; csv.WriteRecord(result); csv.NextRecord(); } } }
public void Run() { var totalTime = Utils.TimeAction(() => { var cinema = CinemaReader.Read(Options.InstanceConfig.InstanceFile); Dictionary <string, string> times = new Dictionary <string, string>(); Console.WriteLine("Solving: " + Options.InstanceConfig.InstanceFile); Console.WriteLine(cinema); if (Options.GreedyOnly) { var solver = new GreedySolver(cinema); if (Options.Debug) { Console.WriteLine("Solving via Greedy only"); } times = solver.Solve(); } else if (Options.ILPOnly) { var solver = new ILPSolver(cinema); if (Options.Debug) { Console.WriteLine("Solving via ILP only"); } times = solver.Solve(Options.Tune, Options.Debug, Options.TuneOutputFile, Options.InstanceConfig.ConfigFile); } else { if (Options.Debug) { Console.WriteLine("Solving via both"); } var greedyCinema = CinemaReader.Read(Options.InstanceConfig.InstanceFile); var greedySolver = new GreedySolver(greedyCinema); times = greedySolver.Solve(); if (cinema.TotalNumberOfPeople != greedyCinema.CountSeated()) { var ilpCinema = CinemaReader.Read(Options.InstanceConfig.InstanceFile); var ilpSolver = new ILPSolver(ilpCinema); times = ilpSolver.Solve(Options.Tune, Options.Debug, Options.TuneOutputFile, Options.InstanceConfig.ConfigFile); cinema = ilpCinema; } else { cinema = greedyCinema; } } Console.WriteLine(cinema); Console.WriteLine("People seated:" + cinema.CountSeated() + " out of " + cinema.TotalNumberOfPeople); Console.WriteLine($"Valid cinema:{cinema.Verify()}"); }, "Time"); Console.WriteLine($"Total Solving Time: {totalTime}"); }