python - 优化模型,索引组件导致的跳过错误
问题描述
我的目标函数的一个组件有一个索引错误,我想知道是否有办法告诉 pyomo 在没有索引组件时跳过索引组件。
为了澄清,我有一本字典 Penalty_Nu[n, s, d] ,其中只有索引组件应该应用惩罚。
Model.x 是所有 [n, s, d] 分量的变量,其中:
- 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 中,但如果有另一种方法,它真的可以帮助我。
解决方案
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)
你有三个索引,总和应该超过所有这些目标函数不能有索引
推荐阅读
- r - 向 scale_fill_manual 中的自定义颜色值添加 280 个颜色值
- algorithm - 如何引用“等效”算法
- autodesk-forge - 未捕获的类型错误:无法读取 null 的属性“setThemingColor”
- tomcat - 如何在 Liferay/Tomcat 中进行重定向
- python - 如何从dis中获取函数参数
- javafx - TableColumn 中 USE_COMPUTED_SIZE 的使用
- javascript - DocumentFragment 正在丢失我的部分内容
- javascript - 如何在javascript中执行if语句来检查JSON数组是否为空?
- google-analytics - PhantomJS - Google Analytics 中的错误语言(接受语言)
- java - 如何将关键对象(s3)的列表(包含特定字符串)过滤到新列表中