在 Python 中使用 Gekko,对于多目标优化问题,是不是所有目标函数都必须具有相同的单位?

Posted

技术标签:

【中文标题】在 Python 中使用 Gekko,对于多目标优化问题,是不是所有目标函数都必须具有相同的单位?【英文标题】:Using Gekko in Python, for a multi-objective optimization problem, do all objective functions have to be of the same unit?在 Python 中使用 Gekko,对于多目标优化问题,是否所有目标函数都必须具有相同的单位? 【发布时间】:2022-01-24 00:01:30 【问题描述】:

根据 Gekko 文档,对多个目标函数求和并求解一个总体目标值。这是否意味着所有目标函数都必须具有相同的尺寸或单位(m3 或 USD 或 kg)? 如果是这样,有没有办法让不同单位的多个目标? 另外,附带问题,是否可以轻松提取每个目标函数的最佳目标值(除了求解器给出的整体目标值)?

【问题讨论】:

【参考方案1】:

Gekko 将目标函数添加到单个目标语句中。 Gekko 不跟踪单位,所以像 kg/hr 中的 Maximize(flow1)gm/hr 中的 Maximize(flow2) 之类的东西不会被 Gekko 缩放。这是一个简单的示例问题,展示了如何解决多目标函数语句:

from gekko import GEKKO
m = GEKKO(remote=False)
x = m.Var()
obj1 = m.Intermediate((x-3)**2)
obj2 = m.Intermediate((x-2)**2)
m.Minimize(obj1)
m.Minimize(obj2)
m.solve(disp=False)
print('Obj Total: ',m.options.OBJFCNVAL)
print('Obj1: ',obj1.value[0])
print('Obj2: ',obj2.value[0])
print('x: ',x.value[0])

解决方案是x=2.5,正如预期的那样:

Obj Total:  0.5
Obj1:  0.25
Obj2:  0.25
x:  2.5

将这两个目标加在一起以创建总体目标。

【讨论】:

非常感谢您的及时回复。因此,如果我理解正确,可以使用不同单位的目标函数。但是,我一直遇到的一个问题是我得到的解决方案是“nan”,尽管它是成功的。我倾向于相信我以某种方式更改了设置中的某些内容,因为我甚至重新运行了我以前工作的优化问题,它们也给了我一个成功的“nan”目标值(即使他们之前给了我正确的数值目标值)。你知道我可能做错了什么吗? 我不确定你为什么会得到这个结果。您可以通过m.open_folder() 打开运行文件夹来查看解决方案报告。 m.options.DIAGLEVEL=2 有更多信息。使用pip install gekko --upgrade 升级到最新版本也是一个好主意。 感谢Hedengren博士的帮助。不幸的是,这个问题仍然反复出现,我不知道如何解决它。我对 Gekko 和 Python 还是很陌生,所以这可能就是原因。我将发布一个单独的问题,希望我能得到您对代码的反馈。非常感谢您的帮助。

以上是关于在 Python 中使用 Gekko,对于多目标优化问题,是不是所有目标函数都必须具有相同的单位?的主要内容,如果未能解决你的问题,请参考以下文章

如何在最小化目标参数的同时重新评估 Gekko 目标

在 Python 中使用 Gekko 求解函数

如何使用 R reticulate 安装 gekko 包?

GEKKO - 如何修复 Python Gekko Max Equation 错误 - 元素数

适用于 Python 的 Gekko 优化套件 - if3 始终 <0

GEKKO中如何实现segment功能?