From cf63f2a0ee8d54faa76693228a3527ae0cf155fe Mon Sep 17 00:00:00 2001
From: = <francois.hamonic@gmail.com>
Date: Wed, 30 Mar 2022 16:52:17 +0200
Subject: [PATCH] ok

---
 exec/execution_times/aude.cpp           | 18 +++---
 exec/execution_times/biorevaix.cpp      | 10 ++--
 exec/execution_times/marseille.cpp      | 72 +++--------------------
 exec/execution_times/quebec.cpp         | 76 +++----------------------
 exec/quality_of_solutions/aude.cpp      |  2 +-
 exec/quality_of_solutions/biorevaix.cpp |  9 +--
 exec/quality_of_solutions/marseille.cpp | 61 +-------------------
 exec/quality_of_solutions/quebec.cpp    | 63 +-------------------
 pl_eca_3.lp                             |  2 +-
 plot_scripts/optimum_ratios_tiled.py    |  2 +-
 10 files changed, 39 insertions(+), 276 deletions(-)

diff --git a/exec/execution_times/aude.cpp b/exec/execution_times/aude.cpp
index 3fe050e..3eff749 100755
--- a/exec/execution_times/aude.cpp
+++ b/exec/execution_times/aude.cpp
@@ -21,14 +21,14 @@ double eval(T && ls) {
 int main() {
     std::ofstream data_log("output/time_aude.csv");
     data_log << std::fixed << std::setprecision(6);
-    data_log << "budget,budget_percent,base_ECA,max_delta_ECA,pl_eca_2_ECA,pl_"
-                "eca_2_obj,pl_eca_2_variables,pl_2_constraints,pl_2_entries,pl_"
-                "2_time,pl_eca_3_ECA,pl_eca_3_obj,pl_eca_3_variables,pl_3_"
-                "constraints,pl_3_entries,pl_3_preprocessing_time,pl_3_time"
+    data_log << "budget,budget_percent,base_ECA,max_delta_ECA,pl_2_ECA,pl_eca_"
+                "2_obj,pl_2_variables,pl_2_constraints,pl_2_entries,pl_2_time,"
+                "pl_3_ECA,pl_3_obj,pl_3_variables,pl_3_constraints,pl_3_"
+                "entries,pl_3_preprocessing_time,pl_3_time"
              << std::endl;
 
     std::vector<double> budget_values;
-    for(int i = 0; i <= 15; ++i) budget_values.push_back(i);
+    for(int i = 1; i <= 15; ++i) budget_values.push_back(i);
 
     Solvers::PL_ECA_2 pl_eca_2;
     pl_eca_2.setTimeout(36000).setLogLevel(2);
@@ -58,7 +58,7 @@ int main() {
     std::cout << "plan total cost:" << plan.totalCost() << std::endl;
     // Helper::printInstanceGraphviz(landscape, plan, "aude.dot");
     // Helper::printInstance(landscape, plan, "aude.eps");
-    
+
     for(double B : budget_values) {
         const double base_ECA = eval(landscape);
         const double restored_ECA =
@@ -73,9 +73,9 @@ int main() {
         const double pl_3_ECA =
             eval(Helper::decore_landscape(landscape, plan, pl_3_solution));
 
-        data_log << B << ',' << B / plan.totalCost() * 100 << ',' << base_ECA << ','
-                 << max_delta_ECA << ',' << pl_2_ECA << ',' << pl_2_solution.obj
-                 << ',' << pl_2_solution.nb_vars << ','
+        data_log << B << ',' << B / plan.totalCost() * 100 << ',' << base_ECA
+                 << ',' << max_delta_ECA << ',' << pl_2_ECA << ','
+                 << pl_2_solution.obj << ',' << pl_2_solution.nb_vars << ','
                  << pl_2_solution.nb_constraints << ','
                  << pl_2_solution.nb_elems << ','
                  << pl_2_solution.getComputeTimeMs() << ',' << pl_3_ECA << ','
diff --git a/exec/execution_times/biorevaix.cpp b/exec/execution_times/biorevaix.cpp
index fb204ae..01f9a1b 100755
--- a/exec/execution_times/biorevaix.cpp
+++ b/exec/execution_times/biorevaix.cpp
@@ -84,14 +84,14 @@ Instance make_instance(const double dist_coef, const double restoration_coef) {
 int main() {
     std::ofstream data_log("output/time_biorevaix.csv");
     data_log << std::fixed << std::setprecision(6);
-    data_log << "budget,budget_percent,base_ECA,max_delta_ECA,pl_eca_2_ECA,pl_"
-                "eca_2_obj,pl_eca_2_variables,pl_2_constraints,pl_2_entries,pl_"
-                "2_time,pl_eca_3_ECA,pl_eca_3_obj,pl_eca_3_variables,pl_3_"
-                "constraints,pl_3_entries,pl_3_preprocessing_time,pl_3_time"
+    data_log << "budget,budget_percent,base_ECA,max_delta_ECA,pl_2_ECA,pl_eca_"
+                "2_obj,pl_2_variables,pl_2_constraints,pl_2_entries,pl_2_time,"
+                "pl_3_ECA,pl_3_obj,pl_3_variables,pl_3_constraints,pl_3_"
+                "entries,pl_3_preprocessing_time,pl_3_time"
              << std::endl;
 
     std::vector<double> budget_percents;
-    for(int i = 17; i <= 40; ++i) budget_percents.push_back(i);
+    for(int i = 1; i <= 40; ++i) budget_percents.push_back(i);
 
     Solvers::PL_ECA_2 pl_eca_2;
     pl_eca_2.setTimeout(36000).setLogLevel(2);
diff --git a/exec/execution_times/marseille.cpp b/exec/execution_times/marseille.cpp
index c2ec444..568df8b 100755
--- a/exec/execution_times/marseille.cpp
+++ b/exec/execution_times/marseille.cpp
@@ -21,14 +21,14 @@ double eval(T && ls) {
 int main() {
     std::ofstream data_log("output/time_marseille.csv");
     data_log << std::fixed << std::setprecision(6);
-    data_log << "budget,budget_percent,base_ECA,max_delta_ECA,pl_eca_2_ECA,pl_"
-                "eca_2_obj,pl_eca_2_variables,pl_2_constraints,pl_2_entries,pl_"
-                "2_time,pl_eca_3_ECA,pl_eca_3_obj,pl_eca_3_variables,pl_3_"
-                "constraints,pl_3_entries,pl_3_preprocessing_time,pl_3_time"
+    data_log << "budget,budget_percent,base_ECA,max_delta_ECA,pl_2_ECA,pl_eca_"
+                "2_obj,pl_2_variables,pl_2_constraints,pl_2_entries,pl_2_time,"
+                "pl_3_ECA,pl_3_obj,pl_3_variables,pl_3_constraints,pl_3_"
+                "entries,pl_3_preprocessing_time,pl_3_time"
              << std::endl;
 
     std::vector<double> budget_percents;
-    for(int i = 0; i <= 40; ++i) budget_percents.push_back(i);
+    for(int i = 1; i <= 40; ++i) budget_percents.push_back(i);
 
     Solvers::PL_ECA_2 pl_eca_2;
     pl_eca_2.setTimeout(36000).setLogLevel(2);
@@ -41,8 +41,7 @@ int main() {
     const MutableLandscape & landscape = instance.landscape;
     const RestorationPlan<MutableLandscape> & plan = instance.plan;
 
-    
-    for(double budget_percent : budget_percents) {
+        for(double budget_percent : budget_percents) {
         const double B = plan.totalCost() * budget_percent / 100;
 
         const double base_ECA = eval(landscape);
@@ -72,61 +71,4 @@ int main() {
     }
 
     return EXIT_SUCCESS;
-}
-
-// #include <filesystem>
-// #include <fstream>
-// #include <iostream>
-
-// #include "indices/eca.hpp"
-// #include "landscape/decored_landscape.hpp"
-
-// #include "solvers/bogo.hpp"
-// #include "solvers/glutton_eca_dec.hpp"
-// #include "solvers/glutton_eca_inc.hpp"
-// #include "solvers/pl_eca_3.hpp"
-
-// #include "helper.hpp"
-// #include "instances_helper.hpp"
-
-// int main() {
-//     std::ofstream data_log("output/marseille_analysis.csv");
-//     data_log << std::fixed << std::setprecision(6);
-//     data_log << "median_dist,90_eca_node_cover,90_eca_node_cover_restored,"
-//                 "base_ECA,delta_ECA"
-//              << std::endl;
-
-//     std::vector<double> median_dists{500,  1000, 1500, 2000, 2500,
-//                                      3000, 3500, 4000, 5000};
-
-//     const ECA & eca = ECA();
-
-//     for(double median : median_dists) {
-//         const Instance instance = make_instance_marseille(1, 0, median, 100);
-//         const MutableLandscape & landscape = instance.landscape;
-//         const RestorationPlan<MutableLandscape> & plan = instance.plan;
-
-//         // Helper::assert_well_formed(landscape, plan);
-//         // Helper::printInstanceGraphviz(landscape, plan,
-//         //                       "marseille.dot");
-
-//         auto restored_landscape = Helper::decore_landscape(landscape, plan);
-
-//         const double eca_90_node_cover =
-//             Helper::averageRatioOfNodesInECARealization(0.90, landscape);
-//         const double eca_90_node_cover_restored =
-//             Helper::averageRatioOfNodesInECARealization(0.90,
-//                                                         restored_landscape);
-
-//         const double base_ECA = ECA().eval(landscape);
-//         const double restored_ECA = ECA().eval(restored_landscape);
-//         const double delta_ECA = restored_ECA - base_ECA;
-
-//         data_log << median << ',' << eca_90_node_cover * 100 << ','
-//                  << eca_90_node_cover_restored * 100 << ',' << base_ECA <<
-//                  ','
-//                  << delta_ECA << std::endl;
-//     }
-
-//     return EXIT_SUCCESS;
-// }
\ No newline at end of file
+}
\ No newline at end of file
diff --git a/exec/execution_times/quebec.cpp b/exec/execution_times/quebec.cpp
index fb5f451..731351e 100755
--- a/exec/execution_times/quebec.cpp
+++ b/exec/execution_times/quebec.cpp
@@ -21,14 +21,14 @@ double eval(T && ls) {
 int main() {
     std::ofstream data_log("output/time_quebec.csv");
     data_log << std::fixed << std::setprecision(6);
-    data_log << "budget,budget_percent,base_ECA,max_delta_ECA,pl_eca_2_ECA,pl_"
-                "eca_2_obj,pl_eca_2_variables,pl_2_constraints,pl_2_entries,pl_"
-                "2_time,pl_eca_3_ECA,pl_eca_3_obj,pl_eca_3_variables,pl_3_"
-                "constraints,pl_3_entries,pl_3_preprocessing_time,pl_3_time"
+    data_log << "budget,budget_percent,base_ECA,max_delta_ECA,pl_2_ECA,pl_eca_"
+                "2_obj,pl_2_variables,pl_2_constraints,pl_2_entries,pl_2_time,"
+                "pl_3_ECA,pl_3_obj,pl_3_variables,pl_3_constraints,pl_3_"
+                "entries,pl_3_preprocessing_time,pl_3_time"
              << std::endl;
 
     std::vector<double> budget_percents;
-    for(int i = 31; i <= 40; ++i) budget_percents.push_back(i);
+    for(int i = 1; i <= 40; ++i) budget_percents.push_back(i);
 
     Solvers::PL_ECA_2 pl_eca_2;
     pl_eca_2.setTimeout(36000).setLogLevel(2);
@@ -54,8 +54,7 @@ int main() {
     // Helper::printInstanceGraphviz(landscape, plan, "quebec.dot");
     // Helper::printInstance(landscape, plan, "quebec.eps");
 
-    
-    for(double budget_percent : budget_percents) {
+        for(double budget_percent : budget_percents) {
         const double B = plan.totalCost() * budget_percent / 100;
 
         const double base_ECA = eval(landscape);
@@ -85,65 +84,4 @@ int main() {
     }
 
     return EXIT_SUCCESS;
-}
-
-// #include <filesystem>
-// #include <fstream>
-// #include <iostream>
-
-// #include "indices/eca.hpp"
-// #include "landscape/decored_landscape.hpp"
-
-// #include "solvers/bogo.hpp"
-// #include "solvers/glutton_eca_dec.hpp"
-// #include "solvers/glutton_eca_inc.hpp"
-// #include "solvers/pl_eca_3.hpp"
-
-// #include "helper.hpp"
-// #include "instances_helper.hpp"
-// #include "print_helper.hpp"
-
-// int main() {
-//     std::ofstream data_log("output/quebec_analysis.csv");
-//     data_log << std::fixed << std::setprecision(6);
-//     data_log <<
-//     "median_dist,90_eca_node_cover,90_eca_node_cover_restored,base_"
-//                 "ECA,delta_ECA"
-//              << std::endl;
-
-//     std::vector<double> median_dists{1000, 1500, 2000, 2500, 3000, 3500};
-//     std::vector<double> decreased_probs{0};
-
-//     const ECA & eca = ECA();
-
-//     for(double median : median_dists) {
-//         Instance instance = make_instance_quebec_frog(1, 0, median);
-//         const MutableLandscape & landscape = instance.landscape;
-//         const RestorationPlan<MutableLandscape> & plan = instance.plan;
-
-//         std::cout << lemon::countNodes(landscape.getNetwork()) << std::endl;
-
-//         Helper::assert_well_formed(landscape, plan);
-//         Helper::printInstanceGraphviz(landscape, plan, "quebec.dot");
-
-//         auto restored_landscape = Helper::decore_landscape(landscape, plan);
-
-//         const double eca_90_node_cover =
-//             Helper::averageRatioOfNodesInECARealization(0.90, landscape);
-//         const double eca_90_node_cover_restored =
-//             Helper::averageRatioOfNodesInECARealization(0.90,
-//                                                         restored_landscape);
-
-//         const double base_ECA = ECA().eval(landscape);
-//         const double restored_ECA =
-//             ECA().eval(Helper::decore_landscape(landscape, plan));
-//         const double delta_ECA = restored_ECA - base_ECA;
-
-//         data_log << median << ',' << eca_90_node_cover * 100 << ','
-//                  << eca_90_node_cover_restored * 100 << ',' << base_ECA <<
-//                  ','
-//                  << delta_ECA << std::endl;
-//     }
-
-//     return EXIT_SUCCESS;
-// }
\ No newline at end of file
+}
\ No newline at end of file
diff --git a/exec/quality_of_solutions/aude.cpp b/exec/quality_of_solutions/aude.cpp
index 2b7f6bc..aa7c3e0 100755
--- a/exec/quality_of_solutions/aude.cpp
+++ b/exec/quality_of_solutions/aude.cpp
@@ -33,7 +33,7 @@ int main() {
         << std::endl;
 
     std::vector<double> budget_values;
-    for(int i = 0; i <= 15; ++i) budget_values.push_back(i);
+    for(int i = 1; i <= 15; ++i) budget_values.push_back(i);
 
     Solvers::Bogo bogo;
     bogo.setSeed(299792458);
diff --git a/exec/quality_of_solutions/biorevaix.cpp b/exec/quality_of_solutions/biorevaix.cpp
index 26ca60f..29e2dd4 100755
--- a/exec/quality_of_solutions/biorevaix.cpp
+++ b/exec/quality_of_solutions/biorevaix.cpp
@@ -26,7 +26,8 @@ Instance make_instance(const double dist_coef, const double restoration_coef) {
     Instance raw_instance =
         make_instance_biorevaix(restoration_coef, dist_coef);
 
-    Helper::printInstanceGraphviz(raw_instance.landscape, raw_instance.plan, "biorevaix_raw.dot");
+    Helper::printInstanceGraphviz(raw_instance.landscape, raw_instance.plan,
+                                  "biorevaix_raw.dot");
 
     Instance instance = trivial_reformulate(std::move(raw_instance));
 
@@ -41,7 +42,8 @@ Instance make_instance(const double dist_coef, const double restoration_coef) {
     //           << std::endl;
 
     // int count = 0;
-    // for(MutableLandscape::NodeIt u(landscape.getNetwork()); u != lemon::INVALID;
+    // for(MutableLandscape::NodeIt u(landscape.getNetwork()); u !=
+    // lemon::INVALID;
     //     ++u)
     //     count += (landscape.getQuality(u) > 0 ? 1 : 0);
     // std::cout << "nb nodes positive quality:" << count << std::endl;
@@ -65,7 +67,6 @@ Instance make_instance(const double dist_coef, const double restoration_coef) {
         }
     }
 
-
     std::cout << "nb nodes:" << lemon::countNodes(landscape.getNetwork())
               << std::endl;
     std::cout << "nb arcs:" << lemon::countArcs(landscape.getNetwork())
@@ -95,7 +96,7 @@ int main() {
         << std::endl;
 
     std::vector<double> budget_percents;
-    for(int i = 0; i <= 40; ++i) budget_percents.push_back(i);
+    for(int i = 1; i <= 40; ++i) budget_percents.push_back(i);
 
     Solvers::Bogo bogo;
     bogo.setSeed(299792458);
diff --git a/exec/quality_of_solutions/marseille.cpp b/exec/quality_of_solutions/marseille.cpp
index a404921..c72dfbc 100755
--- a/exec/quality_of_solutions/marseille.cpp
+++ b/exec/quality_of_solutions/marseille.cpp
@@ -32,7 +32,7 @@ int main() {
              << std::endl;
 
     std::vector<double> budget_percents;
-    for(int i = 0; i <= 40; ++i) budget_percents.push_back(i);
+    for(int i = 1; i <= 40; ++i) budget_percents.push_back(i);
 
     Solvers::Bogo bogo;
     bogo.setSeed(299792458);
@@ -113,61 +113,4 @@ int main() {
     }
 
     return EXIT_SUCCESS;
-}
-
-// #include <filesystem>
-// #include <fstream>
-// #include <iostream>
-
-// #include "indices/eca.hpp"
-// #include "landscape/decored_landscape.hpp"
-
-// #include "solvers/bogo.hpp"
-// #include "solvers/glutton_eca_dec.hpp"
-// #include "solvers/glutton_eca_inc.hpp"
-// #include "solvers/pl_eca_3.hpp"
-
-// #include "helper.hpp"
-// #include "instances_helper.hpp"
-
-// int main() {
-//     std::ofstream data_log("output/marseille_analysis.csv");
-//     data_log << std::fixed << std::setprecision(6);
-//     data_log << "median_dist,90_eca_node_cover,90_eca_node_cover_restored,"
-//                 "base_ECA,delta_ECA"
-//              << std::endl;
-
-//     std::vector<double> median_dists{500,  1000, 1500, 2000, 2500,
-//                                      3000, 3500, 4000, 5000};
-
-//     const ECA & eca = ECA();
-
-//     for(double median : median_dists) {
-//         const Instance instance = make_instance_marseille(1, 0, median, 100);
-//         const MutableLandscape & landscape = instance.landscape;
-//         const RestorationPlan<MutableLandscape> & plan = instance.plan;
-
-//         // Helper::assert_well_formed(landscape, plan);
-//         // Helper::printInstanceGraphviz(landscape, plan,
-//         //                       "marseille.dot");
-
-//         auto restored_landscape = Helper::decore_landscape(landscape, plan);
-
-//         const double eca_90_node_cover =
-//             Helper::averageRatioOfNodesInECARealization(0.90, landscape);
-//         const double eca_90_node_cover_restored =
-//             Helper::averageRatioOfNodesInECARealization(0.90,
-//                                                         restored_landscape);
-
-//         const double base_ECA = ECA().eval(landscape);
-//         const double restored_ECA = ECA().eval(restored_landscape);
-//         const double delta_ECA = restored_ECA - base_ECA;
-
-//         data_log << median << ',' << eca_90_node_cover * 100 << ','
-//                  << eca_90_node_cover_restored * 100 << ',' << base_ECA <<
-//                  ','
-//                  << delta_ECA << std::endl;
-//     }
-
-//     return EXIT_SUCCESS;
-// }
\ No newline at end of file
+}
\ No newline at end of file
diff --git a/exec/quality_of_solutions/quebec.cpp b/exec/quality_of_solutions/quebec.cpp
index 51d31c3..a7ee81d 100755
--- a/exec/quality_of_solutions/quebec.cpp
+++ b/exec/quality_of_solutions/quebec.cpp
@@ -124,65 +124,4 @@ int main() {
     }
 
     return EXIT_SUCCESS;
-}
-
-// #include <filesystem>
-// #include <fstream>
-// #include <iostream>
-
-// #include "indices/eca.hpp"
-// #include "landscape/decored_landscape.hpp"
-
-// #include "solvers/bogo.hpp"
-// #include "solvers/glutton_eca_dec.hpp"
-// #include "solvers/glutton_eca_inc.hpp"
-// #include "solvers/pl_eca_3.hpp"
-
-// #include "helper.hpp"
-// #include "instances_helper.hpp"
-// #include "print_helper.hpp"
-
-// int main() {
-//     std::ofstream data_log("output/quebec_analysis.csv");
-//     data_log << std::fixed << std::setprecision(6);
-//     data_log <<
-//     "median_dist,90_eca_node_cover,90_eca_node_cover_restored,base_"
-//                 "ECA,delta_ECA"
-//              << std::endl;
-
-//     std::vector<double> median_dists{1000, 1500, 2000, 2500, 3000, 3500};
-//     std::vector<double> decreased_probs{0};
-
-//     const ECA & eca = ECA();
-
-//     for(double median : median_dists) {
-//         Instance instance = make_instance_quebec_frog(1, 0, median);
-//         const MutableLandscape & landscape = instance.landscape;
-//         const RestorationPlan<MutableLandscape> & plan = instance.plan;
-
-//         std::cout << lemon::countNodes(landscape.getNetwork()) << std::endl;
-
-//         Helper::assert_well_formed(landscape, plan);
-//         Helper::printInstanceGraphviz(landscape, plan, "quebec.dot");
-
-//         auto restored_landscape = Helper::decore_landscape(landscape, plan);
-
-//         const double eca_90_node_cover =
-//             Helper::averageRatioOfNodesInECARealization(0.90, landscape);
-//         const double eca_90_node_cover_restored =
-//             Helper::averageRatioOfNodesInECARealization(0.90,
-//                                                         restored_landscape);
-
-//         const double base_ECA = ECA().eval(landscape);
-//         const double restored_ECA =
-//             ECA().eval(Helper::decore_landscape(landscape, plan));
-//         const double delta_ECA = restored_ECA - base_ECA;
-
-//         data_log << median << ',' << eca_90_node_cover * 100 << ','
-//                  << eca_90_node_cover_restored * 100 << ',' << base_ECA <<
-//                  ','
-//                  << delta_ECA << std::endl;
-//     }
-
-//     return EXIT_SUCCESS;
-// }
\ No newline at end of file
+}
\ No newline at end of file
diff --git a/pl_eca_3.lp b/pl_eca_3.lp
index 1fc6b03..f25a34e 100644
--- a/pl_eca_3.lp
+++ b/pl_eca_3.lp
@@ -173031,7 +173031,7 @@ R0167152:  252 y_0 + 801 y_1 + 1080 y_2 + 54 y_3 + 630 y_4 + 288 y_5 + 24624 y_6
  + 369 y_230 + 261 y_231 + 414 y_232 + 747 y_233 + 981 y_234 + 1125 y_235 + 198 y_236 + 450 y_237 + 1026 y_238 + 900 y_239
  + 1359 y_240 + 2808 y_241 + 1161 y_242 + 351 y_243 + 180 y_244 + 387 y_245 + 2052 y_246 + 432 y_247 + 1386 y_248 + 1746 y_249
  + 1098 y_250 + 279 y_251 + 504 y_252 + 7767 y_253 + 927 y_254 + 549 y_255 + 477 y_256 + 351 y_257 + 198 y_258 + 477 y_259
- <= 8533.08000
+ <= 4266.54000
 R0167152_low: 252 y_0 + 801 y_1 + 1080 y_2 + 54 y_3 + 630 y_4 + 288 y_5 + 24624 y_6 + 18 y_7 + 2142 y_8 + 63 y_9
  + 81 y_10 + 990 y_11 + 1323 y_12 + 3753 y_13 + 63 y_14 + 369 y_15 + 360 y_16 + 414 y_17 + 261 y_18 + 90 y_19
  + 162 y_20 + 738 y_21 + 1584 y_22 + 9 y_23 + 45 y_24 + 90 y_25 + 1485 y_26 + 657 y_27 + 162 y_28 + 342 y_29
diff --git a/plot_scripts/optimum_ratios_tiled.py b/plot_scripts/optimum_ratios_tiled.py
index 20aac40..b24b79a 100644
--- a/plot_scripts/optimum_ratios_tiled.py
+++ b/plot_scripts/optimum_ratios_tiled.py
@@ -50,5 +50,5 @@ fig.set_size_inches(8,6)
 plt.rcParams.update({'font.size': 18})
 
 # plt.tight_layout()
-plt.savefig("figures/optimum_ratios.pdf", dpi=500)
+plt.savefig("output/optimum_ratios.pdf", dpi=500)
 # plt.show()
\ No newline at end of file
-- 
GitLab