JuliaPolyhedra / Polyhedra.jl

Polyhedral Computation Interface
Other
172 stars 27 forks source link

removevredundancy causes glp_simplex when presolve is active #315

Closed schillic closed 1 year ago

schillic commented 1 year ago

The following example triggers glp_simplex warnings when presolve is active in the solver. I was not sure where to report, but since the example is really simple, I do not expect that this is a problem with GLPK.

julia> using Polyhedra
julia> import GLPK, JuMP
julia> P = vrep([
 [1.0, 1.0, 1.0],
 [-1.0, 1.0, 1.0],
 [1.0, -1.0, 1.0],
 [-1.0, -1.0, 1.0],
 [1.0, 1.0, -1.0],
 [-1.0, 1.0, -1.0],
 [1.0, -1.0, -1.0],
 [-1.0, -1.0, -1.0]
]);

# presolve off
julia> solver = JuMP.optimizer_with_attributes(GLPK.Optimizer, "presolve" => GLPK.GLP_OFF);
julia> removevredundancy(P, solver);  # no warnings

# presolve on
julia> solver = JuMP.optimizer_with_attributes(GLPK.Optimizer, "presolve" => GLPK.GLP_ON);
julia> removevredundancy(P, solver);  # prints warnings
glp_simplex: unable to recover undefined or non-optimal solution
glp_simplex: unable to recover undefined or non-optimal solution
glp_simplex: unable to recover undefined or non-optimal solution
glp_simplex: unable to recover undefined or non-optimal solution
glp_simplex: unable to recover undefined or non-optimal solution
glp_simplex: unable to recover undefined or non-optimal solution
glp_simplex: unable to recover undefined or non-optimal solution
glp_simplex: unable to recover undefined or non-optimal solution
schillic commented 1 year ago

This is expected behavior. The GLPK presolver prints a warning whenever the LP is infeasible. The options to avoid the warning seem to be to either raise the verbosity level or to not use the presolver. I personally find this a questionable design decision because feasibility queries are very common (as in this example).

So this is not an issue with Polyhedra or any other Julia package.