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

Мне нужна помощь с 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)

person Emil12232335    schedule 01.04.2020    source источник
comment
Отвечает ли это на ваш вопрос? Получение пользовательского ввода   -  person Lescurel    schedule 01.04.2020


Ответы (1)


Вы можете ввести уравнение в виде строки (как 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))

Вы также можете добавить ввод как float или 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.

person John Hedengren    schedule 01.04.2020