본문 바로가기

유니티 ML Agents/ML Agents 개념

10. ML Agents 기본 예제 - Ball3DAcademy 분석

Ball3DAcademy 아카데미


아카데미는 유니티 씬에 있는 모든 에이전트와 브레인을 조율하는 역할을 한다. 3DBall에 사용된 Ball3DAcademy를 분석하면서 아카데미의 기능에 대해 알아보자.


계층 뷰에서 Ball3Dacademy객체를 선택하면 인스펙터 뷰에서 상세 내용을 볼 수 있는데 여기에서 주의 깊게 봐야할 것이 어떤 스크립트를 사용하는 지와 Max Steps 속성이다.


아카데미의 동작을 정의하는 스크립트에는 Ball3DAcademy를 정의해서 사용했다. 스크립트를 더블 클릭하면 데이터 찾에서 코드를 확인 할 수 있다.


Max Steps 속성은 아카데미에서 몇 번 학습할 지 정의한다. 1000으로 설정하면 학습을 모두 1000번 진행하고 종료한다. 0으로 설정하면 강제로 학습을 종료할 때까지 학습을 계속 진행한다.


Ball3DAcademy 아카데미 클래스 구성


Ball3DAcademy 클래스는 Academy 클래스를 상속받고 Academy 클래스는 MonoBehavior 클래스를 상속받는다. 결국 아카데미를 제어하기 위해 만든 Ball3DAcademy 클래스는 MonoBehavior 클래스의 제어를 받게 되는 것이다.


초기화는 스크립트 인스턴스가 로딩될 때 호출되는 Awake 함수로 부터 시작된다. Academy 클래스 안에 정의된 Awake 함수는 InitializeEnvironment 함수를 호출한다. InitializeEnvironment 함수는 학습환경을 초기화 및 환경설정 그리고 아카데미를 초기화하는 역할을 한다. InitializeEnvironment 함수는 초기화 작업을 진행하기 전에 먼저 InitializeAcademy 함수를 호출해서 아카데미 초기화 작업을 진행한다다음으로 mlagents-learn 프로세스와 통신하기 위한 기초 정보를 설정하는 등 아카데미 초기화 작업을 진행한다


Ball3DAcademy 클래스에서 필요한 초기화 작업은  InitializeAcademy() 함수를 정의하고 함수 내부에 정의하면 된다.


Academy 클래스 내부에 정의된 FixedUpdate 함수는 정해진 주기로 반복적으로 호출되는 함수이다. FixedUpdate가 호출될 때 마다 Academy 클래스는 학습 환경과 에이전트에 대한 업데이트 작업을 진행한다. AcademyStep 함수는 FixedUpdate함수가 호출될 때 마다 실행되고, AcademyReset함수는 학습을 처음 시작할 때와 학습을 마무리할 때 호출되어 초기화 작업과 마무리 작업에 사용된다.


Ball3DAcademy 스크립트 내부에 특별한 작업이 필요할 경우 InitializeAcademy, AcademyReset, AcademyStep 함수 안에 필요한 코드를 넣으면 된다. Ball3D 프로젝트에서는 특별한 작업을 하지 않았다.