孫福磊 魏秉晟 甘中學 李 偉
(復旦大學工程與應用技術研究院 上海 200433) (上海智能機器人工程技術研究中心 上海 200433) (智能機器人教育部工程研究中心 上海 200433)
機器人控制器的設計是機器人領域的核心問題之一,機器人需要感知周圍環境從而產生合理的動作。常用的機器人控制方法包括PID控制[1]、滑模控制[2]和神經網絡控制[3]等。進化計算[4-6]是一種受達爾文自然進化論啟發的方法,常用于在神經網絡控制中優化神經網絡,是一組全局優化算法。從技術上講,進化計算是一類基于群體的嘗試和尋優方法,具有啟發式或隨機優化特性。對于控制和規劃問題的優化決策、機器學習等領域內的一些非常復雜且難以解決的問題[7],進化計算展示出了較好的處理能力。
進化機器人(ER)是將進化計算應用于自主機器人設計的一個領域,進化機器人中的進化通常用于機器人行為控制[8]。ER 技術有可能使控制系統的設計自動化,而不需要研究人員手動制定所需行為規范[9]。神經網絡已被證明能夠代表一般的和自適應的解決方案[10],同時可以提供相對平滑的搜索空間,因此在 ER中通常使用人工神經網絡作為機器人控制器,下文稱為 ANN-Controller。編碼是進化計算中的關鍵步驟,進化計算中常用的編碼方式是直接編碼[11],在這種方式中進化實體和進化計算中的基因型是一一對應的,直接對應了進化計算對解空間的搜索。這些特點使得在直接編碼中機器人的控制器局限于特定形態。
機器人合理動作的產生不僅僅依賴于控制器,也依賴于機器人的形態,不同環境中的適用形態是不同的,例如模塊化機器人在完成不同任務時的適用形態并不相同[12]。傳統的控制器設計是在機器人形態固定的情況下進行的,這使得機器人控制器局限于特定形態,同時影響了優化空間。理想情況下,機器人的形態可以隨著環境的變化而改變,不斷適應環境。這就要求在設計控制器的過程中,將機器人的形態變化考慮進來,具備形態自適應的能力,而不僅僅是針對固定結構進行設計。
本文使用間接編碼[13]設計了一種漸進式控制器生成方法。該方法基于進化計算實現,不針對特定形態設計控制器,而是尋找機器人形態和控制器之間的映射關系,當機器人的形態發生改變,控制器也會隨之改變。在本文的實驗中,該方法生成的控制器可以用來應對機器人傳感器發生故障失效的問題,具備一定的形態自適應能力。
直接編碼中基因型和表現型是一一對應的,本文中使用了兩種直接編碼方式,它們的區別在于基因型不同。
第一種基因型只包括神經網絡的權值,使用這種基因型之前需要手工設計出ANN-Controller的結構,然后使用進化算法(EA)優化神經元之間的權值。在這種方式中,神經元的數目和神經元之間的連接等信息都是固定的,無法優化。這在一定程度上影響了神經網絡的優化空間。下文稱這種方式為EA。
第二種基因型除了包含權值之外,還包括神經元的數目和神經元之間的連接等拓撲結構信息,這種基因型來源于神經進化的思想。傳統的神經網絡優化方式只是調整神經網絡的權值,而在神經進化中,神經網絡的結構也會發生改變。本文中采用的神經進化算法是NEAT(NeuroEvolution of Augmenting Topologies[14]),這是一種流行的神經進化方式,NEAT算法使神經網絡從最小結構逐步變得復雜,同時可以對不同結構的神經網絡執行交叉操作。圖1和表1說明了兩個親代通過交叉產生子代的過程。在NEAT中,神經元和神經元之間的連接都有唯一的編號。圖1中的數字表示神經元編號,表1中的num表示神經元之間連接的編號,pos表示該連接的起點與終點,例如num=1,pos=1,4表示1號神經元和4號神經元之間的連接編號為1。表1中的第1行代表圖1中親代1的神經網絡連接信息,第2行代表親代2的信息,第3行代表子代的信息。下面通過幾種情況說明交叉操作如何進行。

