李凌霄,王偉明,賀佳飛,聞 程
(石家莊鐵道大學(xué)電氣與電子工程學(xué)院,河北 石家莊 050043)
經(jīng)典的控制理論在解決AUV這種復(fù)雜非線性模型時(shí)具有很多的局限性,比如傳統(tǒng)的PID控制[1],模糊控制[2],滑模控制[3],在實(shí)際環(huán)境中通常會(huì)出現(xiàn)各種各樣的問(wèn)題,PID控制雖然結(jié)構(gòu)和實(shí)現(xiàn)較為簡(jiǎn)便,但是在不確定性和干擾性強(qiáng)的被控對(duì)象中,參數(shù)的整定和調(diào)試會(huì)限制PID控制在高級(jí)應(yīng)用中的性能。模糊控制和滑模控制不需要建立復(fù)雜的系統(tǒng)模型,但是模糊控制的控制精確度會(huì)隨著模糊處理的信息多少而降低,滑模控制的變量抖動(dòng)幅度也相較于其它方法有著很明顯的差距。這些控制方法都對(duì)在水下航行的AUV進(jìn)行精確地角度控制帶來(lái)了很大的困難,為了解決傳統(tǒng)控制理論難以解決的難題,通過(guò)近些年來(lái)興起的強(qiáng)化學(xué)習(xí)的控制方法可以有效地進(jìn)行AUV的水下控制[4]。強(qiáng)化學(xué)習(xí)是機(jī)器學(xué)習(xí)的一種分支,標(biāo)準(zhǔn)的強(qiáng)化學(xué)習(xí)過(guò)程是馬爾可夫決策[5],假設(shè)整個(gè)過(guò)程的狀態(tài)集合為S,轉(zhuǎn)化到到下一個(gè)時(shí)刻的狀態(tài)St+1僅僅和上一個(gè)狀態(tài)St有關(guān),與之前的狀態(tài)無(wú)關(guān)。由于在實(shí)際過(guò)程中會(huì)遇到各種各樣的環(huán)境參數(shù),應(yīng)用傳統(tǒng)的控制方法會(huì)陷入復(fù)雜的模型設(shè)計(jì)中,強(qiáng)化學(xué)習(xí)不要求預(yù)先給定任何數(shù)據(jù),而是通過(guò)接收環(huán)境對(duì)動(dòng)作的獎(jiǎng)勵(lì)(反饋)獲得學(xué)習(xí)信息并更新模型參數(shù)[6],具有很強(qiáng)的環(huán)境適應(yīng)性,非常適合水下非線性的AUV控制設(shè)計(jì)。
文獻(xiàn)[7]將神經(jīng)網(wǎng)絡(luò)融合到了AUV的水下動(dòng)力定位跟蹤,然而優(yōu)化的整體程度還不夠明顯。文獻(xiàn)[8]提出了一種DQN(Deep Q Network)的強(qiáng)化學(xué)習(xí)算法,這種算法將深度神經(jīng)網(wǎng)絡(luò)和Q學(xué)習(xí)相結(jié)合,通過(guò)學(xué)習(xí)當(dāng)前的動(dòng)作與記憶回放單元中的經(jīng)歷,達(dá)到有效的神經(jīng)網(wǎng)絡(luò)參數(shù)更新,但收斂得過(guò)于緩慢。文獻(xiàn)[9]通過(guò)建立兩個(gè)深度神經(jīng)網(wǎng)絡(luò),Actor網(wǎng)絡(luò)用來(lái)輸出動(dòng)作的選擇,Critic網(wǎng)絡(luò)則利用Actor網(wǎng)絡(luò)輸出的動(dòng)作來(lái)進(jìn)行Q值的評(píng)分,使得AUV在水下跟蹤復(fù)雜的軌跡時(shí)可以保持良好的精度和穩(wěn)定性,但是在復(fù)雜的非線性環(huán)境下表現(xiàn)欠佳,容易收到環(huán)境的干擾。文獻(xiàn)[10]提出了深度確定性策略梯度(Deep Deterministic Policy Gradient)的強(qiáng)化學(xué)習(xí)算法,解決了在狀態(tài)復(fù)雜的非線性環(huán)境中連續(xù)動(dòng)作的控制要求,但在訓(xùn)練中其價(jià)值網(wǎng)絡(luò)通常會(huì)將偏差高估,造成最后選擇的策略無(wú)法達(dá)到最優(yōu)。文獻(xiàn)[11]將DDPG算法應(yīng)用于AUV的水下路徑跟蹤控制,很好地改善了在跟蹤參考路徑時(shí)的軌跡,但是訓(xùn)練的過(guò)程過(guò)于繁瑣。
本文的創(chuàng)新在于將熵正則化的網(wǎng)絡(luò)輸出方式引入到DDPG的強(qiáng)化學(xué)習(xí)算法架構(gòu)中,并將其應(yīng)用到AUV的水下角度控制領(lǐng)域,通過(guò)AUV水下角度控制的訓(xùn)練可知,改進(jìn)后得DDPG算法相比于未改進(jìn)前可以在更短得訓(xùn)練時(shí)間內(nèi)達(dá)到收斂,避免了Actor網(wǎng)絡(luò)的動(dòng)作選擇局部最優(yōu),同時(shí)更容易達(dá)到全局最優(yōu)得控制效果。
圖1為AUV的體坐標(biāo)系,其中ROLL為翻滾角,PITCH為俯仰角,YAW為偏航角,分別記為φ、θ、ψ。
X、Y、Z分別是沿x、y、z軸方向上運(yùn)動(dòng)所受到的力,具體的計(jì)算公式如下
(1)
K、M、N分別是繞x、y、z軸進(jìn)行旋轉(zhuǎn)產(chǎn)生的力矩,具體的計(jì)算公式如下
(2)
其中俯仰角的計(jì)算公式為
(3)
力和力矩主要是由水下環(huán)境中的靜水壓力、浮力,阻力已經(jīng)外加推力和控制力組成。其中,u、v、w分別是AUV在x、y、z軸方向上運(yùn)動(dòng)時(shí)的線速度;p、q、r分別是AUV繞x、y、z軸旋轉(zhuǎn)的角速度。Ix、Iy和Iz是車(chē)輛的慣性矩,xG、zG是AUV體系中x和z方向上的質(zhì)心。由于在實(shí)際建造中AUV的俯仰角不可能達(dá)到完全垂直,因此添加一個(gè)[-30,30]的角度限制。
DDPG算法以DQN算法的理論為依據(jù),借助Actor-Critic的算法[12]框架實(shí)現(xiàn)了在連續(xù)狀態(tài)下輸出對(duì)應(yīng)的策略,同時(shí)采用DPG算法中確定性策略的方法[13],將輸出的動(dòng)作由概率性變成確定性。圖2為DDPG算法原理結(jié)構(gòu)圖。DDPG算法設(shè)置了兩種深度神經(jīng)網(wǎng)絡(luò),分別是Actor和Critic,每種網(wǎng)絡(luò)又分為現(xiàn)實(shí)主網(wǎng)絡(luò)與目標(biāo)網(wǎng)絡(luò),各個(gè)網(wǎng)絡(luò)的功能可概括如下[14]:
圖2 DDPG算法原理結(jié)構(gòu)圖
主Actor網(wǎng)絡(luò):進(jìn)行網(wǎng)絡(luò)參數(shù)θQ的更新設(shè)置,以輸入的狀態(tài)St為基礎(chǔ),選擇出當(dāng)前的最優(yōu)動(dòng)作at,輸出下一時(shí)刻的狀態(tài)St+1,獎(jiǎng)勵(lì)R。
目標(biāo)Actor網(wǎng)絡(luò):根據(jù)記憶回放單元存放的采樣數(shù)據(jù)選擇最優(yōu)下一動(dòng)作at+1。網(wǎng)絡(luò)參數(shù)θQ′定期從θQ更新。
主Critic網(wǎng)絡(luò):更新網(wǎng)絡(luò)參數(shù)θμ,計(jì)算當(dāng)前狀態(tài)-動(dòng)作價(jià)值Q(St,at)。
目標(biāo)Critic網(wǎng)絡(luò):負(fù)責(zé)計(jì)算Q′(St+1,at+1)部分,用于生成目標(biāo)Q值Q′=R+γQ(St+1,at+1),網(wǎng)絡(luò)參數(shù)θμ′定期從θμ更新。
AUV的學(xué)習(xí)效能以及控制效率的關(guān)鍵在于獎(jiǎng)勵(lì)函數(shù)R的設(shè)置,為此,設(shè)計(jì)獎(jiǎng)勵(lì)函數(shù)。
(4)
其中ξ是一個(gè)常數(shù),并且其數(shù)值大于零,θt和ψt為t時(shí)刻下AUV的俯仰角和偏航角,θ1和ψ1是t時(shí)刻下預(yù)設(shè)的角度,通過(guò)選取合適的ξ可以優(yōu)化獎(jiǎng)勵(lì)函數(shù),提高AUV角度控制的學(xué)習(xí)效率。
在AUV的實(shí)際偏轉(zhuǎn)角度等于預(yù)設(shè)的偏轉(zhuǎn)角度時(shí)R=ζ,ζ為常數(shù),其數(shù)值與ξ有關(guān)。通過(guò)設(shè)立這步獎(jiǎng)勵(lì)函數(shù)來(lái)使得角度達(dá)到預(yù)定值時(shí),可以一直跟蹤預(yù)設(shè)角度。因此獎(jiǎng)勵(lì)函數(shù)可以寫(xiě)為
(5)
經(jīng)過(guò)多次的仿真調(diào)試,在本設(shè)計(jì)中,ξ取60,ζ取-40。
以深度學(xué)習(xí)框架為基礎(chǔ)設(shè)計(jì)Actor和Critic兩種深度神經(jīng)網(wǎng)絡(luò)。由狀態(tài)變量組成的狀態(tài)矩陣St作為現(xiàn)實(shí)Actor主網(wǎng)絡(luò)的輸入,Actor網(wǎng)絡(luò)的構(gòu)架中使用三層隱藏層,第一層和第三層的節(jié)點(diǎn)數(shù)為32個(gè),第二層的節(jié)點(diǎn)數(shù)為16個(gè)。將Critic網(wǎng)絡(luò)的構(gòu)架進(jìn)行改進(jìn),使用兩層隱藏層,避免由于網(wǎng)絡(luò)層數(shù)的過(guò)于復(fù)雜造成梯度計(jì)算的過(guò)大問(wèn)題,其中每層的節(jié)點(diǎn)數(shù)都為16個(gè)。使用全網(wǎng)絡(luò)連接來(lái)作為神經(jīng)網(wǎng)絡(luò)中各個(gè)節(jié)點(diǎn)之間的連接方式,使用tanh函數(shù)來(lái)對(duì)輸出層進(jìn)行歸一化處理,避免各個(gè)參數(shù)權(quán)值的不同導(dǎo)致結(jié)果的量級(jí)問(wèn)題。圖3為Actor網(wǎng)絡(luò)結(jié)構(gòu)。圖4為Critic網(wǎng)絡(luò)結(jié)構(gòu)。
圖3 Actor網(wǎng)絡(luò)結(jié)構(gòu)
圖4 Critic網(wǎng)絡(luò)結(jié)構(gòu)
在AUV實(shí)際的學(xué)習(xí)控制當(dāng)中,Actor網(wǎng)絡(luò)經(jīng)常會(huì)選擇那些概率比較大的動(dòng)作作為自己的輸出,因此動(dòng)作輸出的確定程度比較大,這就容易造成AUV不求上進(jìn),探索能力變?nèi)?動(dòng)作的可選擇范圍變窄,導(dǎo)致最終無(wú)法獲取最優(yōu)解。為了改善算法的Actor網(wǎng)絡(luò)輸出情況,本文采取熵正則化的方法使得Actor網(wǎng)絡(luò)輸出的動(dòng)作具有較大的不確定性,增加可選擇動(dòng)作的多樣性,避免局部?jī)?yōu)化,使得AUV可以探索到最佳的策略。
熵正則化的方法主要是通過(guò)熵進(jìn)行動(dòng)作概率的表示,在n個(gè)概率分布當(dāng)中,熵值的計(jì)算公式如下
(6)
熵值大則概率分布均勻,動(dòng)作隨機(jī)性大,如圖5(左);熵值小則概率分布較為集中,動(dòng)作隨機(jī)性小,如圖5(右)。
圖5 概率分布圖
Actor網(wǎng)絡(luò)輸出的動(dòng)作有不同的概率密度,動(dòng)作的集合向量A,其熵值可以被表示為
(7)
在進(jìn)行Actor網(wǎng)絡(luò)參數(shù)優(yōu)化的同時(shí),需要考慮到熵值的大小,因此將熵設(shè)置成代價(jià)函數(shù)的正則項(xiàng),新的函數(shù)在進(jìn)行梯度更新的公式為
?θ[J(θ)+λ·Es[H(s;θ)]]=Es[EA~π(·|s;θ)[g(s,a;θ)]]
(8)
實(shí)際環(huán)境中AUV的狀態(tài)變量有12個(gè),分別是三個(gè)空間坐標(biāo)軸方向上的位移、角度、線速度和角速度,這些狀態(tài)變量作為當(dāng)前的的狀態(tài)值St,Actor網(wǎng)絡(luò)采取的動(dòng)作值為at,Critic網(wǎng)絡(luò)評(píng)測(cè)的獎(jiǎng)勵(lì)值為R,下一步的狀態(tài)值為St+1,主網(wǎng)絡(luò)通過(guò)訓(xùn)練樣本數(shù)據(jù)(St,St+1,R,at)來(lái)進(jìn)行角度的控制訓(xùn)練,每一步的結(jié)果與上一步都是獨(dú)立不相關(guān)的,經(jīng)過(guò)樣本的采集與更新,將參數(shù)輸送給目標(biāo)網(wǎng)絡(luò),然后進(jìn)行目標(biāo)網(wǎng)絡(luò)的更新,具體的算法流程如下:
步驟1:構(gòu)建Actor網(wǎng)絡(luò),以θQ作為神經(jīng)網(wǎng)絡(luò)參數(shù),構(gòu)建Critic網(wǎng)絡(luò),以θμ作為神經(jīng)網(wǎng)絡(luò)參數(shù)
步驟2:初始化神經(jīng)網(wǎng)絡(luò)參數(shù)θQ和θμ
步驟3:把θQ和θμ參數(shù)值輸送給目標(biāo)Actor網(wǎng)絡(luò)和目標(biāo)Critic網(wǎng)絡(luò)。
步驟4:以Actor主網(wǎng)絡(luò)為基礎(chǔ),通過(guò)熵正則化的方法使得Actor網(wǎng)絡(luò)輸出一個(gè)動(dòng)作at。
步驟5:執(zhí)行at動(dòng)作,經(jīng)過(guò)神經(jīng)網(wǎng)絡(luò)得到下一個(gè)由下步狀態(tài)變量組成的狀態(tài)St+1,同時(shí)返回一個(gè)獎(jiǎng)勵(lì)值R。以元組形式表示這一過(guò)程中的數(shù)據(jù)(St,St+1,R,at),同時(shí)作為樣本數(shù)據(jù)的狀態(tài)轉(zhuǎn)換過(guò)程儲(chǔ)存到回放記憶單元作為在線網(wǎng)絡(luò)訓(xùn)練的數(shù)據(jù)樣本。
步驟6:從記憶回放單元中提取樣本數(shù)據(jù)(St,St+1,R,at),以St和at為現(xiàn)實(shí)Critic主網(wǎng)絡(luò)的輸入,得到Q(St,at)。
步驟7:以St+1作為目標(biāo)Actor的輸入,得到t+1狀態(tài)的動(dòng)作at+1。
步驟8:St+1和at+1一起輸入到目標(biāo)Critic網(wǎng)絡(luò),得到Q′(St+1,at+1)。對(duì)目標(biāo)Q值進(jìn)行估計(jì)得到目標(biāo)的Q值Q′=R+γQ(St+1,at+1),為折扣因子,表示γ估計(jì)得出的決策獎(jiǎng)勵(lì)對(duì)當(dāng)前決策的影響程度。
步驟9:最后的目的是讓現(xiàn)實(shí)Critic網(wǎng)絡(luò)輸出的Q值要接近于目標(biāo)Q′的值,因此更新現(xiàn)實(shí)Critic網(wǎng)絡(luò)使得輸出Q盡量接近目標(biāo)的Q′。更新的方法為使用損失函數(shù)Loss,用Adam optimizer進(jìn)行現(xiàn)實(shí)Critic網(wǎng)絡(luò)的更新。
步驟10:進(jìn)行現(xiàn)實(shí)Actor的更新,現(xiàn)實(shí)Actor輸出的動(dòng)作與現(xiàn)實(shí)Critic里給出的評(píng)分有關(guān),更新Actor使得Q值輸出最大,使用策略梯度的方法對(duì)總獎(jiǎng)勵(lì)進(jìn)行梯度計(jì)算以更新參數(shù),更新時(shí)引入帶熵值得正則項(xiàng).
步驟12:在進(jìn)行設(shè)定的步數(shù)后,將現(xiàn)實(shí)主網(wǎng)絡(luò)Actor和Critic中的參數(shù)作為目標(biāo)Actor和Critic的參數(shù)輸入,更新目標(biāo)網(wǎng)絡(luò)。
(9)
步驟13:最后回到現(xiàn)實(shí)主網(wǎng)絡(luò)Actor進(jìn)行采樣,循環(huán)過(guò)程。
實(shí)驗(yàn)在64位的windows10系統(tǒng)下進(jìn)行,使用Python3.8作為編譯的環(huán)境,深度神經(jīng)網(wǎng)絡(luò)使用PyTorch1.8.1搭建,根據(jù)第2節(jié)的運(yùn)動(dòng)學(xué)模型建立AUV的仿真模型。
在本文的仿真中,經(jīng)過(guò)多次調(diào)試,神經(jīng)網(wǎng)絡(luò)的參數(shù)設(shè)置見(jiàn)表1。
表1 神經(jīng)網(wǎng)絡(luò)參數(shù)值
設(shè)置進(jìn)行的總回合數(shù)為1500次,得到獎(jiǎng)勵(lì)函數(shù)曲線,圖6為改進(jìn)前后的獎(jiǎng)勵(lì)函數(shù)曲線對(duì)比,其中,橫坐標(biāo)為訓(xùn)練的回合數(shù),縱坐標(biāo)為獎(jiǎng)勵(lì)值R。
圖6 改進(jìn)前后的獎(jiǎng)勵(lì)函數(shù)曲線對(duì)比
由圖可以看出未改進(jìn)的算法計(jì)算出的獎(jiǎng)勵(lì)值在550回左右才達(dá)到收斂,并且在后面回合數(shù)的訓(xùn)練中,獎(jiǎng)勵(lì)始終在45到55內(nèi)來(lái)回波動(dòng),效果表現(xiàn)的不太理想。改進(jìn)后的算法的獎(jiǎng)勵(lì)值在100回左右就達(dá)到了收斂,并且在之后的訓(xùn)練回合中,波動(dòng)的范圍較小。
搭建強(qiáng)化學(xué)習(xí)環(huán)境進(jìn)行仿真來(lái)驗(yàn)證DDPG算法對(duì)AUV進(jìn)行角度控制的效果,通過(guò)預(yù)先給出相應(yīng)的角度,使得AUV經(jīng)過(guò)仿真環(huán)境的訓(xùn)練學(xué)習(xí)之后可以跟據(jù)預(yù)設(shè)的指令進(jìn)行角度的跟蹤。
在改進(jìn)后的算法經(jīng)歷1500回合的訓(xùn)練之后,進(jìn)行角度跟蹤的測(cè)試,測(cè)試俯仰角和偏航角的追蹤效果。翻滾角主要根據(jù)AUV的尾翼來(lái)進(jìn)行設(shè)計(jì),主要目的是為了控制AUV航行時(shí)的姿態(tài),并且大多數(shù)是有界的,因此在本設(shè)計(jì)中不考慮翻滾角對(duì)角度控制的影響。
使用DDPG算法進(jìn)行與改進(jìn)后的DDPG算法的效果對(duì)比,圖7為DDPG的俯仰角跟蹤曲線。圖8為改進(jìn)后的DDPG俯仰角跟蹤曲線。
圖7 DDPG的俯仰角跟蹤曲線
圖8 改進(jìn)后DDPG的俯仰角跟蹤曲線
圖9為DDPG的偏航角跟蹤曲線。圖10為改進(jìn)后的DDPG偏航角跟蹤曲線。
圖9 DDPG的偏航角跟蹤曲線
圖10 改進(jìn)后DDPG的偏航角跟蹤曲線
可以看出在相同情況下的角度跟蹤控制,無(wú)論是俯仰角還是偏航角,改進(jìn)后的DDPG算法都具備更優(yōu)良的控制效果。在穩(wěn)態(tài)誤差方面,改進(jìn)后的DDPG算法也表現(xiàn)得更為出色,具有更高的穩(wěn)態(tài)控制精度。
在實(shí)際環(huán)境中,AUV在控制作業(yè)時(shí)避免不了外界因素的干擾,為了驗(yàn)證該算法的抗干擾性和魯棒性,在實(shí)驗(yàn)過(guò)程中10秒的時(shí)候分別對(duì)俯仰角和偏航角施加一個(gè)階躍擾動(dòng),模擬水下環(huán)境的瞬時(shí)干擾,圖11為俯仰角變化曲線,圖12為偏航角變化曲線。
圖11 俯仰角變化曲線
圖12 偏航角變化曲線
通過(guò)仿真可以看出,俯仰角和偏航角在10秒時(shí)都受到了階躍信號(hào)的瞬時(shí)干擾,并且出現(xiàn)了震蕩的效果,但是在很短的時(shí)間內(nèi)就又跟蹤到了期望角度。
針對(duì)AUV的角度控制問(wèn)題,本文提出了一種基于強(qiáng)化學(xué)習(xí)DDPG算法的角度跟蹤方法,通過(guò)調(diào)整深度神經(jīng)網(wǎng)絡(luò)和加入熵正則化的方法,來(lái)對(duì)DDPG算法進(jìn)行改進(jìn),使得AUV可以在水下環(huán)境下無(wú)需進(jìn)行系統(tǒng)性的模型建立就可以進(jìn)行相應(yīng)的角度控制。
通過(guò)實(shí)驗(yàn)結(jié)果可以表明:①改進(jìn)后的DDPG算法在角度控制時(shí)有著更高的控制精度,可以提高約50%的穩(wěn)態(tài)控制精度,同時(shí)在收到干擾時(shí)也可以很快地達(dá)到穩(wěn)定狀態(tài),具有較強(qiáng)的魯棒性和抗干擾能力;②改進(jìn)后得DDPG算法相比于未改進(jìn)之前的算法獎(jiǎng)勵(lì)曲線的穩(wěn)定誤差優(yōu)化了6倍左右,優(yōu)化效果更好;③引入熵正則化的DDPG強(qiáng)化學(xué)習(xí)算法在訓(xùn)練時(shí)可以迅速地達(dá)到收斂狀態(tài),在應(yīng)用于AUV的水下角度控制時(shí)具有良好的控制效果,應(yīng)用前景廣泛。