유니티 머신러닝 개발 ML Agents 11편, 목표 찾기 예제 개선. 5 관측정보 바꾸기, Ray Perception Sensor 3D를 이용한 개선
저번 예제에는 훈련장을 줄이고, 벽을 설치해서 낙하하는 로직을 제거하고,
이동 방식은 인풋을 반영해서 움직이는 방식으로 변경하였습니다.
이번에는 뭘 해볼 것이냐.
이번에는 우리가 재공 하는 관측치를 바꿔봅시다.
현재 우리가 관측치를 재공하는 방법은
gRollerAgent.cs의
public override void CollectObservations(VectorSensor sensor)
해당 함수를 통해 샌서에 정보를 넣어줍니다.
함수를 볼까요
/// <summary>
/// 강화학습 프로그램에게 관측정보를 전달
/// </summary>
/// <param name="sensor"></param>
public override void CollectObservations(VectorSensor sensor)
{
//타겟과 에이전트의 포지션을 전달한다.
// Target and Agent positions
sensor.AddObservation(Target.localPosition);
sensor.AddObservation(this.transform.localPosition);
//현재 에이전트의 이동량을 전달한다.
// Agent velocity
sensor.AddObservation(rBody.velocity.x);
sensor.AddObservation(rBody.velocity.z);
}
현재 타겟의 위치
에이전트의 포지션
에이전트의 속도 정보를 제공 중입니다.
코드로 우리가 직접 정보를 주고 있는 형태죠.
Behacior parameters 와 매칭되는 정보입니다.
이번에는 우리가 직접 코딩으로 정보를 주는 것이 아닌,
mlagent가 제공하는 센서를 통해 정보를 전달하는 방식으로 교체해 보겠습니다.
위의 관측정보 제공하는 내용들을 지웁니다.
일단 먼저 위의 매소드를 삭제합니다.
Behacior parameters 와 Space size도 수정합니다.
이러면 우리는 더 이상 관측치를 학습 프로그램에 전달하지 않습니다.
이번에는 mlAgent가 제공하는
Ray Perception Sensor 3D를 사용하여 관측치를 줄 겁입니다.
아래와 같이 RollerAgnet에 컴포넌트를 추가합니다.
초기 추가된 모습
Ray Perception Sensor 3D 값들을 아래와 같은 변경시켜 줍니다.
Tarent, Wall들에 태그 처리를 해주세요.
태그가 없으시면 만드셔야 합니다.
교육을 진행합니다.
저는 교육 스피드를 올리기 위해 교육장을 여러 개 만들어 진행했습니다.
아래 교육 영상을 보시면 거리를 상당히 늘려놓았는데, 이유는 샌서의 추적이 꽤 길어서 타 교육장을 침범하길래 서로 간섭이 없는 영역까지 넓혔습니다. 참고해주세요.
교육결과를 적용하고 돌려봅니다.
이전 수치적 관측자료로 아무리 돌려도 바보 같았던 에이전트의 상태가 무척 좋아 짐이 확인됩니다.
교육자료만 봐도 보상치가 1까지 올라와서 유지됨을 볼 수 있습니다.
이번에는
mlAgent가 재공 하는 Ray Perception Sensor 3D 적용해서 목표를 찾는 예제에 적용해 보았습니다.
봐주셔서 감사합니다.
댓글