我想使用 Pyomo 的 PySP 框架做一些随机优化。在这个模型中,我有一些跨场景必须相同的变量(即标准根节点变量)。作为渐进式对冲方法的一部分,PySP 创建了一个增强的拉格朗日,它的乘数被迭代调整,直到所有这些变量在不同场景中都相等。到目前为止一切都很好。但我也有一些必须在期望值的基础上强制执行的约束。在广泛的形式中,这些看起来像这样:
sum(probability[s] * use[s] for s in scenarios) == resource
这种复杂的约束可以通过拉格朗日松弛来分解。这需要在主要目标函数中添加这样的术语(然后将成为每个场景目标函数的一部分):
(
lambda * (sum(probability[s] * use[s] for s in scenarios) - resource)
+ mu/2 * (sum(probability[s] * use[s] for s in scenarios) - resource)**2
)
这与主要目标函数中已经存在的非预期性约束的拉格朗日项非常相似。在每次迭代中,PySP 框架会自动更新非预期项的乘数,然后将它们的值传播到各个场景中。
所以我的问题是,有没有办法将我的术语添加到 PySP 管理的标准拉格朗日,并让它自动更新我的乘数以及它自己的?我不介意做一些繁重的工作,但是我找不到任何关于 PySP 如何实现的详细文档,所以我不确定从哪里开始。