Как максимизировать целевую функцию в Python Gekko? - PullRequest
4 голосов
/ 25 октября 2019

Я пытаюсь максимизировать прибыль в своей задаче оптимизации. Когда я использую функцию 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, чтобы оптимальным решением было profit=10? У меня есть несколько целей в моей проблеме. Есть некоторые, которые я хочу минимизировать (коммунальные услуги, сырье, эксплуатационные расходы) и другие, которые я хочу максимизировать (прибыль, производство).

Ответы [ 2 ]

4 голосов
/ 25 октября 2019

Вы можете поставить отрицательный знак на вашей целевой функции для максимизации.

m.Obj(-profit**2)
3 голосов
/ 28 октября 2019

Две новые функции m.Maximize() и m.Minimize() доступны в Python GEKKO, начиная с версии 0.2.4 , как показано в GEKKO Change Log . В дополнение к принятому ответу 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)
...