유니티의 ML-Agents 2.0 TUTORIAL 영상을 대략적인 정리한 글입니다.
Version : Unity 2021.3.5f1
using Unity.MLAgents;
Agent 를 상속 받는다.
Agent 가 빨간줄로 표시되면 PackageManger 에서 우측 하단부의 Remove 버튼 대신에 업데이트를 눌러주면 해결된다.
![](https://lycos7560.com/wp-content/uploads/image-236.png)
![](https://lycos7560.com/wp-content/uploads/image-237.png)
![](https://lycos7560.com/wp-content/uploads/image-238.png)
Agent를 상속받은 스크립트를 가진 오브젝트는
Behavior Parameters
Agent를 상속받은 Script
Decision Requester
이 세가지를 필수로 가지고 있어야 한다.
CMD 에서 확인
(디폴트된 런아이들을 사용)
mlagents-learn --force
DiscreteActions : 개별 작업
정수를 반환하기 때문에 참 / 거짓 Bool로 구현하기가 쉽고
특정한 행동에 사용하기가 좋다.
![](https://lycos7560.com/wp-content/uploads/image-239.png)
![](https://lycos7560.com/wp-content/uploads/image-240.png)
![](https://lycos7560.com/wp-content/uploads/image-241.png)
![](https://lycos7560.com/wp-content/uploads/image-242.png)
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 : 연속 작업
특정 행동보다는 행동의 세기에 적절하게 사용할 수 있다.
![](https://lycos7560.com/wp-content/uploads/image-243.png)
![](https://lycos7560.com/wp-content/uploads/image-244.png)
![](https://lycos7560.com/wp-content/uploads/image-246.png)
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 : 결정 주기
![](https://lycos7560.com/wp-content/uploads/image-247.png)
우리가 호출한 OnActionReceived 함수가 5번 호출될 때 마다 한번의 액션을 반환하는 설정
그러나 Take Actions Betwwn Decisions 가 체크되어 있으면 동일한 결정을 5번씩 호출
![](https://lycos7560.com/wp-content/uploads/image-248.png)
![](https://lycos7560.com/wp-content/uploads/image-249.png)
Heuristic : 스스로 발견하게 하는
사용자가 직접 입력을 통해서 에이전트를 조정하여 액션 및 환경 메커니즘 등..을 확인 할 수 있습니다.
![](https://lycos7560.com/wp-content/uploads/image-250.png)
관찰
Vector / Camera / Sensor 를 이용하여 학습
위치 알려주거나 센서로 탐지 / 카메라를 이용한 이미지 감지는 학습시간이 오래걸린다
![](https://lycos7560.com/wp-content/uploads/image-251.png)
CollectObservations : 수집 관찰
![](https://lycos7560.com/wp-content/uploads/image-252.png)
관측 개수와 Vector Observation – Space Size 의 크기를 맞추어 준다.
![](https://lycos7560.com/wp-content/uploads/image-253.png)
Vector Observation – Stacked Vectors
이전 그리고 그 이전의 Space Size 를 기록하는 공간입니다.
이 경우 전체의 Space Size 는 5 * 2 = 10
지금 당장의 관측값만을 사용하는 것이 아닌 이전의 관측값까지 이용하기 위함입니다
학습이 가능한 공간 범위내로 가장 작게 설정하는 것을 추천합니다.
Ray perceptions Sensor 3D
![](https://lycos7560.com/wp-content/uploads/image-254.png)
Rays Per Direction 방향당 광선
Ray 의 방향당 광선의 수를 조절합니다.
Ray 의 수가 많을 수록 관측하는 값이 많아집니다.
![](https://lycos7560.com/wp-content/uploads/image-255.png)
Max Ray Degrees 최대 광선 각도
광선의 원뿔 크기로 90도를 사용하면 광선이 왼쪽으로 투사됩니다.
90보다 크면 뒤로 이동합니다.
값이 60도이면 광선이 중심선의 왼쪽과 오른쪽으로 30도 이상 확산됩니다.
![](https://lycos7560.com/wp-content/uploads/image-256.png)
Sphere Cast Radius 구면 주조 반지름
캐스팅할 구의 반경입니다. RayCast 의 경우 0으로 설정합니다.
![](https://lycos7560.com/wp-content/uploads/image-257.png)
Ray Length 광선 길이
투사할 광선의 길이를 설정합니다.
![](https://lycos7560.com/wp-content/uploads/image-258.png)
Ray Layer Mask 레이 레이어 마스크
광선이 닿을 수 있는 레이어를 제어합니다. ( 물체의 레이어가 체크되지 않으면 통과합니다. )
![](https://lycos7560.com/wp-content/uploads/image-259.png)
Detectable tags 감지 가능한 태그
감지 가능한 태그 목록을 추가해 줍니다
![](https://lycos7560.com/wp-content/uploads/image-260.png)
Stacked Raycasts 누적된 레이캐스트
신경망에 피드하기 전에 스택되는 레이캐스트 결과 수 입니다.
함께 쌓을 이전 관찰의 수를 지정합니다.
기본값 1은 현재 관측값만 보는 것을 의미합니다.
![](https://lycos7560.com/wp-content/uploads/image-261.png)
Start Vertical Offset 수직 오프셋 시작
광선이 Y축을 따라 일부 오프셋에서 시작됨을 의미합니다(즉, 에이전트 중심 위 또는 아래).
End Vertical Offset 수직 오프셋 끝
광선이 Y축을 따라(즉, 수평선 위 또는 아래에서) 약간의 오프셋에서 종료된다는 것을 의미합니다.