Hi community,
I was interested in setting and obtaining a solution pool for a MILP problem using a solver like CPLEX or Gurobi that support that capability.
Do you know how I can proceed or suggestions?
Thank you
Hi community,
I was interested in setting and obtaining a solution pool for a MILP problem using a solver like CPLEX or Gurobi that support that capability.
Do you know how I can proceed or suggestions?
Thank you
I replied to your comment: https://github.com/jump-dev/CPLEX.jl/issues/197#issuecomment-970530377
PRs accepted.
It’s implemented in Gurobi, but not CPLEX.
Thank you very much!
In Gurobi you mean like the following example?
m = Model(optimizer_with_attributes(Gurobi.Optimizer, “PoolSearchMode”=>2, “PoolSolutions” => 1000))
@variables(m,begin
0 <= x <= 5
0 <= y <= 10, Int
z, Bin
zz, Bin
end)
@objective(m, Max, x + 2y + 5*(z+zz))
@constraint(m, x + y + z + zz<= 10)
@constraint(m, x + 2y + z + zz <= 15)
@constraint(m, z + zz <= 1)
optimize!(m)
value(z, result=2)
Hi,
I am also interested in obtaining a solution pool from a MILP using Gurobi. I have looked at the docs but I cannot manage to retrieve the different solutions. For example, for the model mentioned by @davide-f here above:
using JuMP
m = Model(optimizer_with_attributes(Gurobi.Optimizer, “PoolSearchMode”=>2, “PoolSolutions” => 1000))
@variables(m,begin
0 <= x <= 5
0 <= y <= 10, Int
z, Bin
zz, Bin
end)
@objective(m, Max, x + 2y + 5*(z+zz))
@constraint(m, x + y + z + zz<= 10)
@constraint(m, x + 2y + z + zz <= 15)
@constraint(m, z + zz <= 1)
optimize!(m)
I get:
Academic license - for non-commercial use only
Optimize a model with 3 rows, 4 columns and 10 nonzeros
Variable types: 1 continuous, 3 integer (2 binary)
Coefficient statistics:
Matrix range [1e+00, 2e+00]
Objective range [1e+00, 5e+00]
Bounds range [5e+00, 1e+01]
RHS range [1e+00, 2e+01]
Found heuristic solution: objective 15.0000000
Presolve time: 0.00s
Presolved: 3 rows, 4 columns, 10 nonzeros
Variable types: 1 continuous, 3 integer (2 binary)
…
Explored 47 nodes (10 simplex iterations) in 0.01 seconds
Thread count was 8 (of 8 available processors)
Solution count 24: 19 19 19 … 5
No other solutions better than -1e+100
Optimal solution found (tolerance 1.00e-04)
Best objective 1.900000000000e+01, best bound 1.900000000000e+01, gap 0.0000%
And so we have:
Any idea of what is going on? Is the “result” argument not functioning?
Thank you!
UPDATE
I have found a workaround at the following link: Multi-cut Benders decomposition? - #3 by deschase
What is import Pkg; Pkg.status("Gurobi")
? I can’t reproduce this:
julia> using JuMP, Gurobi
julia> m = Model(Gurobi.Optimizer)
Academic license - for non-commercial use only - expires 2022-06-19
A JuMP Model
Feasibility problem with:
Variables: 0
Model mode: AUTOMATIC
CachingOptimizer state: EMPTY_OPTIMIZER
Solver name: Gurobi
julia> set_optimizer_attribute(m, "PoolSearchMode", 2)
julia> set_optimizer_attribute(m, "PoolSolutions", 1000)
julia> @variables(m, begin
0 <= x <= 5
0 <= y <= 10, Int
z, Bin
zz, Bin
end)
(x, y, z, zz)
julia> @objective(m, Max, x + 2y + 5*(z+zz))
x + 2 y + 5 z + 5 zz
julia> @constraint(m, x + y + z + zz<= 10)
x + y + z + zz ≤ 10.0
julia> @constraint(m, x + 2y + z + zz <= 15)
x + 2 y + z + zz ≤ 15.0
julia> @constraint(m, z + zz <= 1)
z + zz ≤ 1.0
julia> optimize!(m)
Gurobi Optimizer version 9.1.0 build v9.1.0rc0 (mac64)
Thread count: 4 physical cores, 8 logical processors, using up to 8 threads
Optimize a model with 3 rows, 4 columns and 10 nonzeros
Model fingerprint: 0x32c0faa9
Variable types: 1 continuous, 3 integer (2 binary)
Coefficient statistics:
Matrix range [1e+00, 2e+00]
Objective range [1e+00, 5e+00]
Bounds range [5e+00, 1e+01]
RHS range [1e+00, 2e+01]
Found heuristic solution: objective 15.0000000
Presolve time: 0.00s
Presolved: 3 rows, 4 columns, 10 nonzeros
Variable types: 1 continuous, 3 integer (2 binary)
Root relaxation: objective 1.900000e+01, 3 iterations, 0.00 seconds
Nodes | Current Node | Objective Bounds | Work
Expl Unexpl | Obj Depth IntInf | Incumbent BestBd Gap | It/Node Time
* 0 0 0 19.0000000 19.00000 0.00% - 0s
Optimal solution found at node 0 - now completing solution pool...
Nodes | Current Node | Pool Obj. Bounds | Work
| | Worst |
Expl Unexpl | Obj Depth IntInf | Incumbent BestBd Gap | It/Node Time
0 0 - 0 - 19.00000 - - 0s
0 0 - 0 - 19.00000 - - 0s
0 2 - 0 - 19.00000 - - 0s
Explored 47 nodes (10 simplex iterations) in 0.00 seconds
Thread count was 8 (of 8 available processors)
Solution count 24: 19 19 19 ... 5
No other solutions better than -1e+100
Optimal solution found (tolerance 1.00e-04)
Best objective 1.900000000000e+01, best bound 1.900000000000e+01, gap 0.0000%
User-callback calls 174, time in user-callback 0.00 sec
julia> print_var(v, i) = print(lpad("$(value(v; result = i))", 5), " ")
print_var (generic function with 1 method)
julia> begin
println(" i x y z objective")
for i in 1:result_count(m)
print(lpad(i, 2), " ")
print_var(x, i)
print_var(y, i)
print_var(z, i)
println(" ", objective_value(m; result = i))
end
end
i x y z objective
1 0.0 7.0 1.0 19.0
2 0.0 7.0 0.0 19.0
3 4.0 5.0 1.0 19.0
4 4.0 5.0 -0.0 19.0
5 2.0 6.0 1.0 19.0
6 2.0 6.0 -0.0 19.0
7 5.0 4.0 -0.0 18.0
8 5.0 4.0 1.0 18.0
9 5.0 3.0 1.0 16.0
10 5.0 3.0 -0.0 16.0
11 5.0 5.0 -0.0 15.0
12 1.0 7.0 0.0 15.0
13 3.0 6.0 -0.0 15.0
14 5.0 2.0 1.0 14.0
15 5.0 2.0 -0.0 14.0
16 5.0 4.0 -0.0 13.0
17 5.0 1.0 1.0 12.0
18 5.0 1.0 -0.0 12.0
19 5.0 3.0 0.0 11.0
20 5.0 -0.0 -0.0 10.0
21 5.0 0.0 1.0 10.0
22 5.0 2.0 -0.0 9.0
23 5.0 1.0 0.0 7.0
24 5.0 -0.0 -0.0 5.0