2

我试图在我的优化问题中最大化利润。当我使用 Gekkom.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 最大化目标函数,以便最佳解决方案是profit=10?我的问题有多个目标。有一些是我想最小化的(公用事业、饲料、运营费用),还有一些是我想最大化的(利润、生产)。

4

2 回答 2

4

您可以在目标函数上加上负号以最大化。

m.Obj(-profit**2)
于 2019-10-25T17:01:35.860 回答
3

从版本 0.2.4 开始,Python GEKKO中提供了两个新功能m.Maximize(),如GEKKO 更改日志中所示。除了接受的答案之外,另一个最大化利润的选择是使用:m.Minimize()m.Obj(-profit**2)

m.Maximize(profit**2)

如果您拥有以货币单位表示的所有术语,那么您可以最小化和最大化以进行最佳权衡,从而在不使用平方目标的情况下提高整体盈利能力。

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

Python GEKKO 将所有客观术语组合成一个值,如下所示:

minimize (-revenue + operating_cost + feed_cost + utility_cost)

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

print(-m.options.OBJFCNVAL)
于 2019-10-28T13:45:31.760 回答