Guided Policy Search

1. 寫在最前面

最近一直在調研增強學習在機器人應用的文章, 看了一些文獻, 其中看到15年IROS上的一篇論文[2], 大致瀏覽了一下, 在PR2上進行了實現, 較之前看到的不少論文在仿真上實現感覺要靠譜一些, 論文提供了視頻DEMO, 下載下來看了一下, 直接感覺吊炸天了有沒有. 隨後就查了查他到底是屬於哪個學校的哪個實驗室. 最後聚焦到Sergey Levine身上. 進了Sergey Levine的個人主頁, 看了他的一些成果, 瞬間嚇尿了.

跟着Sergey看了他好幾篇論文, 個人感覺, 每一篇論文都好長. 而且公式很多, 涉及的知識點更多, 這都不是重點. 重點是, 在Sergey的論文裏面, 論文[2]中反覆提到之前的工作 [3 - 5], [3]中提及[4 - 5]的工作, 一直這麼往前延續, 當前的工作是建立在以前工作基礎之上, 讓人蛋疼無比.最後, 乾脆心一橫, 找出Sergey在13年發出的這篇論文, Guided Policy Search[1]進行閱讀.

按照時間順序, 依次看到幾年的幾篇論文, 花了很長的時間和精力. 作出了一些總結. 之後, 我會按照時間先後, 依次將我整理的一些資料發佈出來, 我發現這方面中文資料幾乎沒有(或許是我沒有找到-_-). 也方便後來者有一些中文的資料可以參考一下.

文檔中並不是逐字按照原文翻譯, 加入了我的一些理解, 以及省略了部分內容. 如果是想深入研究該算法的朋友, 最好還是以原文爲準, 以我的資料爲輔. 其中難免會有一些錯誤的地方, 有大神看到有理解錯誤的地方, 還請指出, 方便我對錯誤思想進行糾正, 也防止別人受了誤導.

2. Guided Policy Search

直接策略搜索(Direct Policy Search)能夠有效的應對高維繫統, 但是對於具有數以百計的參數的策略一直是具有挑戰性的, 需要數量非常大的樣本來進行學習, 並且容易陷入局部最優.本論文提出引導策略搜索算法(Guided Policy Search), 將軌跡優化(trajectory optimization)應用到直接策略學習中, 避免了陷入局部最優. 該論文提出, 可以使用差分動態規劃(Differential Dynamic Programming)生成合適引導樣本(Guiding samples), 並使用了一個新穎的正則化項, 提出正則化重要樣本策略優化(regularized importance sampled policy optimization), 用來合併這些引導樣本到策略搜索中. 論文最後, 進行了一系列仿真實驗, 驗證算法效果.

2.1 Preliminaries

增強學習可以表述如下:

增強學習目的是找到一個最優的策略π , 在一個隨機的環境中控制agent. 將連續的時間劃分爲離散的時間步t (time step t ), 在每一個時間步, 可以觀察(observe)得到agent 的一個狀態(state) xt , 依據該狀態選擇一個行爲(action) π(utxt) , 下一個時間步的狀態, 不單依據當前時間步的狀態和所選擇的行爲, 還依賴於狀態轉移概率 p(xt+1|xt,ut) , 最優策略π 是能夠獲得從時間步1到時間步T最大累積回報的策略maxπTt=1r(xt,ut) .

從時間步1到時間步T 的可以得到(xt,ut) 序列, 將其表述成一條軌跡ζ , 使用r(ζ) 表示沿着軌跡ζ 的總回報值, 使用π(ζ) 標記在策略π 下軌跡ζ 的概率.

策略梯度算法(Policy gradient method), 是通過直接優化用參數θ 描述的策略πθ , 使其對應的回報期望值最大, 從而得到最優策略所對應的參數θ .在實際操作過程中, 每一次迭代沿着E[J(ζ)] 方向走一個步長, 直至收斂. 每一次梯度的估算使用下述公式.

E[J(θ)]=E[r(ζ)logπθ(ζ)]1mi=1mr(ζi)logπθ(ζi)

其中, logπθ(ζi) 能夠分解到tlogπθ(utxt) , 因爲狀態轉移概率p(xt+1xt,ut) 不依賴與優化變量θ .

