示例#1
1
    def __init__(self):
        super(DoomDefendCenterEnv, self).__init__()
        package_directory = os.path.dirname(os.path.abspath(__file__))
        self.loader = Loader()
        self.game = DoomGame()
        self.game.load_config(
            os.path.join(package_directory, 'assets/defend_the_center.cfg'))
        self.game.set_vizdoom_path(self.loader.get_vizdoom_path())
        self.game.set_doom_game_path(self.loader.get_freedoom_path())
        self.game.set_doom_scenario_path(
            self.loader.get_scenario_path('defend_the_center.wad'))
        self.screen_height = 480  # Must match .cfg file
        self.screen_width = 640  # Must match .cfg file
        self.game.set_window_visible(False)
        self.viewer = None
        self.game.init()
        self.game.new_episode()

        # 3 allowed actions [0, 13, 14] (must match .cfg file)
        self.action_space = spaces.HighLow(np.matrix([[0, 1, 0]] * 3))
        self.observation_space = spaces.Box(low=0,
                                            high=255,
                                            shape=(self.screen_height,
                                                   self.screen_width, 3))

        self._seed()
示例#2
1
 def __init__(self, level):
     self.previous_level = -1
     self.level = level
     self.game = DoomGame()
     self.loader = Loader()
     self.doom_dir = os.path.dirname(os.path.abspath(__file__))
     self._mode = 'algo'  # 'algo' or 'human'
     self.no_render = False  # To disable double rendering in human mode
     self.viewer = None
     self.is_initialized = False  # Indicates that reset() has been called
     self.curr_seed = 0
     self.lock = (DoomLock()).get_lock()
     self.action_space = spaces.MultiDiscrete([[0, 1]] * 38 +
                                              [[-10, 10]] * 2 +
                                              [[-100, 100]] * 3)
     self.allowed_actions = list(range(NUM_ACTIONS))
     self.screen_height = 480
     self.screen_width = 640
     self.screen_resolution = ScreenResolution.RES_640X480
     self.observation_space = spaces.Box(low=0,
                                         high=255,
                                         shape=(self.screen_height,
                                                self.screen_width, 3))
     self._seed()
     self._configure()
示例#3
0
文件: doom_env.py 项目: vladfi1/gym
    def _load_level(self):
        # Closing if is_initialized
        if self.is_initialized:
            self.is_initialized = False
            self.game.close()
            self.game = DoomGame()

        # Loading Paths
        if not self.is_initialized:
            self.game.set_vizdoom_path(self.loader.get_vizdoom_path())
            self.game.set_doom_game_path(self.loader.get_freedoom_path())

        # Common settings
        self._closed = False
        self.game.load_config(
            os.path.join(self.doom_dir,
                         'assets/%s' % DOOM_SETTINGS[self.level][CONFIG]))
        self.game.set_doom_scenario_path(
            self.loader.get_scenario_path(DOOM_SETTINGS[self.level][SCENARIO]))
        if DOOM_SETTINGS[self.level][MAP] != '':
            self.game.set_doom_map(DOOM_SETTINGS[self.level][MAP])
        self.game.set_doom_skill(DOOM_SETTINGS[self.level][DIFFICULTY])
        self.previous_level = self.level
        self.allowed_actions = DOOM_SETTINGS[self.level][ACTIONS]
        self.game.set_screen_resolution(self.screen_resolution)

        # Algo mode
        if 'human' != self.mode:
            self.game.set_window_visible(False)
            self.game.set_mode(Mode.PLAYER)
            self.no_render = False
            self.game.init()
            self._start_episode()
            self.is_initialized = True
            return self.game.get_state().image_buffer.copy()

        # Human mode
        else:
            self.game.add_game_args('+freelook 1')
            self.game.set_window_visible(True)
            self.game.set_mode(Mode.SPECTATOR)
            self.no_render = True
            self.game.init()
            self._start_episode()
            self.is_initialized = True
            self._play_human_mode()
            return np.zeros(shape=self.observation_space.shape, dtype=np.uint8)