圖1 不同結構神經網絡的交叉

表1 神經網絡的連接信息
(1) 連接在兩個親代都存在,那么子代也會保留該連接,例如表1中的1號連接。
(2) 由于連接數目變異等原因,連接在兩個親代中都不存在,那么子代中也不會存在該連接,例如表1中的2號連接。
(3) 連接只在某一個親代中存在,那么子代會保留該連接,例如表1中的8號連接。
(4) 連接在兩個親代中的結構不同,那么子代會保留較為復雜的結構。例如表1中的5號連接,在親代1中,它連接了5號神經元和4號神經元;而在親代2中,5號連接被6號連接和7號連接取代,原因是5號神經元和4號神經元之間增加了一個6號神經元。針對這個連接,由于親代2的結構更為復雜,因此子代會保留親代2的結構。
相比于傳統的進化算法方式,神經進化擴大了神經網絡的優化空間,擁有更高的自由度。下文稱這種方式為NEAT。
間接編碼中基因型和表現型不是一一對應的,這種特性使得間接編碼能將機器人控制器和機器人形態解耦。在本文使用的間接編碼中,基因型不是ANN-Controller,而是復合模式生成網絡(CPPN[15])的自身信息。CPPN的作用類似于一個函數,記錄機器人形態和控制器之間的映射關系,從而根據機器人不同的形態信息生成對應的ANN-Controller,這個生成過程可以看作是一次編碼。
HyperNEAT[16-17]是一種專門優化CPPN的算法。在HyperNEAT中基因型包含了四部分內容:神經元數目、神經元之間的連接、權值和神經元的激活函數。在優化CPPN的過程中,激活函數是可變的,這種特性使得CPPN善于發現神經網絡中的模式。舉例來說,神經網絡可能存在卷積、重復和對稱等多種模式,卷積的發現使得深度學習獲得了成功,從理論上來講,通過HyperNEAT進化得到的神經網絡可以發現任何一種模式,可以學習到常規神經網絡學習算法無法獲得的規則[18]。對于前面提到的模塊機器人[19],以及機器人在模擬環境中的行駛任務[20],都有研究者使用HyperNEAT針對固定形態的機器人進行研究并取得了良好效果。下文稱這種方式為HyperNEAT。
直接編碼和間接編碼中基因型和表現型的關系如圖2所示。

圖2 兩種編碼方式中基因型和表現型的關系
前面介紹了進化計算的兩種編碼方式。下面首先介紹仿真實驗中使用的機器人,包括仿真環境等信息,然后說明如何將兩種編碼方式應用到機器人上,最后在機器人形態不變的前提下,針對機器人自主導航這一具體問題進行仿真實驗,分析實驗結果,這是進行下一個實驗的基礎。
實驗中用到的機器人是用自主進化機器人[21](Autonomous Robot Evolution,ARE)項目中的元器件生成的,ARE項目的目的是進化和制造機器人,機器人在進化過程中不斷改變形態和控制器來完成任務,且項目中的機器人都是由基本模塊(傳感器模型、車輪模型等)和連接框架組合起來的,可以通過重復利用基本模塊和3D打印的方式制造出實體機器人。
本文中使用的機器人有四個距離傳感器,三個在機器人的前方(下文分別稱為左側、前側和右側傳感器),一個在機器人的后方,機器人還包括兩個電機(車輪),外形如圖3所示。實驗中使用的機器人仿真平臺是V-REP,版本是3.6.2,使用的操作系統是Ubuntu 18.04。