上訴過程, 每一次迭代需要使用到評估器對目標期望函數進行梯度評估. 一般方法是, 使用當前策略產生一系列的樣本, 然後使用這些樣本來估計函數的當前的梯度, 這樣會產生巨大的工作量, 讓學習過程變得非常耗時, 並且每一次迭代產生的樣本使用之後將會被丟棄, 下一次迭代並無法使用. 這類的算法不允許使用off-policy樣本, 同時對於每一梯度步的步長選擇也需要謹慎才能確保達到收斂.

重要採樣(Importance Sampled)是一項技術, 使用另一個概率q(x) 來估算關於概率p(x) 的期望Ep[f(x)] .數學表達如下:

Ep[f(x)]=Eq[p(x)q(x)f(x)]1Zi=1mp(xi)q(xi)f(xi)

其中, 如果使用的概率分佈q(x) 是無偏的, 則Z=m .

通過Importance Sampled技術的使用, 允許我們使用off-policy樣本在下述評估器中.

E[J(θ)]1Z(θ)i=1mπθ(ζi)q(ζi)r(ζi)(1)

由於過去的回報值並不依賴於以後的回報值, 上述評估器的變量可以進一步分解如下:

E[J(θ)]t=1T1Zt(θ)i=1mπθ(ζi,1:t)q(ζi,1:t)r(xit,uit)(2)

其中, πθ(ζi,1:t) 標記ζi 的前t 步的概率, Zt(θ) 是正則化權重.

爲了能夠利用到更多可用的引導分佈, 該論文follow之前的工作, q(ζ)=1njqj(ζ) , 其中qj(ζ) 是前一次迭代的策略或使用DDP構建的候選策略.

之前的工作中, 很多人都是直接優化Eq. (1), (2). 事實證明, 其效果往往不好.由此, 該論文引入了一個新穎的正則化項.改進目標函數如下:

Φ(θ)=t=1T[1Zt(θ)i=1mπθ(ζi,1:t)q(ζi,1:t)r(xit,uit)+ωrlogZt(θ)]

該函數的梯度可由下述公式計算(詳細推算見[1]中附錄):
Φ(θ)=t=1Ti=1mμ(xit)uitμ(xit)σ2t=tT1Zt(θ)πθ(ζi,1:t)q(ζi,1:t)ξit

2.3 Guiding Samples

之前一些工作中, 也採取用了Importance Sample的方式來重複利用off-policy樣本, 但當策略參數維度很大時, 如此的局部優化很難找到一個比較滿意的解. 爲了解決這個問題, 論文論證如何利用DDP來補充off-policy樣本集, 引導策略向高回報區域搜索, 以獲得一個更好的解.

一個有效的引導分佈, 是能夠覆蓋高回報區域, 同時避免大q(ζ) 密度對應小的重要權重. 可以斷言, 一個好的引導分佈是高回報區域密度(ρ(ζ)expr(ζ) )的I-projection. ρ 的I-projection定義爲: q=argminqPDKL(qρ) , DKL(qρ) 表示KL距離(KL-Divergence), 可用來衡量qρ 兩個分佈的差異, 當差距越大時, KL距離越大, 當q=ρ 時, KL距離爲0. 定義爲: DKL(qρ)=qlogqρ=Eq[r(ζ)]H(q) . H 代表熵, 其中第一項強制q 位於回報更高的區域, 第二項鼓勵q 具有更大的不確定性, 更broad distribution.

給定一條軌跡(x¯1,u¯1),...,(x¯T,u¯T) , 並且, x^t=xtx¯t,u^t=utu¯t , 動態函數和回報函數分別近似如下(典型的線性動態, 二階代價形式的動態系統):

x^t+1r(xt,ut)fxtx^t+futu^tx^Ttrxt+u^Trut+12x^Ttrxxtx^t+12u^Ttruutu^t+u^Ttruxtx^t+r(x¯t,u¯t)

依據DDP算法中推到, 可以求得Q函數:

QxtQutQxxtQuutQuxt=rxt+fTxtVxt+1=rut+fTutVxt+1=rxxt+fTxtVxxt+1fxt=ruut+fTutVxxt+1fut=ruxt+fTutVxxt+1fxt

值函數:

VxtVxxtktKt=QxtQTuxtQ1uutQu=QxxtQTuxtQ1uutQux=Q1uutQut=Q1uutQuxt

線性策略:

g(xt)=u¯t+kt+Kt(xtx¯t)

