获取所有值,而 Gurobi 在 Python 中只有一个可行解

Obtain all value while Gurobi has only one feasible solutions in Python

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

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

请告诉我如何得到你所有的value.Thank!

假设您想枚举一个 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()])