Вы всегда хотите использовать одно и то же время выборки между Оценка движущегося горизонта и симулятором. Я рекомендую использовать numpy.linspace
или numpy.arange
для определения временного горизонта для оценки.
import numpy as np
from gekko import GEKKO
m = GEKKO()
m.time = np.linspace(0,5,11)
print(m.time)
m.time = np.arange(0,5.01,0.5)
print(m.time)
Это дает горизонту 11 временных точек с шагом по времени 0,5:
[0. 0.5 1. 1.5 2. 2.5 3. 3.5 4. 4.5 5. ]
Если ваш симулятор выполняет измерение с другим интервалом выборки, вы можете отрегулировать 0,5 в numpy.arange
.
Вот дополнительный пример кода для MHE . Если вы используете физическую систему вместо симулятора, тогда временем выборки для MHE должна быть частота, с которой вы обновляете свои измерения и решаете MHE. Вот исходный код для приведенного ниже рисунка , который является выборкой данных о температуре с устройства Arduino.
В этом случае температура измеряется каждую секунду, и MHE повторно разрешается. Общий временной интервал составляет 120 секунд с 3-секундными интервалами или np.linspace(0,120,41)
, чтобы дать m.time=[0,3,...,117,120]
.
Что касается вашего второго вопроса о нахождении хорошего баланса между частотой выборки и частотой командования, то частота выборки часто ограничивается тем, насколько быстро может решить MHE. Если вам нужно что-то более быстрое, тогда можно использовать фильтр Калмана или альтернативный подход. Как правило, более высокая скорость командования для контроллера лучше, потому что вы можете быстрее реагировать на помехи. Если вас беспокоит слишком частое перемещение значений параметров, то вы можете использовать DCOST (штрафовать за движение) или DMAX (жесткое ограничение на движение) в своей цели.