如何在pyomo的目标函数中使用最小值和最大值

Posted

技术标签:

【中文标题】如何在pyomo的目标函数中使用最小值和最大值【英文标题】:How to use min & max in objective function in pyomo 【发布时间】:2021-12-25 07:52:41 【问题描述】:

我对 Pyomo 很陌生,正在研究我的目标函数系数是动态的并且需要最小-最大函数的用例。

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

我没有什么疑问

    如何在目标函数中使用 min 或 max 函数,我尝试过 np.min 或调用函数,但由于函数具有 if else 条件,所以会报错

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

提前致谢。

【问题讨论】:

“我尝试了多种方法,但似乎都没有奏效。” 但你没有说你尝试了什么,也没有说哪里出了问题。请参阅minimal reproducible example。 【参考方案1】:

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

min_P <= P[i] 给所有我

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

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

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

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

【讨论】:

感谢您的快速响应,UC 只不过是计算统一变化的功能。只是为了给你一点背景我在看价格优化问题,如果我们增加价格单位销售也会根据某些公式改变,所以 UC 只不过是一个函数,它会随着价格的变化返回销售单位的变化 另一个关于 min_p 作为带约束变量的问题,这将确保 min_p 不大于 P 的最小值,但实际上我们需要最小的 P 并且不需要任何其他小于该值的值。我也尝试创建该约束,但不确定如何执行 pyo.Constrain(expr = min_p 是的,这可能是个问题,具体取决于您优化的具体内容。这就是我所说的“导致未绑定变量问题”的意思。如果问题是线性的,你总是可以使用这种方法,对于非线性问题我不确定。如果 UC 取决于您优化的价格,您的问题看起来是高度非线性的。您应该首先弄清楚问题的数学结构,并检查您的求解器是否真的能够处理它。

以上是关于如何在pyomo的目标函数中使用最小值和最大值的主要内容,如果未能解决你的问题,请参考以下文章

使用递归js在树状对象中查找最小值和最大值

从列表的输入中打印最小值和最大值函数

如何创建一个要求用户输入“最多”20 个整数并使用传递给函数的参数来输出最大值、最小值和平均值的程序?

列表的最小值和最大值(不使用 min/max 函数)

Rcpp 程序中的最小值和最大值

如何在文件处理中从文本文件中找到每一行的最小值和最大值?