X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/83f54f6317f4a731d5534216d9ffb51b69dd51c9..d4b2fe80fbab6343e6dce68a12eb522a2e0559b8:/src/kernel/lmm/lagrange.cpp diff --git a/src/kernel/lmm/lagrange.cpp b/src/kernel/lmm/lagrange.cpp index 07c8fbb9ef..f9d999d821 100644 --- a/src/kernel/lmm/lagrange.cpp +++ b/src/kernel/lmm/lagrange.cpp @@ -39,17 +39,16 @@ double (*func_fpi_def)(const Variable&, double); // solves the proportional fairness using a Lagrangian optimization with dichotomy step void lagrange_solve(lmm_system_t sys); // computes the value of the dichotomy using a initial values, init, with a specific variable or constraint -static double dichotomy(double init, double diff(double, const s_lmm_constraint_t&), const s_lmm_constraint_t& cnst, - double min_error); +static double dichotomy(double init, double diff(double, const Constraint&), const Constraint& cnst, double min_error); // computes the value of the differential of constraint cnst applied to lambda -static double partial_diff_lambda(double lambda, const s_lmm_constraint_t& cnst); +static double partial_diff_lambda(double lambda, const Constraint& cnst); template static int __check_feasible(const CnstList& cnst_list, const VarList& var_list, int warn) { - for (s_lmm_constraint_t const& cnst : cnst_list) { + for (Constraint const& cnst : cnst_list) { double tmp = 0; - for (s_lmm_element_t const& elem : cnst.enabled_element_set) { + for (Element const& elem : cnst.enabled_element_set) { lmm_variable_t var = elem.variable; xbt_assert(var->sharing_weight > 0); tmp += var->value; @@ -83,7 +82,7 @@ static double new_value(const Variable& var) { double tmp = 0; - for (s_lmm_element_t const& elem : var.cnsts) { + for (Element const& elem : var.cnsts) { tmp += elem.constraint->lambda; } if (var.bound > 0) @@ -98,7 +97,7 @@ static double new_mu(const Variable& var) double mu_i = 0.0; double sigma_i = 0.0; - for (s_lmm_element_t const& elem : var.cnsts) { + for (Element const& elem : var.cnsts) { sigma_i += elem.constraint->lambda; } mu_i = var.func_fp(var, var.bound) - sigma_i; @@ -118,7 +117,7 @@ static double dual_objective(const VarList& var_list, const CnstList& cnst_list) if (not var.sharing_weight) break; - for (s_lmm_element_t const& elem : var.cnsts) + for (Element const& elem : var.cnsts) sigma_i += elem.constraint->lambda; if (var.bound > 0) @@ -132,7 +131,7 @@ static double dual_objective(const VarList& var_list, const CnstList& cnst_list) obj += var.mu * var.bound; } - for (s_lmm_constraint_t const& cnst : cnst_list) + for (Constraint const& cnst : cnst_list) obj += cnst.lambda * cnst.bound; return obj; @@ -161,7 +160,7 @@ void lagrange_solve(lmm_system_t sys) /* Initialize lambda. */ auto& cnst_list = sys->active_constraint_set; - for (s_lmm_constraint_t& cnst : cnst_list) { + for (Constraint& cnst : cnst_list) { cnst.lambda = 1.0; cnst.new_lambda = 2.0; XBT_DEBUG("#### cnst(%p)->lambda : %e", &cnst, cnst.lambda); @@ -187,8 +186,8 @@ void lagrange_solve(lmm_system_t sys) XBT_DEBUG("#### var(%p) ->mu : %e", &var, var.mu); XBT_DEBUG("#### var(%p) ->weight: %e", &var, var.sharing_weight); XBT_DEBUG("#### var(%p) ->bound: %e", &var, var.bound); - auto weighted = std::find_if(begin(var.cnsts), end(var.cnsts), - [](s_lmm_element_t const& x) { return x.consumption_weight != 0.0; }); + auto weighted = + std::find_if(begin(var.cnsts), end(var.cnsts), [](Element const& x) { return x.consumption_weight != 0.0; }); if (weighted == end(var.cnsts)) var.value = 1.0; } @@ -220,7 +219,7 @@ void lagrange_solve(lmm_system_t sys) } /* Improve the value of lambda_i */ - for (s_lmm_constraint_t& cnst : cnst_list) { + for (Constraint& cnst : cnst_list) { XBT_DEBUG("Working on cnst (%p)", &cnst); cnst.new_lambda = dichotomy(cnst.lambda, partial_diff_lambda, cnst, dichotomy_min_error); XBT_DEBUG("Updating lambda : cnst->lambda (%p) : %1.20f -> %1.20f", &cnst, cnst.lambda, cnst.new_lambda); @@ -279,8 +278,7 @@ void lagrange_solve(lmm_system_t sys) * * @return a double corresponding to the result of the dichotomy process */ -static double dichotomy(double init, double diff(double, const s_lmm_constraint_t&), const s_lmm_constraint_t& cnst, - double min_error) +static double dichotomy(double init, double diff(double, const Constraint&), const Constraint& cnst, double min_error) { double min = init; double max = init; @@ -380,7 +378,7 @@ static double dichotomy(double init, double diff(double, const s_lmm_constraint_ return ((min + max) / 2.0); } -static double partial_diff_lambda(double lambda, const s_lmm_constraint_t& cnst) +static double partial_diff_lambda(double lambda, const Constraint& cnst) { double diff = 0.0; @@ -388,7 +386,7 @@ static double partial_diff_lambda(double lambda, const s_lmm_constraint_t& cnst) XBT_CDEBUG(surf_lagrange_dichotomy, "Computing diff of cnst (%p)", &cnst); - for (s_lmm_element_t const& elem : cnst.enabled_element_set) { + for (Element const& elem : cnst.enabled_element_set) { Variable& var = *elem.variable; xbt_assert(var.sharing_weight > 0); XBT_CDEBUG(surf_lagrange_dichotomy, "Computing sigma_i for var (%p)", &var); @@ -396,7 +394,7 @@ static double partial_diff_lambda(double lambda, const s_lmm_constraint_t& cnst) double sigma_i = 0.0; // Compute sigma_i - for (s_lmm_element_t const& elem2 : var.cnsts) + for (Element const& elem2 : var.cnsts) sigma_i += elem2.constraint->lambda; // add mu_i if this flow has a RTT constraint associated @@ -424,9 +422,9 @@ static double partial_diff_lambda(double lambda, const s_lmm_constraint_t& cnst) * programming. * */ -void lmm_set_default_protocol_function(double (*func_f)(const Variable& var, double x), - double (*func_fp)(const Variable& var, double x), - double (*func_fpi)(const Variable& var, double x)) +void set_default_protocol_function(double (*func_f)(const Variable& var, double x), + double (*func_fp)(const Variable& var, double x), + double (*func_fpi)(const Variable& var, double x)) { func_f_def = func_f; func_fp_def = func_fp;