-
Notifications
You must be signed in to change notification settings - Fork 0
Quoridor Pseudo Code
- 자신의 앞줄 중간에 말을 놓는다.
-
$n$ 번째 플레이어가 말을 움직이거나 벽을 세운다. -
$turnNum + 1$ 을 한다. - 2~3번 과정을 게임이 끝날때 까지 반복한다.
게임은 임의의 말이 반대편 첫줄에 도착하면 종료된다.
핵심 규칙은 상대방이 못움직이게 가두면 안된다는 것이다. -> 장애물을 놓을 때 최소 1칸의 움직일수 있는 공간을 남겨야 한다. 내 게임말 뒤에 장애물을 둔다면 내 경로에는 지장을 주지 않기 때문에 유리하다.
실러 오프닝: 상대방과 내가 모두 3칸을 전진했다면, 내 게임 말의 뒤에 세로로 장애물을 세우는 것이다. 게임말의 움직임: 무한히 사용할수 있는 자원이다. 장애물: 개수가 한정되어 있는 자원이다.
쿼리도의 승리 전략은 내가 움직여야하는 거리는 최소한으로 만들고 상대방이 움직여야 하는 거리는 늘리는 것이다.
장애물이 내 앞을 막았을 경우에는 남은 칸수가 홀수인 칸으로 이동하는 것이 유리하다. 홀수인 칸을 막기 위해서는 더 많은 장애물이 필요하기 때문이다. 이는 게임판은 가로 세로 9칸씩 존재하지만 장애물이 막을수 있는 칸 수는 2칸이기에 항상 한칸이 남게 되기에 남은 칸이 홀수인 곳으로 움직이는 것이 유리하다. 또 한칸인 칸을 막기 위해서는 장애물이 1개 이상 필요하기 때문에 상대방의 장애물 사용또한 압박 할수 있다.
따라서 선수를 잡았을 경우 실러 오프닝으로 시작하여 상대의 왼쪽 길을 차단한후 오른쪽 길을 압박하면 쉽게 이길수 있다.
Initialize turnNum 0
FOR
Set Player n%2
Execute Player Action
Add 1 to turnNum
END FOR
목적 보상을 극대화하기 위한 action을 예측한다.
이때
이때
이때
DQN알고리즘은 관측 시퀀스에 따른 상관관계를 없애기 위해 replay 방식의 학습을 진행하며
이때 각 관측경험 experience를
이 경험에 대한 데이터들은
이 에이전트를 학습 시키기 위해서는 손실합수(=비용함수)가 필요한데 이 비용함수는 다음과 같다.
이 수식에서
또한
Algorithm: DQN with experience replay.
Initialize replay memory D to capacity N
Initialize target action-value function
Initialize action-value function
For
Initailize sequence
For
With probability
otherwise select
Execute action
Set
Store transition
Sample random minibatch of transitions
If episode terminates at step j+1: Set
Else: Set
Perform a gradient descent step on
Every
End For
End For