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