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


person TexasEngineer    schedule 25.10.2019    source источник


Ответы (2)


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

m.Obj(-profit**2)
person Junho Park    schedule 25.10.2019

Две новые функции m.Maximize() и m.Minimize() доступны в Python GEKKO, начиная с версии 0.2.4, как показано в журнале изменений GEKKO. Помимо принятого ответа 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)
person John Hedengren    schedule 28.10.2019