如何最大化 Python Gekko 中的 objective 函数?

How to maximize an objective function in Python Gekko?

我试图在我的优化问题中实现利润最大化。当我使用 Gekko m.Obj 函数时,它总是使利润最小化。

from gekko import GEKKO
m = GEKKO()
profit = m.Var(lb=1,ub=10)
m.Obj(profit**2)
m.solve(disp=False)
print(profit.value)

报告的最优解是profit=1。如何切换到使用 Python Gekko 最大化 objective 函数,以便最优解是 profit=10?我的问题中有多个 objective。有一些我想最小化(公用事业、饲料 material、运营费用)和其他我想最大化(利润、生产)。

您可以在 objective 函数上加上负号以实现最大化。

m.Obj(-profit**2)

Python GEKKO starting in version 0.2.4 as shown in the GEKKO Change Log 中提供了两个新函数 m.Maximize()m.Minimize()。除了公认的答案 m.Obj(-profit**2) 之外,另一个最大化利润的选择是使用:

m.Maximize(profit**2)

如果您的所有项都以货币单位表示,那么您可以最小化和最大化以进行最佳权衡以提高整体盈利能力,而无需使用平方 objective。

m.Maximize(revenue)
m.Minimize(operating_cost)
m.Minimize(feed_cost)
m.Minimize(utility_cost)

Python GEKKO 将所有 objective 项合并为一个值:

minimize (-revenue + operating_cost + feed_cost + utility_cost)

您可以在使用 m.options.OBJFCNVAL 成功 m.solve() 后检索最终的 objective 函数值。报告的值是最小化形式。如果你需要报告最大形式,那么你可以将objective函数结果乘以-1

print(-m.options.OBJFCNVAL)