- /* Saturated constraints update */
- if (min_usage < 0 || min_usage > cnst->remaining / cnst->usage) {
- DEBUG3("Update min_usage (%g) with cnst %p -> %g",min_usage, cnst,
- cnst->remaining / cnst->usage);
-
- min_usage = cnst->remaining / cnst->usage;
- while ((useless_cnst = xbt_swag_extract(&(cnst_to_update)))) {
- xbt_swag_insert_at_head(useless_cnst, cnst_list);
- }
- xbt_swag_remove(cnst, cnst_list);
- xbt_swag_insert(cnst, &(cnst_to_update));
- } else if (min_usage == cnst->remaining / cnst->usage) {
- DEBUG2("Keep min_usage (%g) with cnst %p",min_usage, cnst);
- xbt_swag_remove(cnst, cnst_list);
- xbt_swag_insert(cnst, &(cnst_to_update));
- } else {
- DEBUG1("\tmin_usage: %f. No update",min_usage);
+ xbt_swag_foreach_safe(var, var_next, var_list) {
+ double min_inc =
+ var->cnsts[0].constraint->usage / var->cnsts[0].value;
+ for (i = 1; i < var->cnsts_number; i++) {
+ lmm_element_t elm = &var->cnsts[i];
+ min_inc = MIN(min_inc, elm->constraint->usage / elm->value);
+ }
+ if (var->bound > 0)
+ min_inc = MIN(min_inc, var->bound - var->value);
+ var->mu = min_inc;
+ XBT_DEBUG("Updating variable %p maximum increment: %g", var, var->mu);
+ var->value += var->mu;
+ if (var->value == var->bound) {
+ xbt_swag_remove(var, var_list);