【发布时间】:2016-10-27 13:52:29
【问题描述】:
我对 Gurobi 很陌生,我正在尝试按如下方式实现分配问题:
# Create decision variables for the allocation
x = {}
for s in arr1:
for t in arr2:
x[s,t] = m.addVar(vtype=GRB.BINARY, name="allocation")
x[s,t] == x[s,t] * mymat[s]
m.modelSense = GRB.MAXIMIZE
m.update()
我想知道写出上述线性表达式是可能的,这样我就可以最大限度地分配具有相似偏好的人来完成相同的任务。
但是,在使用 x[s,t].x 检索结果时,运行上述编写的模型会产生错误。错误是
GurobiError:无法检索属性“X”
数据从一个单独的文件传入模型,代码如下:
data=c.execute('select id,pref from data')
result = c.fetchall()
pref_data=dict(result)
mymat=defaultdict(int)
a=1
for i in range(1,10):
row = []
for x in range(0,i):
row.append(0)
for j in range(i+1, 10):
if pref_data[i]==pref_data[j]:
row.append(1)
else:
row.append(0)
mymat[a]=row
a+=1
【问题讨论】:
-
X 属性(
Var.X或Var.get('X'))表示最优解的值,因此在调用Model.optimize()之前,您无法访问 X 属性。 -
是的,我明白了。我实际上在程序结束时调用了 x[s,t] .x。抱歉,我只复制粘贴了一部分代码。但是,当我添加术语 x[s,t] == x[s,t] * mymat[s] 时出现此错误。所以我的主要问题是知道如何解决这个错误?
-
参见related question,了解如何使用“不可约不可行集”来诊断不可行问题。