孫福磊 魏秉晟 甘中學(xué) 李 偉
(復(fù)旦大學(xué)工程與應(yīng)用技術(shù)研究院 上海 200433) (上海智能機(jī)器人工程技術(shù)研究中心 上海 200433) (智能機(jī)器人教育部工程研究中心 上海 200433)
機(jī)器人控制器的設(shè)計(jì)是機(jī)器人領(lǐng)域的核心問(wèn)題之一,機(jī)器人需要感知周圍環(huán)境從而產(chǎn)生合理的動(dòng)作。常用的機(jī)器人控制方法包括PID控制[1]、滑模控制[2]和神經(jīng)網(wǎng)絡(luò)控制[3]等。進(jìn)化計(jì)算[4-6]是一種受達(dá)爾文自然進(jìn)化論啟發(fā)的方法,常用于在神經(jīng)網(wǎng)絡(luò)控制中優(yōu)化神經(jīng)網(wǎng)絡(luò),是一組全局優(yōu)化算法。從技術(shù)上講,進(jìn)化計(jì)算是一類基于群體的嘗試和尋優(yōu)方法,具有啟發(fā)式或隨機(jī)優(yōu)化特性。對(duì)于控制和規(guī)劃問(wèn)題的優(yōu)化決策、機(jī)器學(xué)習(xí)等領(lǐng)域內(nèi)的一些非常復(fù)雜且難以解決的問(wèn)題[7],進(jìn)化計(jì)算展示出了較好的處理能力。
進(jìn)化機(jī)器人(ER)是將進(jìn)化計(jì)算應(yīng)用于自主機(jī)器人設(shè)計(jì)的一個(gè)領(lǐng)域,進(jìn)化機(jī)器人中的進(jìn)化通常用于機(jī)器人行為控制[8]。ER 技術(shù)有可能使控制系統(tǒng)的設(shè)計(jì)自動(dòng)化,而不需要研究人員手動(dòng)制定所需行為規(guī)范[9]。神經(jīng)網(wǎng)絡(luò)已被證明能夠代表一般的和自適應(yīng)的解決方案[10],同時(shí)可以提供相對(duì)平滑的搜索空間,因此在 ER中通常使用人工神經(jīng)網(wǎng)絡(luò)作為機(jī)器人控制器,下文稱為 ANN-Controller。編碼是進(jìn)化計(jì)算中的關(guān)鍵步驟,進(jìn)化計(jì)算中常用的編碼方式是直接編碼[11],在這種方式中進(jìn)化實(shí)體和進(jìn)化計(jì)算中的基因型是一一對(duì)應(yīng)的,直接對(duì)應(yīng)了進(jìn)化計(jì)算對(duì)解空間的搜索。這些特點(diǎn)使得在直接編碼中機(jī)器人的控制器局限于特定形態(tài)。
機(jī)器人合理動(dòng)作的產(chǎn)生不僅僅依賴于控制器,也依賴于機(jī)器人的形態(tài),不同環(huán)境中的適用形態(tài)是不同的,例如模塊化機(jī)器人在完成不同任務(wù)時(shí)的適用形態(tài)并不相同[12]。傳統(tǒng)的控制器設(shè)計(jì)是在機(jī)器人形態(tài)固定的情況下進(jìn)行的,這使得機(jī)器人控制器局限于特定形態(tài),同時(shí)影響了優(yōu)化空間。理想情況下,機(jī)器人的形態(tài)可以隨著環(huán)境的變化而改變,不斷適應(yīng)環(huán)境。這就要求在設(shè)計(jì)控制器的過(guò)程中,將機(jī)器人的形態(tài)變化考慮進(jìn)來(lái),具備形態(tài)自適應(yīng)的能力,而不僅僅是針對(duì)固定結(jié)構(gòu)進(jìn)行設(shè)計(jì)。
本文使用間接編碼[13]設(shè)計(jì)了一種漸進(jìn)式控制器生成方法。該方法基于進(jìn)化計(jì)算實(shí)現(xiàn),不針對(duì)特定形態(tài)設(shè)計(jì)控制器,而是尋找機(jī)器人形態(tài)和控制器之間的映射關(guān)系,當(dāng)機(jī)器人的形態(tài)發(fā)生改變,控制器也會(huì)隨之改變。在本文的實(shí)驗(yàn)中,該方法生成的控制器可以用來(lái)應(yīng)對(duì)機(jī)器人傳感器發(fā)生故障失效的問(wèn)題,具備一定的形態(tài)自適應(yīng)能力。
直接編碼中基因型和表現(xiàn)型是一一對(duì)應(yīng)的,本文中使用了兩種直接編碼方式,它們的區(qū)別在于基因型不同。
第一種基因型只包括神經(jīng)網(wǎng)絡(luò)的權(quán)值,使用這種基因型之前需要手工設(shè)計(jì)出ANN-Controller的結(jié)構(gòu),然后使用進(jìn)化算法(EA)優(yōu)化神經(jīng)元之間的權(quán)值。在這種方式中,神經(jīng)元的數(shù)目和神經(jīng)元之間的連接等信息都是固定的,無(wú)法優(yōu)化。這在一定程度上影響了神經(jīng)網(wǎng)絡(luò)的優(yōu)化空間。下文稱這種方式為EA。
第二種基因型除了包含權(quán)值之外,還包括神經(jīng)元的數(shù)目和神經(jīng)元之間的連接等拓?fù)浣Y(jié)構(gòu)信息,這種基因型來(lái)源于神經(jīng)進(jìn)化的思想。傳統(tǒng)的神經(jīng)網(wǎng)絡(luò)優(yōu)化方式只是調(diào)整神經(jīng)網(wǎng)絡(luò)的權(quán)值,而在神經(jīng)進(jìn)化中,神經(jīng)網(wǎng)絡(luò)的結(jié)構(gòu)也會(huì)發(fā)生改變。本文中采用的神經(jīng)進(jìn)化算法是NEAT(NeuroEvolution of Augmenting Topologies[14]),這是一種流行的神經(jīng)進(jìn)化方式,NEAT算法使神經(jīng)網(wǎng)絡(luò)從最小結(jié)構(gòu)逐步變得復(fù)雜,同時(shí)可以對(duì)不同結(jié)構(gòu)的神經(jīng)網(wǎng)絡(luò)執(zhí)行交叉操作。圖1和表1說(shuō)明了兩個(gè)親代通過(guò)交叉產(chǎn)生子代的過(guò)程。在NEAT中,神經(jīng)元和神經(jīng)元之間的連接都有唯一的編號(hào)。圖1中的數(shù)字表示神經(jīng)元編號(hào),表1中的num表示神經(jīng)元之間連接的編號(hào),pos表示該連接的起點(diǎn)與終點(diǎn),例如num=1,pos=1,4表示1號(hào)神經(jīng)元和4號(hào)神經(jīng)元之間的連接編號(hào)為1。表1中的第1行代表圖1中親代1的神經(jīng)網(wǎng)絡(luò)連接信息,第2行代表親代2的信息,第3行代表子代的信息。下面通過(guò)幾種情況說(shuō)明交叉操作如何進(jìn)行。
圖1 不同結(jié)構(gòu)神經(jīng)網(wǎng)絡(luò)的交叉
表1 神經(jīng)網(wǎng)絡(luò)的連接信息
(1) 連接在兩個(gè)親代都存在,那么子代也會(huì)保留該連接,例如表1中的1號(hào)連接。
(2) 由于連接數(shù)目變異等原因,連接在兩個(gè)親代中都不存在,那么子代中也不會(huì)存在該連接,例如表1中的2號(hào)連接。
(3) 連接只在某一個(gè)親代中存在,那么子代會(huì)保留該連接,例如表1中的8號(hào)連接。
(4) 連接在兩個(gè)親代中的結(jié)構(gòu)不同,那么子代會(huì)保留較為復(fù)雜的結(jié)構(gòu)。例如表1中的5號(hào)連接,在親代1中,它連接了5號(hào)神經(jīng)元和4號(hào)神經(jīng)元;而在親代2中,5號(hào)連接被6號(hào)連接和7號(hào)連接取代,原因是5號(hào)神經(jīng)元和4號(hào)神經(jīng)元之間增加了一個(gè)6號(hào)神經(jīng)元。針對(duì)這個(gè)連接,由于親代2的結(jié)構(gòu)更為復(fù)雜,因此子代會(huì)保留親代2的結(jié)構(gòu)。
相比于傳統(tǒng)的進(jìn)化算法方式,神經(jīng)進(jìn)化擴(kuò)大了神經(jīng)網(wǎng)絡(luò)的優(yōu)化空間,擁有更高的自由度。下文稱這種方式為NEAT。
間接編碼中基因型和表現(xiàn)型不是一一對(duì)應(yīng)的,這種特性使得間接編碼能將機(jī)器人控制器和機(jī)器人形態(tài)解耦。在本文使用的間接編碼中,基因型不是ANN-Controller,而是復(fù)合模式生成網(wǎng)絡(luò)(CPPN[15])的自身信息。CPPN的作用類似于一個(gè)函數(shù),記錄機(jī)器人形態(tài)和控制器之間的映射關(guān)系,從而根據(jù)機(jī)器人不同的形態(tài)信息生成對(duì)應(yīng)的ANN-Controller,這個(gè)生成過(guò)程可以看作是一次編碼。
HyperNEAT[16-17]是一種專門(mén)優(yōu)化CPPN的算法。在HyperNEAT中基因型包含了四部分內(nèi)容:神經(jīng)元數(shù)目、神經(jīng)元之間的連接、權(quán)值和神經(jīng)元的激活函數(shù)。在優(yōu)化CPPN的過(guò)程中,激活函數(shù)是可變的,這種特性使得CPPN善于發(fā)現(xiàn)神經(jīng)網(wǎng)絡(luò)中的模式。舉例來(lái)說(shuō),神經(jīng)網(wǎng)絡(luò)可能存在卷積、重復(fù)和對(duì)稱等多種模式,卷積的發(fā)現(xiàn)使得深度學(xué)習(xí)獲得了成功,從理論上來(lái)講,通過(guò)HyperNEAT進(jìn)化得到的神經(jīng)網(wǎng)絡(luò)可以發(fā)現(xiàn)任何一種模式,可以學(xué)習(xí)到常規(guī)神經(jīng)網(wǎng)絡(luò)學(xué)習(xí)算法無(wú)法獲得的規(guī)則[18]。對(duì)于前面提到的模塊機(jī)器人[19],以及機(jī)器人在模擬環(huán)境中的行駛?cè)蝿?wù)[20],都有研究者使用HyperNEAT針對(duì)固定形態(tài)的機(jī)器人進(jìn)行研究并取得了良好效果。下文稱這種方式為HyperNEAT。
直接編碼和間接編碼中基因型和表現(xiàn)型的關(guān)系如圖2所示。
圖2 兩種編碼方式中基因型和表現(xiàn)型的關(guān)系
前面介紹了進(jìn)化計(jì)算的兩種編碼方式。下面首先介紹仿真實(shí)驗(yàn)中使用的機(jī)器人,包括仿真環(huán)境等信息,然后說(shuō)明如何將兩種編碼方式應(yīng)用到機(jī)器人上,最后在機(jī)器人形態(tài)不變的前提下,針對(duì)機(jī)器人自主導(dǎo)航這一具體問(wèn)題進(jìn)行仿真實(shí)驗(yàn),分析實(shí)驗(yàn)結(jié)果,這是進(jìn)行下一個(gè)實(shí)驗(yàn)的基礎(chǔ)。
實(shí)驗(yàn)中用到的機(jī)器人是用自主進(jìn)化機(jī)器人[21](Autonomous Robot Evolution,ARE)項(xiàng)目中的元器件生成的,ARE項(xiàng)目的目的是進(jìn)化和制造機(jī)器人,機(jī)器人在進(jìn)化過(guò)程中不斷改變形態(tài)和控制器來(lái)完成任務(wù),且項(xiàng)目中的機(jī)器人都是由基本模塊(傳感器模型、車輪模型等)和連接框架組合起來(lái)的,可以通過(guò)重復(fù)利用基本模塊和3D打印的方式制造出實(shí)體機(jī)器人。
本文中使用的機(jī)器人有四個(gè)距離傳感器,三個(gè)在機(jī)器人的前方(下文分別稱為左側(cè)、前側(cè)和右側(cè)傳感器),一個(gè)在機(jī)器人的后方,機(jī)器人還包括兩個(gè)電機(jī)(車輪),外形如圖3所示。實(shí)驗(yàn)中使用的機(jī)器人仿真平臺(tái)是V-REP,版本是3.6.2,使用的操作系統(tǒng)是Ubuntu 18.04。
圖3 實(shí)驗(yàn)中使用的機(jī)器人
對(duì)于EA,將神經(jīng)網(wǎng)絡(luò)的結(jié)構(gòu)手工設(shè)定為五個(gè)輸入層神經(jīng)元(對(duì)應(yīng)機(jī)器人的四個(gè)傳感器和一個(gè)偏置)、四個(gè)隱層神經(jīng)元和兩個(gè)輸出層神經(jīng)元(對(duì)應(yīng)機(jī)器人的兩個(gè)電機(jī)),神經(jīng)網(wǎng)絡(luò)的五個(gè)輸入來(lái)自機(jī)器人傳感器的接收值和一個(gè)偏置,兩個(gè)輸出作為機(jī)器人電機(jī)的轉(zhuǎn)速。神經(jīng)網(wǎng)絡(luò)各層之間的連接均為全連接。
對(duì)于NEAT,只指定輸入層神經(jīng)元的數(shù)目(5個(gè))和輸出層神經(jīng)元的數(shù)目(2個(gè)),隱藏層神經(jīng)元的數(shù)目和各層神經(jīng)元的連接數(shù)目均通過(guò)NEAT算法進(jìn)化得到。神經(jīng)網(wǎng)絡(luò)的輸入和輸出與第一種基因型相同。
為了比較兩種不同的編碼方式,本文設(shè)計(jì)了基于間接編碼的控制器。在間接編碼中,進(jìn)化算法不直接優(yōu)化ANN-Controller,而是優(yōu)化CPPN,然后通過(guò)CPPN生成ANN-Controller。步驟如下。
本文中CPPN的輸入是ANN-Controller中神經(jīng)元的“坐標(biāo)”,基底指的是ANN-Controller中所有神經(jīng)元的坐標(biāo)的集合。對(duì)于ANN-Controller的輸入層神經(jīng)元,使用機(jī)器人傳感器的相對(duì)位置作為神經(jīng)元的坐標(biāo);對(duì)于輸出層神經(jīng)元,使用機(jī)器人電機(jī)的相對(duì)位置作為坐標(biāo);對(duì)于隱層神經(jīng)元,由于沒(méi)有對(duì)應(yīng)的物理實(shí)體,實(shí)驗(yàn)中根據(jù)經(jīng)驗(yàn)進(jìn)行了人工指定。
步驟2CPPN的輸入是由ANN-Controller的基底決定的,而CPPN的輸出是ANN-Controller中連接的權(quán)值。舉例來(lái)說(shuō),如果CPPN要輸出ANN某個(gè)輸入層神經(jīng)元和隱層神經(jīng)元之間的權(quán)值,那么CPPN的輸入就是基底中這兩個(gè)神經(jīng)元的“坐標(biāo)”,輸出其他權(quán)值時(shí)同理。
步驟3CPPN的輸出還包括神經(jīng)元的偏置。依次將基底中的坐標(biāo)輸入到CPPN中,CPPN就可以生成一個(gè)完整的ANN-Controller(表現(xiàn)型)。
間接編碼流程如圖4所示。
圖4 間接編碼流程
可以看出,CPPN的輸出會(huì)反映到ANN-Controller的權(quán)值和偏置上。將機(jī)器人的形態(tài)看作x,ANN-Controller看作y,在理想情況中會(huì)存在映射關(guān)系f,使得f(x)=y,而CPPN起到發(fā)現(xiàn)和記錄這種映射關(guān)系的作用。舉例來(lái)說(shuō),如果CPPN某個(gè)輸出神經(jīng)元的激活函數(shù)是對(duì)稱函數(shù),那么反映到ANN-Controller上,ANN-Controller的某些權(quán)值就是對(duì)稱的,機(jī)器人形態(tài)不同,控制器中對(duì)稱權(quán)值的分布位置就會(huì)不同。
自主導(dǎo)航是智能機(jī)器人應(yīng)掌握的基本技能之一,在機(jī)器人的自主導(dǎo)航問(wèn)題中,機(jī)器人需要在不同的場(chǎng)景中從初始點(diǎn)運(yùn)動(dòng)到目標(biāo)點(diǎn),移動(dòng)過(guò)程中要躲避障礙。
隨著節(jié)能降耗要求不斷提高,通常的做法是,將汽封間隙調(diào)整到低于制造廠規(guī)定的下線,機(jī)組啟動(dòng)后,通過(guò)反復(fù)的碰磨,磨出間隙。
實(shí)驗(yàn)中用到的場(chǎng)景如圖5所示,模擬時(shí)間分別是30 s(Empty Arena)、40 s(Escape Room)、60 s(Middle Wall)和120 s(Multi Maze)。場(chǎng)景中的空心圓代表機(jī)器人的初始位置,實(shí)心圓代表目標(biāo)點(diǎn)位置。機(jī)器人在每個(gè)場(chǎng)景中都有都能選擇任意路徑到達(dá)目標(biāo)點(diǎn),黑色虛線是一些有代表性的路徑。
圖5 實(shí)驗(yàn)中使用的場(chǎng)景
圖5中四個(gè)場(chǎng)景難度依次增加。Empty Arena中從初始點(diǎn)到目標(biāo)點(diǎn)沒(méi)有障礙物,是最簡(jiǎn)單的一個(gè)場(chǎng)景。Escape Room和Middle Wall中有墻壁阻擋,難度增大。Multi Maze中墻壁數(shù)目最多,對(duì)控制器性能要求最高,難度最大。
進(jìn)化計(jì)算參數(shù)如表2所示。有資料表明[22],對(duì)于控制這種類型的任務(wù),較高的權(quán)值變異率(50%或者更高)會(huì)取得更好的效果,原因可能是在控制任務(wù)中,神經(jīng)網(wǎng)絡(luò)的輸入數(shù)目較少。因此實(shí)驗(yàn)中將進(jìn)化計(jì)算的權(quán)值變異概率指定為0.9。
表2 進(jìn)化計(jì)算參數(shù)
續(xù)表2
由于機(jī)器人的任務(wù)是移動(dòng)到目標(biāo)點(diǎn),因此適應(yīng)度函數(shù)中需要包含機(jī)器人模擬時(shí)間結(jié)束時(shí)的停留點(diǎn)與目標(biāo)點(diǎn)之間的距離,距離越小表示控制器性能越好,然后使用場(chǎng)地對(duì)角線長(zhǎng)度減去上述距離作為最終的適應(yīng)度,這樣適應(yīng)度越大表明控制器性能越好,適應(yīng)度函數(shù)形式如下:
(1)
式中:目標(biāo)點(diǎn)位置為(xtarget,ytarget),機(jī)器人模擬時(shí)間結(jié)束時(shí)停留的位置為(xend,yend),場(chǎng)地的對(duì)角線長(zhǎng)度為length。
由于本文中直接編碼有兩種實(shí)現(xiàn)方式,間接編碼有一種實(shí)現(xiàn)方式,因此每個(gè)場(chǎng)景進(jìn)行三組實(shí)驗(yàn),測(cè)試不同編碼方式的性能。每個(gè)場(chǎng)景對(duì)每種編碼方式進(jìn)行20次重復(fù)性實(shí)驗(yàn),實(shí)驗(yàn)結(jié)果如圖6所示。
(a) Empty Arena中的平均適應(yīng)度變化
(b) Escape Room中的平均適應(yīng)度變化
(c) Middle Wall中的平均適應(yīng)度變化
(d) Multi Maze中的平均適應(yīng)度變化圖6 使用不同編碼方式的控制器在不同場(chǎng)景中的性能
在這四個(gè)場(chǎng)景中,機(jī)器人的傳感器數(shù)目均沒(méi)有發(fā)生改變,形態(tài)保持不變。按照具體場(chǎng)景來(lái)看,間接編碼在Escape Room中表現(xiàn)最好,直接編碼在Middle Wall和Multi Maze中表現(xiàn)最好,不同的編碼方式在多個(gè)場(chǎng)景中互有優(yōu)劣。按照整體實(shí)驗(yàn)結(jié)果來(lái)看,直接編碼和間接編碼表現(xiàn)都很好,平均適應(yīng)度均超過(guò)了0.95(考慮到機(jī)器人自身的大小,適應(yīng)度大于等于0.95可認(rèn)為機(jī)器人已經(jīng)到達(dá)目標(biāo)點(diǎn)),這表明基于直接編碼和間接編碼的控制器都具有優(yōu)秀的控制性能。
綜上所述,在機(jī)器人傳感器全部正常工作的前提下,基于直接編碼和間接編碼的控制器均表現(xiàn)很好,且兩者之間的差異較小,而當(dāng)場(chǎng)景從簡(jiǎn)單到復(fù)雜時(shí),控制器的平均適應(yīng)度均有下降現(xiàn)象。在機(jī)器人形態(tài)不變的情況下,使用兩種編碼方式的控制器在性能上較為接近,這為后面的實(shí)驗(yàn)提供了基礎(chǔ)。
本文基于進(jìn)化計(jì)算設(shè)計(jì)了一種漸進(jìn)式學(xué)習(xí)方法,用來(lái)生成具有高魯棒性的控制器,具備形態(tài)自適應(yīng)能力。漸進(jìn)式方法指的是在進(jìn)化計(jì)算的過(guò)程中,機(jī)器人的傳感器數(shù)目會(huì)按照設(shè)定的規(guī)則改變,在此過(guò)程中,CPPN會(huì)逐漸學(xué)習(xí)到機(jī)器人形態(tài)和控制器之間的映射關(guān)系。為了進(jìn)行比較,方法分別使用了直接編碼和間接編碼進(jìn)行實(shí)現(xiàn)(EA、NEAT和HyperNEAT三種方式。)
在漸進(jìn)式學(xué)習(xí)方法中,總進(jìn)化代數(shù)為300代,實(shí)驗(yàn)場(chǎng)景使用的是Middle Wall,每個(gè)個(gè)體的模擬時(shí)長(zhǎng)是60秒。具體步驟如下。
步驟10~100代時(shí)使用的是缺失左側(cè)傳感器的機(jī)器人(No-Left-Robot)。EA、NEAT和HyperNEAT按照表2中的進(jìn)化參數(shù)運(yùn)行。對(duì)于直接編碼,ANN-Controller本來(lái)有五個(gè)輸入,對(duì)應(yīng)四個(gè)傳感器的接收值和一個(gè)偏置,即輸入為(left sensor input, front sensor input, right sensor input, back sensor input, bias),現(xiàn)在缺少了左側(cè)的傳感器,ANN-Controller的輸入需要變成(0.0, front sensor input, right sensor input, back sensor input, bias);在間接編碼中,No-Left-Robot擁有自己的基底,CPPN可以通過(guò)基底生成對(duì)應(yīng)的神經(jīng)網(wǎng)絡(luò)控制器。
步驟2101~200代使用的是缺失右側(cè)傳感器的機(jī)器人(No-Right-Robot)。此時(shí)進(jìn)化算法中使用的種群是第100代的種群,也就是說(shuō)第101代的進(jìn)化是在第100代的基礎(chǔ)上進(jìn)行的。EA、NEAT和HyperNEAT按照表2中的進(jìn)化參數(shù)運(yùn)行。此時(shí)機(jī)器人的形態(tài)和基底都發(fā)生了改變,對(duì)于直接編碼,輸入需要變成(left sensor input, 0.0, front sensor input, right sensor input, back sensor input, bias)。但在間接編碼中CPPN是無(wú)需改變的,因?yàn)镃PPN可以通過(guò)不同的基底生成不同的神經(jīng)網(wǎng)絡(luò)來(lái)控制機(jī)器人。
步驟3201~300代使用的是正常的機(jī)器人(Normal-Robot),此時(shí)需要保留第200代的種群,第201代是在第200代的基礎(chǔ)上進(jìn)化的。EA、NEAT和HyperNEAT按照表2中的進(jìn)化參數(shù)運(yùn)行。直接編碼和間接編碼都按照常規(guī)方式進(jìn)行。由于機(jī)器人傳感器全部正常,直接編碼和間接編碼都按照正常方式進(jìn)行。
步驟4從201~300代中找出最優(yōu)個(gè)體,保存最優(yōu)個(gè)體的控制器,直接編碼保存的是ANN-Controller,間接編碼保存的是CPPN。然后在No-Left-Robot和No-Right-Robot上測(cè)試控制器的控制效果。
方法流程如圖7所示,圖中左側(cè)表示使用直接編碼的漸進(jìn)式方法,顯示了ANN-Controller在不同階段的輸入;右側(cè)表示使用間接編碼的漸進(jìn)式方法,顯示了不同階段的基底,基底中的非空心圓表示失效傳感器的位置,在生成ANN-Controller時(shí)不再被使用。
圖7 使用直接編碼(左側(cè))和間接編碼(右側(cè))的漸進(jìn)式方法
EA、NEAT和HyperNEAT分別進(jìn)行十次重復(fù)性實(shí)驗(yàn),取平均適應(yīng)度,結(jié)果如圖8所示??梢钥闯?在機(jī)器人傳感器數(shù)目沒(méi)有變化時(shí),不同編碼方式的最高平均適應(yīng)度均超過(guò)了0.95,可認(rèn)為機(jī)器人到達(dá)目標(biāo)點(diǎn)。HyperNEAT適應(yīng)度上升速度略慢是因?yàn)殚g接編碼不直接針對(duì)特定結(jié)構(gòu)優(yōu)化控制器,耗費(fèi)時(shí)間稍長(zhǎng)。在第101代時(shí),機(jī)器人從缺少左側(cè)傳感器變成了缺少右側(cè)傳感器,變化幅度較大,此時(shí)HyperNEAT下降程度最小,體現(xiàn)出使用間接編碼的控制器自適應(yīng)形態(tài)變化的特性;在第201代時(shí),機(jī)器人從缺少右側(cè)傳感器變成了不缺少傳感器,此時(shí)的傳感器位置的變化幅度小于第101代時(shí)的變化,HyperNEAT的優(yōu)勢(shì)不夠明顯(但下降幅度仍小于NEAT),而ANN由于使用了全部傳感器,并采用了全連接的連接方式,適合傳感器全部正常的情況,這使得此時(shí)適應(yīng)度下降程度最小的是ANN。
圖8 漸進(jìn)式方法中平均適應(yīng)度變化
根據(jù)漸進(jìn)式方法流程中的步驟4,使用最優(yōu)個(gè)體的控制器按照式(2)計(jì)算性能下降幅度。實(shí)驗(yàn)結(jié)果如表3所示。
表3 漸進(jìn)式方法生成的控制器健壯性比較
(2)
式中:fnormal表示201~300代中最優(yōu)個(gè)體的控制器應(yīng)用到Normal-Robot時(shí)的適應(yīng)度,fmissing表示該控制器應(yīng)用到No-Left-Robot或No-Right-Robot時(shí)的適應(yīng)度。
可以看出,當(dāng)控制器應(yīng)用到缺失傳感器的機(jī)器人上時(shí),使用直接編碼的控制器性能下降幅度明顯大于間接編碼。使用間接編碼的控制器展現(xiàn)出了自適應(yīng)形態(tài)的能力,而使用直接編碼的控制器局限于特定形態(tài),花費(fèi)大量時(shí)間優(yōu)化的控制器可能只適用于單一形態(tài)。當(dāng)機(jī)器人結(jié)構(gòu)發(fā)生變化(例如某個(gè)傳感器失效)時(shí),控制器性能會(huì)大幅下降,健壯性較差。
圖9直觀地表示了實(shí)驗(yàn)中不同適應(yīng)度對(duì)應(yīng)的機(jī)器人在環(huán)境中的位置,同時(shí)標(biāo)注了機(jī)器人的初始位置(空心圓)和目標(biāo)點(diǎn)位置(實(shí)心圓),適應(yīng)度越高表明機(jī)器人越接近目標(biāo)點(diǎn)。從表3中的數(shù)據(jù)中可以知道,將使用間接編碼的控制器應(yīng)用到No-Left-Robot上時(shí),機(jī)器人平均適應(yīng)度為0.637,應(yīng)用到No-Right-Robot上時(shí),平均適應(yīng)度為0.625,在這兩個(gè)值中取較低值,在圖9中標(biāo)注出f=0.625時(shí)機(jī)器人所處的位置??梢钥吹?當(dāng)某個(gè)傳感器發(fā)生故障時(shí),采用了間接編碼的機(jī)器人有較強(qiáng)的朝向目標(biāo)點(diǎn)移動(dòng)的趨勢(shì)(即便是平均適應(yīng)度較低的情況),機(jī)器人最終停留位置更接近目標(biāo)點(diǎn),控制器體現(xiàn)出了較強(qiáng)的形態(tài)自適應(yīng)能力;而使用直接編碼的機(jī)器人的最終位置與初始點(diǎn)差距不大,控制器的性能下滑較為嚴(yán)重。
圖9 平均適應(yīng)度與機(jī)器人位置的對(duì)照關(guān)系
綜上所述,間接編碼體現(xiàn)出了兩點(diǎn)優(yōu)勢(shì):第一,機(jī)器人傳感器數(shù)目發(fā)生改變時(shí),間接編碼中使用的CPPN無(wú)需改變自身結(jié)構(gòu),只需要利用機(jī)器人自身的基底信息;而在直接編碼中,ANN-Controller需要改變結(jié)構(gòu)(方法中通過(guò)缺失傳感器的對(duì)應(yīng)神經(jīng)元輸入變?yōu)?.0來(lái)實(shí)現(xiàn))。第二,從漸進(jìn)式方法最終生成的最優(yōu)個(gè)體控制器(表3)來(lái)看,使用間接編碼的控制器在面對(duì)不同形態(tài)的機(jī)器人時(shí)表現(xiàn)更好,相比于常規(guī)的直接編碼損失的適應(yīng)度較少,體現(xiàn)出了較強(qiáng)的形態(tài)自適應(yīng)能力。
針對(duì)控制器局限于機(jī)器人的特定形態(tài)這一問(wèn)題,本文提出一種基于間接編碼的漸進(jìn)式學(xué)習(xí)方法,該方法生成的控制器能夠自適應(yīng)形態(tài)變化。本文首先在機(jī)器人傳感器全部正常(形態(tài)不變)的情況下,通過(guò)仿真實(shí)驗(yàn)在多個(gè)場(chǎng)景中比較了基于兩種編碼方式的控制器性能,結(jié)果表明兩種方式表現(xiàn)都很好。在這一實(shí)驗(yàn)結(jié)果的基礎(chǔ)上,基于進(jìn)化計(jì)算設(shè)計(jì)了一種漸進(jìn)式學(xué)習(xí)方法,方法分別使用直接編碼和間接編碼來(lái)實(shí)現(xiàn),該方法的執(zhí)行過(guò)程中機(jī)器人傳感器數(shù)目會(huì)按規(guī)則改變,用來(lái)生成具有高魯棒性的控制器。經(jīng)過(guò)實(shí)驗(yàn)可知,相比于直接編碼,使用間接編碼的漸進(jìn)式方法可以產(chǎn)生健壯性較好的控制器,在缺失傳感器的情況下(形態(tài)改變)表現(xiàn)更好,自適應(yīng)形態(tài)變化的能力較強(qiáng)。
目前的實(shí)驗(yàn)對(duì)象形態(tài)較為簡(jiǎn)單,但是間接編碼的漸進(jìn)式設(shè)計(jì)方法可以拓展到更為復(fù)雜的控制器設(shè)計(jì)場(chǎng)景,例如傳感器更為豐富的機(jī)器人上。對(duì)于較復(fù)雜機(jī)器人控制器的研究將會(huì)在未來(lái)的工作中進(jìn)行實(shí)驗(yàn)與分析。