GLPK

curiousa Messages postés 3 Date d'inscription jeudi 24 juillet 2008 Statut Membre Dernière intervention 4 août 2008 - 4 août 2008 à 12:47
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 - 4 août 2008 à 13:51
How to set constraints coefficients to zero?
ar[] doesnt accept 0!! and i have a sparse constraint matrix

4 réponses

curiousa Messages postés 3 Date d'inscription jeudi 24 juillet 2008 Statut Membre Dernière intervention 4 août 2008
4 août 2008 à 13:00
Bon j'ai pas dit bonjour desolee!
je deprimais devant mon pc

je vais etre un peu plus precise..

je suis entrain d'utiliser GLPK avec une matrice de contraintes de plus de 1000 lignes et dans laquelle enormement de zeros.. ar[] la matrice qui contient les elements des contraintes n'accpete pas de zero!
je ne sais pas du tout comment faire :(

je suis entrain d' essayer pour avoir une solution pour ce probleme d'optimisation qui a aussi des 0 pr contraintes:
max( x1 + x2 + x3)
x1>=0
x3>=0
2x1 +x2 - x3<= 4
x1 -2x2 <=5
3x1 - 2x2 + x3 <= 2
-x1 + x3 <= 8

jai essaye avec cette fonction que jai trouve sur le forum du site glpk mais ca marceh toujours pas
int remove_zeros (int ne, int ia[], int ja[], double ar[]){
    int k, new_ne= 0;
    for ( k = 1; k <=ne; k++)
    { if ( ar[k] != 0.0)
    { new_ne ++;
    ia[new_ne] = ia[k];
    ja[new_ne] = ja[k];
    ar[new_ne] = ar[k];
    }
    }
    return new_ne;
}

le code pr loptimisation

LPX *lp;

 int ia[1+1000], ja[1+1000];
 double ar[1+1000], Z, x1, x2, x3;
 lp = lpx_create_prob();
 lpx_set_prob_name(lp, "sample");
 lpx_set_obj_dir(lp, LPX_MAX);
 lpx_add_rows(lp, 4);
 lpx_set_row_name(lp, 1, "p");
 lpx_set_row_bnds(lp, 1, LPX_UP, 0.0, 4.0);
 lpx_set_row_name(lp, 2, "q");
 lpx_set_row_bnds(lp, 2, LPX_UP, 0.0, 5.0);
 lpx_set_row_name(lp, 2, "r");
 lpx_set_row_bnds(lp, 2, LPX_UP, 0.0, 2.0);
 lpx_set_row_name(lp, 2, "s");
 lpx_set_row_bnds(lp, 2, LPX_UP, 0.0, 8.0);

 lpx_add_cols(lp, 3);
 lpx_set_col_name(lp, 1, "x1");
 lpx_set_col_bnds(lp, 1, LPX_LO, 0.0, 0.0);
 lpx_set_obj_coef(lp, 1, 1.0);
 lpx_set_col_name(lp, 2, "x2");
 lpx_set_col_bnds(lp, 2, LPX_FR, 0.0, 0.0);
 lpx_set_obj_coef(lp, 2, 1.0);
 lpx_set_col_name(lp, 3, "x3");
 lpx_set_col_bnds(lp, 3, LPX_LO, 0.0, 0.0);
 lpx_set_obj_coef(lp, 3, 1.0);

 //ia[0] = 0, ja[0] = 0, ar[0] = 0.0;
 ia[1] = 1, ja[1] = 1, ar[1] = 2.0; 
 ia[2] = 1, ja[2] = 2, ar[2] = 1.0;
 ia[3] = 1, ja[3] = 3, ar[3] = -1.0;
 ia[4] = 2, ja[4] = 1, ar[4] = 1.0; 
 ia[5] = 2, ja[5] = 2, ar[5] = -2.0;
 ia[6] = 2, ja[6] = 3, ar[6] = 0.0;
 ia[7] = 3, ja[7] = 1, ar[7] = 3.0;
 ia[8] = 3, ja[8] = 2, ar[8] = -2.0;
 ia[9] = 3, ja[9] = 3, ar[9] = 1.0;
 ia[10] = 4, ja[10] = 1, ar[10] = -1.0;
 ia[11] = 4, ja[11] = 2, ar[11] = 0.0;
 ia[12] = 4, ja[12] = 3, ar[12] = 1.0;

 int ne = 12;
 int new_ne = remove_zeros (ne , ia, ja, ar);
 
 lpx_load_matrix(lp, new_ne, ia, ja, ar);
 lpx_simplex(lp);
 int lpx_ipt_status(LPX* lp);
 Z = lpx_get_obj_val(lp);
 x1 = lpx_get_col_prim(lp, 1);
 x2 = lpx_get_col_prim(lp, 2);
 x3 = lpx_get_col_prim(lp, 3);
 
 printf("\nZ = %g; x1 = %g; x2 = %g; x3 = %g\n", Z, x1, x2, x3);
 
 lpx_delete_prob(lp);

Meric beaucoup pr toute aide!!
0
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
4 août 2008 à 13:20
salut,

je doute de cette syntaxe en VB6...

<li> Vous êtes ici : [infomsg.aspx Thèmes] / [infomsgf_VISUAL-BASIC_1.aspx Visual Basic 6] / [infomsgt_DIVERS_220.aspx Divers] / [infomsgt_GENERAL_222.aspx General] / GLPK</li>
tu ne coderais pas plutôt en C/C++, voire C# (cf =NEW ...) ??
<hr size="2" width="100%" />Prenez un instant pour répondre à [infomsg_SONDAGE-POP3-POUR-CS_769706.aspx ce sondage] svp  
0
curiousa Messages postés 3 Date d'inscription jeudi 24 juillet 2008 Statut Membre Dernière intervention 4 août 2008
4 août 2008 à 13:22
desolee, j'ai pas fait gaffe.. cest effectivement du C++

Merci
0
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
4 août 2008 à 13:51
topic déplacé...
0
Rejoignez-nous