圖3 實驗中使用的機器人
對于EA,將神經網絡的結構手工設定為五個輸入層神經元(對應機器人的四個傳感器和一個偏置)、四個隱層神經元和兩個輸出層神經元(對應機器人的兩個電機),神經網絡的五個輸入來自機器人傳感器的接收值和一個偏置,兩個輸出作為機器人電機的轉速。神經網絡各層之間的連接均為全連接。
對于NEAT,只指定輸入層神經元的數目(5個)和輸出層神經元的數目(2個),隱藏層神經元的數目和各層神經元的連接數目均通過NEAT算法進化得到。神經網絡的輸入和輸出與第一種基因型相同。
為了比較兩種不同的編碼方式,本文設計了基于間接編碼的控制器。在間接編碼中,進化算法不直接優化ANN-Controller,而是優化CPPN,然后通過CPPN生成ANN-Controller。步驟如下。
本文中CPPN的輸入是ANN-Controller中神經元的“坐標”,基底指的是ANN-Controller中所有神經元的坐標的集合。對于ANN-Controller的輸入層神經元,使用機器人傳感器的相對位置作為神經元的坐標;對于輸出層神經元,使用機器人電機的相對位置作為坐標;對于隱層神經元,由于沒有對應的物理實體,實驗中根據經驗進行了人工指定。
步驟2CPPN的輸入是由ANN-Controller的基底決定的,而CPPN的輸出是ANN-Controller中連接的權值。舉例來說,如果CPPN要輸出ANN某個輸入層神經元和隱層神經元之間的權值,那么CPPN的輸入就是基底中這兩個神經元的“坐標”,輸出其他權值時同理。
步驟3CPPN的輸出還包括神經元的偏置。依次將基底中的坐標輸入到CPPN中,CPPN就可以生成一個完整的ANN-Controller(表現型)。
間接編碼流程如圖4所示。

圖4 間接編碼流程
可以看出,CPPN的輸出會反映到ANN-Controller的權值和偏置上。將機器人的形態看作x,ANN-Controller看作y,在理想情況中會存在映射關系f,使得f(x)=y,而CPPN起到發現和記錄這種映射關系的作用。舉例來說,如果CPPN某個輸出神經元的激活函數是對稱函數,那么反映到ANN-Controller上,ANN-Controller的某些權值就是對稱的,機器人形態不同,控制器中對稱權值的分布位置就會不同。
自主導航是智能機器人應掌握的基本技能之一,在機器人的自主導航問題中,機器人需要在不同的場景中從初始點運動到目標點,移動過程中要躲避障礙。
隨著節能降耗要求不斷提高,通常的做法是,將汽封間隙調整到低于制造廠規定的下線,機組啟動后,通過反復的碰磨,磨出間隙。
實驗中用到的場景如圖5所示,模擬時間分別是30 s(Empty Arena)、40 s(Escape Room)、60 s(Middle Wall)和120 s(Multi Maze)。場景中的空心圓代表機器人的初始位置,實心圓代表目標點位置。機器人在每個場景中都有都能選擇任意路徑到達目標點,黑色虛線是一些有代表性的路徑。

圖5 實驗中使用的場景
圖5中四個場景難度依次增加。Empty Arena中從初始點到目標點沒有障礙物,是最簡單的一個場景。Escape Room和Middle Wall中有墻壁阻擋,難度增大。Multi Maze中墻壁數目最多,對控制器性能要求最高,難度最大。
進化計算參數如表2所示。有資料表明[22],對于控制這種類型的任務,較高的權值變異率(50%或者更高)會取得更好的效果,原因可能是在控制任務中,神經網絡的輸入數目較少。因此實驗中將進化計算的權值變異概率指定為0.9。

表2 進化計算參數

續表2
由于機器人的任務是移動到目標點,因此適應度函數中需要包含機器人模擬時間結束時的停留點與目標點之間的距離,距離越小表示控制器性能越好,然后使用場地對角線長度減去上述距離作為最終的適應度,這樣適應度越大表明控制器性能越好,適應度函數形式如下:
(1)
式中:目標點位置為(xtarget,ytarget),機器人模擬時間結束時停留的位置為(xend,yend),場地的對角線長度為length。
由于本文中直接編碼有兩種實現方式,間接編碼有一種實現方式,因此每個場景進行三組實驗,測試不同編碼方式的性能。每個場景對每種編碼方式進行20次重復性實驗,實驗結果如圖6所示。

(a) Empty Arena中的平均適應度變化

(b) Escape Room中的平均適應度變化

(c) Middle Wall中的平均適應度變化

