TF-Agents 행동 반영하기


TF-Agents - TensorFlow 강화학습 라이브러리

이전 페이지에서는 강화학습 환경 (Environment)행동 (Action)의 사양을 확인하는 방법에 대해 소개했습니다.

이번에는 강화학습 환경 (Environment)에 직접 행동 (Action)을 취하고 변화를 확인하는 과정에 대해 소개합니다.



행동 반영하기

예제1

import tf_agents
from tf_agents.environments import suite_gym
import numpy as np

env_name = 'CartPole-v0'
env = suite_gym.load(env_name)

initial_time_step = env.reset()
print(initial_time_step)

action = np.array(1, dtype=np.int32)

next_time_step = env.step(action)
print(next_time_step)
TimeStep(step_type=array(0, dtype=int32), reward=array(0., dtype=float32), discount=array(1., dtype=float32), observation=array([-0.03466152,  0.01252448, -0.0060912 ,  0.00470432], dtype=float32))
TimeStep(step_type=array(1, dtype=int32), reward=array(1., dtype=float32), discount=array(1., dtype=float32), observation=array([-0.03441103,  0.20773326, -0.00599711, -0.2898942 ], dtype=float32))

TF-Agents 환경 살펴보기 페이지에서 환경과 행동의 사양에 대해 확인했습니다.

TF-Agents 강화학습 환경에 행동을 반영하기 위해서 우선 스칼라 정수형의 행동 (action)을 하나 만들었습니다.

(정수 1은 카트를 오른쪽으로 미는 행동을 의미합니다.)

그 다음, env.step() 메서드에 입력합니다.

env.reset() 메서드가 환경을 재설정 (reset)하고, 첫 TimeStep 객체를 반환했다면,

env.step(action)은 환경에 action을 반영한 다음, TimeStep을 반환합니다.



예제2

import tf_agents
from tf_agents.environments import suite_gym
import numpy as np

env_name = 'CartPole-v0'
env = suite_gym.load(env_name)

initial_time_step = env.reset()
print(initial_time_step)

action = np.array(1, dtype=np.int32)

for i in range(5):
    next_time_step = env.step(action)
    print(next_time_step)
TimeStep(step_type=array(0, dtype=int32), reward=array(0., dtype=float32), discount=array(1., dtype=float32), observation=array([ 0.00390162, -0.04929772,  0.03883132, -0.00568977], dtype=float32))
TimeStep(step_type=array(1, dtype=int32), reward=array(1., dtype=float32), discount=array(1., dtype=float32), observation=array([ 0.00291567,  0.14524645,  0.03871752, -0.2858725 ], dtype=float32))
TimeStep(step_type=array(1, dtype=int32), reward=array(1., dtype=float32), discount=array(1., dtype=float32), observation=array([ 0.00582059,  0.33979544,  0.03300007, -0.5660972 ], dtype=float32))
TimeStep(step_type=array(1, dtype=int32), reward=array(1., dtype=float32), discount=array(1., dtype=float32), observation=array([ 0.0126165 ,  0.53443927,  0.02167813, -0.8482037 ], dtype=float32))
TimeStep(step_type=array(1, dtype=int32), reward=array(1., dtype=float32), discount=array(1., dtype=float32), observation=array([ 0.02330529,  0.72925895,  0.00471406, -1.1339917 ], dtype=float32))
TimeStep(step_type=array(1, dtype=int32), reward=array(1., dtype=float32), discount=array(1., dtype=float32), observation=array([ 0.03789047,  0.9243189 , -0.01796577, -1.4251924 ], dtype=float32))

이번에는 동일한 행동을 연속해서 다섯번 적용했습니다.

observation 속성의 첫번째 값은 카트의 위치를 의미합니다.

카트의 위치가 매 행동마다 오른쪽으로 이동하고 있음을 알 수 있습니다.



이전글/다음글