示例#4
0
 def __init__(self):
     super(DoomDefendLineEnv, self).__init__()
     package_directory = os.path.dirname(os.path.abspath(__file__))
     self.loader = Loader()
     self.game = DoomGame()
     self.game.load_config(
         os.path.join(package_directory, 'assets/defend_the_line.cfg'))
     self.game.set_vizdoom_path(self.loader.get_vizdoom_path())
     self.game.set_doom_game_path(self.loader.get_freedoom_path())
     self.game.set_doom_scenario_path(
         self.loader.get_scenario_path('defend_the_line.wad'))
     self.screen_height = 480  # Must match .cfg file
     self.screen_width = 640  # Must match .cfg file
     self.game.set_window_visible(False)
     self.viewer = None
     self._seed()
     self.game.init()
     self.game.new_episode()
示例#5
0
文件: doom_env.py 项目: vladfi1/gym
 def __init__(self, level):
     utils.EzPickle.__init__(self)
     self.previous_level = -1
     self.level = level
     self.game = DoomGame()
     self.loader = Loader()
     self.doom_dir = os.path.dirname(os.path.abspath(__file__))
     self.mode = 'fast'  # 'human', 'fast' or 'normal'
     self.no_render = False  # To disable double rendering in human mode
     self.viewer = None
     self.is_initialized = False  # Indicates that reset() has been called
     self.curr_seed = 0
     self.action_space = spaces.MultiDiscrete([[0, 1]] * 38 +
                                              [[-10, 10]] * 2 +
                                              [[-100, 100]] * 3)
     self.allowed_actions = list(range(NUM_ACTIONS))
     self._seed()
     self._configure()
示例#6
0
    def __init__(self):
        package_directory = os.path.dirname(os.path.abspath(__file__))
        self.loader = Loader()
        self.game = DoomGame()
        self.game.load_config(
            os.path.join(package_directory, 'assets/predict_position.cfg'))
        self.game.set_vizdoom_path(self.loader.get_vizdoom_path())
        self.game.set_doom_game_path(self.loader.get_freedoom_path())
        self.game.set_doom_scenario_path(
            self.loader.get_scenario_path('predict_position.wad'))
        self.game.set_doom_map('map01')
        self.screen_height = 480  # Must match .cfg file
        self.screen_width = 640  # Must match .cfg file
        self.game.set_window_visible(False)
        self.viewer = None
        self.game.init()
        self.game.new_episode()

        self._seed()
示例#7
0
 def __init__(self):
     package_directory = os.path.dirname(os.path.abspath(__file__))
     self.loader = Loader()
     self.game = DoomGame()
     self.game.load_config(
         os.path.join(package_directory, 'assets/deadly_corridor.cfg'))
     self.game.set_vizdoom_path(self.loader.get_vizdoom_path())
     self.game.set_doom_game_path(self.loader.get_freedoom_path())
     self.game.set_doom_scenario_path(
         self.loader.get_scenario_path('deadly_corridor.wad'))
     self.screen_height = 480  # Must match .cfg file
     self.screen_width = 640  # Must match .cfg file
     # action indexes are [0, 9, 10, 12, 13, 14]
     self.action_space = doom_spaces.HighLow(np.matrix([[0, 1, 0]] * 6))
     self.observation_space = spaces.Box(low=0,
                                         high=255,
                                         shape=(self.screen_height,
                                                self.screen_width, 3))
     self.game.set_window_visible(False)
     self.viewer = None
     self.game.init()
     self.game.new_episode()
示例#8
0
 def __init__(self, level):
     utils.EzPickle.__init__(self)
     self.previous_level = -1
     self.level = level
     self.game = DoomGame()
     self.loader = Loader()
     self.doom_dir = os.path.dirname(os.path.abspath(__file__))
     self.mode = 'fast'  # 'human', 'fast' or 'normal'
     self.no_render = False  # To disable double rendering in human mode
     self.viewer = None
     self.is_initialized = False  # Indicates that reset() has been called
     self.find_new_level = False  # Indicates that we need a level change
     self.curr_seed = 0
     self.screen_height = 480
     self.screen_width = 640
     self.action_space = spaces.HighLow(
         np.matrix([[0, 1, 0]] * 38 + [[-10, 10, 0]] * 2 +
                   [[-100, 100, 0]] * 3,
                   dtype=np.int8))
     self.observation_space = spaces.Box(low=0,
                                         high=255,
                                         shape=(self.screen_height,
                                                self.screen_width, 3))
     self.allowed_actions = list(range(NUM_ACTIONS))
