Добавить входы в GEKKO - PullRequest
       6

Добавить входы в GEKKO

3 голосов
/ 01 апреля 2020

Мне нужна помощь с GEKKO

Я хочу, чтобы уравнение устанавливалось с помощью ввода, вставленного в коде. Это не входное значение типа int, так как в нем есть "x" и строка не будет работать, так как она содержит цифры.

from gekko import GEKKO

m = GEKKO()
x = m.Var()

m.Obj(x**2)

m.Equation(3*x+5==4*x)

m.solve(disp=False)
print(x.value)

1 Ответ

1 голос
/ 01 апреля 2020

Вы можете ввести уравнение в виде строки (как seqn). Вы можете преобразовать строку в выражение с помощью функции eval(). Это вычисляет выражение, как если бы оно было в коде.

from gekko import GEKKO
seqn = '3*x+5==4*x' # input as string
m = GEKKO(remote=False)
x = m.Var()
m.Obj(x**2)
m.Equation(eval(seqn))
m.solve(disp=False)
print(x.value)

Если форма уравнения всегда одинакова, вы можете добавить входные параметры, такие как p=m.Param(), а затем установить p.value=6. Это вставит другое число в ваше уравнение, например 3*x+p==(p-1)*x, когда вам нужно решить одно и то же уравнение несколько раз, но с разными входами.

from gekko import GEKKO
m = GEKKO(remote=False)
x = m.Var()
p = m.Param(5)
m.Obj(x**2)
m.Equation(3*x+p==(p-1)*x)
m.solve(disp=False)
print('Solution with p=5: ' + str(x.value))

p.value=6
m.solve(disp=False)
print('Solution with p=6: ' + str(x.value))

Вы также можете добавить вход в виде числа с плавающей запятой или int как p=6, но это работает только для установки значения один раз, потому что gekko записывает файл модели с этой константой. Вы можете увидеть файл модели gk_model0.apm, открыв папку запуска с помощью m.open_folder().

Model
Variables
    v1 = 0
End Variables
Equations
    (((3)*(v1))+5)=((4)*(v1))
    minimize ((v1)^(2))
End Equations
End Model

Этот файл модели APMonitor компилируется в байт-код каждый раз, когда появляется команда solve. Опытные пользователи могут добавлять строки в этот файл с помощью m.Raw(), но я не рекомендую его, если нет хорошего понимания внутренних методов APMonitor.

...