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

축에 평행한 장애물 피하기 (With Sensor)

이전 Enviroment 와는 다르게 벽을 세워 떨어지지는 않으나, 타깃의 생성 위치를 전체 Area 로 넓혔다.
또한 이번에는 RayPerceptionSensor 를 이용할 것이다. Roller 는 바라보는 방향이 없기 때문에 센서 각도를 180 으로 설정했다.

Observation (First Try, Second Try)

sensor.AddObservation
rigidbody.velocity.x
rigidbody.velocity.z
위 2개의 값과 센서에서 받은 정보를 바탕으로 간단한 장애물을 피하는 학습을 진행하였다.
rigidbody 의 velocity 를 준 이유는 Agent 의 현재 속도를 알아야 더 정확한 Action 을 취할 수 있기 때문이다.

First Try

Policy

SituationRewardEndEpisode
장애물에 닿아있는 동안틱당 (-30 / MaxStep)
타깃에 도달+5O
Living틱당 (-2 / MaxStep)
이전까지는 틱당 Reward 를 줄 때 -0.001, -0.002 와 같은 고정된 수치를 이용했으나,
그렇게 되면 에피소드 길이가 길어질 경우 그 총량이 커지고, 짧아질 경우 총량이 작아지는 문제가 생긴다.
그래서 이번부터는 MaxStep 으로 나눈 값을 이용하여 에피소드 길이에 상관없이 동일한 총량을 가지도록 하였다.

Hyperparameter

접기/펼치기
1behaviors:
2  RollerBall:
3    trainer_type: ppo
4    hyperparameters:
5      batch_size: 10
6      buffer_size: 100
7      learning_rate: 3.0e-4
8      beta: 5.0e-4
9      epsilon: 0.2
10      lambd: 0.99
11      num_epoch: 3
12      learning_rate_schedule: linear
13      beta_schedule: constant
14      epsilon_schedule: linear
15    network_settings:
16      normalize: false
17      hidden_units: 128
18      num_layers: 2
19    reward_signals:
20      extrinsic:
21        gamma: 0.99
22        strength: 1.0
23    max_steps: 1000000
24    time_horizon: 64
25    summary_freq: 10000
26

Result

/imgs/post_imgs/mlagent_03/1.png
학습이 되긴 되었는데... 일단 Reward 가 특정 값에 수렴하지 않았고, 위에서 보는 것처럼 약간 돌아가는 느낌이 있었다.
그래서 Hyperparameter 를 조금 바꾸어 학습을 다시 진행해 보았다.

Second Try

Policy

SituationRewardEndEpisode
장애물에 닿아있는 동안틱당 (-30 / MaxStep)
타깃에 도달+5O
Living틱당 (-2 / MaxStep)
First Try 와 동일

Hyperparameter

접기/펼치기
1behaviors:
2  RollerBall:
3    trainer_type: ppo
4    hyperparameters:
5      batch_size: 512
6      buffer_size: 2048
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: linear
13      beta_schedule: constant
14      epsilon_schedule: linear
15    network_settings:
16      normalize: false
17      hidden_units: 128
18      num_layers: 2
19    reward_signals:
20      extrinsic:
21        gamma: 0.99
22        strength: 1.0
23    max_steps: 1000000
24    time_horizon: 256
25    summary_freq: 10000
26
조금씩 변경하긴 했으나, batch_size 와 buffer_size 값을 크게 증가시켰다.

Result

/imgs/post_imgs/mlagent_03/3.png
벽에 부딪히면서 가긴 하지만, 그래도 확실히 전보다 좋아진 것을 확인할 수 있고, Reward 도 거의 5에 수렴하는 것을 볼 수 있다.