示例#9
0
 def __init__(self):
     package_directory = os.path.dirname(os.path.abspath(__file__))
     self.loader = Loader()
     self.game = DoomGame()
     self.game.load_config(
         os.path.join(package_directory, 'assets/basic.cfg'))
     self.game.set_vizdoom_path(self.loader.get_vizdoom_path())
     self.game.set_doom_game_path(self.loader.get_freedoom_path())
     self.game.set_doom_scenario_path(
         self.loader.get_scenario_path('basic.wad'))
     self.game.set_doom_map('map01')
     self.screen_height = 480  # Must match .cfg file
     self.screen_width = 640  # Must match .cfg file
     # 3 allowed actions [0, 9, 10] (must match .cfg file)
     self.action_space = doom_spaces.HighLow(np.matrix([[0, 1, 0]] * 3))
     self.observation_space = spaces.Box(low=0,
                                         high=255,
                                         shape=(self.screen_height,
                                                self.screen_width, 3))
     self.game.set_window_visible(False)
     self.viewer = None
     self.sleep_time = 0.02857  # 35 fps = 0.02857 sleep between frames
     self.game.init()
     self.game.new_episode()
示例#10
0
    def _load_level(self):
        # Closing if is_initialized
        if self.is_initialized:
            self.is_initialized = False
            self.game.close()
            self.game = DoomGame()

        # Customizing level
        if getattr(self, '_customize_game', None) is not None and callable(self._customize_game):
            self.level = -1
            self._customize_game()

        else:
            # Loading Paths
            if not self.is_initialized:
                self.game.set_vizdoom_path(self.loader.get_vizdoom_path())
                self.game.set_doom_game_path(self.loader.get_freedoom_path())

            # Common settings
            self.game.load_config(os.path.join(self.doom_dir, 'assets/%s' % DOOM_SETTINGS[self.level][CONFIG]))
            if self.level == 9 or self.level == 10:
                # Load modified wad.
                self.game.set_doom_scenario_path(os.path.join('/opt/app/takecover_variants/assets', DOOM_SETTINGS[self.level][SCENARIO]))
            else:
                self.game.set_doom_scenario_path(self.loader.get_scenario_path(DOOM_SETTINGS[self.level][SCENARIO]))
            if DOOM_SETTINGS[self.level][MAP] != '':
                self.game.set_doom_map(DOOM_SETTINGS[self.level][MAP])
            self.game.set_doom_skill(DOOM_SETTINGS[self.level][DIFFICULTY])
            self.allowed_actions = DOOM_SETTINGS[self.level][ACTIONS]
            self.game.set_screen_resolution(self.screen_resolution)

        self.previous_level = self.level
        self._closed = False

        # Algo mode
        if 'human' != self._mode:
            self.game.set_window_visible(False)
            self.game.set_mode(Mode.PLAYER)
            self.no_render = False
            try:
                with self.lock:
                    self.game.init()
            except (ViZDoomUnexpectedExitException, ViZDoomErrorException):
                raise error.Error(
                    'VizDoom exited unexpectedly. This is likely caused by a missing multiprocessing lock. ' +
                    'To run VizDoom across multiple processes, you need to pass a lock when you configure the env ' +
                    '[e.g. env.configure(lock=my_multiprocessing_lock)], or create and close an env ' +
                    'before starting your processes [e.g. env = gym.make("DoomBasic-v0"); env.close()] to cache a ' +
                    'singleton lock in memory.')
            self._start_episode()
            self.is_initialized = True
            return self.game.get_state().image_buffer.copy()

        # Human mode
        else:
            self.game.add_game_args('+freelook 1')
            self.game.set_window_visible(True)
            self.game.set_mode(Mode.SPECTATOR)
            self.no_render = True
            with self.lock:
                self.game.init()
            self._start_episode()
            self.is_initialized = True
            self._play_human_mode()
            return np.zeros(shape=self.observation_space.shape, dtype=np.uint8)
