python - 如何在pyomo的目标函数中使用最小值和最大值
问题描述
我对 Pyomo 很陌生,正在研究一个用例,其中我的目标函数系数是动态的并且需要一个 min-max 函数。
目标函数 = Max( sum (P * UC) - sum ( P - min(P)) * UC 其中 P 是变量需要优化,UC 是函数,它是基于一些计算得出的值。
我有几个疑问
- 如何在目标函数中使用 min 或 max 函数,我尝试过 np.min 或调用函数,但它给出了错误,因为函数有 if else 条件
我尝试了多种方法,但似乎都没有奏效。如果有人可以帮助我使用虚拟代码,那就太好了。
提前致谢。
解决方案
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。除此之外,请参见此处。
推荐阅读
- sql - 转换数据并使查询自定义并另存为视图
- python - OpenCV 从 pyspark 读取图像并传递给 Keras 模型
- matplotlib - 使用 plt scatter 绘制图形(仅显示 4 个点)
- airflow - 将 pyfile 和参数传递给 DataProcPySparkOperator
- model-view-controller - MVC - 将下拉列表中的值保存到数据库中的字段
- kubernetes - OpenShift 部署 - pod 控制台日志被截断
- c# - C#文件夹创建不创建所有文件夹,但仅在某些机器上
- javascript - 在 Rails 中设置 Vuetify?
- mongodb - Helm 需要值而不使用它
- powershell - 如何从 if 语句返回测试连接的结果?