假设model.x
和model.d
使用二维索引正确声明,问题是您使用的是双方括号。访问特定索引的正确方法是model.x[i,j]
.
以下是声明了正确的方式model.x
,model.d
和model.a
。
假设model.a
是二维的:
model.a = Set(initialize=[(1,1),(1,2),(2,1),(2,2)])
model.d = Param(model.a, default=0)
model.x = Var(model.a)
def _obj_rule(m):
return sum(m.d[i,j]*m.x[i,j] for i,j in m.a)
model.obj = Objective(rule=_obj_rule)
假设model.a
是一维的:
model.a = Set(initialize=[1,2,3])
model.d = Param(model.a,model.a,default=0)
model.x = Param(model.a,model.a)
def _obj_rule(m):
return sum(m.d[i,j]*m.x[i,j] for i in m.a for j in m.a)
model.obj = Objective(rule=_obj_rule)
请注意,无论是model.a
被声明为二维或model.x
和model.d
由被索引model.a
的两倍。还要注意目标中总和的编写方式略有不同。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句