W298.dev
ProjectsPostsAbout Me
youtube
Pages
ProjectsPostsAbout Me
Posts
TAGS
All
RL-Obstacle-Avoid
RL-Competitive
Robot-Escape
Assembly Definition
ML-Agent
RL-Obstacle-Avoid
RL-Competitive
Unity
RL-Obstacle-Avoid
RL-Competitive
Robot-Escape
Assembly Definition
SERIES
RL-Obstacle-Avoid
RL-Competitive
Robot-Escape

Predator & Prey

/imgs/post_imgs/mlagent_07/3.png
이번에는 Predator 와 Prey, 두 개의 서로 다른 목표를 가진 Agent 를 한 Env 에서 동시에 학습해 볼 것이다.
MA-POCA 의 Self-Play 를 이용할 것인데, 이를 이용하면 설정한 Step 마다 학습시키는 팀을 바꿔가면서 진행할 수 있다.
각 Agent 의 승리 조건은,
  • Predator Agent 는 Prey Agent 를 쫒아 잡으면 승리하고,
  • Prey Agent 는 Predator Agent 에게 잡히지 않고 MaxStep 까지 버티면 승리한다.
다만 Env 가 그렇게 크지 않기 때문에 Prey 가 꽤 불리하므로, Prey 의 이동 속도를 1.7, Predator 의 이동 속도의 1 로 설정하였다.

Observation

RayPerceptionSensor 만 이용한다.

Training

Policy

Predator Agent

SituationRewardEndEpisode
Living틱당 (-1 / MaxStep)
Prey 를 잡았을 경우1

Prey Agent

SituationRewardEndEpisode
Living틱당 (+1 / MaxStep)
Predator 에게 잡혔을 경우-1
Predator 가 Prey 를 잡았을 경우,
  • Predator 는 더 빠르게 잡았을 경우 더 큰 Reward 를 받는다 (+ 승리)
    • (1 - [지난시간] / MaxStep)
    • (1 - MaxStep 대비 지난 시간), 즉 시간이 지날수록 받는 Reward 감소
  • Prey 는 최대한 늦게 잡혔을 경우 더 적은 패널티 를 받는다 (- 패배)
    • ([지난시간] / MaxStep - 1)
    • (MaxStep 대비 지난 시간 - 1), 즉 시간이 지날수록 받는 패널티 감소
Prey 가 잡히지 않고 끝까지 버텼을 경우,
  • Predator 는 결국 -1 의 Reward 를 가지게 된다 (- 패배)
  • Prey 는 결국 +1 의 Reward 를 가지게 된다 (+ 승리)
ELO 계산 시 Reward 가 +1 일 경우 승리, 0 은 무승부, -1 은 패배로 처리하므로 위와 같이 설정해 주었다.
Unity ML-Agents Docs

Hyperparameter

접기/펼치기
1behaviors:
2  WalkAgentPredator:
3    trainer_type: poca
4    hyperparameters:
5      batch_size: 512
6      buffer_size: 5120
7      learning_rate: 3.0e-4
8      beta: 1e-3
9      epsilon: 0.15
10      lambd: 0.95
11      num_epoch: 4
12      learning_rate_schedule: constant
13    network_settings:
14      normalize: false
15      hidden_units: 256
16      num_layers: 2
17    reward_signals:
18      extrinsic:
19        gamma: 0.99
20        strength: 1.0
21    keep_checkpoints: 21
22    checkpoint_interval: 50000
23    max_steps: 1000000
24    time_horizon: 1000
25    summary_freq: 10000
26    self_play:
27      window: 10
28      play_against_latest_model_ratio: 0.5
29      save_steps: 20000
30      swap_steps: 1000
31      team_change: 100000
32      initial_elo: 1200.0
33  WalkAgentPrey:
34    trainer_type: poca
35    hyperparameters:
36      batch_size: 512
37      buffer_size: 5120
38      learning_rate: 3.0e-4
39      beta: 1e-3
40      epsilon: 0.15
41      lambd: 0.95
42      num_epoch: 4
43      learning_rate_schedule: constant
44    network_settings:
45      normalize: false
46      hidden_units: 256
47      num_layers: 2
48    reward_signals:
49      extrinsic:
50        gamma: 0.99
51        strength: 1.0
52    keep_checkpoints: 21
53    checkpoint_interval: 50000
54    max_steps: 1000000
55    time_horizon: 1000
56    summary_freq: 10000
57    self_play:
58      window: 10
59      play_against_latest_model_ratio: 0.5
60      save_steps: 20000
61      swap_steps: 1000
62      team_change: 100000
63      initial_elo: 1200.0
64
MA-POCA 를 사용할 것이기 때문에 trainer_type 를 POCA 로 설정해 주었고, self_play 부분도 추가해 주었다.

Result

/imgs/post_imgs/mlagent_07/2.png
/imgs/post_imgs/mlagent_07/1.png
빨간색이 Predator, 주황색이 Prey 다.
초반에는 Predator 가 우세한 모습을 보이다가, 400K ~ 500K 정도에서 ELO 수치가 뒤바뀌는 것을 확인할 수 있다.
1.2M 까지 학습을 진행시켰는데, 점점 차이가 벌어지는 것을 볼 수 있다.
Prey 가 시점은 최대한 Predator 를 주시한 채로 원을 그리면서 피하는 모습을 볼 수 있다.