(d) Multi Maze中的平均適應度變化圖6 使用不同編碼方式的控制器在不同場景中的性能
在這四個場景中,機器人的傳感器數目均沒有發生改變,形態保持不變。按照具體場景來看,間接編碼在Escape Room中表現最好,直接編碼在Middle Wall和Multi Maze中表現最好,不同的編碼方式在多個場景中互有優劣。按照整體實驗結果來看,直接編碼和間接編碼表現都很好,平均適應度均超過了0.95(考慮到機器人自身的大小,適應度大于等于0.95可認為機器人已經到達目標點),這表明基于直接編碼和間接編碼的控制器都具有優秀的控制性能。
綜上所述,在機器人傳感器全部正常工作的前提下,基于直接編碼和間接編碼的控制器均表現很好,且兩者之間的差異較小,而當場景從簡單到復雜時,控制器的平均適應度均有下降現象。在機器人形態不變的情況下,使用兩種編碼方式的控制器在性能上較為接近,這為后面的實驗提供了基礎。
本文基于進化計算設計了一種漸進式學習方法,用來生成具有高魯棒性的控制器,具備形態自適應能力。漸進式方法指的是在進化計算的過程中,機器人的傳感器數目會按照設定的規則改變,在此過程中,CPPN會逐漸學習到機器人形態和控制器之間的映射關系。為了進行比較,方法分別使用了直接編碼和間接編碼進行實現(EA、NEAT和HyperNEAT三種方式。)
在漸進式學習方法中,總進化代數為300代,實驗場景使用的是Middle Wall,每個個體的模擬時長是60秒。具體步驟如下。
步驟10~100代時使用的是缺失左側傳感器的機器人(No-Left-Robot)。EA、NEAT和HyperNEAT按照表2中的進化參數運行。對于直接編碼,ANN-Controller本來有五個輸入,對應四個傳感器的接收值和一個偏置,即輸入為(left sensor input, front sensor input, right sensor input, back sensor input, bias),現在缺少了左側的傳感器,ANN-Controller的輸入需要變成(0.0, front sensor input, right sensor input, back sensor input, bias);在間接編碼中,No-Left-Robot擁有自己的基底,CPPN可以通過基底生成對應的神經網絡控制器。
步驟2101~200代使用的是缺失右側傳感器的機器人(No-Right-Robot)。此時進化算法中使用的種群是第100代的種群,也就是說第101代的進化是在第100代的基礎上進行的。EA、NEAT和HyperNEAT按照表2中的進化參數運行。此時機器人的形態和基底都發生了改變,對于直接編碼,輸入需要變成(left sensor input, 0.0, front sensor input, right sensor input, back sensor input, bias)。但在間接編碼中CPPN是無需改變的,因為CPPN可以通過不同的基底生成不同的神經網絡來控制機器人。
步驟3201~300代使用的是正常的機器人(Normal-Robot),此時需要保留第200代的種群,第201代是在第200代的基礎上進化的。EA、NEAT和HyperNEAT按照表2中的進化參數運行。直接編碼和間接編碼都按照常規方式進行。由于機器人傳感器全部正常,直接編碼和間接編碼都按照正常方式進行。
步驟4從201~300代中找出最優個體,保存最優個體的控制器,直接編碼保存的是ANN-Controller,間接編碼保存的是CPPN。然后在No-Left-Robot和No-Right-Robot上測試控制器的控制效果。
方法流程如圖7所示,圖中左側表示使用直接編碼的漸進式方法,顯示了ANN-Controller在不同階段的輸入;右側表示使用間接編碼的漸進式方法,顯示了不同階段的基底,基底中的非空心圓表示失效傳感器的位置,在生成ANN-Controller時不再被使用。

