+ /*
+ * Now computes the values of each variable (\rho) based on
+ * the values of \lambda and \mu.
+ */
+ var_list = &(sys->variable_set);
+ xbt_swag_foreach(var1, var_list) {
+ if(var1->weight <=0)
+ var1->value = 0.0;
+ else {
+ tmp = 0;
+ if(var1->bound >0)
+ tmp+=var1->mu;
+ for(i=0; i<var1->cnsts_number; i++)
+ tmp += (var1->cnsts[i].constraint)->lambda;
+
+ var1->value = 1 / tmp;
+ }
+
+
+ DEBUG2("var1->value (id=%s) : %e", (char *)var1->id, var1->value);
+ }
+
+ /* Printing Objective */
+ var_list = &(sys->variable_set);
+ sprintf(print_buf,"MAX-MIN ( ");
+ trace_buf = xbt_realloc(trace_buf,strlen(trace_buf)+strlen(print_buf)+1);
+ strcat(trace_buf, print_buf);
+ xbt_swag_foreach(var, var_list) {
+ sprintf(print_buf,"'%p'(%f) ",var,var->weight);
+ trace_buf = xbt_realloc(trace_buf,strlen(trace_buf)+strlen(print_buf)+1);
+ strcat(trace_buf, print_buf);
+ }
+ sprintf(print_buf,")");
+ trace_buf = xbt_realloc(trace_buf,strlen(trace_buf)+strlen(print_buf)+1);
+ strcat(trace_buf, print_buf);
+ DEBUG1("%s",trace_buf);
+ trace_buf[0]='\000';
+
+ /* Printing Constraints */
+ cnst_list = &(sys->active_constraint_set);
+ xbt_swag_foreach(cnst, cnst_list) {
+ sum=0.0;
+ elem_list = &(cnst->element_set);
+ sprintf(print_buf,"\t");
+ trace_buf = xbt_realloc(trace_buf,strlen(trace_buf)+strlen(print_buf)+1);
+ strcat(trace_buf, print_buf);
+ xbt_swag_foreach(elem, elem_list) {
+ sprintf(print_buf,"%f.'%p'(%f) + ",elem->value,
+ elem->variable,elem->variable->value);
+ trace_buf = xbt_realloc(trace_buf,strlen(trace_buf)+strlen(print_buf)+1);
+ strcat(trace_buf, print_buf);
+ sum += elem->value * elem->variable->value;
+ }
+ sprintf(print_buf,"0 <= %f ('%p')",cnst->bound,cnst);
+ trace_buf = xbt_realloc(trace_buf,strlen(trace_buf)+strlen(print_buf)+1);
+ strcat(trace_buf, print_buf);
+
+ if(!cnst->shared) {
+ sprintf(print_buf," [MAX-Constraint]");
+ trace_buf = xbt_realloc(trace_buf,strlen(trace_buf)+strlen(print_buf)+1);
+ strcat(trace_buf, print_buf);
+ }
+ DEBUG1("%s",trace_buf);
+ trace_buf[0]='\000';
+ if(!(sum<=cnst->bound))
+ DEBUG3("Incorrect value (%f is not smaller than %f): %g",
+ sum,cnst->bound,sum-cnst->bound);
+ }
+
+ /* Printing Result */
+ xbt_swag_foreach(var, var_list) {
+ if(var->bound>0) {
+ DEBUG4("'%p'(%f) : %f (<=%f)",var,var->weight,var->value, var->bound);
+ if(var->value<=var->bound)
+ DEBUG0("Incorrect value");
+ }
+ else
+ DEBUG3("'%p'(%f) : %f",var,var->weight,var->value);
+ }
+
+