한양대학교 컴퓨터소프트웨어학부 졸업프로젝트
개발 기간 : 2024.03 ~ 2024.11
한양대학교 컴퓨터소프트웨어학부 4학년 김기환
한양대학교 컴퓨터소프트웨어학부 4학년 이준수
딥러닝 라이브러리 Pytorch와 언리얼엔진을 이용하여 게임 속에서 발생할 수 있는 동적인 환경을 학습하는
-
언리얼엔진을 통해 강화학습에 사용될 상태(State)값을 얻어낼 수 있는 시뮬레이션 환경을 구현합니다.
- 시뮬레이션 환경(클라이언트)에서 얻은 상태값을 TCPSocket 통신을 통해 강화학습 모델(서버)로 전달합니다.
-
시뮬레이션 환경에서 얻어낸 상태값을 바탕으로 현재 상태(State)에서 가장 적절한 행동(Action)을 뽑아낼 수 있도록 강화학습 리워드로직을 구현합니다.
- 모델에서 계산된 현재 상태에서 가장 적절한 액션 값을 다시 시뮬레이션 환경(클라이언트)로 전달합니다.
-
시뮬레이션 환경에서는 모델로부터 전달받은 현시점 가장 최적의 행동을 취합니다. 이후, 행동을 취한 후의 상태값을 다시 모델로 전달합니다. 모델은 매 시점 전달받은 상태값을 바탕으로 다시 최적의 행동을 클라이언트로 전달합니다.
- 플레이어와 에이전트는 4개의 무기와 4개의 방어구를 가지고 플레이하게 됩니다.
- 플레이어는 상대(에이전트)의 무기와 동일한 종류의 방어구를 착용 시 상대의 공격으로 부터 절반의 피해를 입습니다.
- 플레이어는 상대(에이전트)의 방어구와 다른 종류의 무기를 착용하여 공격 시 온전한 피해를 입힐 수 있습니다.
- 다수의 상대(에이전트)는 모델로부터 매 시점 최적의 행동을 받아와 취합니다.
- 이동 관련 모델
- 장애물을 피하며 아이템이 가까운 에이전트는 아이템을 획득하러 이동합니다.
- 장애물을 피하며 상대(플레이어)와 가까운 에이전트는 상대를 공격하려 상대와 가까이 이동합니다.
- 장비 변경 관련 모델
- 상대(플레이어)의 무기와 동일한 종류의 방어구를 착용하여 적은 피해를 입도록 갈아입습니다.
- 상대(플레이어)의 방어구와 다른 종류의 무기를 착용하여 온전한 피해를 입힐 수 있도록 갈아입습니다.
- 이동 관련 모델
State의 차원이 큰 경우 최적의 행동을 뽑아내기 어려운 Q-Learning의 한계를 해결하기 위해
상태값(State)를 기반으로 최적의 행동을 계산하는 두 가지 모델을 구현하였습니다.
- 상대(플레이어)에게 온전한 피해를 입히고, 상대(플레이어)로부터 적은 피해를 받을 수 있도록 하는 장비를 변경하는 모델 (장비 변경 관련 모델)
- 장애물을 피하며 상대(플레이어) 혹은 아이템과 가까워지도록 이동하는 모델 (이동 관련 모델)
- State
- 이전 State(시점)에서 장애물을 피하며 타겟과 가까워질 수 있는 최적의 방향
- 에이전트가 현재 바라보고 있는 방향
- 현재 State(시점)에서 장매물을 피하며 타겟과 가까워질 수 있는 최적의 방향
- Action
- 에이전트의 회전각도 값(0 ~ 360)을 0 ~ 15의 수로 매핑
- Reward
- 최적의 방향과 유사한 방향(유사한 정도)에 따라 리워드를 다르게 제공
- 최적의 방향과 유사한 정도가 2이하인 경우, 유사한 정도에 따라 양의 리워드를 차등 제공
- 최적의 방향과 유사한 정도가 2초과인 경우, 유사한 정도에 따라 음의 리워드를 차등 제공
- 에이전트가 레벨에 배치된 장애물들을 피하며 타겟(플레이어 혹은 아이템)과 가까워지는 방향으로 이동
- State
- 상대(플레이어)의 무기 번호, 방어구 번호
- 에이전트의 무기 번호, 방어구 번호
- Action
- 에이전트는 총 4개의 무기, 4개의 방어구를 소지하고 있습니다. (0, 0) ~ (4, 4)의 가능한 경우의 수를 0 ~ 15의 수로 매핑
- Reward
- 상대(플레이어)의 방어구와 다른 종류의 무기를 착용 and 상대(플레이어) 무기와 같은 종류의 방어구를 착용 -> 양의 리워드
- 그 외 -> 음의 리워드
- 플레이어의 무기와 방어구에 따라 온전한 피해를 입히고, 적은 피해를 받을 수 있는 최적의 방어구로 갈아입음
RL_SimpleShooter
├── RL_SimpleShooter_Clinet(Unreal) # 시뮬레이션 환경 (클라이언트)
├── RL_SimpleShooter_Server_ChangeEquipment # 장비 변경 관련 모델 (서버1)
│ ├── result # 학습 결과 저장
│ ├── GameMaster.py
│ ├── Communication.py
│ ├── Buffer.py
│ ├── Model.py
│ ├── Play.py
│ ├── Train.py
├── RL_SimpleShooter_Server_Movement # 이동 관련 모델 (서버2)
│ ├── result # 학습 결과 저장
│ ├── GameMaster.py
│ ├── Communication.py
│ ├── Buffer.py
│ ├── Model.py
│ ├── Play.py
│ ├── Train.py
❗ 언리얼 프로젝트 파일은 용량과 메가스캔 에셋의 저작권 문제로 업로드하지 않았습니다.
- 장비 변경 모델 학습 완료
- 장애물을 피하며 타겟에게 가까이 이동하는 모델 학습 완료
- 코드 정리 중