示例#11
0
    def _load_level(self):
        # Closing if is_initialized
        if self.is_initialized:
            self.is_initialized = False
            self.game.close()
            self.game = DoomGame()

        # Customizing level
        if getattr(self, '_customize_game', None) is not None and callable(
                self._customize_game):
            self.level = -1
            self._customize_game()

        else:
            # Loading Paths
            if not self.is_initialized:
                self.game.set_vizdoom_path(self.loader.get_vizdoom_path())
                self.game.set_doom_game_path(self.loader.get_freedoom_path())

            # Common settings
            self.game.load_config(
                os.path.join(self.doom_dir,
                             'assets/%s' % DOOM_SETTINGS[self.level][CONFIG]))
            self.game.set_doom_scenario_path(
                self.loader.get_scenario_path(
                    DOOM_SETTINGS[self.level][SCENARIO]))
            if DOOM_SETTINGS[self.level][MAP] != '':
                if RANDOMIZE_MAPS > 0 and 'labyrinth' in DOOM_SETTINGS[
                        self.level][CONFIG].lower():
                    if 'fix' in DOOM_SETTINGS[self.level][SCENARIO].lower():
                        # mapId = 'map%02d'%np.random.randint(1, 23)
                        mapId = 'map%02d' % np.random.randint(4, 8)
                    else:
                        mapId = 'map%02d' % np.random.randint(
                            1, RANDOMIZE_MAPS + 1)
                    print(
                        '\t=> Special Config: Randomly Loading Maps. MapID = '
                        + mapId)
                    self.game.set_doom_map(mapId)
                else:
                    print('\t=> Default map loaded. MapID = ' +
                          DOOM_SETTINGS[self.level][MAP])
                    self.game.set_doom_map(DOOM_SETTINGS[self.level][MAP])
            self.game.set_doom_skill(DOOM_SETTINGS[self.level][DIFFICULTY])
            self.allowed_actions = DOOM_SETTINGS[self.level][ACTIONS]
            self.game.set_screen_resolution(self.screen_resolution)

        self.previous_level = self.level
        self._closed = False

        # Algo mode
        if 'human' != self._mode:
            if NO_MONSTERS:
                print('\t=> Special Config: Monsters Removed.')
                self.game.add_game_args('-nomonsters 1')
            self.game
            self.game.set_window_visible(False)
            self.game.set_mode(Mode.PLAYER)
            self.no_render = False
            try:
                with self.lock:
                    self.game.init()
            except (ViZDoomUnexpectedExitException, ViZDoomErrorException):
                raise error.Error(
                    'VizDoom exited unexpectedly. This is likely caused by a missing multiprocessing lock. '
                    +
                    'To run VizDoom across multiple processes, you need to pass a lock when you configure the env '
                    +
                    '[e.g. env.configure(lock=my_multiprocessing_lock)], or create and close an env '
                    +
                    'before starting your processes [e.g. env = gym.make("DoomBasic-v0"); env.close()] to cache a '
                    + 'singleton lock in memory.')
            self._start_episode()
            self.is_initialized = True
            return self.game.get_state().image_buffer.copy()

        # Human mode
        else:
            if NO_MONSTERS:
                print('\t=> Special Config: Monsters Removed.')
                self.game.add_game_args('-nomonsters 1')
            self.game.add_game_args('+freelook 1')
            self.game.set_window_visible(True)
            self.game.set_mode(Mode.SPECTATOR)
            self.no_render = True
            with self.lock:
                self.game.init()
            self._start_episode()
            self.is_initialized = True
            self._play_human_mode()
            return np.zeros(shape=self.observation_space.shape, dtype=np.uint8)