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)를 통해 윈도우 화면 미러링 방법

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

안드로이드(android) 전체 화면 시계 앱(clock app) 예제 코드

mkfs.fat Device or resource busy 에러 해결법