+关注
已关注

分类  

暂无分类

标签  

暂无标签

日期归档  

暂无数据

GurobiError:无法将参数转换为表达式

发布于2020-10-22 19:53     阅读(985)     评论(0)     点赞(12)     收藏(4)


0

1

2

3

4

5

有人可以帮助我解决这个错误吗?当我收到错误消息时,我应该去哪里查看:GurobiError:无法将参数转换为表达式。我应该补充一点,我在python中使用Gurobi库

from gurobipy import*

m=Model('mymodel')

def label(c):
    return "x" + str(c).translate(None, " '")

shifts = [1,2]    
hours = [1,2]
games = ['bj', 'cr']
pits = [1,2]
order1 = [1,2]
order2 = [1,2,3]
combo, oi = multidict( {
 (1,1,'bj',1,1,1): 100,
 (1,1,'bj',1,1,2):200,
 (1,1,'bj',1,1,3):200,
 (1,1,'bj',1,2,1):50,
 (1,1,'bj',1,2,2):70,
 (1,1,'bj',1,2,3):70,
 (1,1,'cr',1,1,1):400,
 (1,1,'cr',1,1,2):450
})

combo= tuplelist(combo)
for s  in shifts:
    for t in hours:
        for i in games:
            for n in order1:
                     m.addConstr(quicksum(x[s,t,i,p,n,k] for s,t,i,p,n,k in combo.select(s,t,i,'*',n,'*'))- int(1)== 0, name=label((s,t,i,p,n,k))

解决方案


如果您尝试添加没有模型变量的约束,那么Gurobi将会抱怨。看起来,对于某些变量组合,列表枚举将构造空列表,即:

m.addConstr(quicksum([]) - 1 == 0)

又名

m.addConstr(-1 == 0)

这是不可能的。实际上,在以下示例中,即使表达式不包含任何变量,gurobi仍然会引发错误。

m.addConstr(-1 <= 0)

要解决此问题,只需在添加约束之前检查列表是否为空即可。

0

1

2

3

4

5

6



所属网站分类: 技术文章 > 问答

作者:黑洞官方问答小能手

链接: https://www.pythonheidong.com/blog/article/607354/8e7f1f8fcbef9afd8d11/

来源: python黑洞网

任何形式的转载都请注明出处,如有侵权 一经发现 必将追究其法律责任

12 0
收藏该文
已收藏

评论内容:(最多支持255个字符)