從線性策略的表述中可以看到, 該控制器由兩部分構成, 第一部分是均值部分, 第二部分是回饋部分, Kt 是回饋增益.

重複計算策略可以得到一條新軌跡.這個算法將會收斂到局部最優.

現, 將回報函數進行改進:

r~(xt,ut)=r(xt,ut)DKL(πg(xt)p(xt))

其中, p 是一個”passive dynamics”分佈, 如果p 是一個均勻分佈, 則:

Eπg[r~(ζ)]=Eπg[r(ζ)]+H(πg)

最優策略[6]:

πg(utxt)=exp(Qt(xt,ut)Vt(xt))(3)

其中, 值函數:Vt(xt)=logexp(Qt(xt,ut))dut .

在線性動態, 二次回報的環境下, Eq. (3) 是一個線性高斯, 均值是g(xt) , 方差是Q1uut . 則我們可以從形式爲 πg(ut|xt)=g(ut;g(xt),Q1uut) 的隨機策略中採樣. 值得注意的是, 該策略的假設前提是線性動態, 且已知.

2.4 Adaptive Guiding Distribution

在前面的討論中, 引導分佈的構建只是獲取高回報區域, 而沒有思考當前策略. 我們可以簡單的改進回報函數爲r¯(xt,ut)=r(xt,ut)+logπθ(utxt) . 獲取的結果分佈是近似ρθ(ζ)exp(r¯(ζ)) 的I-projection.

2.5 Incorporating Guiding Distribution

該論文構建多個DDP結果, 用以補充Importance Sample策略搜索算法的中的樣本. 同時, 這些結果也可以通過人爲演示或離線的樣本規劃獲得. DDP策略πg 是一個時變的控制器, 但僅對單一軌跡有效, 而最終的策略, 是需要具有更強健的魯棒性. GPS算法可以看做是將一系列的軌跡集合(DDP生成或人爲演示或離線規劃生成)轉換爲控制器, 這個控制器應該能夠被任意參數化, 如使用神經網絡進行表達, 並反應出傳感器或計算約束.

Guided Policy Search
01: 生成DDP結果: πg1,...,πgn
02: 從q(ζ)=1niπgi(ζ) 中採樣: ζi,...,ζm
03: 初始化最優策略: θargmaxθlogπθ(ζi)
04: 構建初始化樣本集合S={πg1,...,πgn,πθ}
05: for k=1:K
06:   選擇當前樣本集: SkS
07:   θkargmaxθΦSk(θ)
08:   從πθk 中獲取樣本增加到SkS
09:  生成自適應引導樣本(可選)
10:  在Sk 上評估πθkπθ
11:  if πθk<πθ
12:    θθk
13:    ωr
14:  else
15:    ωr
16:    從πθ 中重採樣(可選)
17:  end if
18: end for
19: return πθ

整體算法僞代碼整理如上表所示.

第1行, 通過DDP算法構建初始結果, 也可以通過人爲演示初始化結果;

第2行, 初始化引導樣本;

第3行, 使用這些引導樣本初始化初始最優策略參數θ .;

第4行, 樣本集S 由引導樣本和初始最優樣本初始化;

第6行, 如果樣本集S 過大, 則選擇其子集Sk , 實際操作中, 論文簡單選擇當前最優策略πθ 下高權重的樣本與構建的引導樣本.

第7行, 在樣本集上使用LBFGS算法優化目標函數Φ(θ) , 定義於Eq. (3), 獲得優化參數θk , 論文重複優化兩次, 一次從當前最優參數出發, 另一次是從當前最大對數似然估計的參數開始.

第8行, 增加πθk 到樣本集;

第9行, 如果採用自適應引導分佈, 則在此步完成自適應工作;

第10行, 使用Eq. (2) 來評估當前優化策略πθk 和當前最優策略πθ 的優劣;

第12, 13行, 若當前優化策略更好, 則更新最優策略θθk , 減小ωr ;

第15, 16行, 若當前優化策略更差, 則增大ωr . 可選的從πθ 中重採樣, 解決因樣本不好而導致優化失敗的問題..

高的正則化權重, 使得下一次優化時更接近於該樣本, 以使評估更加精確, 在實際操作中, 一直保持ωr[106,101] , 調整因子爲10.