圖7 使用直接編碼(左側)和間接編碼(右側)的漸進式方法
EA、NEAT和HyperNEAT分別進行十次重復性實驗,取平均適應度,結果如圖8所示。可以看出,在機器人傳感器數目沒有變化時,不同編碼方式的最高平均適應度均超過了0.95,可認為機器人到達目標點。HyperNEAT適應度上升速度略慢是因為間接編碼不直接針對特定結構優化控制器,耗費時間稍長。在第101代時,機器人從缺少左側傳感器變成了缺少右側傳感器,變化幅度較大,此時HyperNEAT下降程度最小,體現出使用間接編碼的控制器自適應形態變化的特性;在第201代時,機器人從缺少右側傳感器變成了不缺少傳感器,此時的傳感器位置的變化幅度小于第101代時的變化,HyperNEAT的優勢不夠明顯(但下降幅度仍小于NEAT),而ANN由于使用了全部傳感器,并采用了全連接的連接方式,適合傳感器全部正常的情況,這使得此時適應度下降程度最小的是ANN。

圖8 漸進式方法中平均適應度變化
根據漸進式方法流程中的步驟4,使用最優個體的控制器按照式(2)計算性能下降幅度。實驗結果如表3所示。

表3 漸進式方法生成的控制器健壯性比較
(2)
式中:fnormal表示201~300代中最優個體的控制器應用到Normal-Robot時的適應度,fmissing表示該控制器應用到No-Left-Robot或No-Right-Robot時的適應度。
可以看出,當控制器應用到缺失傳感器的機器人上時,使用直接編碼的控制器性能下降幅度明顯大于間接編碼。使用間接編碼的控制器展現出了自適應形態的能力,而使用直接編碼的控制器局限于特定形態,花費大量時間優化的控制器可能只適用于單一形態。當機器人結構發生變化(例如某個傳感器失效)時,控制器性能會大幅下降,健壯性較差。
圖9直觀地表示了實驗中不同適應度對應的機器人在環境中的位置,同時標注了機器人的初始位置(空心圓)和目標點位置(實心圓),適應度越高表明機器人越接近目標點。從表3中的數據中可以知道,將使用間接編碼的控制器應用到No-Left-Robot上時,機器人平均適應度為0.637,應用到No-Right-Robot上時,平均適應度為0.625,在這兩個值中取較低值,在圖9中標注出f=0.625時機器人所處的位置。可以看到,當某個傳感器發生故障時,采用了間接編碼的機器人有較強的朝向目標點移動的趨勢(即便是平均適應度較低的情況),機器人最終停留位置更接近目標點,控制器體現出了較強的形態自適應能力;而使用直接編碼的機器人的最終位置與初始點差距不大,控制器的性能下滑較為嚴重。

圖9 平均適應度與機器人位置的對照關系
綜上所述,間接編碼體現出了兩點優勢:第一,機器人傳感器數目發生改變時,間接編碼中使用的CPPN無需改變自身結構,只需要利用機器人自身的基底信息;而在直接編碼中,ANN-Controller需要改變結構(方法中通過缺失傳感器的對應神經元輸入變為0.0來實現)。第二,從漸進式方法最終生成的最優個體控制器(表3)來看,使用間接編碼的控制器在面對不同形態的機器人時表現更好,相比于常規的直接編碼損失的適應度較少,體現出了較強的形態自適應能力。
針對控制器局限于機器人的特定形態這一問題,本文提出一種基于間接編碼的漸進式學習方法,該方法生成的控制器能夠自適應形態變化。本文首先在機器人傳感器全部正常(形態不變)的情況下,通過仿真實驗在多個場景中比較了基于兩種編碼方式的控制器性能,結果表明兩種方式表現都很好。在這一實驗結果的基礎上,基于進化計算設計了一種漸進式學習方法,方法分別使用直接編碼和間接編碼來實現,該方法的執行過程中機器人傳感器數目會按規則改變,用來生成具有高魯棒性的控制器。經過實驗可知,相比于直接編碼,使用間接編碼的漸進式方法可以產生健壯性較好的控制器,在缺失傳感器的情況下(形態改變)表現更好,自適應形態變化的能力較強。
目前的實驗對象形態較為簡單,但是間接編碼的漸進式設計方法可以拓展到更為復雜的控制器設計場景,例如傳感器更為豐富的機器人上。對于較復雜機器人控制器的研究將會在未來的工作中進行實驗與分析。