第三章 實驗方法
3.4 超車行為學習
3.4.1 基礎超車行為學習
我們的第一個實驗使用只開在自己預設路徑上的駕駛 AI 為被超車者,及導 入 Q-learning 演算法的駕駛 AI 為超車者,將這兩個駕駛 AI 放到測試軌道上(圖 3-1)進行學習。在每次跑 35 圈中,約可以進行 15 次的學習。在跑過共 400 次 之後就約有 6000 次的學習機會。比對[9]中,當學習次數約達到 5000 次之後,
Q-Learning 演算法中平均回饋的值會趨於穩定。圖 3-4 為學習時所得到的平均回 饋圖,縱軸為平均回饋值,橫軸為學習次數。學習過程中,每 10 個 game tic(0.2 秒)選擇一次新的動作。
圖 3-4:超車行為學習平均回饋
在這裡的實驗中,我們將超車的學習限制在賽道直線上,彎道中會將超車者
時,若尚未超車成功,則可能已經在測試軌道中進入入彎或出彎階段。所以我將 40 秒設為一個界限,若超過 40 秒沒有超車成功,則此次超車行為視為失敗並回 傳 Reward 為-1。後續實驗中也繼續使用此設定。
3.4.2 前車具阻擋行為時的超車行為學習與轉移實驗
一開始我們所得到的超車行為學習結果,其學習的對象為一個只開在軌道中 線上且不會考慮後方來車狀態的駕駛 AI。而現在我參考[10]將此簡單的 AI 再進 行一些修改,將其改成以下兩種版本:Slowly Reactive 及 Fully Reactive,前者是 對後方車輛的位置在一秒後進行反應並往後方車輛位置偏移來阻擋,後者則為即 時反應,不需等待一秒的反應時間便立即往後方車輛位置進行偏移。加上最原始 的對手,也就是只開在軌道中線上的 AI,便有了三個不同的學習對象。
在這個階段進行轉移實驗的目的是為了要觀察超車者在面對具有不同阻擋 行為的阻擋者時,其超車能力的變化。先對不同阻擋行為的阻擋者分別進行學習,
得到學習結果後再跟其他阻擋者進行超車行為的測試,如:與 Fully reactive blocker 學習後,利用這個學習結果與 Slowly reactive blocker 及不具阻擋行為的 AI 進行測試,並觀察其超車成功率與時間分布的變化。
3.4.3 不同曲率半徑賽道上的超車行為學習與轉移實驗
在這個小節中,我們使用的是圖 3-2 的賽道。主要目的是改變彎道部分的曲 率半徑,希望可以看看在不同曲率半徑的彎道中超車行為的改變。另外也準備了 不同賽道寬度的版本,每個賽道皆有寬度為 10 公尺及 15 公尺兩種版本可以使用。
並且在這個部分的訓練過程中,取消了在彎道上兩輛車速度必須相同的設定。因 為是在不同彎道曲率半徑上的軌道中進行實驗,所以想看看在不同彎道曲率半徑 時,超車行為會有怎樣的變化。若不取消此設定,則因為此處軌道直線長度較短,
可能造成賽車出彎後無法重新將速度加速到最高導致超車次數大幅下降。而取消
兩車在彎道上速度必須相同的設定還有另外一個考量:希望可以達成每次在軌道 不同的位置上開始進行超車行為。當超車者一圈一圈超過前車時,下次再碰到要 超車的情形時,有極大的可能是從與上次超車行為不同的起點開始。
接下來在上面三個軌道上與兩種不同阻擋策略( Slowly reactive、Fully reactive)的駕駛 AI 進行學習,學習完的結果都會存檔以利後續實驗的進行。在 接下來的實驗中,為了得知學習結果是否可在具不同彎道曲率半徑的軌道上進行 學習行為的轉移,所以會利用不同學習對象與軌道的配對產生出多組結果。而在 轉移部份,我們目前只針對相同軌道寬度的學習結果進行轉移實驗。
轉移實驗的下一步則是嘗試合併學習結果,例如以彎道曲率半徑為 40m 及 90m 軌道上所訓練出來的結果,實驗是否可以使用在彎道曲率半徑為 65m 的軌 道上。這部分又另外做了兩個賽道,分別是曲率半徑為 65m 及 120m 的賽道以利 實驗使用。曲率半徑 120m 的賽道是提供給在曲率半徑 90m 及 150m 兩個賽道中 所學習出來的結果使用。我們統計在 1500 秒內超車者的各項參數來評比學習成 果。
初步觀察的結果顯示,若軌道寬度為 15 公尺,則有超車學習者在一定時間 內超車次數只會略大於無學習行為時的駕駛 AI。但當軌道寬度為 10 公尺時,則 無學習超車行為之 AI 其超車成功次數皆在 0~2 次之間,而學習後平均皆可達到 10 次,且即使超車次數較多,超車者所受到的損傷值也不見得會比較高。從以 上可以簡單的看出當軌道寬度較大時,超車行為學習成效較差。所以後續的阻擋 實驗及 TORCS 內建賽道上的實驗中我們都以賽道寬度為 10 公尺的軌道為主。
3.4.4 TORCS 內建賽道的超車行為實驗
超車行為實驗的最後,我們在 TORCS 內建的賽道(圖 3-3)中進行實驗,
此處我們只利用前面實驗中學習的結果來進行測試,不會再次學習。在這個階段 因為這兩個賽道長度都較原本用來學習的賽道長,所以這個部份我們將原本 1500
秒的時間設定改為 2400 秒。我們使用在前面的幾次不同實驗中所獲得的學習檔 案來進行這裡的實驗,包括在較窄(10 公尺)的軌道上依不同彎道曲率半徑(40m、
65m、90m、120m、150m)所得到學習結果,其中原本曲率半徑為 65m 及 120m 的兩個檔案是由另外 3 個檔案做內插得出。
這個實驗當中我們嘗試以兩種不同的方法來使用之前的學習結果。第一種方 式是將五種曲率半徑的結果各進行一次為時 2400 秒的實驗。另外一個實驗中則 同時使用為原始訓練結果的三個檔案(曲率半徑 40m、90m、150m),在要進行 超車行為時,選擇使用與目前所在的軌道位置曲率半徑最相近的學習檔案來決定 要採取的動作。