Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Splitted the lmm_constraint swag called element_set into enabled_element_set and...
[simgrid.git] / src / surf / lagrange.cpp
index c62055b..1c126b4 100644 (file)
@@ -54,16 +54,15 @@ static int __check_feasible(xbt_swag_t cnst_list, xbt_swag_t var_list,
   xbt_swag_foreach(_cnst, cnst_list) {
        cnst = (lmm_constraint_t)_cnst;
     tmp = 0;
-    elem_list = &(cnst->element_set);
+    elem_list = &(cnst->enabled_element_set);
     xbt_swag_foreach(_elem, elem_list) {
       elem = (lmm_element_t)_elem;
       var = elem->variable;
-      if (var->weight <= 0)
-        continue;
+      xbt_assert(var->weight > 0);
       tmp += var->value;
     }
 
-    if (double_positive(tmp - cnst->bound)) {
+    if (double_positive(tmp - cnst->bound, sg_maxmin_precision)) {
       if (warn)
         XBT_WARN
             ("The link (%p) is over-used. Expected less than %f and got %f",
@@ -84,7 +83,7 @@ static int __check_feasible(xbt_swag_t cnst_list, xbt_swag_t var_list,
     XBT_DEBUG("Checking feasability for variable (%p): sat = %f mu = %f", var,
            var->value - var->bound, var->mu);
 
-    if (double_positive(var->value - var->bound)) {
+    if (double_positive(var->value - var->bound, sg_maxmin_precision)) {
       if (warn)
         XBT_WARN
             ("The variable (%p) is too large. Expected less than %f and got %f",
@@ -171,7 +170,7 @@ void lagrange_solve(lmm_system_t sys)
    * Lagrange Variables.
    */
   int max_iterations = 100;
-  double epsilon_min_error = MAXMIN_PRECISION;
+  double epsilon_min_error = 0.00001; /* this is the precision on the objective function so it's none of the configurable values and this value is the legacy one */
   double dichotomy_min_error = 1e-14;
   double overall_modification = 1;
 
@@ -397,7 +396,6 @@ static double dichotomy(double init, double diff(double, void *),
     min = max = 0.5;
   }
 
-  min_diff = max_diff = middle_diff = 0.0;
   overall_error = 1;
 
   if ((diff_0 = diff(1e-16, var_cnst)) >= 0) {
@@ -502,16 +500,14 @@ static double partial_diff_lambda(double lambda, void *param_cnst)
   double sigma_i = 0.0;
 
   XBT_IN();
-  elem_list = &(cnst->element_set);
+  elem_list = &(cnst->enabled_element_set);
 
   XBT_CDEBUG(surf_lagrange_dichotomy, "Computing diff of cnst (%p)", cnst);
 
   xbt_swag_foreach(_elem, elem_list) {
        elem = (lmm_element_t)_elem;
     var = elem->variable;
-    if (var->weight <= 0)
-      continue;
-
+    xbt_assert(var->weight > 0);
     XBT_CDEBUG(surf_lagrange_dichotomy, "Computing sigma_i for var (%p)",
             var);
     // Initialize the summation variable