第二章 TORCS 介紹與文獻縱覽
2.2 相關文獻縱覽
在遊戲的應用上,有時候如果只用固定的程式碼來建構 AI 或是判斷玩家行 為,則可能效果不好且速度較慢。這時候機器學習就是一個重要的關鍵,利用這 些學習演算法的自我學習能力,對開發者有很大的幫助。而在[2]中提到如 Xbox 的 Kinect,起初研發團隊想使用純圖學的方式,但後來發現這樣的處理速度太慢,
於是導入機器學習的方法根據人體由某個動作移至接下來的動作的機率模型數 據輔助辨識,又讓程式從上百萬張人體圖片中學習、辨識姿勢然後提出以抓身體 驅幹及四肢為主要辨識目標,最後再以 3D camera 得到身體驅幹深度資訊幫助辨 識。
而在 TORCS 中,實作一個具有競爭能力的駕駛 AI 的方法有很多種。在[3]
中所用的是 Fuzzy logic,也就是模糊邏輯。模糊邏輯中具有程度的概念,而不像 傳統邏輯中針對某一二元邏輯其輸出只有 0 及 1 兩種可能的值,模糊邏輯可以針 對目前情況作出程度上的判斷。[3]先手動對各個輸入及輸出參數設計其成員函 數,再利用演化計算去針對這些成員函數做演化。經過演化後,由其成員函數的 演化可以看出駕駛 AI 對本身賽車位置變得更加敏感。[4]提到目前要做出一個類 似人類駕駛員的駕駛 AI 有三個較主流的方式:監督式學習(Supervised Learning)、
類神經演化計算(Neuroevolution)以及規則演化計算(Rule-based evolution)。
而[4]正是使用第一種方法來完成這個駕駛 AI。在這個部分共有兩種偵測賽道環 境的方法:Range-finder sensor 及 Look-ahead sensor。第一種是 TORCS 比賽中使 用的距離探測器,會回傳車子前方各角度距離賽道邊界的距離。第二種是取出車 子前方固定長度的賽道,分割成多個等長的 segment 後計算每個 segment 的彎曲 程度,0 為直線,而若是大於 0 的話代表右轉、小於 0 則代表左轉。經由上述兩 種 sensor 取得了賽道的參數後,使用 K-nearest neighbor 及類神經網路來決定現 在要採取什麼樣的行動。
而[6]是採用 Spiking Neural Network(SNN)來發展一個駕駛 AI。SNN 是第 三代的類神經網路,其開發理念是希望可以讓這個類神經網路更加接近生物大腦 的運作方式,通常是用在分類問題或是機器人視覺分析上。在[6]中是由 Izhikevich 模組的神經元所組成的前饋網路來控制賽車 AI 的行為,這個網路中包含了八個 輸入神經元與四個輸出神經元,且輸入與輸出神經元之間是直接對應,故架構中 不存在隱藏層。類神經網路的輸入環境參數是賽車方向與軌道方向的夾角、賽車 與軌道中線距離、賽車速度以及五個量測軌道邊界與賽車距離的 range-finder
sensor。而輸出部分,只簡單分為左右轉向與加速及剎車共四個。而在這篇論文 中除了一般的健康度測試外,另外設了一個限制:當一個控制 AI 在計算過程中 受到的損傷超過 1000,則馬上捨棄這個 AI 並開始另一個 AI 的計算。
賽車遊戲有很多種,所以針對是否可以將駕駛行為在不同遊戲間進行轉移以 加速在另外一個遊戲中的學習效果也變成一個值得研究的課題。[7]即是有關轉 移學習的一篇論文,是在 TORCS 與另一個賽車遊戲 VDrift 間進行實驗,兩個遊 戲的差異是 TORCS 每 0.02 秒、VDrift 是每 0.01 秒更新一次,且 VDrift 在每個 賽道上平均表現約比 TORCS 高出 32%。而在這篇論文的實驗中是以類神經網路 學習的結果為轉移對象。首先在兩個遊戲間用兩邊現有的駕駛 AI 及兩款遊戲中 的四個賽道上比較駕駛時間。比較完兩邊的時間表現後,接著是以 TORCS 為學 習平台,測試在此平台上以類神經網路學習的結果是否可以不需調整即可應用在 其他遊戲上。若使用在 TORCS 上的學習結果並進行學習,則其類神經網路的健 康度在四個測試賽道上較原始駕駛 AI 成長了 14%~225%。而若不使用 TORCS 上的學習效果而直接開始學習,需要 37 個世代才能找到效果最好的駕駛 AI。若 有使用,則只需要 4 個世代就能找到具有競爭力的 AI,所以經過實驗,轉移實 驗的確是可以加速學習成果。
除了以 sensor 作為輸入來計算出當下車子的行動外,還有另外一種研究方向 是事前便將關於賽道的資訊都蒐集完成後,利用這些資訊來計算出賽車如何在這 個賽道上開得越快越好與近乎最短距離的路徑。[8]就是這個研究方向的其中一 篇論文。在[8]中以基因演算法來找出最具競爭力的賽車路線,並將這個路線以 一組B’ezier curves 表示。在對控制點進行編碼時,當賽道某段的曲率半徑越大,
則該區域的控制點就會越多。接下來的計算階段中,用了兩種計算方式。第一種 是將計算出來的軌跡直接載入到 TORCS 程式中去模擬實際跑的時間與速度等等。
而第二種是用估計的方式,計算這次軌跡跑出來的健康函數並以這個值來比較不 同軌跡間的效果。最後,在模擬實驗的部份所呈現出來的結果表示,如果對控制
來計算健康函數的計算模組可能沒有辦法完全符合想解決的問題。 state,而每個 state 中都會依據學習結果更新底下對應動作的 Q-value。前面提到 在[9]中,有分成兩個部分的實驗,分別是軌跡與剎車延遲。在軌跡實驗中,可
在[9]的兩部分的實驗中的每個細項皆跑 10000 次的學習,而當學習次數約進行 5000 次之後,回饋系統所回傳的值的平均會趨於穩定,也就是學習的行為會趨 於穩定。軌跡學習部分,Q-Learning 的結果以成功率來看,皆可以以 90%的成 功機率壓倒 TORCS 內建的 Berniw Driver 的 70%。在車子的最高速度數值上也 是約超出內建 AI 約 7~8 Km/h。剎車延遲部分,成功機率更是以 88.1%遠遠領 先內建 AI 的 18.8%。
[10]是以模糊邏輯來對前車阻擋後車的行為作出行為模式的分類並以這些 分類結果來判斷現在所要採取的最好行為為何並進行超車。模糊理論是一種可以 將目前情況以程度來進行分辨的邏輯的一種。與只有 1 跟 0 兩種可能的經典邏輯 不同,使用到模糊邏輯決定一個參數時需要使用到成員函數( Membership Function),成員函數底下可能針對各種不同情況而由多個梯形或三角形函數組成。
在[8]中除了針對後車進行超車行為的判斷外也對前車,也就是阻擋者設計了三 種不同的模式,分別是受限制、延遲反應與即時反應。不同之處在於受限制者的 可使用軌道寬度是受到限制的,這個 AI 不能開到離軌道邊界太近的地方。而延 遲反應者是接收到後車前一秒的狀態來進行阻擋動作。即時反應的 AI 則不受上 面兩者的限制,可以隨時針對超車者目前的動作進行阻擋。不過[10]依然是以超 車行為的學習為目標,阻擋行為是 hard coded。在結果部分,受限制者的阻擋結 果除了[10]所提出的模糊理論超車系統外,對 TORCS 內建的其他 AI 來說,都無 法完成超車。這個結果是可以預期的,因為內建的 AI 在超車行為上都不夠侵略,
不會為了要進行超車而讓自己有碰到或衝出軌道邊界的可能。所以當阻擋者稍微 貼近賽道某側的邊線時,內建的 AI 會取消想超車的行為。而在延遲反應部分,
較聰明的 TORCS 內建 AI 則可以超車成功,其中以 Berniw、Lliaw 及 Tita 以超過 90%的超車成功機率為最高。也因為這個結果,讓本篇論文後面針對阻擋行為的 學習時也主要以 Lliaw 及 Tita 做為學習對象。而我們最主要使用的到阻擋者策略 也是採用[10]中所提到的 Slowly reactive 及 Fully reactive blocker。