X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/7f3527d281baac664d10ce7086e0d0138e1389d7..8a8bedcb59d9f71233c56cccede6a98496361e06:/teshsuite/surf/lmm_usage/lmm_usage.cpp diff --git a/teshsuite/surf/lmm_usage/lmm_usage.cpp b/teshsuite/surf/lmm_usage/lmm_usage.cpp index c4ea52e51f..49e4073d97 100644 --- a/teshsuite/surf/lmm_usage/lmm_usage.cpp +++ b/teshsuite/surf/lmm_usage/lmm_usage.cpp @@ -1,7 +1,6 @@ /* A few tests for the maxmin library */ -/* Copyright (c) 2007-2018s. The SimGrid Team. - * All rights reserved. */ +/* Copyright (c) 2007-2018. The SimGrid Team. All rights reserved. */ /* This program is free software; you can redistribute it and/or modify it * under the terms of the license (GNU LGPL) which comes with this package. */ @@ -17,7 +16,7 @@ XBT_LOG_NEW_DEFAULT_CATEGORY(surf_test, "Messages specific for surf example"); -using namespace simgrid::surf; +namespace lmm = simgrid::kernel::lmm; #define PRINT_VAR(var) XBT_DEBUG(#var " = %g", (var)->get_value()) #define SHOW_EXPR(expr) XBT_DEBUG(#expr " = %g",expr) @@ -28,6 +27,20 @@ using namespace simgrid::surf; enum method_t { MAXMIN, LAGRANGE_RENO, LAGRANGE_VEGAS }; +static lmm::System* new_system(method_t method) +{ + /* selective update would need real actions instead of NULL as a first parameter to the variable constructor */ + switch (method) { + case MAXMIN: + return lmm::make_new_maxmin_system(false); + case LAGRANGE_VEGAS: + case LAGRANGE_RENO: + return lmm::make_new_lagrange_system(false); + default: + xbt_die("Invalid method"); + } +} + static double dichotomy(double func(double), double min, double max, double min_error) { double overall_error = 2 * min_error; @@ -35,11 +48,11 @@ static double dichotomy(double func(double), double min, double max, double min_ double min_func = func(min); double max_func = func(max); - if ((min_func > 0 && max_func > 0)) + if (min_func > 0 && max_func > 0) return min - 1.0; - if ((min_func < 0 && max_func < 0)) + if (min_func < 0 && max_func < 0) return max + 1.0; - if ((min_func > 0 && max_func < 0)) + if (min_func > 0 && max_func < 0) abort(); SHOW_EXPR(min_error); @@ -92,21 +105,19 @@ static void test1(method_t method) double b = 10.0; if (method == LAGRANGE_VEGAS) - set_default_protocol_function(simgrid::kernel::lmm::func_vegas_f, simgrid::kernel::lmm::func_vegas_fp, - simgrid::kernel::lmm::func_vegas_fpi); + lmm::Lagrange::set_default_protocol_function(lmm::func_vegas_f, lmm::func_vegas_fp, lmm::func_vegas_fpi); else if (method == LAGRANGE_RENO) - set_default_protocol_function(simgrid::kernel::lmm::func_reno_f, simgrid::kernel::lmm::func_reno_fpi, - simgrid::kernel::lmm::func_reno_fpi); + lmm::Lagrange::set_default_protocol_function(lmm::func_reno_f, lmm::func_reno_fp, lmm::func_reno_fpi); - lmm_system_t Sys = new simgrid::kernel::lmm::System(true); - simgrid::kernel::lmm::Constraint* L1 = Sys->constraint_new(nullptr, a); - simgrid::kernel::lmm::Constraint* L2 = Sys->constraint_new(nullptr, b); - simgrid::kernel::lmm::Constraint* L3 = Sys->constraint_new(nullptr, a); + lmm::System* Sys = new_system(method); + lmm::Constraint* L1 = Sys->constraint_new(nullptr, a); + lmm::Constraint* L2 = Sys->constraint_new(nullptr, b); + lmm::Constraint* L3 = Sys->constraint_new(nullptr, a); - simgrid::kernel::lmm::Variable* R_1_2_3 = Sys->variable_new(nullptr, 1.0, -1.0, 3); - simgrid::kernel::lmm::Variable* R_1 = Sys->variable_new(nullptr, 1.0, -1.0, 1); - simgrid::kernel::lmm::Variable* R_2 = Sys->variable_new(nullptr, 1.0, -1.0, 1); - simgrid::kernel::lmm::Variable* R_3 = Sys->variable_new(nullptr, 1.0, -1.0, 1); + lmm::Variable* R_1_2_3 = Sys->variable_new(nullptr, 1.0, -1.0, 3); + lmm::Variable* R_1 = Sys->variable_new(nullptr, 1.0, -1.0, 1); + lmm::Variable* R_2 = Sys->variable_new(nullptr, 1.0, -1.0, 1); + lmm::Variable* R_3 = Sys->variable_new(nullptr, 1.0, -1.0, 1); Sys->update_variable_weight(R_1_2_3, 1.0); Sys->update_variable_weight(R_1, 1.0); @@ -122,7 +133,7 @@ static void test1(method_t method) Sys->expand(L3, R_3, 1.0); if (method == MAXMIN) { - lmm_solve(Sys); + Sys->solve(); } else { double x; if (method == LAGRANGE_VEGAS) { @@ -147,7 +158,7 @@ static void test1(method_t method) xbt_die( "Invalid method"); } - lagrange_solve(Sys); + Sys->solve(); double max_deviation = 0.0; max_deviation = std::max(max_deviation, fabs(R_1->get_value() - x)); @@ -180,18 +191,17 @@ static void test1(method_t method) static void test2(method_t method) { if (method == LAGRANGE_VEGAS) - set_default_protocol_function(simgrid::kernel::lmm::func_vegas_f, simgrid::kernel::lmm::func_vegas_fp, - simgrid::kernel::lmm::func_vegas_fpi); + lmm::Lagrange::set_default_protocol_function(lmm::func_vegas_f, lmm::func_vegas_fp, lmm::func_vegas_fpi); if (method == LAGRANGE_RENO) - set_default_protocol_function(simgrid::kernel::lmm::func_reno_f, simgrid::kernel::lmm::func_reno_fp, - simgrid::kernel::lmm::func_reno_fpi); + lmm::Lagrange::set_default_protocol_function(lmm::func_reno_f, lmm::func_reno_fp, lmm::func_reno_fpi); + + lmm::System* Sys = new_system(method); - lmm_system_t Sys = new simgrid::kernel::lmm::System(true); - simgrid::kernel::lmm::Constraint* CPU1 = Sys->constraint_new(nullptr, 200.0); - simgrid::kernel::lmm::Constraint* CPU2 = Sys->constraint_new(nullptr, 100.0); + lmm::Constraint* CPU1 = Sys->constraint_new(nullptr, 200.0); + lmm::Constraint* CPU2 = Sys->constraint_new(nullptr, 100.0); - simgrid::kernel::lmm::Variable* T1 = Sys->variable_new(nullptr, 1.0, -1.0, 1); - simgrid::kernel::lmm::Variable* T2 = Sys->variable_new(nullptr, 1.0, -1.0, 1); + lmm::Variable* T1 = Sys->variable_new(nullptr, 1.0, -1.0, 1); + lmm::Variable* T2 = Sys->variable_new(nullptr, 1.0, -1.0, 1); Sys->update_variable_weight(T1, 1.0); Sys->update_variable_weight(T2, 1.0); @@ -199,13 +209,7 @@ static void test2(method_t method) Sys->expand(CPU1, T1, 1.0); Sys->expand(CPU2, T2, 1.0); - if (method == MAXMIN) { - lmm_solve(Sys); - } else if (method == LAGRANGE_VEGAS || method == LAGRANGE_RENO) { - lagrange_solve(Sys); - } else { - xbt_die("Invalid method"); - } + Sys->solve(); PRINT_VAR(T1); PRINT_VAR(T2); @@ -253,21 +257,19 @@ static void test3(method_t method) A[14][15] = 1.0; if (method == LAGRANGE_VEGAS) - set_default_protocol_function(simgrid::kernel::lmm::func_vegas_f, simgrid::kernel::lmm::func_vegas_fp, - simgrid::kernel::lmm::func_vegas_fpi); + lmm::Lagrange::set_default_protocol_function(lmm::func_vegas_f, lmm::func_vegas_fp, lmm::func_vegas_fpi); if (method == LAGRANGE_RENO) - set_default_protocol_function(simgrid::kernel::lmm::func_reno_f, simgrid::kernel::lmm::func_reno_fp, - simgrid::kernel::lmm::func_reno_fpi); + lmm::Lagrange::set_default_protocol_function(lmm::func_reno_f, lmm::func_reno_fp, lmm::func_reno_fpi); - lmm_system_t Sys = new simgrid::kernel::lmm::System(true); + lmm::System* Sys = new_system(method); /* Creates the constraints */ - simgrid::kernel::lmm::Constraint** tmp_cnst = new simgrid::kernel::lmm::Constraint*[15]; + lmm::Constraint** tmp_cnst = new lmm::Constraint*[15]; for (int i = 0; i < 15; i++) tmp_cnst[i] = Sys->constraint_new(nullptr, B[i]); /* Creates the variables */ - simgrid::kernel::lmm::Variable** tmp_var = new simgrid::kernel::lmm::Variable*[16]; + lmm::Variable** tmp_var = new lmm::Variable*[16]; for (int j = 0; j < 16; j++) { tmp_var[j] = Sys->variable_new(nullptr, 1.0, -1.0, 15); Sys->update_variable_weight(tmp_var[j], 1.0); @@ -279,15 +281,7 @@ static void test3(method_t method) if (A[i][j]) Sys->expand(tmp_cnst[i], tmp_var[j], 1.0); - if (method == MAXMIN) { - lmm_solve(Sys); - } else if (method == LAGRANGE_VEGAS) { - lagrange_solve(Sys); - } else if (method == LAGRANGE_RENO) { - lagrange_solve(Sys); - } else { - xbt_die("Invalid method"); - } + Sys->solve(); for (int j = 0; j < 16; j++) PRINT_VAR(tmp_var[j]);