본문 바로가기
  • 실행력이 모든걸 결정한다
개발 프로젝트/[개인] AI - 목적지 도달 학습

[개발 완료] AI 목적지 도달 학습

by 김코더 김주역 2021. 6. 21.
반응형

<실행 영상>
https://youtu.be/_zmALpUOkBg


Github 링크 (소스 코드)
https://github.com/jooyeokkim/AICharacter

 

GitHub - jooyeokkim/AICharacter

Contribute to jooyeokkim/AICharacter development by creating an account on GitHub.

github.com

 

 

 

프로젝트 소개

  • 프로젝트 이름 : AI 목적지 도달 학습
  • 기술 스택 : Unity, C#
  • 진행 인원 및 작업 기간 : 1인, 2020년 8월 중순 ~ 2020년 9월 중순(주말, 휴일)
  • 사용 프로그램 : Unity 2019.3.13f1
  • 버전 관리 툴 : Git

 

 

 

프로젝트 내용

<개요>

  • 유전 알고리즘
  • 캐릭터 동작
  • 학습
  • Sample map
  • Result

 

1. 유전 알고리즘

1) 과정 설명

 

2) 설정 값

인구 수 50
우수 아이 선발 수 10
운좋은 아이 선발 수 10
부모 한 쌍 당 낳을 아이 수 5
돌연변이 아이 수 10

 

 

2. 캐릭터 동작

1) 움직임
(1) 명령 주기 : 0.3초

이동 지시열 0: 좌, 1: 우, 2: 정지
점프 지시열 0: 정지 1: 점프

(2) 이동
- 좌 : x축 velocity를 -4로 설정
- 우 : x축 velocity를 4로 설정
- 정지 : x축 velocity를 0으로 설정
(3) 일반 점프 : 위 방향으로 18의 힘을 가함(AddForce)
(4) 2단 점프
- 위 방향으로 18의 힘을 가함
- 싱글 점프 도중에 점프 지시가 내려졌다면, 캐릭터의 y축 velocity값이 -5 미만일 경우 추가 점프 허용

 

2) 바닥 탐지
RaycastHit2D 클래스를 이용하여 바닥의 중심까지의 거리가 0.5 미만일 경우 캐릭터가 바닥에 있다고 가정

 

3) 애니메이션

걷기 모션 캐릭터의 x축 velocity값이 -2미만 또는  2초과일 동안에 동작
점프 모션 점프에 의해 공중에 떠있을 동안에 동작

 

 

3. 학습

- 종료 위치의 x좌표값만큼 높은 점수 부여
- 13개의 보상 기둥을 설치 (한 기둥에 대한 중복 방문의 경우에는 점수를 부여하지 않고, 멀리 있는 기둥일수록 높은 점수 부여)
- 추락한 캐릭터는 강력한 패널티 부여



4. Sample map

 

 

5. Result

학습의 성공률을 측정하기 위해 목적지까지 도달하는데 학습하는 과정을 10세트 반복하였다.
오늘 측정한 세트만 총 10번이고, 실제론 50회 넘게 해봤는데 거의 다 성공했다.
30세대는 웬만해선 잘 안넘고 6세대만에 목적지에 도달한 케이스까지 관찰할 수 있었다.

  • 테스트 횟수 : 10회
  • 성공률: 100% (10/10)
  • 도달에 성공한 AI의 평균 학습 횟수 : 20.9회
  • 도달에 성공한 AI의 최대 학습 횟수: 36회
  • 도달에 성공한 AI의 최소 학습 횟수: 13회

* RESULT IMAGES (이미지를 보려면 더보기 클릭)

1차 : 36세대


2차 : 24세대


3차 : 22세대


4차 : 22세대


5차 : 13세대


6차 : 17세대


7차 : 18세대


8차 : 18세대


9차 : 15세대


10차 : 24세대 (이 포스팅에 첨부한 영상에 해당하는 testcase)

 

프로젝트를 마치며...

이 프로젝트를 시작한 계기는 우연히 Youtube에 있는 유전 알고리즘 영상을 보고 재미를 느낀 것이었다.
유전 알고리즘으로 3D 캐릭터를 학습시켜서 그네를 타거나 두 발로 걸을 수 있게 하고, 자동차 모형을 학습시켜서 목적지까지 부딪히지 않고 도달할 수 있게 하는 등 재미있는 예제들이 많았다. 그래서 이를 직접 구현해보고자 유전 알고리즘에 대해 많은 검색을 해본 끝에 원리를 찾아낼 수 있었다.

유전 알고리즘이 가지는 가장 재밌는 점은 생물 진화의 원리를 그대로 따른다는 것이다. 우등한 유전자는 살아남지만 열등한 유전자는 살아남지 못하고, 우등한 유전자는 다른 우등한 유전자들을 만들어내며 세대를 거듭하여 결국은 우등한 유전자들이 많이 분포하게 된다. 그러나 이 과정에서 열등한 유전자 혹은 돌연변이는 많은 이들의 고정관념을 타파하여 혁명을 일으키기도 하여, 모든 이들의 배움의 폭을 넓혀주는 역할을 한다.
우수한 샘플들끼리만 교배를 하면 더 빠른 진화가 이루어질 수 있다고 생각할 수 있지만 무조건 그렇지만은 않다. 필자도 AI를 공부한 적이 있는데 AI 학습의 치명적인 걸림돌이 될 수 있는 요인들 중 하나는 편향성이다. 사람도 편견을 가지면 말이 안통하듯이, AI도 편견을 가지면 말을 듣지 않는다. 프로젝트 도중에 실험삼아 돌연변이 과정을 생략해보았는데, 돌연변이 과정을 포함했을 때보다 학습에 필요한 세대는 더 길었다.

진화의 원리가 AI에게도 통한다는 사실이 신기했고, 이러한 원리로 학습시킨 AI가 세대를 걸쳐 똑똑해지는 모습을 눈으로 감상할 수 있어서 행복했다.

반응형

댓글