Как определить функцию ввода, которая зависит от выхода моделируемого FMU с использованием PyFMI? - PullRequest
1 голос
/ 24 июня 2019

У меня есть один FMU для моделирования с использованием PyFMI. Как мне создать функцию ввода, которая зависит от выхода моделируемого FMU? Документация содержит только примеры для функций ввода, которые зависят от внешних переменных, например ::10000

# Generate input
t = N.linspace(0.,10.,100) 
u = N.cos(t)
u_traj = N.transpose(N.vstack((t,u)))

# Create input object
input_object = ('u', u_traj)

# Simulate
res = model.simulate(final_time=30, input=input_object, options={'ncp':3000})

Как мне поступить, если я хочу, чтобы моя функция ввода u_traj зависела от вывода 'y' модели вместо t?

1 Ответ

0 голосов
/ 26 июня 2019

Это возможно. В PyFMI разрешено указывать ввод как функцию вместо матрицы данных.

model = load_fmu(...)

def input_function(t):
    global model
    #Get values from the model using e.g. "model.get("my_parameter")"
    p = model.get("my_paramater")
    return t*p

input_object = ("u", input_function)

res = model.simulate(final_time=30, input=input_object, options={'ncp':3000})

Но, как я сказал в своем комментарии, это нужно делать осторожно, так как возможно создать петли и сделать проблему неразрешимой. Также может быть так, что вам может потребоваться защитить (в input_function) первый вызов к нему, поскольку модель, возможно, не была инициализирована, и, следовательно, значения, которые вам нужно получить, могут быть недоступны.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...