Unity ML-Agents 2.0 행동 및 관측 설정

유니티의 ML-Agents 2.0 TUTORIAL 영상을 대략적인 정리한 글입니다.

Version : Unity 2021.3.5f1

using Unity.MLAgents;

Agent 를 상속 받는다.

Agent 가 빨간줄로 표시되면 PackageManger 에서 우측 하단부의 Remove 버튼 대신에 업데이트를 눌러주면 해결된다.

Agent를 상속받은 스크립트를 가진 오브젝트는 

Behavior Parameters

Agent를 상속받은 Script

Decision Requester

이 세가지를 필수로 가지고 있어야 한다.

CMD 에서 확인 

(디폴트된 런아이들을 사용)

mlagents-learn --force

DiscreteActions  :  개별 작업

정수를 반환하기 때문에 참 / 거짓 Bool로 구현하기가 쉽고 

특정한 행동에 사용하기가 좋다.

public override void OnActionReceived(ActionBuffers actions)
    {
        int Discrete = actions.DiscreteActions[0];
        // Behavior Parameters 컴포넌트에서 Actions - Discreate Branches - Branche 0 size
        // Branche 0 size   2  =  0, 1

        int Discrete2 = actions.DiscreteActions[1];
        // Behavior Parameters 컴포넌트에서 Actions - Discreate Branches - Branche 1 size
        // Branche 1 size   3  =  0, 1, 2 

        int Discrete3 = actions.DiscreteActions[2];
        // Behavior Parameters 컴포넌트에서 Actions - Discreate Branches - Branche 2 size
        // Branche 0 size   5  =  0, 1, 2, 3, 4 

        Debug.LogFormat("Discrete : {0} / Discrete2 : {1} / Discrete3 : {2}", Discrete, Discrete2, Discrete3);

    }

ContinuousActions   :   연속 작업

특정 행동보다는 행동의 세기에 적절하게 사용할 수 있다.

public override void OnActionReceived(ActionBuffers actions)
    {
        // Unity Mathf.Clamp(A, b, c) = float A의 값이 float b와 float c 사이의 범위 이외의 값을 넘지 않도록 합니다.

  
        float Continuous1 =  Mathf.Clamp(actions.ContinuousActions[0], -1f, 1f);
        // Behavior Parameters 컴포넌트에서 Actions - Continuous Actions
        // 값 반환 -1f ~ 1f

        float Continuous2 = 2f * Mathf.Clamp(actions.ContinuousActions[1], -1f, 1f);
        // Behavior Parameters 컴포넌트에서 Actions - Continuous Actions
        // 값 반환 -2f ~ 2f

        float Continuous3 = 3f * Mathf.Clamp(actions.ContinuousActions[2], -1f, 1f);
        // Behavior Parameters 컴포넌트에서 Actions - Continuous Actions
        // 값 반환 -3f ~ 3f

        Debug.LogFormat("Continuous1 : {0} / Continuous2 : {1} / Continuous3 : {2}", Continuous1, Continuous2, Continuous3);

        // 값 반환 -1f ~ 1f

    }

Decision Requester  : 결정 주기

우리가 호출한 OnActionReceived 함수가 5번 호출될 때 마다 한번의 액션을 반환하는 설정

그러나 Take Actions Betwwn Decisions 가 체크되어 있으면 동일한 결정을 5번씩 호출

Heuristic  : 스스로 발견하게 하는

사용자가 직접 입력을 통해서 에이전트를 조정하여 액션 및 환경 메커니즘 등..을 확인 할 수 있습니다.


관찰

Vector / Camera / Sensor 를 이용하여 학습

위치 알려주거나 센서로 탐지 / 카메라를 이용한 이미지 감지는 학습시간이 오래걸린다

CollectObservations  :  수집 관찰

관측 개수와  Vector Observation – Space Size 의 크기를 맞추어 준다.

 Vector Observation – Stacked Vectors 

이전 그리고 그 이전의 Space Size 를 기록하는 공간입니다.

이 경우 전체의 Space Size 는 5 * 2  =  10 

지금 당장의 관측값만을 사용하는 것이 아닌 이전의 관측값까지 이용하기 위함입니다

학습이 가능한 공간 범위내로 가장 작게 설정하는 것을 추천합니다.

Ray perceptions Sensor 3D

Rays Per Direction   방향당 광선

Ray 의 방향당 광선의 수를 조절합니다.

Ray 의 수가 많을 수록 관측하는 값이 많아집니다.

Max Ray Degrees  최대 광선 각도

광선의 원뿔 크기로 90도를 사용하면 광선이 왼쪽으로 투사됩니다.

90보다 크면 뒤로 이동합니다.

값이 60도이면 광선이 중심선의 왼쪽과 오른쪽으로 30도 이상 확산됩니다.

Sphere Cast Radius  구면 주조 반지름

캐스팅할 구의 반경입니다. RayCast 의 경우 0으로 설정합니다.

Ray Length  광선 길이

투사할 광선의 길이를 설정합니다.

Ray Layer Mask    레이 레이어 마스크

광선이 닿을 수 있는 레이어를 제어합니다. ( 물체의 레이어가 체크되지 않으면 통과합니다. )

Detectable tags    감지 가능한 태그

감지 가능한 태그 목록을 추가해 줍니다

Stacked Raycasts  누적된 레이캐스트

신경망에 피드하기 전에 스택되는 레이캐스트 결과 수 입니다.

함께 쌓을 이전 관찰의 수를 지정합니다.

기본값 1은 현재 관측값만 보는 것을 의미합니다.

Start Vertical Offset    수직 오프셋 시작 

광선이 Y축을 따라 일부 오프셋에서 시작됨을 의미합니다(즉, 에이전트 중심 위 또는 아래).

End Vertical Offset    수직 오프셋 끝

광선이 Y축을 따라(즉, 수평선 위 또는 아래에서) 약간의 오프셋에서 종료된다는 것을 의미합니다.

댓글 달기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다

Scroll to Top