創作內容

1 GP

【紀錄】從零開始的強化學習紀錄vol.1 範例練習

作者:武部虛│2019-08-09 21:11:04│巴幣:2│人氣:252
風花雪月真的是精神時光屋,好想一直玩下去啊……
但該弄的事情還是得弄
這次主要都是跟著官方放在github的說明文件實作,如果英文OK的話那邊會寫的比較詳細一些(還有簡體中文的樣子,不過翻譯版版本較舊,不確定會不會什麼差別),網址如下

【本次的紀錄】
Ml-agents的架構
Ml-agents的簡單範例

【Ml-agents的架構】
要利用Ml-agents建立一個可供訓練的架構,會需要三個東西:
1.Agent
Agent的功能是觀測環境、設定可操作的動作以及提供reward function,而在觀測環境中Ml-agents可以用記錄特徵向量或是用視覺化的方式來觀測。
2.Academy
Academy用來管理環境,負責環境的初始化及重置。
3.Brain
Brain是用來訓練的物件,藉由操作設計好的agent來和環境互動,以得到最高的reward為目標。在Ml-agents裡有提供三種brain:
Learning Brain:用來訓練的,當你的環境設定好,agent也沒問題就可以用這個brain來訓練。
Heuristic Brain:用來自行設計brain的動作選擇process(實際使用方式待確認)。
Player Brain:用來測試agent的動作。

【Ml-agents的簡單範例】
這次的範例是跟著官方提供的範例走一次,簡單了解一下ML-agents的主要運作方式。
要訓練的環境是由一顆可自由移動的球在平台上讓它順利往目標的正方體移動。
而要實做的步驟如下:
1.將物件(球、平台、正方體)放好。
分別將球、平台、正方體命名為Rolleragent、plane、Target,球要再加上rigidbody。
然後球的位置設為0,0.5,0,正方體的位置設為3,0.5,3,平台則是0,0,0。

2.建立預設的academy。
新建一個空的GameObject,命名為Academy,再新增一個script,取名為Roller academy,將程式碼改寫如下:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using MLAgents;
public class RollerAcademy : Academy{

}
這裡用ML-agents預設的Academy即可,所以不用去改寫其他東西。

3.建立Agent和Learning brain。
在Roller agent加入新script,命名為roller agent,並改寫程式碼,然後把Decision interval改成10。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using MLAgents;

public class RollerAgent : Agent {
    Rigidbody rBody;
    // Use this for initialization
    void Start () {
        rBody = GetComponent<Rigidbody>();
    }
    public Transform Target;
    public override void AgentReset()
    {
        if (this.transform.position.y < 0)
        {
            // If the Agent fell, zero its momentum
            this.rBody.angularVelocity = Vector3.zero;
            this.rBody.velocity = Vector3.zero;
            this.transform.position = new Vector3(0, 0.5f, 0);
        }

        // Move the target to a new spot
        Target.position = new Vector3(Random.value * 8 - 4,
                                      0.5f,
                                      Random.value * 8 - 4);
    }
    public override void CollectObservations()
    {
        // Target and Agent positions
        AddVectorObs(Target.position);
        AddVectorObs(this.transform.position);

        // Agent velocity
        AddVectorObs(rBody.velocity.x);
        AddVectorObs(rBody.velocity.z);
    }
    public float speed = 10;
    public override void AgentAction(float[] vectorAction, string textAction)
    {
        // Actions, size = 2
        Vector3 controlSignal = Vector3.zero;
        controlSignal.x = vectorAction[0];
        controlSignal.z = vectorAction[1];
        rBody.AddForce(controlSignal * speed);

        // Rewards
        float distanceToTarget = Vector3.Distance(this.transform.position,
                                                  Target.position);

        // Reached target
        if (distanceToTarget < 1.42f)
        {
            SetReward(1.0f);
            Done();
        }

        // Fell off platform
        if (this.transform.position.y < 0)
        {
            Done();
        }

    }
}

接著,從左上的assets選單選擇create->ML-agents->Learning Brain
將它命名為RollerBallBrain,並將右方的數值改成如圖。

然後將它拖到academy中boardcast hub的brains下面,把control打勾。
全部弄好便可以開始訓練了。

4.訓練。
在開始訓練前,先去之前下載好的ML-agent裡面的config資料夾裡面,複製trainer_config.yaml到unity的專案資料夾,然後改寫裡面default中的數值:
batch_size: 10
buffer_size: 100
之後開啟終端機,切換到放trainer_config.yaml的資料夾,在終端機輸入
mlagents-learn trainer_config.yaml --run-id=RollerBall-test –train
執行後按下Unity編輯器的play按鈕,便會開始訓練了。
5.讀取訓練好的檔案。
訓練完之後,model會存在models\RollerBall-test-0資料夾中,把裡面的nn檔放到Learning brain的inspector的model選項,並把academy的control取消打勾,再按下play就可以看到結果了。
可以看到球很完美的向目標移動。

那麼,今天的紀錄就到這裡
如果有什麼錯誤的地方歡迎在下面留言或是來信告知,感謝!
【下次預定更新】
將環境輸出成執行檔並由其他框架來做訓練

引用網址:https://home.gamer.com.tw/TrackBack.php?sn=4489618
All rights reserved. 版權所有,保留一切權利

相關創作

留言共 0 篇留言

我要留言提醒:您尚未登入,請先登入再留言

1喜歡★kkaa0000 可決定是否刪除您的留言,請勿發表違反站規文字。

前一篇:【記錄】從零開始的強化學... 後一篇:【紀錄】從零開始的強化學...

追蹤私訊切換新版閱覽

作品資料夾

zzz54872qw所有人
【敬啟:無法重來的你。】第一集終於完成!謝謝一直以來持續閱讀的讀者們!看更多我要大聲說昨天15:11


face基於日前微軟官方表示 Internet Explorer 不再支援新的網路標準,可能無法使用新的應用程式來呈現網站內容,在瀏覽器支援度及網站安全性的雙重考量下,為了讓巴友們有更好的使用體驗,巴哈姆特即將於 2019年9月2日 停止支援 Internet Explorer 瀏覽器的頁面呈現和功能。
屆時建議您使用下述瀏覽器來瀏覽巴哈姆特:
。Google Chrome(推薦)
。Mozilla Firefox
。Microsoft Edge(Windows10以上的作業系統版本才可使用)

face我們了解您不想看到廣告的心情⋯ 若您願意支持巴哈姆特永續經營,請將 gamer.com.tw 加入廣告阻擋工具的白名單中,謝謝 !【教學】