Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Extending the maxmin solver to take into account shared resources (i.e. constraints...
authoralegrand <alegrand@48e7efb5-ca39-0410-a469-dd3cf9ba447f>
Mon, 25 Jul 2005 19:40:09 +0000 (19:40 +0000)
committeralegrand <alegrand@48e7efb5-ca39-0410-a469-dd3cf9ba447f>
Mon, 25 Jul 2005 19:40:09 +0000 (19:40 +0000)
git-svn-id: svn+ssh://scm.gforge.inria.fr/svn/simgrid/simgrid/trunk@1570 48e7efb5-ca39-0410-a469-dd3cf9ba447f

src/include/surf/maxmin.h
src/surf/maxmin.c
src/surf/maxmin_private.h

index 82ee074..0a1832f 100644 (file)
@@ -19,6 +19,8 @@ void lmm_variable_disable(lmm_system_t sys, lmm_variable_t var);
 
 lmm_constraint_t lmm_constraint_new(lmm_system_t sys, void *id,
                                    double bound_value);
+void lmm_constraint_shared(lmm_constraint_t cnst);
+
 void lmm_constraint_free(lmm_system_t sys, lmm_constraint_t cnst);
 
 lmm_variable_t lmm_variable_new(lmm_system_t sys, void *id,
index 4d57218..d26f1de 100644 (file)
@@ -101,11 +101,17 @@ lmm_constraint_t lmm_constraint_new(lmm_system_t sys, void *id,
 
   cnst->bound = bound_value;
   cnst->usage = 0;
+  cnst->shared = 1;
   insert_constraint(sys, cnst);
 
   return cnst;
 }
 
+void lmm_constraint_shared(lmm_constraint_t cnst)
+{
+  cnst->shared = 0;
+}
+
 void lmm_constraint_free(lmm_system_t sys, lmm_constraint_t cnst)
 {
   remove_constraint(sys, cnst);
@@ -301,7 +307,10 @@ void lmm_solve(lmm_system_t sys)
     xbt_swag_foreach(elem, elem_list) {
       if(elem->variable->weight <=0) break;
       if ((elem->value > 0)) {
-       cnst->usage += elem->value / elem->variable->weight;
+       if(cnst->shared)
+         cnst->usage += elem->value / elem->variable->weight;
+       else 
+         cnst->usage = 1;
        make_elem_active(elem);
       }
     }
@@ -337,8 +346,10 @@ void lmm_solve(lmm_system_t sys)
       for (i = 0; i < var->cnsts_number; i++) {
        elem = &var->cnsts[i];
        cnst = elem->constraint;
-       cnst->remaining -= elem->value * var->value;
-       cnst->usage -= elem->value / var->weight;
+       if(cnst->shared) {
+         cnst->remaining -= elem->value * var->value;
+         cnst->usage -= elem->value / var->weight;
+       }
        make_elem_inactive(elem);
       }
       xbt_swag_remove(var, var_list);
index 28e1fb8..6216bc9 100644 (file)
@@ -33,6 +33,7 @@ typedef struct lmm_constraint {
   s_xbt_swag_t active_element_set;     /* a list of lmm_mat_element_t */
   double bound;
   double remaining;
+  int shared;
   double usage;
   void *id;
 } s_lmm_constraint_t;