GLPK

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

4 réponses

Messages postés
3
Date d'inscription
jeudi 24 juillet 2008
Statut
Membre
Dernière intervention
4 août 2008

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!!
Messages postés
13280
Date d'inscription
lundi 13 décembre 2004
Statut
Modérateur
Dernière intervention
3 février 2018
39
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  
Messages postés
3
Date d'inscription
jeudi 24 juillet 2008
Statut
Membre
Dernière intervention
4 août 2008

desolee, j'ai pas fait gaffe.. cest effectivement du C++

Merci
Messages postés
13280
Date d'inscription
lundi 13 décembre 2004
Statut
Modérateur
Dernière intervention
3 février 2018
39
topic déplacé...