본문 바로가기
TIL

[ML-Agent를 활용한 머신러닝] MummyRay

by imagineer_jinny 2021. 8. 17.

 

 

 

만들고자 하는 것

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)

 

ML-Agents를 활용한 실전 예제 - MummyBasic(2/3)

에에전트 구성Agent에 추가할 스크립트를 작성해보자. 프로젝트 뷰의 02.Scripts 폴더에 C# 스크립트를 생성하고 MummyAgent로 스크립트 이름을 지정한다. 강화학습에 있어서 에이전트의 역할은 크게

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

댓글