微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决获得所有价值,而 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()])

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。