GPS算法提供了公開的實現版本, 代碼實現模塊化很好, 算法部分由Python實現, 分別提供了三種不同平臺的仿真接口, 可運行於ROS中仿真器Gazebo, 策略的實現也給出了幾種不同的方式. 當然, 該代碼的實現已經不依賴於該論文, 其中涉及到更多的改進和提升. 大家可以查看作者的其他幾篇論文. 推薦看的下一篇論文是Learning Neural Network Policies with Guided Policy Search under Unknown Dynamics.

2.7 實驗 + 討論

這倆部分我就沒有細看了, 也就沒有形成文檔. 因爲作者是在仿真平臺上做的, 並且這篇論文已經是幾年前的成果了. 後面還有好幾篇等着我, 所以這個階段的討論和實驗就不那麼重要了.

3. 個人總結

GPS算法[1], 由Levine 在13年提出, 使用DDP產生處於高回報區域的引導樣本, 輔助策略搜索. 類似然比率評估器的重要採樣技術用於合併這些引導樣本到策略搜索中. GPS算法使用model-free的一些方法, 並結合model-based的DDP生成引導樣本對學習過程進行引導. 可以將其視爲將引導軌跡集合轉換爲一個控制器的過程.

待學習的策略, 是以參數來表達的某種一般性,靈活的模型, 比如神經網絡. 直接策略搜索, 目標函數形式化爲Eq. (1), 通過on-policy的方式採樣來估計梯度, 使用梯度下降的方法, 對參數進行優化, 得到最優參數的策略. GPS改進目標函數爲 Eq. (3), 通過Importance Sample技術, 再加入一個新穎的正則化項構成該目標函數. 允許算法使用off-policy樣本, 大大縮減了策略搜索時間, 並且更加充分的利用之前策略採樣得到的樣本. 但由於這樣學習到的策略很容易陷入局部最優, 不能學習到滿意的策略. 論文中, 又結合軌跡優化中最優控制技術, 通過DDP算法構建覆蓋高回報區域的引導樣本. 構建引導樣本的過程中, 如果考慮之前策略對引導樣本的影響, 提出自適應的引導樣本生成(在某些條件下具有不錯的效果). 將生成的引導樣本加入訓練樣本集中, 用於引導目標函數向高回報區域搜索最佳的策略.

該論文中, 系統狀態xt 由機器人Configuration和環境構成, 如關節角度, 運動速度, 距目標物體的距離等. 顯然, 系統狀態是全狀態, 需要依賴一些更爲低級別的模塊, 如距目標物體的距離, 需要已有的視覺模塊進行評估. 系統輸入或機器人行爲ut 定義爲關節力矩. 機器人自身的運動, 需要依賴低級別的PD控制等. 另一方面, 該算法中所使用的DDP方法產生引導樣本, 假設前提是線性動態, 並且已知. 不能運用到實際系統中, 因爲實際系統常常都是非線性動態模型, 並且一般都是未知的. 最終學習到的控制器, 僅能應對部分簡單機器人任務, 對於非靜態學習問題, 複雜組合任務等, 都極具挑戰性. 所以算法均是在仿真平臺上的簡單模型上進行驗證.

Appendix

下述部分, 是我在閱讀這篇論文時, 查閱的一些其他資料, 幾乎都來自與Wiki.

A.1 Linear-Quadratic Control

LQ (Linear Quadratic) 控制問題是經典的最優控制問題. 其動態函數是一階線性函數, 代價函數是二階函數.數學描述如下:
代價函數:

J=12xT(tf)Sfx(tf)+12tft0[xT(t)Q(t)x(t)+uT(t)R(t)u(t)]dt

s.t.
x˙(t)=A(t)x(t)+B(t)u(t)x(t0)=x0

LQR[7](Linear Quadratic Regular)能夠提供LQ問題的一個控制方案.LQR是一個回饋控制器, 描述如下:

Finite-horizon, continuous-time LQR

對於連續時間系統, 定義t[t0,t1] , 則:

線性動態函數:

x˙=Ax+Bu

二階代價函數:

J=12xT(t1)F(t1)x(t1)+t1t0(xTQx+uTRu+2xTNu)dt

由回饋控制法則可知, 欲使代價函數最小, 則:

u=Kx

其中, K=R1(BTP(t)+NT) , PATP(t)+P(t)A(P(t)B+N)R1(BTP(t)+NT)+Q=P˙(t) , P(t1)=F(t1) 計算得到.

