# An Outsider’s Tour of Reinforcement Learning (Part10&11) [TOC] ## [PID and Reinforcement Learing](http://www.argmin.net/2018/04/24/ilc/) ### PID (proportion integration differentiation)   ![](https://i.imgur.com/e37G3lq.png)   PID控制器(比例-積分-微分控制器),把收集到的數據和一個參考值進行比較,然後把這個差別用於計算新的輸入值,這個新的輸入值的目的是可以讓系統的數據達到或者保持在參考值。   控制器由比例單元(P)、積分單元(I)和微分單元(D)組成。三個單元 P、I 和 D 分別對應目前誤差、過去累計誤差及未來誤差。 ![](https://i.imgur.com/qJfTtu4.png) $K_p$ : 比例增益 $K_i$ : 積分增益 $K_d$ : 微分增益 u : 控制輸出 e : 設定值(set point) - 回授值(progress value) t : 目前時間 τ : 積分變數,數值從0到目前時間 t   :::info - 用誤差來計算出一個對系統的糾正值來作為輸入結果,這樣系統就可以從它的輸出結果中消除誤差。在一個PID迴路中,這個糾正值有三種算法 : 1. 消除目前的誤差 2. 平均過去的誤差 3. 透過誤差的改變來預測將來的誤差。 - PID控制器可以用來控制任何可被測量及可被控制變量。比如,它可以用來控制溫度、壓力、流量、化學成分、速度等等。 - 若是不知道受控系統的特性,一般認為PID控制器是最適用的控制器 ::: :::success - 強化學習 : 使用過去的數據來增強對系統未來的操縱 - 強化學習最常見實踐的模型是,在系統上提出並測試一組動作,觀察一系列獎勵和狀態,並且將先前動作和獎勵與狀態數據相結合以改進行動政策 :::   **在某種意義上,PID控制是控制的"梯度下降"** 梯度下降調整的一個常見技巧是 : 使梯度下降不會發散的最大值,然後相應地從該起點設置動量和學習速率。 從PID的角度來說 : 找到會使系統震盪的最大增益 $K_p$,並基於該增益和振盪頻率設置PID參數。   ### PID control for iterative learning control (ILC) 疊代學習控制(ILC)是一種對做重複動作的軌跡跟蹤系統的控制方法。例如機器手臂控制、化工反應過程控制、試驗鑽探等。這些系統都具備**多次準確重複同一動作**的特性。其動作的目標是**在有限的時間區間內,準確的追蹤給定的參考訊號**。   :::info - 控制任務是尋找控制律 u(t),使得被控對象的輸出 y(t) 在有限的時間 [0,T]上沿著整個期望的軌跡實現零誤差軌跡跟蹤 - 學習跟踪軌跡,通過先前疊代中與期望軌跡的偏差來調整並改進輸入控制 :::   {%youtube IZTP7h5cfqg%}   讓系統在不使用模型的情況下跟踪軌跡。 也就是說,使用迭代學習控制來學習跟踪空間中的某些曲線,而且我們不知道系統的真實模型是什麼。 在追蹤軌跡的問題上定義一個PID控制器 :   ![](https://i.imgur.com/AKbU56N.png)   控制輸入 : u = [$u_1$,…,$u_N$] 期望輸出 : v = [$v_1$,…,$v_N$] 實際輸出 : y = [$y_1$,…,$y_N$] 期望值與實際值的誤差 : e = [$v_1$−$y_1$,…,$v_1$−$y_N$] Se : e 的離散積分 De : e 的離散微分     讓我們使用我們一直使用的簡單四旋翼模型 :   ![](https://i.imgur.com/XXHR0xY.png)   ($z_{t+1}$ ; $v_{t+1}$) = *A*($z_t$ ; $v_t$) + *B*$u_t$                $y_t$ = *C*($z_t$ ; $v_t$)                   with   *A* = $\begin{bmatrix}1&1\\0&0.9\end{bmatrix}$  ,  *B* = $\begin{bmatrix}0\\1\end{bmatrix}$  ,  *C* = $\begin{bmatrix}1&0\end{bmatrix}$   $\begin{bmatrix} z_{t+1}\\ v_{t+1} \end{bmatrix}$ = $\begin{bmatrix} 1&1\\ 0&0.9 \end{bmatrix}$ $\begin{bmatrix} z_t\\ v_t \end{bmatrix}$ + $\begin{bmatrix} 0\\1\end{bmatrix}$ $u_t$   $y_t$ = $\begin{bmatrix}1&0\end{bmatrix}$$\begin{bmatrix} z_t\\v_t\end{bmatrix}$     期望軌跡 :   ![](https://i.imgur.com/Xa08b5E.png)   在ILC的模擬中,使用上面的PID控制器,並只使用微分的部分,設定 $k_D$ = 0.1,$k_P$ 和 $k_I$ 為 0   前8次疊代的結果 :   ![](https://i.imgur.com/0bBe0lk.png)   疊代20次後的結果 : ![](https://i.imgur.com/ZhTiLtJ.png)   :::info - 在沒有模型的情況下,也能於非常少的疊代次數下就找到控制策略 ::: [ILC code](https://nbviewer.jupyter.org/url/argmin.net/code/ILC_tracker.ipynb) [fig8.csv](https://github.com/benjamin-recht/benjamin-recht.github.io/blob/master/secret_playground/fig8.csv)         參考資料 https://en.wikipedia.org/wiki/PID_controller https://en.wikipedia.org/wiki/Iterative_learning_control https://en.wikipedia.org/wiki/Nonlinear_control#Nonlinear_feedback_analysis_%E2%80%93_The_Lur'e_problem https://blog.csdn.net/qq_41673920/article/details/84860697 https://youtu.be/IZTP7h5cfqg