Я пытаюсь реализовать MPC в реальном времени в gekko. Это означает, что мне нужно, чтобы эта симуляция работала в реальном времени бесконечно. Что-то похожее на MPC в реальном времени do-MPC. Общий цикл кода вызывает решатель на каждом временном шаге для повторной оценки проблемы на основе текущего состояния, а затем сдвигает массив m.time на 1 (т.е. если он начался как [0-20], следующий временной шаг будет [ 1-21] и т. д.).
Проблема возникает, когда я определяю свой массив m.time следующим образом:
Код: Выделить всё
m.time = np.linspace(current_time, current_time+prediction_horizon, prediction_horizon+1) current_time += 1
Это должно дать желаемый эффект. Вместо этого решатель выдает мне следующее предупреждение:
Код: Выделить всё
Warning: shifting time horizon to start at zero Current starting time value: 18.
Это означает, что теперь окно моделирования не смещается. Это просто ограничение решателя или я могу это изменить?
Я попробовал динамически расширить временной горизонт, и это сработало:
Код: Выделить всё
m.time = np.linspace(0, current_time+prediction_horizon, prediction_horizon+1) current_time += 1
Это означает, что мне нужно добавить новые значения ко всем моим массивам, чтобы массивы для всех решающих параметров имели одинаковую длину. Однако это значительно замедляет время вычислений на 60 секунд. Сдвиг заданного горизонта мог бы решить эту проблему, но я, похоже, не могу этого добиться.
Буду признателен за любую помощь. Спасибо.
Подробнее здесь:
https://stackoverflow.com/questions/791 ... zero-value