

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# AWS DeepRacer 動作空間和獎勵函數
<a name="deepracer-how-it-works-action-space"></a>

**動作空間**  
在強化學習中，代理程式與環境互動時可用的所有有效動作或選項集稱為動作空間。在 AWS DeepRacer 主控台中，您可以在離散或連續動作空間中訓練代理程式。

**離散動作空間**  
離散動作空間代表有限集中每個狀態的所有代理程式可能動作。對於 AWS DeepRacer，這表示對於每個增量不同的環境情況，代理程式的神經網路會根據來自其攝影機和 （選用） LiDAR 感應器的輸入，為車輛選取速度和方向。選擇僅限於預先定義的轉向角度和調節值組合分組。

在接近轉彎的離散動作空間中，AWS DeepRacer 車輛可以選擇加速或煞車，然後向左、向右或直行。這些動作定義為結合轉向角度和速度，為客服人員建立選項選單 0-9。例如，0 代表 -30 度和 0.4 m/s，1 代表 -30 度和 0.8 m/s，2 代表 -15 度和 0.4 m/s，3 代表 -15 度和 0.8 m/s，透過 9 以此類推。負度數將車輛向右轉，正度數將車輛向左轉，0 讓車輪保持筆直。

AWS DeepRacer 預設離散動作空間包含下列動作：


**AWS DeepRacer 預設離散動作空間**  

| 動作號碼 | 方向盤 | 速度 | 
| --- | --- | --- | 
| 0 | -30 度 | 每秒 0.4 公尺 | 
| 1 | -30 度 | 每秒 0.8 公尺 | 
| 2 | -15 度 | 每秒 0.4 公尺 | 
| 3 | -15 度 | 每秒 0.8 公尺 | 
| 4 | 0 度 | 每秒 0.4 公尺 | 
| 5 | 0 度 | 每秒 0.8 公尺 | 
| 6 | 15 度 | 每秒 0.4 公尺 | 
| 7 | 15 度 | 每秒 0.8 公尺 | 
| 8 | 30 度 | 每秒 0.4 公尺 | 
| 9 | 30 度 | 每秒 0.8 公尺 | 

**持續動作空間**  
連續動作空間可讓代理程式從每個狀態的一系列值中選取動作。就像離散動作空間一樣，這表示每個增量不同的環境情況，代理程式的神經網路會根據來自其攝影機和 （選用） LiDAR 感應器的輸入，為車輛選取速度和方向。不過，在連續動作空間中，您可以定義客服人員挑選其動作的選項範圍。

在此範例中，接近轉彎的連續動作空間中的 AWS DeepRacer 車輛可以選擇從 0.75 公尺/秒到 4 公尺/秒的速度，然後向左、向右轉，或選擇從 -20 到 20 度的轉向角度直接轉彎。

**離散與連續**  
使用連續動作空間的好處是，您可以編寫獎勵函數來訓練模型，以在軌道上特定點上激勵速度/轉向動作，以最佳化效能。從一系列動作中選擇也會產生速度和轉向值的平滑變更，在訓練良好的模型中，可能會產生更好的實際狀況。

在離散動作空間設定中，將客服人員的選擇限制為有限數量的預先定義動作，會讓您了解這些動作的影響，並根據環境 （賽道、賽車格式） 和獎勵函數來定義這些動作。不過，在持續動作空間設定中，客服人員會學習從您透過訓練提供的最小/最大界限挑選最佳速度和轉向值。

雖然為模型提供一系列值以供挑選似乎是更好的選項，但客服人員必須訓練更長的時間，才能學習選擇最佳動作。成功也取決於獎勵函數定義。

**獎勵函數**  
當代理程式探索環境時，代理程式會學習值函數。值函數可協助您的代理程式在觀察環境之後判斷採取的動作有多好。值函數會使用您在 AWS DeepRacer 主控台中寫入的獎勵函數來為動作評分。例如，在 AWS DeepRacer 主控台的遵循中心線範例獎勵函數中，一個好的動作會將代理程式保持在軌道中心附近，並且分數高於錯誤的動作，這會將代理程式移離軌道中心。

隨著時間的推移， 值函數可協助客服人員學習增加總獎勵的政策。最佳或最佳政策會平衡客服人員探索環境所花費的時間量，以及其利用或充分利用政策透過經驗學到的內容。

在遵循中心線 [AWS DeepRacer 範例獎勵函數範例中](deepracer-reward-function-examples.md#deepracer-reward-function-example-0)，代理程式會先採取隨機動作來探索環境，這表示它在保持在賽道中心方面沒有執行非常好的工作。隨著時間的推移，客服人員開始了解哪些動作會將其保持在靠近中心線的位置，但如果繼續採取隨機動作，則需要很長的時間來學習在整個圈的賽道中心附近。因此，隨著政策開始學習良好的動作，代理程式會開始使用這些動作，而不是採取隨機動作。不過，如果它總是使用或利用良好的動作，代理程式就不會進行任何新的探索，因為它不再探索環境。此權衡通常稱為 RL 中的探勘與入侵問題。

使用預設動作空間和範例獎勵函數進行實驗。探索所有動作後，請設計自己的[自訂動作空間](deepracer-console-train-evaluate-models.md#deepracer-define-action-space-for-training)和[自訂獎勵函數](deepracer-console-train-evaluate-models.md#deepracer-train-models-define-reward-function)，以運用您的知識。