gpt4 book ai didi

python - 具有 python 字典值的 Gurobi 目标

转载 作者:太空宇宙 更新时间:2023-11-04 10:28:08 24 4
gpt4 key购买 nike

我正在使用 Gurobi 6.0 和 Python 2.7。我很想知道 Gurobi 是否允许目标函数的值来自带有决策变量索引的字典。附上代码:

from gurobipy import *

d = {
(0, 0): 0,
(0, 1): -5,
(1, 0): 4,
(1, 1): 2,
(2, 0): 0,
(0, 2): 10
}

m = Model()
x = m.addVar(vtype=GRB.INTEGER)
y = m.addVar(vtype=GRB.INTEGER)

m.update()
m.addConstr(x + y <= 2)
m.setObjective(d[(x, y)], GRB.MAXIMIZE)
m.optimize()
print m.objVal
print x.x
print y.x

模型的答案是

-5.0

-0.0

-0.0

这显然没有意义,因为根据给定数据,max(d[(x,y)]) = 10 发生在 x=0 和 y=2 处。这里的问题是什么? Gurobi 甚至允许这样的字典引用吗?甚至允许吗?

最佳答案

对于一个有点复杂的因果链 d[(x,y)] 在你的代码中等同于 d[(0,1)],所以常量 - 5 最终成为您的目标函数。原因是

  • gurobi.Var 定义了 __hash__
  • gurobi.Var 定义了 __cmp__。它总是返回一个真实的对象
  • 在你的例子中,x 和 y 的哈希值为 0 和 1
  • Python 字典 lookup algorithm将 d[(x,y)] 解析为 d[(0,1)]

您尝试做的事情不适合整数编程框架。将其放入 gurobi 的最佳方法是添加 indicator variables x 和 y 取特定值。

关于python - 具有 python 字典值的 Gurobi 目标,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28261089/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com