본문 바로가기
유니티/mlAgents

유니티 머신러닝 개발 ML Agents 14편, 목표 찾기 예제 개선. 8 다수의 에이전트 사용하기

by NGVI 2021. 4. 16.

유니티 머신러닝 개발 ML Agents 14편, 목표 찾기 예제 개선. 8 다수의 에이전트 사용하기

이전에는 타깃을 복수로 설치할 수 있게 하고 Goal을 정해서 해당 Goal 수 까지 취득이 가능하다면, 에피소드가 종료되게끔 구성했습니다.

 

이번에는 Agentf를 복수로 구성해봅시다.

 

그것을 위하여 

gAgentManager.cs 

라는 소스를 추가하도록 합니다.

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class gAgentManager : MonoBehaviour
{
    public List<gRollerAgent> agentList = new List<gRollerAgent>();

    public void EndEpisode()
    {
        foreach (var agent in agentList)
        {
            agent.EndEpisode();
        }
    }
}

간단하게 다수의 에이전트를 등록하고, 에피소드 종료 시 종료를 알려주는 역할을 할 것입니다.

 

gRollerAgent.cs의 아래함수를 수정합니다.

public override void OnActionReceived(ActionBuffers actionBuffers)
    {
        if (Pointlast < Point)
        {
            SetReward(1.0f);
            Pointlast = Point;
        }

        if (trainingAreaManager.targetManager.goalCount <= Point)
        {
            trainingAreaManager.needEpisodeEnd();
        }

        MoveAgent(actionBuffers.DiscreteActions);
    }

EndEpisode(); 코드를 삭제합니다.

gAgentManager 에서 호출할 것입니다.

 

gTrainingAreaManager.cs 또한 수정합니다.

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class gTrainingAreaManager : MonoBehaviour
{
    public gTargetManager targetManager = null;
    public gAgentManager agentManager = null;

    // Start is called before the first frame update
    void Start()
    {
        EpisodeStart();
    }

    public void EpisodeStart()
    {
        targetManager.OnEpisodeBegin();
    }

    public void needEpisodeEnd() 
    {
        agentManager.EndEpisode();

        EpisodeStart(); //종료이후 에피소드 재시작
    }
}

gAgentManager 를 등록하고 

에피소드 종료시 호출해줄 것입니다.

 

유니티 에디터로 돌아갑니다.

TrainingArea 오브젝트에 gAgentManager를 추가합니다.

에이전트를 적당히 복재하여 하나 더 추가로 만듭니다.

 

gAgentManager의 AgentList에 에이전트를 추가해줍니다.

 

gTrainingAreaManager의 AgentManager도 채워줍니다.

 

이전 예제의 교육 데이터가 있다면 해당 데이터로 한번 돌려봅니다.

 

적당히 구동되는 모습

이전 데이터는 에이전트가 혼자인 상황에서 교육시킨 것이지만, 타깃을 찾는 목표는 존재하고 있으므로 그냥 그냥 동작하는 모습을 보여줍니다.

 

좀 더 정확한 환격에서 올바른 행동을 찾으려면 재교육이 필요하겠죠.

 

전에 몇 가지를 손보고 가겠습니다.

 

Agent에 대해 손을 보겠습니다.

센서정보에 대한 수정

센서 정보에 대한 수정을 하였습니다.

센서가 보는 각도를 증가시키고, 수치들을 변경했습니다.

Agent에 대한 판단도 할 수 있게 하였습니다.

 

두 번째 에이전트에도 똑같이 작업 하서나 지우고 복사해주세요

 

지우고 복사 시

TrainingArea의 agentmanager에 넣어주는 것도 꼭 챙겨주세요

참고자료

그리고 타깃은 10개가 등장하게 하고 한 에이전트가 5개를 섭취하면 에피소드가 종료되게 구성하였습니다.

 

그리고 이제 다시 교육시키기.

 

교육중
교육 아나콘다.

교육을 마치면 데이터를 가져와서 적용시켜 봅니다.

 

먼가 똑독해 보이지는 않는 아이들

교육이 더 필요한 걸까.

 

이번에는 에이전트를 늘리는 작업을 해보았습니다.

댓글