Gekko PRED_HOR i CTRL_HOR vs m.time
Próbuję wdrożyć internetowy kontroler MPC i jestem trochę zdezorientowany, co dokładnie robi m.time.
Za pomocą m.options.IMODE = 6 #MPCi m.options.REQCTRLMODE=3próbuję zdefiniować horyzonty prognozowania i kontroli:
m.options.CTRL_HOR=10
m.options.CTRL_TIME=0.05
m.options.PRED_HOR=10
m.options.PRED_TIME=0.05
Jeśli dobrze rozumiem to dobrze ctrl_hori pred_horzestawy ile przyszłość timesteps obliczyć a pred_timei ctrl_timeokreśla, jak długo jest jednym kroku czasu. Ale problem polega na tym, że kontroler zgłasza błąd, jeśli nie zdefiniuję m.time, ale co dokładnie robi i dlaczego nie wystarczy ustawić horyzontów ctrl i pred z odpowiednimi krokami czasowymi?
Odpowiedzi
Gekko używa m.timedomyślnie zamiast CTRL_HORi PRED_HOR. Możesz zdefiniować równoważny horyzont kontroli / prognozy w Gekko za pomocą:
import numpy as np
from gekko import GEKKO
m = GEKKO()
m.time = np.linspace(0,0.05,11)
Właściwości CTRL_HORi PRED_HORsą opcjonalnie używane, gdy CSV_READ=0. Jednak Gekko używa pliku CSV do wstawiania informacji o domyślnych wartościach parametrów i zmiennych, więc nie polecam go wyłączać. Używanie m.timejest również bardziej elastyczne, ponieważ możesz mieć niejednolity horyzont kontroli / prognozowania, taki jak:
m.time = [0,0.05,0.1,0.2,0.5,1.0]
Pomaga to uzyskać dobrą rozdzielczość na początku, a następnie większe kroki w celu ustalenia planów przeniesienia w stanie ustalonym. Oto praktyczna aplikacja TCLab MPC z danymi w czasie rzeczywistym.