이번에는 점령전, 즉 땅따먹기 게임을 학습시켜 보았다. 이전과 마찬가지로 Self-Play 를 이용하여 설정한 Step 마다 학습시키는 팀을 바꿔가면서 진행하였다.
제한 시간이 끝났을 때, 색칠된 타일의 수에 따라서 랭킹이 매겨지고, 이 랭킹에서 1등을 하는 것이 목적이다.
상대방 대비 자신의 타일 개수의 비율이 중요한 것이기 때문에 많이 칠하는 것도 중요하지만, 상대방보다 많이 칠하는 것이 더 중요하다.
즉, 빈 타일을 칠하는 것보다 상대방의 타일을 자신의 색으로 칠하는 것이 최적의 방법일 것이다.
Action
DiscreteAction 하나를 사용할 것이며, 크기는 5 이다.
0 : +z 로 1칸 이동
1 : -z 로 1칸 이동
2 : +x 로 1칸 이동
3 : -x 로 1칸 이동
4 : 이전 이동을 이어서 계속 (이전이 +z 로 이동했으면 +z 로 이동)
멈춰 있는 선택지는 없으며, 매 Step 마다 계속 이동한다.
Observation
sensor.AddObservation
Agent 의 x 좌표
Agent 의 z 좌표
Agent 가 바라보고 있는 방향 (움직이고 있는 방향)
각 타일이 어떤 색으로 칠해져 있는지에 대한 정보
바라보고 있는 방향은, Action 2 를 취해 +x 로 1칸 이동하게 된다면 2 (Int) 가 될 것이다.
타일 색 정보는 Agent 의 Team Number 이자 Team Enum 인 값을 Int 로 넘겨줄 것이다. 모든 타일 정보를 제공하므로 61x61 = 3721 개의 Int 정보를 넘긴다.
Dominator Solo
Multi-Agent 를 학습시키기에 앞서, 먼저 1개의 Agent 만 넣어 테스트를 진행해 보았다. 제한 시간은 200 스탭으로 짧게 주었다.
Policy
Situation
Reward
EndEpisode
매 Action 마다
delta / 전체 타일 수
delta 는 이번 액션으로 변한 자신의 타일 수이다. 현재는 적이 없기 때문에 delta 값은 항상 양수일 것이다.
delta 값을 전체 타일 수로 나누었기 때문에, 만일 모든 타일이 자신의 색으로 칠해지게 된다면 누적 Reward 는 1이 될 것이다.
적당한 크기의 직사각형을 여러개 만들면서, 적이 칠한 타일을 둘러싸 채우려는 모습이 보인다.
너무 크게 직사각형을 그리다 보면 적이 간단히 구멍을 뚫어 놓을 수 있기 떄문에, 작은 직사각형 여러개를 만드는 것이 최적이고, 이것을 제대로 학습한 것이다.
100K vs 6M
100K 모델과 6M 모델을 비교해 보기 위해 빨간색 Agent 는 100K 모델을 적용시키고, 노란색 Agent 는 6M 모델을 적용시켰다.
일단 타일을 채우는 능력부터가 차이가 꽤 나고, 노란색 Agent 가 계속 둘러싸 노란색으로 채워버리기 때문에, 여러 번 시도해 보았으나 6M 모델이 압도적으로 높은 결과를 보였다.
1.8M vs 6M
그래서 타일을 꽤 잘 채웠던 1.8M 모델과 비교해 보았더니, 예상한 대로 1.8M 모델은 너무 직사각형을 크게 그리는 바람에 제대로 완성하지 못하고 6M 에게 점령당하는 것을 볼 수 있다.