# 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)
 

 
PID控制器(比例-積分-微分控制器),把收集到的數據和一個參考值進行比較,然後把這個差別用於計算新的輸入值,這個新的輸入值的目的是可以讓系統的數據達到或者保持在參考值。
 
控制器由比例單元(P)、積分單元(I)和微分單元(D)組成。三個單元 P、I 和 D 分別對應目前誤差、過去累計誤差及未來誤差。

$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控制器 :
 

 
控制輸入 : 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 的離散微分
 
 
讓我們使用我們一直使用的簡單四旋翼模型 :
 

 
($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}$
 
 
期望軌跡 :
 

 
在ILC的模擬中,使用上面的PID控制器,並只使用微分的部分,設定 $k_D$ = 0.1,$k_P$ 和 $k_I$ 為 0
 
前8次疊代的結果 :
 

 
疊代20次後的結果 :

 
:::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