答案 0 :(得分:0)
假设使用2-D索引正确声明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
索引两次。还要注意目标总和的写法略有不同。