openai gym Atari게임 환경의 v0, v4, Deterministic, NoFrameskip, ram, max_episode_steps의 의미와 차이
강화 학습(reinforcement learning) 환경으로 많이 사용되는 openai gym의 게임이름 뒤에 붙는 v0, v4, Deterministic, NoFrameskip, ram의 의미와 차이는 다음과 같다.
1. v0
25% 확률로 새로 입력 받은 action을 무시하고 이전 action을 반복한다.
repeat_action_probability : 0.25
2. -v4
v0와 다르게 받은 입력을 그대로 사용한다.
repeat_action_probability : 0
3. Deterministic
고정된 frameskip을 사용한다. space_invaders인 경우는 frameskip=3이고, 그 외는 frameskip=4이다.
만약 Deterministic, noFrameskip 이 없을 경우는 게임 환경마다 다르지만, 랜덤으로 2~4 프레임이 스킵 된다.
4. noFrameskip
프레임 스킵을 사용하지 않는다.
5. ram
(210,160,3)형태의 이미지 대신 128바이트의 observation/state 데이터를 만들어 반환한다.
ram이 없는 경우는 210x160x3의 이미지가 observaion/state로 반환된다.
6. max_episode_steps
에피소드의 최대 steps를 나타낸다. 강화 학습 중 더이상 게임을 하지 않고 게임이 중단된다면, max_episode_steps를 조정할 필요가 있다.
max_episode_steps는 gym\envs\__init__.py를 직접 수정하던가 아니면 아래처럼 게임 환경을 만들고 수정할 수도 있다.
import gym
env = gym.make('SpaceInvaders-v0')
env.max_episode_steps = 100000#원하는 steps를 설정
gym\envs\__init__.py의 소스를 보면 위의 설정들에 대해 살펴볼 수 있다.
아래는 gym\envs\__init__.py의 일부이다.
# Atari
# ----------------------------------------
# # print ', '.join(["'{}'".format(name.split('.')[0]) for name in
atari_py.list_games()])
for game in ['adventure', 'air_raid', 'alien', 'amidar', 'assault', 'asterix',
'asteroids', 'atlantis',
'bank_heist', 'battle_zone', 'beam_rider', 'berzerk', 'bowling',
'boxing', 'breakout', 'carnival',
'centipede', 'chopper_command', 'crazy_climber', 'defender',
'demon_attack', 'double_dunk',
'elevator_action', 'enduro', 'fishing_derby', 'freeway',
'frostbite', 'gopher', 'gravitar',
'hero', 'ice_hockey', 'jamesbond', 'journey_escape', 'kangaroo',
'krull', 'kung_fu_master',
'montezuma_revenge', 'ms_pacman', 'name_this_game', 'phoenix',
'pitfall', 'pong', 'pooyan',
'private_eye', 'qbert', 'riverraid', 'road_runner', 'robotank',
'seaquest', 'skiing',
'solaris', 'space_invaders', 'star_gunner', 'tennis',
'time_pilot', 'tutankham', 'up_n_down',
'venture', 'video_pinball', 'wizard_of_wor', 'yars_revenge',
'zaxxon']:
for obs_type in ['image', 'ram']:
# space_invaders should yield SpaceInvaders-v0 and
SpaceInvaders-ram-v0
name = ''.join([g.capitalize() for g in
game.split('_')])
if obs_type == 'ram':
name = '{}-ram'.format(name)
nondeterministic = False
if game == 'elevator_action' and obs_type ==
'ram':
# ElevatorAction-ram-v0 seems to
yield slightly
# non-deterministic observations
about 10% of the time. We
# should track this down eventually,
but for now we just
# mark it as nondeterministic.
nondeterministic = True
register(
id='{}-v0'.format(name),
entry_point='gym.envs.atari:AtariEnv',
kwargs={'game': game, 'obs_type':
obs_type, 'repeat_action_probability': 0.25},
max_episode_steps=10000,
nondeterministic=nondeterministic,
)
register(
id='{}-v4'.format(name),
entry_point='gym.envs.atari:AtariEnv',
kwargs={'game': game, 'obs_type':
obs_type},
max_episode_steps=100000,
nondeterministic=nondeterministic,
)
# Standard Deterministic (as in the original
DeepMind paper)
if game == 'space_invaders':
frameskip = 3
else:
frameskip = 4
# Use a deterministic frame skip.
register(
id='{}Deterministic-v0'.format(name),
entry_point='gym.envs.atari:AtariEnv',
kwargs={'game': game, 'obs_type':
obs_type, 'frameskip': frameskip, 'repeat_action_probability': 0.25},
max_episode_steps=100000,
nondeterministic=nondeterministic,
)
register(
id='{}Deterministic-v4'.format(name),
entry_point='gym.envs.atari:AtariEnv',
kwargs={'game': game, 'obs_type':
obs_type, 'frameskip': frameskip},
max_episode_steps=100000,
nondeterministic=nondeterministic,
)
register(
id='{}NoFrameskip-v0'.format(name),
entry_point='gym.envs.atari:AtariEnv',
kwargs={'game': game, 'obs_type':
obs_type, 'frameskip': 1, 'repeat_action_probability': 0.25}, # A frameskip of
1 means we get every frame
max_episode_steps=frameskip *
100000,
nondeterministic=nondeterministic,
)
# No frameskip. (Atari has no entropy source, so
these are
# deterministic environments.)
register(
id='{}NoFrameskip-v4'.format(name),
entry_point='gym.envs.atari:AtariEnv',
kwargs={'game': game, 'obs_type':
obs_type, 'frameskip': 1}, # A frameskip of 1 means we get every frame
max_episode_steps=frameskip *
100000,
nondeterministic=nondeterministic,
)
관련 포스트
댓글
댓글 쓰기