Интеграция вычислений C с отслеживанием состояния с Modelica

Я интегрировал алгоритм машинного обучения, реализованный на C, с моделью Modelica, работающей в OpenModelica.

Алгоритм машинного обучения работает в замкнутом цикле, принимая в качестве входных данных отклонение от целевого состояния и предоставляя в качестве выходных сигналов управляющий сигнал.

Я установил период выборки, так что алгоритм C вызывается только каждые X миллисекунд. Однако я вижу, что алгоритм вызывается несколько раз для одних и тех же значений часов.

Это заставляет меня подозревать, что для решения модели OpenModelica необходимо вызывать ее несколько раз за итерацию моделирования.

Это влияет на способ обучения алгоритма, так как он сохраняет состояние относительно своего опыта.

Почему OpenModelica вызывает мой алгоритм несколько раз за такт часов? Как я могу решить эту проблему, чтобы не привести обучение к путанице из-за нескольких вызовов в одно и то же время?


person noe    schedule 31.03.2015    source источник
comment
Не могли бы вы опубликовать фрагмент вашей модели?   -  person choeger    schedule 31.03.2015


Ответы (1)


Есть 2 способа:

  1. используйте решатель Эйлера, который не выполняет возврат (dassl по умолчанию делает)

  2. используйте внешнюю функцию C со статической переменной, которую вы устанавливаете / проверяете

person Adrian Pop    schedule 31.03.2015
comment
В будущем может появиться дополнительный способ связи с решателем: trac.modelica.org/ Modelica / ticket / 1626. На данный момент использование явного Эйлера кажется самым простым. - person sjoelund.se; 01.04.2015