Testing this problem I discover that if we change the order of
constraint declarations it seems to give the expected answer as stated
by Thiago (what I think could be another bug).
====
/param min_bound default 0;/
/var x >= 0;
minimize y: x;/
*
*/*s.t. PART_MIN_X: x >= 1 + min_bound;*
/
/*s.t. LIM_INF_X: x >= 1;
*
/
/solve;
display min_bound;
display x; # EXPECTED RESULT: X == 1.0001
data;
param min_bound := 1e-4;
end;/
====
Output:
====
x.val = 1.0001
====
On 3/3/21 19:19, Thiago Neves wrote:
Hi.
I've found a strange behaviour in glpk which I don't know how to fix
nor how to contour it. It seems like GLPK can't distinguish
constraints that differs from about 1e-4.
Follows simple examples that explain and reproduce the problem.**
*
*
*The first model gives the desired answer (x = 1.0001):*
/
param min_bound default 0;/
/var x >= 0;
minimize y: x;/
/*
s.t. PART_MIN_X: x >= 1 + min_bound;*
solve;
display min_bound;
display x; # EXPECTED RESULT: X == 1.0001
data;
param min_bound := 1e-4;
end;
/
/_____________________________________/
/OUTPUT:/
/x.val = 1.0001/
/_____________________________________ /
*Now, if I add a second constraint "close" to the first one, the
solver will deliver an answer that is actually infeasible:*
/param min_bound default 0;/
/var x >= 0;
minimize y: x;/
*s.t. LIM_INF_X: x >= 1;
*/*s.t. PART_MIN_X: x >= 1 + min_bound;*
solve;
display min_bound;
display x; # EXPECTED RESULT: X == 1.0001
data;
param min_bound := 1e-4;
end;/
/_____________________________________/
/OUTPUT:/
x.val = 1
/_____________________________________ /
*If I change the "min_bound" parameter to 1e-2, the second model works
as expected (x = 1.01):*
/param min_bound default 0;/
/
/
/var x >= 0;
minimize y: x;/
*
*
*s.t. LIM_INF_X: x >= 1;
*/*s.t. PART_MIN_X: x >= 1 + min_bound;*
solve;/
/
display x; # EXPECTED RESULT: X == 1.01
data;
param min_bound := 1e-2;
end;/
/_____________________________________/
/OUTPUT:/
x.val = 1.01
/_____________________________________ /
/
/
Att,
*Thiago H. Neves*
(31) 98608-0666