Finite-horizon, discrete-time LQR

對於離散時間系統,

線性動態函數:

xk+1=Axk+Buk

二階代價函數:

J=k=0N(xTkQxk+uTkRuk+2xTkNuk)

由回饋控制法則可知, 欲使代價函數最小, 則:

uk=Kkxk

其中, Kk=(R+BTPkB)1(BTPkA+NT) , Pk 可反向迭代計算, Pk1=ATPkA(ATPkB+N)(R+BTPkB)1(BTPkA+NT)+Q 計算得到, 終止條件PN=Q .

A.2 Linear-Quadratic-Gaussian Control

在控制理論中, 線性-二次高斯控制問題(Linear-quadratic-gaussian[8])是最優控制中LQ問題的一個基本問題.LQG關注含有高斯白噪聲的不確定性系統, 狀態信息不完整, 並且滿足二階代價函數.

LQG 控制器是對Kalman Filter和Linear quadratic regular(LQR)的簡單合併. LQG控制可以應用到線性時變系統和線性時不變系統.LQG問題有如下數學描述:

Continuous time

動態函數:

x˙(t)y(t)=A(t)x(t)+B(t)u(t)+v(t)=C(t)x(t)+w(t)

其中, x(t) 是系統狀態控制量, u(t) 是系統輸入控制量. y(t) 是系統可測量的輸出信號量. v(t) 是系統噪聲, 服從高斯白噪聲. w(t) 是系統測量噪聲, 同樣服從高斯白噪聲.

代價函數:

J=E[xT(T)Fx(T)+T0(xT(t)Q(t)x(t)+uT(t)R(t)u(t))dt]

其中, F0,Q(t)0,R(t)>0 .

使用LQG控制器解決LQG問題, 給定等式如下:

x(t)^˙=A(t)x^(t)+B(t)u(t)+K(t)(y(t)C(t)x^(t)),x^(0)=E(x(0))

u(t)=L(t)x^(t)

其中, 在每一個時刻t , 濾波器使用過去的評估值和當前輸入對系統狀態x(t) 產生一個新的狀態評估x^(t) .

K(t) 是對應於Kalman Filter的Kalman增益(Kalman gain).計算公式如下:

K(t)=P(t)CT(t)W1(t).

P˙(t)=A(t)P(t)+P(t)AT(t)P(t)CT(t)W1(t)C(t)P(t)+V(t)

P(0)=E(x(0)xT(0))

其中, W(t) , V(t) 分別是w(t) , v(t) 的密度矩陣.

L(t) 是回饋增益矩陣, 計算公式如下:

L(t)=R1(t)BT(t)S(t)

S˙(t)=AT(t)S(t)+S(t)A(t)S(t)B(t)R1(t)BT(t)S(t)+Q(t)

S(T)=F

觀察上訴兩個Riccati微分方程(Riccati differential equation), 第一個微分方程是前向的(running forward in time), 第二個微分方程式後向的(running backward in time). 這種相似性被稱爲對偶性(duality).

第一個Riccati微分方程解決線性-二次評估問題(linear-quadratic estimation problem), 第二個Riccati微分方程解決線性-二次規整問題(linear-quadratic regular problem). 兩個對偶, 合併共同解決LQG問題.因此LQG可以獨立的分解爲LQE和LQR問題.

Discrete time
離散時間LQG問題與連續時間LQG問題類似, 數學描述如下:

動態函數:

xk+1yi=Aixi+Biui+vi=Cixi+wi

代價函數:

J=E(xTNFxN+i=0N1xTiQixi+uTiRiui)

F0,Qi0,Ri>0

離散時間LQG控制器:

x^i+1=Aix^i+Biui+Ki+1(yi+1Ci+1x^i),x^0=E(x0)

ui=Lix^i

其中, kalman增益項Ki 的計算公式如下:

KiPi+1P0=AiPiCTi(CiPiCTi+W1i)=Ai(PiPiCTi(CiPiCTi+Wi)1CiPi)ATi+Vi=E(x0x^0)(x0x^0)T

其中, 反饋增益矩陣計算公式如下:

Li=(BTiSi+1Bi+Ri)1BTiSi+1Ai

Si=ATi(Si+1Si+1Bi(BTiSi+1Bi+Ri)1BTiSi+1)Ai+Qi,SN=F

