Выбор IMODE в задачах оптимизации gekko - PullRequest
4 голосов
/ 29 апреля 2019

Я вижу здесь , что imode = 3 эквивалентно стационарному моделированию (которое, я думаю, imode = 2), за исключением того, что допускаются дополнительные степени свободы.

Как мне решить использовать imode = 3 вместо imode = 2?

Я делаю оптимизацию, используя imode = 2, где я определяю переменные, рассчитанные с помощью решателя для удовлетворения ограничения, используя m.Var и другие, используя m.Param. Какие изменения мне нужно сделать в переменных, чтобы использовать imode = 3?

1 Ответ

3 голосов
/ 29 апреля 2019

Ниладри,

IMODE 2 - для стационарных задач с несколькими точками данных.

Вот пример:

from gekko import GEKKO
import numpy as np

xm = np.array([0,1,2,3,4,5])
ym = np.array([0.1,0.2,0.3,0.5,1.0,0.9])

m = GEKKO()

m.x = m.Param(value=np.linspace(-1,6))
m.y = m.Var()
m.options.IMODE=2
m.cspline(m.x,m.y,xm,ym)
m.solve(disp=False)

Это приближение кубического сплайна с несколькими точками данных. Когда вы переключаетесь на IMODE 3, он очень похож, но учитывает только один экземпляр вашей модели. Все свойства значения должны иметь только 1 значение, например, когда вы оптимизируете кубический сплайн, чтобы найти максимальное значение.

p = GEKKO()
p.x = p.Var(value=1,lb=0,ub=5)
p.y = p.Var()
p.cspline(p.x,p.y,xm,ym)
p.Obj(-p.y)

p.solve(disp=False)

Вот дополнительная информация о IMODE:

С уважением,

Джон Хеденгрен

...