首页 > 解决方案 > 如何在pyomo的目标函数中使用最小值和最大值

问题描述

我对 Pyomo 很陌生,正在研究一个用例,其中我的目标函数系数是动态的并且需要一个 min-max 函数。

目标函数 = Max( sum (P * UC) - sum ( P - min(P)) * UC 其中 P 是变量需要优化,UC 是函数,它是基于一些计算得出的值。

我有几个疑问

  1. 如何在目标函数中使用 min 或 max 函数,我尝试过 np.min 或调用函数,但它给出了错误,因为函数有 if else 条件

我尝试了多种方法,但似乎都没有奏效。如果有人可以帮助我使用虚拟代码,那就太好了。

提前致谢。

标签: pythonpyomoobjective-function

解决方案


Min 可以通过定义一个新变量 来实现,该变量min_P需要小于 的任何一个P,由约束表示:

min_P <= P[i]对于所有我

这将确保min_P不大于P. 然后你可以min_P在你的目标函数中使用。我假设您知道如何定义这样的约束。这可能会导致未绑定的变量问题,具体取决于您的优化程度,但这应该会让您走上正确的轨道。

如果为表达式定义另一个值,则 max 情况类似sum (P * UC) - sum ( P - min(P))

不清楚UC是参数还是变量本身(在另一个约束中计算)。在后一种情况下,整个问题将是高度非线性的,应该重新考虑。

我不明白您的 AbstractModel 与 ConcreteModel 问题。如果您有可用的数据,请使用 ConcreteModel。除此之外,请参见此处


推荐阅读