[Osi] Problem using FlopC++ with GLPK
Renato Bruni
renato.bruni at diei.unipg.it
Thu Sep 17 12:33:47 EDT 2009
Hello everybody,
we have some strange behaviour using FlopC++ 1.0.6 (having inside Osi
0.100.0) and GLPK 4.38.
If we run the following example, with 5 variables and 2 constraints, we
obtain solution x=(0, 2, 0, 0, 0) and objective= 2
but the solution should be x=(4, 0, 0, 0, 0) and objective= 4
#include "flopc.hpp"
using namespace flopc;
#include <OsiGlpkSolverInterface.hpp>
int main() {
MP_model modello(new OsiGlpkSolverInterface);
MP_set N(5);
MP_variable x(N);
x.integer();
MP_constraint vinc1;
MP_constraint vinc2;
vinc1 = 2*x(0) + 4*x(1) + 6*x(4) == 8;
vinc2 = x(0) + x(4) <= 100;
modello.add(vinc1);
modello.add(vinc2);
modello.maximize( x(0) + x(1) + x(4) );
x.display("Optimal solution per x:");
}
If we run this other example, that is the same model with 5 variables and
2 constraints, we obtain solution x=(4, 0, 0, 0, 96) and objective= 4
but the solution should be, like before, x=(4, 0, 0, 0, 0) and objective= 4
#include "flopc.hpp"
using namespace flopc;
#include <OsiGlpkSolverInterface.hpp>
int main() {
MP_model modello(new OsiGlpkSolverInterface);
MP_set N(5);
MP_set S(5);
MP_subset<1> Sub(S);
Sub.insert(0);
Sub.insert(1);
Sub.insert(4);
MP_variable x(N);
x.integer();
MP_data COEFF(Sub);
int i;
for(i=0; i<Sub.size();i++)
COEFF(i)= 2*(i+1);//vector COEFF={2,4,6}
COEFF.display("COEFF ");
MP_constraint vinc1;
MP_constraint vinc2;
vinc1 = sum(Sub, COEFF(Sub)*x(Sub))==8;//2x0+4x1+6x4==8
vinc2 = x(0) + x(4) <= 100;
modello.add(vinc1);
modello.add(vinc2);
modello.maximize( sum(Sub, x(Sub)) );//max(x(0)+x(1)+x(4))
x.display("Optimal solution per x:");
}
Which can be the reason(s) of this incorrect behaviour?
Are there incompatibilities between the versions of FlopC++ 1.0.6 and GLPK
4.38? In this case, which version of GLPK should be used?
Thanks for your help.
Best regards,
Renato Bruni
More information about the Osi
mailing list