만들고자 하는 것
ML-Agent를 활용하여 Mummy가 Ray를 쏴서 good_item과 bad_item을 감지하고 다가가서 먹을 때
good_item은 보상을 주고 bad_item은 벌을 준다.
학습을 시켜서 스스로 good_item만 먹게 한다.
기본 세팅
floor, wall, mummy, good_item, bad_item 만들기
각각에 콜라이더, 리지드바디 적용시킬거 적용시키기
배운 것
1. 화면에 랜덤으로 good_item, bad_item 생성하고 초기화까지 구현
2. OnEpisodeBegin, OnActionReceived, Heuristic, CollectObservations 함수 개념 이해
학습 시작시 초기화 - OnEpisodeBegin
일반적으로 올바른 결과에 도달하던지 또는 잘못된 결과에 도달하게 되면 학습을 종료하고 새로운 학습(에피소드)를 시작한다. OnEpisodeBegin 메소드는 학습이 시작할 때 마다 한번씩 호출되는 메소드로 에이전트의 초기화 및 환경을 재설정한다.
이동처리 로직 - OnActionReceived
정책(Polocy)로 부터 결정된 행동에 대해 에이전트가 수행할 동작은 OnActionReceived 메소드에서 처리한다. 정책으로 부터 전달되는 값은 연속적인 값(Continues)와 이산 값(불연속적인 값: Discrete)로 구분한다. Mummy 에이전트는 상,하,좌,우 화살표 키입력값으로 전진,후진,좌,우로 이동 처리한다.
테스트를 위한 키 입력 로직 - Heuristic
학습을 훈련시키기 이전에 미리 테스트를 해보기 위해 사용자로 부터 키보드 입력값을 받는 부분이 필요하다. 이 로직은 Heuristic 메소드에서 처리한다. 입력값의 종류는 2가지로 정의하며 Input.GetAxis 메소드를 사용하기에 넘어오는 값의 범위는 -1.0f ~ 0.0f ~ 1.0f 이다. 즉, 연속적인 값을 넘겨준다. 만약 Input.GetAxisRaw 메소드 또는 Input.GetKeyDown과 같은 메소드를 사용한다면 이산 값을 의미한다.
관측정보 - CollectObservations
관측정보의 수집 및 전달은 CollectObservations 메소드에서 VectorSensor.AddObservation 메소드를 사용한다. AddObservation 메소드에서 넘겨주는 파라미터의 타입은 Vector 타입으로 유니티의 Vector와는 다른 개념으로 다양한 유형의 데이터를 전달할 수 있다. 여기서 중요한 것은 넘겨주는 데이터의 Size로 아래 코드에서는 AddObservation 메소드를 4번 호출했지만 각각 데이터의 Size는 3, 3, 1, 1로 총 8개의 데이터를 관측정보로 전달하는 것을 의미한다.
ML-Agents를 활용한 실전 예제 - MummyBasic(2/3) - IndieGameMaker (unity3dstudy.com)
3. OnCollisionEnter 함수 이용해서 리워드 주기
'TIL' 카테고리의 다른 글
WIL (22.1.23) (0) | 2022.01.24 |
---|---|
코딩테스트를 마치고 (0) | 2021.09.12 |
[ML-Agent를 활용한 머신러닝] Soccer (0) | 2021.08.17 |
[ML-Agent를 활용한 머신러닝] MummyBasic (0) | 2021.08.10 |
인강을 다시 들으며 느낀 것 (0) | 2021.04.14 |
댓글