I am solving a small integer program (37 rows and 29 columns) using the C# 
interface from http://yoyovicks.blog.free.fr/

I've tested the code on quite a few datasets and it worked fine.  But today I 
changed some objective function coefficients (just changed the sign of them), 
and for one particular problem I'm retrieving non-integer results despite the 
fact that an integer optimal was found.

The snippet of the code that calls the solver is (I simplified the error 
handling for this example):
            GlpkSharp.SOLVERSTATUS simplexOptStatus = 
patternProblem.SolveSimplex();
            if (simplexOptStatus == GlpkSharp.SOLVERSTATUS.Solved)
            {
                GlpkSharp.SOLVERSTATUS intOptStatus = 
patternProblem.SolveInteger();
                if (intOptStatus == GlpkSharp.SOLVERSTATUS.Solved)
                {
                    for (int i = 1; i <= 14; i++)
                    {
                        double x = patternProblem.GetColPrimal(i);
                        string col = patternProblem.GetColName(i);
                        GlpkSharp.COLKIND colKind = 
patternProblem.GetColKind(i);

                        if (x > 0.0)
                        {
                            Console.WriteLine("{0}\t{1}\t of type {2}", col, x, 
colKind.ToString());
                        }
                    }
                }
            }

The output from GLPK is:
GLPK Simplex Optimizer, v4.45
37 rows, 29 columns, 147 non-zeros
      0: obj =  0.000000000e+000  infeas = 1.050e+002 (9)
*    13: obj = -5.000000000e-001  infeas = 0.000e+000 (1)
*    14: obj = -4.500000000e-001  infeas = 0.000e+000 (1)
OPTIMAL SOLUTION FOUND
GLPK Integer Optimizer, v4.45
37 rows, 29 columns, 147 non-zeros
28 integer variables, 14 of which are binary
Integer optimization begins...
+    14: mip =     not found yet <=              +inf        (1; 0)
+    15: >>>>> -5.000000000e-001 <= -5.000000000e-001   0.0% (2; 0)
+    15: mip = -5.000000000e-001 <=     tree is empty   0.0% (0; 3)
INTEGER OPTIMAL SOLUTION FOUND

And the output from the Console.WriteLine(...) that shows the retrieved - non 
integer - answers is:
xWeTh  1      of type Integer
xFrSa  0.5    of type Integer
xSaSu  4.5    of type Integer
xSuMo  1      of type Integer
xTu    1      of type Integer
xFr    1.5    of type Integer
xSa    2      of type Integer
xSu    4.5    of type Integer

Would anyone have a guess why the output is non-integer despite solving to 
integer optimality and double-checking that these variables are integer?

BTW, when I write the problem out to GLPK format, and solve it using glpsol, 
the output is fully integer.

________________________________
This e-mail and any attachments may be confidential or legally privileged. If 
you received this message in error or are not the intended recipient, you 
should destroy the e-mail message and any attachments or copies, and you are 
prohibited from retaining, distributing, disclosing or using any information 
contained herein. Please inform us of the erroneous delivery by return e-mail. 
Thank you for your cooperation.
_______________________________________________
Help-glpk mailing list
Help-glpk@gnu.org
https://lists.gnu.org/mailman/listinfo/help-glpk

Reply via email to