JuliaPolyhedra / Polyhedra.jl

Polyhedral Computation Interface
Other
172 stars 27 forks source link

Incorrect redundancy removal with Gurobi or Clp #259

Closed blegat closed 2 years ago

blegat commented 3 years ago
julia> h = HalfSpace([-1.3333333333333333, -2.220446049250313e-16], 0.0) ∩ HalfSpace([0.0, 1.333333333333333], 0.0) ∩ HalfSpace([-2.7755575615628914e-17, -0.6666666666666667], 0.0) ∩ HalfSpace([-0.33333333333333337, 0.0], 0.0)
H-representation Polyhedra.Intersection{Float64, Vector{Float64}, Int64}:
4-element iterator of HalfSpace{Float64, Vector{Float64}}:
 HalfSpace([-1.3333333333333333, -2.220446049250313e-16], 0.0)
 HalfSpace([0.0, 1.333333333333333], 0.0)
 HalfSpace([-2.7755575615628914e-17, -0.6666666666666667], 0.0)
 HalfSpace([-0.33333333333333337, 0.0], 0.0)

julia> removehredundancy(h, GLPK.Optimizer)
H-representation Polyhedra.Intersection{Float64, Vector{Float64}, Int64}:
3-element iterator of HalfSpace{Float64, Vector{Float64}}:
 HalfSpace([0.0, 1.333333333333333], 0.0)
 HalfSpace([-2.7755575615628914e-17, -0.6666666666666667], 0.0)
 HalfSpace([-0.33333333333333337, 0.0], 0.0)

julia> removehredundancy(h, Clp.Optimizer)
Coin0506I Presolve 0 (-3) rows, 0 (-4) columns and 0 (-6) elements
Clp3002W Empty problem - 0 rows, 0 columns and 0 elements
Clp0000I Optimal - objective value 0
Coin0511I After Postsolve, objective 0, infeasibilities - dual 0 (0), primal 0 (0)
Clp0032I Optimal objective 0 - 0 iterations time 0.002, Presolve 0.00
Coin0507I Presolve determined that the problem was infeasible with tolerance of 1e-08
Clp3003W Analysis indicates model infeasible or unbounded
Clp0006I 0  Obj 0 Primal inf 0.00019055036 (1)
Clp0006I 0  Obj 0 Primal inf 0.00019095036 (1)
Clp0001I Primal infeasible - objective value 0
Clp0032I PrimalInfeasible objective 0 - 0 iterations time 0.002
Coin0507I Presolve determined that the problem was infeasible with tolerance of 1e-08
Clp3003W Analysis indicates model infeasible or unbounded
Clp0006I 0  Obj 0 Primal inf 0.4999999 (1)
Clp0001I Primal infeasible - objective value 0
Clp0032I PrimalInfeasible objective 0 - 0 iterations time 0.002
Coin0507I Presolve determined that the problem was infeasible with tolerance of 1e-08
Clp3003W Analysis indicates model infeasible or unbounded
Clp0006I 0  Obj 0 Primal inf 1.0098829e+16 (1)
Clp0006I 2  Obj 0
Clp0000I Optimal - objective value 0
Clp0032I Optimal objective 0 - 2 iterations time 0.002
H-representation Polyhedra.Intersection{Float64, Vector{Float64}, Int64}:
2-element iterator of HalfSpace{Float64, Vector{Float64}}:
 HalfSpace([0.0, 1.333333333333333], 0.0)
 HalfSpace([-2.7755575615628914e-17, -0.6666666666666667], 0.0)

julia> removehredundancy(h, Gurobi.Optimizer)
Academic license - for non-commercial use only
Warning for adding constraints: zero or small (< 1e-13) coefficients, ignored
Gurobi Optimizer version 9.0.3 build v9.0.3rc0 (linux64)
Optimize a model with 3 rows, 4 columns and 4 nonzeros
Model fingerprint: 0x77d8558c
Coefficient statistics:
  Matrix range     [3e-01, 1e+00]
  Objective range  [0e+00, 0e+00]
  Bounds range     [0e+00, 0e+00]
  RHS range        [2e-16, 1e+00]
Presolve removed 3 rows and 4 columns
Presolve time: 0.00s
Presolve: All rows and columns removed
Iteration    Objective       Primal Inf.    Dual Inf.      Time
       0    0.0000000e+00   0.000000e+00   0.000000e+00      0s

Solved in 0 iterations and 0.00 seconds
Optimal objective  0.000000000e+00

User-callback calls 23, time in user-callback 0.00 sec
Gurobi Optimizer version 9.0.3 build v9.0.3rc0 (linux64)
Optimize a model with 3 rows, 3 columns and 3 nonzeros
Coefficient statistics:
  Matrix range     [3e-01, 1e+00]
  Objective range  [0e+00, 0e+00]
  Bounds range     [0e+00, 0e+00]
  RHS range        [1e+00, 1e+00]
Iteration    Objective       Primal Inf.    Dual Inf.      Time
       0    0.0000000e+00   1.000000e+00   0.000000e+00      0s

Solved in 0 iterations and 0.00 seconds
Infeasible model

User-callback calls 38, time in user-callback 0.00 sec
Gurobi Optimizer version 9.0.3 build v9.0.3rc0 (linux64)
Optimize a model with 3 rows, 3 columns and 3 nonzeros
Coefficient statistics:
  Matrix range     [3e-01, 1e+00]
  Objective range  [0e+00, 0e+00]
  Bounds range     [0e+00, 0e+00]
  RHS range        [3e-17, 7e-01]
Iteration    Objective       Primal Inf.    Dual Inf.      Time
       0    0.0000000e+00   5.000000e-01   0.000000e+00      0s

Solved in 0 iterations and 0.00 seconds
Infeasible model

User-callback calls 53, time in user-callback 0.00 sec
Gurobi Optimizer version 9.0.3 build v9.0.3rc0 (linux64)
Optimize a model with 3 rows, 3 columns and 3 nonzeros
Coefficient statistics:
  Matrix range     [3e-01, 1e+00]
  Objective range  [0e+00, 0e+00]
  Bounds range     [0e+00, 0e+00]
  RHS range        [3e-01, 3e-01]
Iteration    Objective       Primal Inf.    Dual Inf.      Time
       0    0.0000000e+00   1.000000e+00   0.000000e+00      0s

Solved in 0 iterations and 0.00 seconds
Infeasible model

User-callback calls 68, time in user-callback 0.00 sec
H-representation Polyhedra.Intersection{Float64, Vector{Float64}, Int64}:
3-element iterator of HalfSpace{Float64, Vector{Float64}}:
 HalfSpace([0.0, 1.333333333333333], 0.0)
 HalfSpace([-2.7755575615628914e-17, -0.6666666666666667], 0.0)
 HalfSpace([-0.33333333333333337, 0.0], 0.0)