Different results between glp_simplex() and gplsol
Edscott Wilson <[email protected]> Thu, 11 Apr 2024 09:25:15 -0600
| Newsgroups | gmane.comp.gnu.glpk |
|---|---|
| Message-ID | <CA+4=zZiQLeX6RSg5+fP3=HTRDMAR=n1vFNc-OntgEE13b7=XNA@mail.gmail.com> |
--000000000000bba0560615d3c3f5
Content-Type: text/plain; charset="UTF-8"
Hello,
If I construct a matrix for a problem to feed glp_simplex() and run,
[code]
glp_smcp parm;
glp_init_smcp(&parm);
int retval = glp_simplex(lp, &parm);
double *x = calloc(vectorSize(data)+1, sizeof(double));
double z = glp_get_obj_val(lp);
fprintf(stdout, "\nZ=%lf\n", z);
[/code]
I get the following:
GLPK Simplex Optimizer 5.0
15 rows, 17 columns, 33 non-zeros
0: obj = 0.000000000e+00 inf = 1.168e+03 (4)
13: obj = 2.720000000e+01 inf = 1.743e+02 (1)
LP HAS NO PRIMAL FEASIBLE SOLUTION
Z=27.200000
But if I use the same matrix information to generate a CPLEX format file
and run $ glpsol --lp cplex.lp -o out, I get:
GLPSOL--GLPK LP/MIP Solver 5.0
Reading problem data from 'cplex.lp'...
15 rows, 17 columns, 33 non-zeros
36 lines were read
GLPK Simplex Optimizer 5.0
15 rows, 17 columns, 33 non-zeros
Preprocessing...
1 row, 2 columns, 2 non-zeros
Scaling...
A: min|aij| = 1.000e+00 max|aij| = 8.218e+02 ratio = 8.218e+02
GM: min|aij| = 1.000e+00 max|aij| = 1.000e+00 ratio = 1.000e+00
EQ: min|aij| = 1.000e+00 max|aij| = 1.000e+00 ratio = 1.000e+00
Constructing initial basis...
Size of triangular part is 1
* 0: obj = 1.714000000e+02 inf = 0.000e+00 (1)
* 1: obj = 2.720000000e+01 inf = 0.000e+00 (0)
OPTIMAL LP SOLUTION FOUND
Time used: 0.0 secs
Memory used: 0.0 Mb (40400 bytes)
Writing basic solution to 'out'...
And the optimal solution is Z=27.2
I suppose I am missing something in the call to glp_simplex(), but what?
This is the CPLEX format:
MINIMIZE Z : + x11 + x12 + x13 + x14
SUBJECT TO
r1 : + 821.800000 x1 + 821.800000 x2 + 821.800000 x9 = 821.800000
r2 : + 174.300000 x3 + 174.300000 x4 + 174.300000 x10 = 174.300000
r3 : + 27.200000 x5 + 27.200000 x6 = 27.200000
r4 : + 144.200000 x7 + 144.200000 x8 = 144.200000
r5 : + 821.800000 x1 + 174.300000 x3 - 27.200000 x5 - 144.200000 x7 +
1.000000 x11 + 1.000000 x13 - 1.000000 x16 = 0.000000
r6 : + 821.800000 x2 + 174.300000 x4 - 27.200000 x6 - 144.200000 x8 +
1.000000 x12 + 1.000000 x14 - 1.000000 x17 = 0.000000
r7 : - 28.000000 x3 >= 0.000000
r8 : - 40.000000 x4 >= 0.000000
r9 : - 7.200000 x7 >= 0.000000
r10 : - 34.700000 x11 >= 0.000000
r11 : - 46.700000 x12 >= 0.000000
r12 : - 0.165000 x1 >= 0.000000
r13 : - 0.232000 x3 >= 0.000000
r14 : - 0.067000 x4 >= 0.000000
r15 : - 0.016000 x6 >= 0.000000
BOUNDS
0 <= x1 <= 1
0 <= x2 <= 1
0 <= x3 <= 1
0 <= x4 <= 1
0 <= x5 <= 1
0 <= x6 <= 1
0 <= x7 <= 1
0 <= x8 <= 1
0 <= x9 <= 1
0 <= x10 <= 1
0 <= x11
0 <= x12
0 <= x13
0 <= x14
0 <= x15
0 <= x16
0 <= x17
END
And this is the matrix information from which the CPLEX format is
constructed:
\* GLPK matrix:
\* ia[1]=1, ja[1]=1, ra[1]=821.800000
\* ia[2]=1, ja[2]=2, ra[2]=821.800000
\* ia[3]=1, ja[3]=9, ra[3]=821.800000
\* ia[4]=2, ja[4]=3, ra[4]=174.300000
\* ia[5]=2, ja[5]=4, ra[5]=174.300000
\* ia[6]=2, ja[6]=10, ra[6]=174.300000
\* ia[7]=3, ja[7]=5, ra[7]=27.200000
\* ia[8]=3, ja[8]=6, ra[8]=27.200000
\* ia[9]=4, ja[9]=7, ra[9]=144.200000
\* ia[10]=4, ja[10]=8, ra[10]=144.200000
\* ia[11]=5, ja[11]=15, ra[11]=0.000000
\* ia[12]=5, ja[12]=1, ra[12]=821.800000
\* ia[13]=5, ja[13]=3, ra[13]=174.300000
\* ia[14]=5, ja[14]=11, ra[14]=1.000000
\* ia[15]=5, ja[15]=13, ra[15]=1.000000
\* ia[16]=5, ja[16]=5, ra[16]=-27.200000
\* ia[17]=5, ja[17]=7, ra[17]=-144.200000
\* ia[18]=5, ja[18]=16, ra[18]=-1.000000
\* ia[19]=6, ja[19]=2, ra[19]=821.800000
\* ia[20]=6, ja[20]=4, ra[20]=174.300000
\* ia[21]=6, ja[21]=12, ra[21]=1.000000
\* ia[22]=6, ja[22]=14, ra[22]=1.000000
\* ia[23]=6, ja[23]=6, ra[23]=-27.200000
\* ia[24]=6, ja[24]=8, ra[24]=-144.200000
\* ia[25]=6, ja[25]=17, ra[25]=-1.000000
\* ia[26]=7, ja[26]=3, ra[26]=-28.000000
\* ia[27]=8, ja[27]=4, ra[27]=-40.000000
\* ia[28]=9, ja[28]=7, ra[28]=-7.200000
\* ia[29]=10, ja[29]=11, ra[29]=-34.700000
\* ia[30]=11, ja[30]=12, ra[30]=-46.700000
\* ia[31]=12, ja[31]=1, ra[31]=-0.165000
\* ia[32]=13, ja[32]=3, ra[32]=-0.232000
\* ia[33]=14, ja[33]=4, ra[33]=-0.067000
\* ia[34]=15, ja[34]=6, ra[34]=-0.016000
What am I missing in the glp_simplex call? Or maybe I should just stick
with creating the cplex format and do an execlp()?
Any clues are warmly appreciated.
--
------------------------------------------------------------------------------------
Dr. Edscott Wilson Garcia
Reservoir Engineering
Mexican Petroleum Institute
--000000000000bba0560615d3c3f5
Content-Type: text/html; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable
<div dir=3D"ltr"><div>Hello,</div><div><br></div><div>If I construct a matr=
ix for a problem to feed glp_simplex() and run,=C2=A0</div><div>[code]</div=
><div>=C2=A0 glp_smcp parm;<br>=C2=A0 glp_init_smcp(&parm);<br>=C2=A0 i=
nt retval =3D glp_simplex(lp, &parm);<br>=C2=A0 double *x =3D calloc(ve=
ctorSize(data)+1, sizeof(double));<br>=C2=A0 double z =3D glp_get_obj_val(l=
p);<br>=C2=A0 fprintf(stdout, "\nZ=3D%lf\n", z);</div><div>[/code=
]<br></div><div>I get the following:</div><div><br></div><div>GLPK Simplex =
Optimizer 5.0<br>15 rows, 17 columns, 33 non-zeros<br>=C2=A0 =C2=A0 =C2=A0 =
0: obj =3D =C2=A0 0.000000000e+00 inf =3D =C2=A0 1.168e+03 (4)<br>=C2=A0 =
=C2=A0 =C2=A013: obj =3D =C2=A0 2.720000000e+01 inf =3D =C2=A0 1.743e+02 (1=
)<br>LP HAS NO PRIMAL FEASIBLE SOLUTION<br>Z=3D27.200000</div><div><br></di=
v><div>But if I use the same matrix information to generate a CPLEX format =
file</div><div>and run $ glpsol --lp=C2=A0 cplex.lp -o out, I get:</div><di=
v><br></div><div>GLPSOL--GLPK LP/MIP Solver 5.0<br>Reading problem data fro=
m 'cplex.lp'...<br>15 rows, 17 columns, 33 non-zeros<br>36 lines we=
re read<br>GLPK Simplex Optimizer 5.0<br>15 rows, 17 columns, 33 non-zeros<=
br>Preprocessing...<br>1 row, 2 columns, 2 non-zeros<br>Scaling...<br>=C2=
=A0A: min|aij| =3D =C2=A01.000e+00 =C2=A0max|aij| =3D =C2=A08.218e+02 =C2=
=A0ratio =3D =C2=A08.218e+02<br>GM: min|aij| =3D =C2=A01.000e+00 =C2=A0max|=
aij| =3D =C2=A01.000e+00 =C2=A0ratio =3D =C2=A01.000e+00<br>EQ: min|aij| =
=3D =C2=A01.000e+00 =C2=A0max|aij| =3D =C2=A01.000e+00 =C2=A0ratio =3D =C2=
=A01.000e+00<br>Constructing initial basis...<br>Size of triangular part is=
1<br>* =C2=A0 =C2=A0 0: obj =3D =C2=A0 1.714000000e+02 inf =3D =C2=A0 0.00=
0e+00 (1)<br>* =C2=A0 =C2=A0 1: obj =3D =C2=A0 2.720000000e+01 inf =3D =C2=
=A0 0.000e+00 (0)<br>OPTIMAL LP SOLUTION FOUND<br>Time used: =C2=A0 0.0 sec=
s<br>Memory used: 0.0 Mb (40400 bytes)<br>Writing basic solution to 'ou=
t'...</div><div><br></div><div>And the optimal solution is Z=3D27.2</di=
v><div><br></div><div>I suppose I am missing something in the call to glp_s=
implex(), but what? <br></div><div><br></div><div>This is the CPLEX format:=
</div><div><br></div><div>MINIMIZE Z : =C2=A0+ x11 + x12 + x13 + x14<br>SUB=
JECT TO<br>=C2=A0 r1 : + 821.800000 x1 + 821.800000 x2 + 821.800000 x9 =3D =
821.800000 <br>=C2=A0 r2 : + 174.300000 x3 + 174.300000 x4 + 174.300000 x10=
=3D 174.300000 <br>=C2=A0 r3 : + 27.200000 x5 + 27.200000 x6 =3D 27.200000=
<br>=C2=A0 r4 : + 144.200000 x7 + 144.200000 x8 =3D 144.200000 <br>=C2=A0 =
r5 : + 821.800000 x1 + 174.300000 x3 - 27.200000 x5 - 144.200000 x7 + 1.000=
000 x11 + 1.000000 x13 - 1.000000 x16 =3D 0.000000 <br>=C2=A0 r6 : + 821.80=
0000 x2 + 174.300000 x4 - 27.200000 x6 - 144.200000 x8 + 1.000000 x12 + 1.0=
00000 x14 - 1.000000 x17 =3D 0.000000 <br>=C2=A0 r7 : - 28.000000 x3 >=
=3D 0.000000<br>=C2=A0 r8 : - 40.000000 x4 >=3D 0.000000<br>=C2=A0 r9 : =
- 7.200000 x7 >=3D 0.000000<br>=C2=A0 r10 : - 34.700000 x11 >=3D 0.00=
0000<br>=C2=A0 r11 : - 46.700000 x12 >=3D 0.000000<br>=C2=A0 r12 : - 0.1=
65000 x1 >=3D 0.000000<br>=C2=A0 r13 : - 0.232000 x3 >=3D 0.000000<br=
>=C2=A0 r14 : - 0.067000 x4 >=3D 0.000000<br>=C2=A0 r15 : - 0.016000 x6 =
>=3D 0.000000<br>BOUNDS<br>=C2=A00 <=3D x1 <=3D 1<br>=C2=A00 <=
=3D x2 <=3D 1<br>=C2=A00 <=3D x3 <=3D 1<br>=C2=A00 <=3D x4 <=
=3D 1<br>=C2=A00 <=3D x5 <=3D 1<br>=C2=A00 <=3D x6 <=3D 1<br>=
=C2=A00 <=3D x7 <=3D 1<br>=C2=A00 <=3D x8 <=3D 1<br>=C2=A00 <=
;=3D x9 <=3D 1<br>=C2=A00 <=3D x10 <=3D 1<br>=C2=A00 <=3D x11<b=
r>=C2=A00 <=3D x12<br>=C2=A00 <=3D x13<br>=C2=A00 <=3D x14<br>=C2=
=A00 <=3D x15<br>=C2=A00 <=3D x16<br>=C2=A00 <=3D x17<br>END</div>=
<div><br></div><div>And this is the matrix information from which the CPLEX=
format is constructed:</div><div>\* GLPK matrix:<br>\* ia[1]=3D1, ja[1]=3D=
1, ra[1]=3D821.800000<br>\* ia[2]=3D1, ja[2]=3D2, ra[2]=3D821.800000<br>\* =
ia[3]=3D1, ja[3]=3D9, ra[3]=3D821.800000<br>\* ia[4]=3D2, ja[4]=3D3, ra[4]=
=3D174.300000<br>\* ia[5]=3D2, ja[5]=3D4, ra[5]=3D174.300000<br>\* ia[6]=3D=
2, ja[6]=3D10, ra[6]=3D174.300000<br>\* ia[7]=3D3, ja[7]=3D5, ra[7]=3D27.20=
0000<br>\* ia[8]=3D3, ja[8]=3D6, ra[8]=3D27.200000<br>\* ia[9]=3D4, ja[9]=
=3D7, ra[9]=3D144.200000<br>\* ia[10]=3D4, ja[10]=3D8, ra[10]=3D144.200000<=
br>\* ia[11]=3D5, ja[11]=3D15, ra[11]=3D0.000000<br>\* ia[12]=3D5, ja[12]=
=3D1, ra[12]=3D821.800000<br>\* ia[13]=3D5, ja[13]=3D3, ra[13]=3D174.300000=
<br>\* ia[14]=3D5, ja[14]=3D11, ra[14]=3D1.000000<br>\* ia[15]=3D5, ja[15]=
=3D13, ra[15]=3D1.000000<br>\* ia[16]=3D5, ja[16]=3D5, ra[16]=3D-27.200000<=
br>\* ia[17]=3D5, ja[17]=3D7, ra[17]=3D-144.200000<br>\* ia[18]=3D5, ja[18]=
=3D16, ra[18]=3D-1.000000<br>\* ia[19]=3D6, ja[19]=3D2, ra[19]=3D821.800000=
<br>\* ia[20]=3D6, ja[20]=3D4, ra[20]=3D174.300000<br>\* ia[21]=3D6, ja[21]=
=3D12, ra[21]=3D1.000000<br>\* ia[22]=3D6, ja[22]=3D14, ra[22]=3D1.000000<b=
r>\* ia[23]=3D6, ja[23]=3D6, ra[23]=3D-27.200000<br>\* ia[24]=3D6, ja[24]=
=3D8, ra[24]=3D-144.200000<br>\* ia[25]=3D6, ja[25]=3D17, ra[25]=3D-1.00000=
0<br>\* ia[26]=3D7, ja[26]=3D3, ra[26]=3D-28.000000<br>\* ia[27]=3D8, ja[27=
]=3D4, ra[27]=3D-40.000000<br>\* ia[28]=3D9, ja[28]=3D7, ra[28]=3D-7.200000=
<br>\* ia[29]=3D10, ja[29]=3D11, ra[29]=3D-34.700000<br>\* ia[30]=3D11, ja[=
30]=3D12, ra[30]=3D-46.700000<br>\* ia[31]=3D12, ja[31]=3D1, ra[31]=3D-0.16=
5000<br>\* ia[32]=3D13, ja[32]=3D3, ra[32]=3D-0.232000<br>\* ia[33]=3D14, j=
a[33]=3D4, ra[33]=3D-0.067000<br>\* ia[34]=3D15, ja[34]=3D6, ra[34]=3D-0.01=
6000</div><div><br></div><div>What am I missing in the glp_simplex call?=C2=
=A0 Or maybe I should just stick with creating the cplex format and do an e=
xeclp()?</div><div><br></div><div>Any clues are warmly appreciated.</div><d=
iv><br><br></div><br clear=3D"all"><br><span class=3D"gmail_signature_prefi=
x">-- </span><br><div dir=3D"ltr" class=3D"gmail_signature" data-smartmail=
=3D"gmail_signature"><div dir=3D"ltr"><div><div><div>----------------------=
--------------------------------------------------------------<br></div>Dr.=
Edscott Wilson Garcia<br></div>Reservoir Engineering<br></div>Mexican Petr=
oleum Institute<br></div></div></div>
--000000000000bba0560615d3c3f5--