From d3d595a572f0d8e76f06e11529a211d90b7ad6e1 Mon Sep 17 00:00:00 2001 From: velho Date: Wed, 14 Feb 2007 15:54:29 +0000 Subject: [PATCH] Fix many bugs. git-svn-id: svn+ssh://scm.gforge.inria.fr/svn/simgrid/simgrid/trunk@3145 48e7efb5-ca39-0410-a469-dd3cf9ba447f --- src/surf/sdp.c | 60 ++++++++++++++++++++++++++++---------------------- 1 file changed, 34 insertions(+), 26 deletions(-) diff --git a/src/surf/sdp.c b/src/surf/sdp.c index 80290777ed..054abe4fb6 100644 --- a/src/surf/sdp.c +++ b/src/surf/sdp.c @@ -121,7 +121,7 @@ void sdp_solve(lmm_system_t sys) int block_size; int total_block_size=0; int *isdiag=NULL; - FILE *sdpout = fopen("SDPA-printf.tmp","w"); + // FILE *sdpout = fopen("SDPA-printf.tmp","w"); int blocksz = 0; double *tempdiag = NULL; int matno=0; @@ -155,22 +155,24 @@ void sdp_solve(lmm_system_t sys) * Initialize the var list variable with only the active variables. * Associate an index in the swag variables. */ - i = 1; var_list = &(sys->variable_set); + i=0; + xbt_swag_foreach(var, var_list) { + if(var->weight) i++; + } + flows=i; DEBUG1("Variable set : %d", xbt_swag_size(var_list)); - xbt_swag_foreach(var, var_list) { var->value = 0.0; - if(var->weight) var->index = i++; + if(var->weight) var->index = i--; } - cnst_list=&(sys->saturated_constraint_set); + cnst_list=&(sys->active_constraint_set); DEBUG1("Active constraints : %d", xbt_swag_size(cnst_list)); /* * Those fields are the top level description of the platform furnished in the xml file. */ - flows = i-1; links = xbt_swag_size(&(sys->active_constraint_set)); /* @@ -186,7 +188,8 @@ void sdp_solve(lmm_system_t sys) * The number of variables in the SDP program. */ nb_var = get_y(K, pow(2,K)); - fprintf(sdpout,"%d\n", nb_var); + DEBUG1("Number of variables in the SDP program : %d", nb_var); + //fprintf(sdpout,"%d\n", nb_var); /* * Find the size of each group of constraints. @@ -199,7 +202,7 @@ void sdp_solve(lmm_system_t sys) * The total number of constraints. */ nb_cnsts = nb_cnsts_capacity + nb_cnsts_struct + nb_cnsts_positivy; - fprintf(sdpout,"%d\n", nb_cnsts); + //fprintf(sdpout,"%d\n", nb_cnsts); /* * Keep track of which blocks have off diagonal entries. @@ -234,10 +237,10 @@ void sdp_solve(lmm_system_t sys) */ if(i <= nb_cnsts_struct){ total_block_size += block_size = 2; - fprintf(sdpout,"2 "); + //fprintf(sdpout,"2 "); }else{ total_block_size += block_size = 1; - fprintf(sdpout,"1 "); + //fprintf(sdpout,"1 "); } /* @@ -250,7 +253,7 @@ void sdp_solve(lmm_system_t sys) block_num++; } - fprintf(sdpout,"\n"); + //fprintf(sdpout,"\n"); /* @@ -260,14 +263,14 @@ void sdp_solve(lmm_system_t sys) for(i = 1; i <= nb_var; i++){ if(get_y(0,1)==i){ - fprintf(sdpout,"-1 "); + //fprintf(sdpout,"-1 "); a[i]=-1; }else{ - fprintf(sdpout,"0 "); + //fprintf(sdpout,"0 "); a[i]=0; } } - fprintf(sdpout,"\n"); + //fprintf(sdpout,"\n"); /* @@ -278,19 +281,19 @@ void sdp_solve(lmm_system_t sys) for(k = 1; k <= K; k++){ for(i = 1; i <= pow(2,k-1); i++){ matno=get_y(k,2*i-1); - fprintf(sdpout,"%d %d 1 1 1\n", matno , block_num); + //fprintf(sdpout,"%d %d 1 1 1\n", matno , block_num); addentry(constraints, &C, matno, block_num, 1, 1, 1.0, C.blocks[block_num].blocksize); matno=get_y(k,2*i); - fprintf(sdpout,"%d %d 2 2 1\n", matno , block_num); + //fprintf(sdpout,"%d %d 2 2 1\n", matno , block_num); addentry(constraints, &C, matno, block_num, 2, 2, 1.0, C.blocks[block_num].blocksize); matno=get_y(k-1,i); - fprintf(sdpout,"%d %d 1 2 1\n", matno , block_num); + //fprintf(sdpout,"%d %d 1 2 1\n", matno , block_num); addentry(constraints, &C, matno, block_num, 1, 2, 1.0, C.blocks[block_num].blocksize); matno=get_y(k-1,i); - fprintf(sdpout,"%d %d 2 1 1\n", matno , block_num); + //fprintf(sdpout,"%d %d 2 1 1\n", matno , block_num); addentry(constraints, &C, matno, block_num, 2, 1, 1.0, C.blocks[block_num].blocksize); isdiag[block_num] = 0; @@ -304,15 +307,16 @@ void sdp_solve(lmm_system_t sys) */ xbt_swag_foreach(cnst, cnst_list) { - fprintf(sdpout,"0 %d 1 1 %d\n", block_num, (int) - (cnst->bound)); + //fprintf(sdpout,"0 %d 1 1 %f\n", block_num, - (cnst->bound)); addentry(constraints, &C, 0, block_num, 1, 1, - (cnst->bound) , C.blocks[block_num].blocksize); elem_list = &(cnst->element_set); xbt_swag_foreach(elem, elem_list) { if(elem->variable->weight <=0) break; - fprintf(sdpout,"%d %d 1 1 %d\n", elem->variable->index, block_num, (int) - (elem->variable->value)); - addentry(constraints, &C, elem->variable->index, block_num, 1, 1, - (elem->value), C.blocks[block_num].blocksize); + matno=get_y(K,elem->variable->index); + //fprintf(sdpout,"%d %d 1 1 %f\n", elem->variable->index, block_num, - (elem->value)); + addentry(constraints, &C, matno, block_num, 1, 1, - (elem->value), C.blocks[block_num].blocksize); } block_num++; @@ -324,7 +328,7 @@ void sdp_solve(lmm_system_t sys) */ for(i = 1; i <= pow(2,K); i++){ matno=get_y(K, i); - fprintf(sdpout,"%d %d 1 1 1\n", matno, block_num); + //fprintf(sdpout,"%d %d 1 1 1\n", matno, block_num); addentry(constraints, &C, matno, block_num, 1, 1, 1.0, C.blocks[block_num].blocksize); block_num++; } @@ -394,9 +398,8 @@ void sdp_solve(lmm_system_t sys) */ printf("Printing SDPA...\n"); if(XBT_LOG_ISENABLED(surf_sdp, xbt_log_priority_debug)) { - char *tmp=strdup("SDPA.tmp"); - write_prob(tmp, nb_cnsts, nb_var, C, a, constraints); - //int write_prob(char *fname, int n, int k, struct blockmatrix C, double *a, struct constraintmatrix *constraints); + char *tmp=strdup("SURF-PROPORTIONNAL.sdpa"); + write_prob(tmp,total_block_size,nb_var,C,a,constraints); free(tmp); } @@ -433,6 +436,11 @@ void sdp_solve(lmm_system_t sys) } + if(XBT_LOG_ISENABLED(surf_sdp, xbt_log_priority_debug)) { + char *tmp=strdup("SURF-PROPORTIONNAL.sol"); + write_sol(tmp,total_block_size, nb_var, X, y, Z); + free(tmp); + } /* * Write out the solution if necessary. @@ -455,7 +463,7 @@ void sdp_solve(lmm_system_t sys) */ free_prob(total_block_size, nb_var, C, a, constraints, X, y, Z); - fclose(sdpout); + // fclose(sdpout); free(isdiag); sys->modified = 0; -- 2.20.1