[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