A.3 Differential Dynamic Programming

差分動態規劃(Differential Dynamic Programming[9]), 是軌跡優化(trajectory optimization)類中最優控制(optimal control)算法.

Finite-horizon discrete-time problems

動態函數:

xi+1=f(xi,ui)

描述時刻i 的狀態xi 在給定控制量ui 向時刻t+1 演化的過程.

代價函數:

J0(x,U)=i=0N1(xi,ui)+f(xN)

軌跡最優, 就是給定初始狀態x0 , 找到一個控制序列U 使得J0 最小, 而非針對於所有可能的初始條件. U 即爲該最優控制問題的解.數學表達如下, U=argminUJ0(x,U) .

Dynamic programming

Ui={ui,ui+1,...,uN1} 是部分控制量序列以及cost-to-go Ji :

Ji(x,Ui)=j=iN1(xj,uj)+f(xN)

則, 在時刻i 的最優cost-to-go或值函數定義如下:

V(x,i)=minUiJi(x,Ui)

V(x,N)=f(xN) , 則可動態規劃如下:

V(x,i)=minu[(x,u)+V(f(x,u),i+1)]

顯然上訴規劃式是一個Bellman等式.

Differential dynamic programming

首先, 我們定義Q 函數:

Q(δx,δu)=(x+δx,u+δu)+V(f(x+δx,u+δu),i+1)(x,u)V(f(x,u),i+1)

擴展到二階如下:

121δxδuT0QxQuQTxQxxQuxQTuQxuQuu1δxδu

上述公式中下標代表偏導.各個偏導可以使用下述公式計算:

QxQuQxxQuuQux=x+fTxVx=u+fTuVx=xx+fTxVxxfx+Vxfxx=uu+fTuVxxfu+Vxfuu=ux+fTuVxxfx+Vxfux

對上式的二階展開求最小可得: δu=argminδuQ(δu,δx)=Q1uu(Qu+Quxδx) ,則可得開環項(open-loop term) k=Q1uuQu , 回饋增益項(feedback gain term)K=Q1uuQux . 帶回二次展開式, 可得:

ΔV(i)Vx(i)Vxx(i)=12QuQ1uuQu=QxQuQ1uuQux=QxxQxuQ1uuQux

使用上述公式, 遞歸的從i=N1i=1 計算V(i) 的局部二次模型, 以及控制修正量{k(i),Ki} , 執行一次反向pass(the backward pass), 初始值V(x,N)=f(xN) . 反向pass完成後, 再從頭運行一次正向pass(the forward pass)即可計算得到一條新軌跡.

x^(1)x^(i)x^(i+1)=x(1)=u(i)+k(i)+K(i)(x^(i)x(i))=f(x^(i),u^(i))

如此, 前向pass, 反向pass直至收斂.

參考文獻

[1] Sergey Levine, Vladlen Koltun, Guided Policy Search, ICML 2013

[2] Weiqiao Han, Sergey Levine, Pieter Abbeel, Learning Compound Multi-Step Controllers under Unknown Dynamics, IROS 2015

[3] Sergey Levine, Chelsea Finn, Trevor Darrell, Pieter Abbeel, End-to-End Training of Deep Visuomotor Policies, JMLR 17, 2016

[4] Sergey Levine, Pieter Abbeel. Learning Neural Network Policies with Guided Policy Search under Unknown Dynamics, NIPS, 2014

[5] Sergey Levine, Nolan Wagener, Pieter Abbeel, Learning Contact-Rich Manipulation Skills with Guided Policy Search, ICRA 2015

[6] Ziebart, Modeling purposeful adaptive behavior with the principle of maximum causal entropy, Ph.D thesis, Carnegie Mellon University, 2010

[7] Wikipedia contributors. “Linear-quadratic regulator.” Wikipedia, The Free Encyclopedia. Wikipedia, The Free Encyclopedia, 15 May. 2016. Web. 23 May. 2016

[8] Wikipedia contributors. “Linear-quadratic-Gaussian control.” Wikipedia, The Free Encyclopedia. Wikipedia, The Free Encyclopedia, 18 May. 2016. Web. 23 May. 2016

[9] Wikipedia contributors. “Differential dynamic programming.” Wikipedia, The Free Encyclopedia. Wikipedia, The Free Encyclopedia, 28 Jan. 2016. Web. 23 May. 2016

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章