首页 > 解决方案 > 优化模型,索引组件导致的跳过错误

问题描述

我的目标函数的一个组件有一个索引错误,我想知道是否有办法告诉 pyomo 在没有索引组件时跳过索引组件。

为了澄清,我有一本字典 Penalty_Nu[n, s, d] ,其中只有索引组件应该应用惩罚。

Model.x 是所有 [n, s, d] 分量的变量,其中:

这是目标函数的一部分:

def obj_function(model):
     return(
         sum(sum(Penalty_Nu[n,s,d]*model.x[n,s,d] for d in model.D) for s in model.S)
     )
    
model.ObjFunction = Objective(rule=obj_function, sense=minimize)

这是错误:

ERROR: Rule failed when generating expression for objective ObjFunction:
    KeyError: (9, 'N', 2)
ERROR: Constructing component 'ObjFunction' from data=None failed: KeyError:
    (9, 'N', 2)

我知道我可以将惩罚应为 0 的所有组件 [n, s, d] 添加到字典 Penalty_Nu 中,但如果有另一种方法,它真的可以帮助我。

标签: pythonoptimizationmodelpyomo

解决方案


def obj_function(model): return( sum(sum(Penalty_Nu[n,s,d]*model.x[n,s,d] for d in model.D) for s in model.S) )

您的 summation 中缺少 n 索引,请按如下方式进行更正:

def obj_function(model):
 return sum(Penalty_Nu[n,s,d]*model.x[n,s,d] for d in model.D for s in model.S for n in model.N)
 

你有三个索引,总和应该超过所有这些目标函数不能有索引


推荐阅读