获得所有价值,而 Gurobi 在 Python 中只有一个可行的解决方案

问题描述

当 Gurobi 只有一个可行解时,我如何获得变量的所有值? 例如: 最佳目标是 5 并且有四个值可以达到可行解,如下所示。 [1,2,1,1],[2,0],[3,0] 但是Gurobi只显示一个值,如下图:

x[0]:3.0
x[1]:0.0
x[2]:2.0
x[3]:0.0

请告诉我如何获得所有价值。非常感谢!

解决方法

假设您要枚举 MIP 的所有最优解,您可以借助 PoolGapPoolSolutionsPoolSearchMode 参数来完成。

  • PoolSolutions 参数确定在求解 MIP 时存储了多少可行解。
  • PoolGap 参数确定所有存储解决方案的允许间隙。将其设置为 0.0 以仅允许解决方案池中的最佳解决方案。
  • PoolSearchMode 参数设置 MIP 树搜索的搜索模式。将其设置为 2 以搜索 n 最佳解决方案,其中 n 只是为 PoolSolutions 设置的值。

这是一个最小的例子:

import gurobipy as gp

coins = [1,2,5,10,20,50,100,200]

m = gp.Model()
x = m.addVars(8,vtype='I',name="x")
m.addConstr(sum(coins[i]*x[i] for i in range(8)) == 200)

# Parameters
m.Params.PoolSearchMode = 2
m.Params.PoolSolutions = 10**8
m.Params.PoolGap = 0.0

# Optimize
m.optimize()

# Iterate over all found solutions
for k in range(m.SolCount):
    m.Params.SolutionNumber = k
    print([var.Xn for var in m.getVars()])