大家好

最近稍微理解 unity 3D ml-agents 的運作了
想說做一個整理
希望對有需要的人有幫助

先從輸出數值 Discrete Actions 開始
Discrete Actions 算是分類器
一個分類他只會吐出一個數字做輸入
可以用於動作決定
例如模擬玩家操作這樣
按下去的動作就是有或者無

 

public override void OnActionReceived(ActionBuffers actionBuffers)
{
    // 取得的是int整數-動作類型
    // 數量對應 branch size
    // 假設 branch size 有兩個
    // 則會有2個分類
    // 然後2個分類中會有對應的分類int
    var action1 = actionBuffers.DiscreteActions[0]; // 2 分類
    var action2 = actionBuffers.DiscreteActions[1]; // 5 分類
}


再來是輸出數值 Continuous Actions
Continuous Actions 類似於輸出浮點數字
常常用於微調,跟力度有關的動作
例如 速度 或是 位置

 

 

public override void OnActionReceived(ActionBuffers actionBuffers)
{
    // Continuous Actions 對應的是浮點輸出
    // 輸出float參數
    // 數量由 Continuous Actions 設定-設定3就會有3個
    float val_0 = actionBuffers.ContinuousActions[0];
    float val_1 = actionBuffers.ContinuousActions[1];
    float val_3 = actionBuffers.ContinuousActions[2];
}

 

 接著是輸入數值 space size

 

public override void CollectObservations(VectorSensor sensor)
{
    // 輸入特徵參數
    數量由 space size 決定
    sensor.AddObservation(gameObject.transform.position.z);
    sensor.AddObservation(gameObject.transform.position.x);
}

 

經過這幾天研究unity 3D ml-agents發現
他預設是無法調整模型
跟在python做深度學習不太一樣
也就是在 unity 3D ml-agents 我們只管輸入輸出而已
而且預設就是用 reinforcement learning

就是針對反饋來學習的
然後可以設定一定步數之後再進行反饋

給大家參考囉