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,
        )


관련 포스트

openai gym을 사용하여 강화학습(reinforcement learning) 환경 만들기

댓글

이 블로그의 인기 게시물

간단한 cfar 알고리즘에 대해

windows에서 간단하게 크롬캐스트(Chromecast)를 통해 윈도우 화면 미러링 방법

쉽게 설명한 파티클 필터(particle filter) 동작 원리와 예제

base64 인코딩 디코딩 예제 c 소스

간단한 칼만 필터(Kalman Filter) 소스 코드와 사용 예제