From 958810ed1e78624c300e327a0c79212f2453cfb7 Mon Sep 17 00:00:00 2001 From: Szymon Sidor Date: Wed, 17 May 2017 14:41:46 -0700 Subject: [PATCH] Initial commit --- .gitignore | 29 + LICENSE | 21 + README.md | 66 ++ baselines/__init__.py | 0 baselines/common/__init__.py | 4 + baselines/common/atari_wrappers_deprecated.py | 240 ++++++ baselines/common/azure_utils.py | 149 ++++ baselines/common/misc_util.py | 327 ++++++++ baselines/common/schedules.py | 99 +++ baselines/common/segment_tree.py | 146 ++++ baselines/common/tests/test_schedules.py | 26 + baselines/common/tests/test_segment_tree.py | 103 +++ baselines/common/tests/test_tf_util.py | 69 ++ baselines/common/tf_util.py | 789 ++++++++++++++++++ baselines/deepq/__init__.py | 5 + baselines/deepq/build_graph.py | 249 ++++++ baselines/deepq/experiments/__init__.py | 0 baselines/deepq/experiments/atari/__init__.py | 0 .../deepq/experiments/atari/download_model.py | 51 ++ baselines/deepq/experiments/atari/enjoy.py | 70 ++ baselines/deepq/experiments/atari/model.py | 43 + baselines/deepq/experiments/atari/train.py | 229 +++++ .../deepq/experiments/atari/wang2015_eval.py | 81 ++ .../deepq/experiments/custom_cartpole.py | 78 ++ baselines/deepq/experiments/enjoy_cartpole.py | 21 + baselines/deepq/experiments/enjoy_pong.py | 23 + baselines/deepq/experiments/train_cartpole.py | 31 + baselines/deepq/experiments/train_pong.py | 34 + baselines/deepq/models.py | 82 ++ baselines/deepq/replay_buffer.py | 190 +++++ baselines/deepq/simple.py | 267 ++++++ baselines/logger.py | 292 +++++++ data/cartpole.gif | Bin 0 -> 334931 bytes data/logo.jpg | Bin 0 -> 121633 bytes setup.py | 25 + 35 files changed, 3839 insertions(+) create mode 100644 .gitignore create mode 100644 LICENSE create mode 100644 README.md create mode 100644 baselines/__init__.py create mode 100644 baselines/common/__init__.py create mode 100644 baselines/common/atari_wrappers_deprecated.py create mode 100644 baselines/common/azure_utils.py create mode 100644 baselines/common/misc_util.py create mode 100644 baselines/common/schedules.py create mode 100644 baselines/common/segment_tree.py create mode 100644 baselines/common/tests/test_schedules.py create mode 100644 baselines/common/tests/test_segment_tree.py create mode 100644 baselines/common/tests/test_tf_util.py create mode 100644 baselines/common/tf_util.py create mode 100644 baselines/deepq/__init__.py create mode 100644 baselines/deepq/build_graph.py create mode 100644 baselines/deepq/experiments/__init__.py create mode 100644 baselines/deepq/experiments/atari/__init__.py create mode 100644 baselines/deepq/experiments/atari/download_model.py create mode 100644 baselines/deepq/experiments/atari/enjoy.py create mode 100644 baselines/deepq/experiments/atari/model.py create mode 100644 baselines/deepq/experiments/atari/train.py create mode 100644 baselines/deepq/experiments/atari/wang2015_eval.py create mode 100644 baselines/deepq/experiments/custom_cartpole.py create mode 100644 baselines/deepq/experiments/enjoy_cartpole.py create mode 100644 baselines/deepq/experiments/enjoy_pong.py create mode 100644 baselines/deepq/experiments/train_cartpole.py create mode 100644 baselines/deepq/experiments/train_pong.py create mode 100644 baselines/deepq/models.py create mode 100644 baselines/deepq/replay_buffer.py create mode 100644 baselines/deepq/simple.py create mode 100644 baselines/logger.py create mode 100644 data/cartpole.gif create mode 100644 data/logo.jpg create mode 100644 setup.py diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000000..0475d4f356 --- /dev/null +++ b/.gitignore @@ -0,0 +1,29 @@ +*.swp +*.pyc +*.py~ +.DS_Store +.idea + +# Setuptools distribution and build folders. +/dist/ +/build + +# Virtualenv +/env + +# Python egg metadata, regenerated from source files by setuptools. +/*.egg-info + +*.sublime-project +*.sublime-workspace + +.idea + +logs/ + +.ipynb_checkpoints +ghostdriver.log + +htmlcov + +junk \ No newline at end of file diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000000..57f53c30e8 --- /dev/null +++ b/LICENSE @@ -0,0 +1,21 @@ +The MIT License + +Copyright (c) 2017 OpenAI (http://openai.com) + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/README.md b/README.md new file mode 100644 index 0000000000..0bea2f9a62 --- /dev/null +++ b/README.md @@ -0,0 +1,66 @@ + + +# Baselines + +We're releasing OpenAI Baselines, a set of high-quality implementations of reinforcement learning algorithms. To start, we're making available an open source version of Deep Q-Learning and three of its variants. + +These algorithms will make it easier for the research community to replicate, refine, and identify new ideas, and will create good baselines to build research on top of. Our DQN implementation and its variants are roughly on par with the scores in published papers. We expect they will be used as a base around which new ideas can be added, and as a tool for comparing a new approach against existing ones. + +You can install it by typing: + +```bash +pip install baselines +``` + + +## If you are curious. + +##### Train a Cartpole agent and watch it play once it converges! + +Here's a list of commands to run to quickly get a working example: + + + + +```bash +# Train model and save the results to cartpole_model.pkl +python -m baselines.deepq.experiments.train_cartpole +# Load the model saved in cartpole_model.pkl and visualize the learned policy +python -m baselines.deepq.experiments.enjoy_cartpole +``` + + +Be sure to check out the source code of [both](baselines/deepq/experiments/train_cartpole.py) [files](baselines/deepq/experiments/enjoy_cartpole.py)! + +## If you wish to apply DQN to solve a problem. + +Check out our simple agented trained with one stop shop `deepq.learn` function. + +- `baselines/deepq/experiments/train_cartpole.py` - train a Cartpole agent. +- `baselines/deepq/experiments/train_pong.py` - train a Pong agent using convolutional neural networks. + +In particular notice that once `deepq.learn` finishes training it returns `act` function which can be used to select actions in the environment. Once trained you can easily save it and load at later time. For both of the files listed above there are complimentary files `enjoy_cartpole.py` and `enjoy_pong.py` respectively, that load and visualize the learned policy. + +## If you wish to experiment with the algorithm + +##### Check out the examples + + +- `baselines/deepq/experiments/custom_cartpole.py` - Cartpole training with more fine grained control over the internals of DQN algorithm. +- `baselines/deepq/experiments/atari/train.py` - more robust setup for training at scale. + + +##### Download a pretrained Atari agent + +For some research projects it is sometimes useful to have an already trained agent handy. There's a variety of models to choose from. You can list them all by running: + +```bash +python -m baselines.deepq.experiments.download_model +``` + +Once you pick a model, you can download it and visualize the learned policy. Be sure to pass `--dueling` flag to visualization script when using dueling models. + +```bash +python -m baselines.deepq.experiments.atari.download_model --blob model-atari-prior-duel-breakout-1 --model-dir /tmp/models +python -m baselines.deepq.experiments.atari.enjoy --model-dir /tmp/models/model-atari-prior-duel-breakout-1 --env Breakout --dueling +``` diff --git a/baselines/__init__.py b/baselines/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/baselines/common/__init__.py b/baselines/common/__init__.py new file mode 100644 index 0000000000..d3433c7301 --- /dev/null +++ b/baselines/common/__init__.py @@ -0,0 +1,4 @@ + + + +from baselines.common.misc_util import * diff --git a/baselines/common/atari_wrappers_deprecated.py b/baselines/common/atari_wrappers_deprecated.py new file mode 100644 index 0000000000..752a670555 --- /dev/null +++ b/baselines/common/atari_wrappers_deprecated.py @@ -0,0 +1,240 @@ +import cv2 +import gym +import numpy as np + +from collections import deque +from gym import spaces + + +class NoopResetEnv(gym.Wrapper): + def __init__(self, env=None, noop_max=30): + """Sample initial states by taking random number of no-ops on reset. + No-op is assumed to be action 0. + """ + super(NoopResetEnv, self).__init__(env) + self.noop_max = noop_max + self.override_num_noops = None + assert env.unwrapped.get_action_meanings()[0] == 'NOOP' + + def _reset(self): + """ Do no-op action for a number of steps in [1, noop_max].""" + self.env.reset() + if self.override_num_noops is not None: + noops = self.override_num_noops + else: + noops = np.random.randint(1, self.noop_max + 1) + assert noops > 0 + obs = None + for _ in range(noops): + obs, _, done, _ = self.env.step(0) + if done: + obs = self.env.reset() + return obs + + +class FireResetEnv(gym.Wrapper): + def __init__(self, env=None): + """For environments where the user need to press FIRE for the game to start.""" + super(FireResetEnv, self).__init__(env) + assert env.unwrapped.get_action_meanings()[1] == 'FIRE' + assert len(env.unwrapped.get_action_meanings()) >= 3 + + def _reset(self): + self.env.reset() + obs, _, done, _ = self.env.step(1) + if done: + self.env.reset() + obs, _, done, _ = self.env.step(2) + if done: + self.env.reset() + return obs + + +class EpisodicLifeEnv(gym.Wrapper): + def __init__(self, env=None): + """Make end-of-life == end-of-episode, but only reset on true game over. + Done by DeepMind for the DQN and co. since it helps value estimation. + """ + super(EpisodicLifeEnv, self).__init__(env) + self.lives = 0 + self.was_real_done = True + self.was_real_reset = False + + def _step(self, action): + obs, reward, done, info = self.env.step(action) + self.was_real_done = done + # check current lives, make loss of life terminal, + # then update lives to handle bonus lives + lives = self.env.unwrapped.ale.lives() + if lives < self.lives and lives > 0: + # for Qbert somtimes we stay in lives == 0 condtion for a few frames + # so its important to keep lives > 0, so that we only reset once + # the environment advertises done. + done = True + self.lives = lives + return obs, reward, done, info + + def _reset(self): + """Reset only when lives are exhausted. + This way all states are still reachable even though lives are episodic, + and the learner need not know about any of this behind-the-scenes. + """ + if self.was_real_done: + obs = self.env.reset() + self.was_real_reset = True + else: + # no-op step to advance from terminal/lost life state + obs, _, _, _ = self.env.step(0) + self.was_real_reset = False + self.lives = self.env.unwrapped.ale.lives() + return obs + + +class MaxAndSkipEnv(gym.Wrapper): + def __init__(self, env=None, skip=4): + """Return only every `skip`-th frame""" + super(MaxAndSkipEnv, self).__init__(env) + # most recent raw observations (for max pooling across time steps) + self._obs_buffer = deque(maxlen=2) + self._skip = skip + + def _step(self, action): + total_reward = 0.0 + done = None + for _ in range(self._skip): + obs, reward, done, info = self.env.step(action) + self._obs_buffer.append(obs) + total_reward += reward + if done: + break + + max_frame = np.max(np.stack(self._obs_buffer), axis=0) + + return max_frame, total_reward, done, info + + def _reset(self): + """Clear past frame buffer and init. to first obs. from inner env.""" + self._obs_buffer.clear() + obs = self.env.reset() + self._obs_buffer.append(obs) + return obs + + +class ProcessFrame84(gym.ObservationWrapper): + def __init__(self, env=None): + super(ProcessFrame84, self).__init__(env) + self.observation_space = spaces.Box(low=0, high=255, shape=(84, 84, 1)) + + def _observation(self, obs): + return ProcessFrame84.process(obs) + + @staticmethod + def process(frame): + resized_screen = None + if frame.size == 210 * 160 * 3: + img = np.reshape(frame, [210, 160, 3]).astype(np.float32) + elif frame.size == 250 * 160 * 3: + img = np.reshape(frame, [250, 160, 3]).astype(np.float32) + else: + assert False, "Unknown resolution." + img = img[:, :, 0] * 0.299 + img[:, :, 1] * 0.587 + img[:, :, 2] * 0.114 + resized_screen = cv2.resize(img, (84, 110), interpolation=cv2.INTER_AREA) + x_t = resized_screen[18:102, :] + x_t = np.reshape(x_t, [84, 84, 1]) + return x_t.astype(np.uint8) + + +class ClippedRewardsWrapper(gym.RewardWrapper): + def _reward(self, reward): + """Change all the positive rewards to 1, negative to -1 and keep zero.""" + return np.sign(reward) + + +class LazyFrames(object): + def __init__(self, frames): + """This object ensures that common frames between the observations are only stored once. + It exists purely to optimize memory usage which can be huge for DQN's 1M frames replay + buffers. + + This object should only be converted to numpy array before being passed to the model. + + You'd not belive how complex the previous solution was.""" + self._frames = frames + + def __array__(self, dtype=None): + out = np.concatenate(self._frames, axis=2) + if dtype is not None: + out = out.astype(dtype) + return out + + +class FrameStack(gym.Wrapper): + def __init__(self, env, k): + """Stack k last frames. + + Returns lazy array, which is much more memory efficient. + + See Also + -------- + baselines.common.atari_wrappers.LazyFrames + """ + gym.Wrapper.__init__(self, env) + self.k = k + self.frames = deque([], maxlen=k) + shp = env.observation_space.shape + self.observation_space = spaces.Box(low=0, high=255, shape=(shp[0], shp[1], shp[2] * k)) + + def _reset(self): + ob = self.env.reset() + for _ in range(self.k): + self.frames.append(ob) + return self._get_ob() + + def _step(self, action): + ob, reward, done, info = self.env.step(action) + self.frames.append(ob) + return self._get_ob(), reward, done, info + + def _get_ob(self): + assert len(self.frames) == self.k + return LazyFrames(list(self.frames)) + + +class ScaledFloatFrame(gym.ObservationWrapper): + def _observation(self, obs): + # careful! This undoes the memory optimization, use + # with smaller replay buffers only. + return np.array(obs).astype(np.float32) / 255.0 + + +def wrap_dqn(env): + """Apply a common set of wrappers for Atari games.""" + assert 'NoFrameskip' in env.spec.id + env = EpisodicLifeEnv(env) + env = NoopResetEnv(env, noop_max=30) + env = MaxAndSkipEnv(env, skip=4) + if 'FIRE' in env.unwrapped.get_action_meanings(): + env = FireResetEnv(env) + env = ProcessFrame84(env) + env = FrameStack(env, 4) + env = ClippedRewardsWrapper(env) + return env + + +class A2cProcessFrame(gym.Wrapper): + def __init__(self, env): + gym.Wrapper.__init__(self, env) + self.observation_space = spaces.Box(low=0, high=255, shape=(84, 84, 1)) + + def _step(self, action): + ob, reward, done, info = self.env.step(action) + return A2cProcessFrame.process(ob), reward, done, info + + def _reset(self): + return A2cProcessFrame.process(self.env.reset()) + + @staticmethod + def process(frame): + frame = cv2.cvtColor(frame, cv2.COLOR_RGB2GRAY) + frame = cv2.resize(frame, (84, 84), interpolation=cv2.INTER_AREA) + return frame.reshape(84, 84, 1) diff --git a/baselines/common/azure_utils.py b/baselines/common/azure_utils.py new file mode 100644 index 0000000000..442c1ade21 --- /dev/null +++ b/baselines/common/azure_utils.py @@ -0,0 +1,149 @@ +import os +import tempfile +import zipfile + +from azure.common import AzureMissingResourceHttpError +from azure.storage.blob import BlobService +from shutil import unpack_archive +from threading import Event + +"""TODOS: + - use Azure snapshots instead of hacky backups +""" + + +def fixed_list_blobs(service, *args, **kwargs): + """By defualt list_containers only returns a subset of results. + + This function attempts to fix this. + """ + res = [] + next_marker = None + while next_marker is None or len(next_marker) > 0: + kwargs['marker'] = next_marker + gen = service.list_blobs(*args, **kwargs) + for b in gen: + res.append(b.name) + next_marker = gen.next_marker + return res + + +def make_archive(source_path, dest_path): + if source_path.endswith(os.path.sep): + source_path = source_path.rstrip(os.path.sep) + prefix_path = os.path.dirname(source_path) + with zipfile.ZipFile(dest_path, "w", compression=zipfile.ZIP_STORED) as zf: + if os.path.isdir(source_path): + for dirname, subdirs, files in os.walk(source_path): + zf.write(dirname, os.path.relpath(dirname, prefix_path)) + for filename in files: + filepath = os.path.join(dirname, filename) + zf.write(filepath, os.path.relpath(filepath, prefix_path)) + else: + zf.write(source_path, os.path.relpath(source_path, prefix_path)) + + +class Container(object): + services = {} + + def __init__(self, account_name, account_key, container_name, maybe_create=False): + self._account_name = account_name + self._container_name = container_name + if account_name not in Container.services: + Container.services[account_name] = BlobService(account_name, account_key) + self._service = Container.services[account_name] + if maybe_create: + self._service.create_container(self._container_name, fail_on_exist=False) + + def put(self, source_path, blob_name, callback=None): + """Upload a file or directory from `source_path` to azure blob `blob_name`. + + Upload progress can be traced by an optional callback. + """ + upload_done = Event() + + def progress_callback(current, total): + if callback: + callback(current, total) + if current >= total: + upload_done.set() + + # Attempt to make backup if an existing version is already available + try: + x_ms_copy_source = "https://{}.blob.core.windows.net/{}/{}".format( + self._account_name, + self._container_name, + blob_name + ) + self._service.copy_blob( + container_name=self._container_name, + blob_name=blob_name + ".backup", + x_ms_copy_source=x_ms_copy_source + ) + except AzureMissingResourceHttpError: + pass + + with tempfile.TemporaryDirectory() as td: + arcpath = os.path.join(td, "archive.zip") + make_archive(source_path, arcpath) + self._service.put_block_blob_from_path( + container_name=self._container_name, + blob_name=blob_name, + file_path=arcpath, + max_connections=4, + progress_callback=progress_callback, + max_retries=10) + upload_done.wait() + + def get(self, dest_path, blob_name, callback=None): + """Download a file or directory to `dest_path` to azure blob `blob_name`. + + Warning! If directory is downloaded the `dest_path` is the parent directory. + + Upload progress can be traced by an optional callback. + """ + download_done = Event() + + def progress_callback(current, total): + if callback: + callback(current, total) + if current >= total: + download_done.set() + + with tempfile.TemporaryDirectory() as td: + arcpath = os.path.join(td, "archive.zip") + for backup_blob_name in [blob_name, blob_name + '.backup']: + try: + blob_size = self._service.get_blob_properties( + blob_name=backup_blob_name, + container_name=self._container_name + )['content-length'] + if int(blob_size) > 0: + self._service.get_blob_to_path( + container_name=self._container_name, + blob_name=backup_blob_name, + file_path=arcpath, + max_connections=4, + progress_callback=progress_callback, + max_retries=10) + unpack_archive(arcpath, dest_path) + download_done.wait() + return True + except AzureMissingResourceHttpError: + pass + return False + + def list(self, prefix=None): + """List all blobs in the container.""" + return fixed_list_blobs(self._service, self._container_name, prefix=prefix) + + def exists(self, blob_name): + """Returns true if `blob_name` exists in container.""" + try: + self._service.get_blob_properties( + blob_name=blob_name, + container_name=self._container_name + ) + return True + except AzureMissingResourceHttpError: + return False diff --git a/baselines/common/misc_util.py b/baselines/common/misc_util.py new file mode 100644 index 0000000000..8eff011cbf --- /dev/null +++ b/baselines/common/misc_util.py @@ -0,0 +1,327 @@ +import gym +import numpy as np +import os +import pickle +import random +import tempfile +import time +import zipfile + + +def zipsame(*seqs): + L = len(seqs[0]) + assert all(len(seq) == L for seq in seqs[1:]) + return zip(*seqs) + + +def unpack(seq, sizes): + """ + Unpack 'seq' into a sequence of lists, with lengths specified by 'sizes'. + None = just one bare element, not a list + + Example: + unpack([1,2,3,4,5,6], [3,None,2]) -> ([1,2,3], 4, [5,6]) + """ + seq = list(seq) + it = iter(seq) + assert sum(1 if s is None else s for s in sizes) == len(seq), "Trying to unpack %s into %s" % (seq, sizes) + for size in sizes: + if size is None: + yield it.__next__() + else: + li = [] + for _ in range(size): + li.append(it.__next__()) + yield li + + +class EzPickle(object): + """Objects that are pickled and unpickled via their constructor + arguments. + + Example usage: + + class Dog(Animal, EzPickle): + def __init__(self, furcolor, tailkind="bushy"): + Animal.__init__() + EzPickle.__init__(furcolor, tailkind) + ... + + When this object is unpickled, a new Dog will be constructed by passing the provided + furcolor and tailkind into the constructor. However, philosophers are still not sure + whether it is still the same dog. + + This is generally needed only for environments which wrap C/C++ code, such as MuJoCo + and Atari. + """ + + def __init__(self, *args, **kwargs): + self._ezpickle_args = args + self._ezpickle_kwargs = kwargs + + def __getstate__(self): + return {"_ezpickle_args": self._ezpickle_args, "_ezpickle_kwargs": self._ezpickle_kwargs} + + def __setstate__(self, d): + out = type(self)(*d["_ezpickle_args"], **d["_ezpickle_kwargs"]) + self.__dict__.update(out.__dict__) + + +def set_global_seeds(i): + try: + import tensorflow as tf + except ImportError: + pass + else: + tf.set_random_seed(i) + np.random.seed(i) + random.seed(i) + + +def pretty_eta(seconds_left): + """Print the number of seconds in human readable format. + + Examples: + 2 days + 2 hours and 37 minutes + less than a minute + + Paramters + --------- + seconds_left: int + Number of seconds to be converted to the ETA + Returns + ------- + eta: str + String representing the pretty ETA. + """ + minutes_left = seconds_left // 60 + seconds_left %= 60 + hours_left = minutes_left // 60 + minutes_left %= 60 + days_left = hours_left // 24 + hours_left %= 24 + + def helper(cnt, name): + return "{} {}{}".format(str(cnt), name, ('s' if cnt > 1 else '')) + + if days_left > 0: + msg = helper(days_left, 'day') + if hours_left > 0: + msg += ' and ' + helper(hours_left, 'hour') + return msg + if hours_left > 0: + msg = helper(hours_left, 'hour') + if minutes_left > 0: + msg += ' and ' + helper(minutes_left, 'minute') + return msg + if minutes_left > 0: + return helper(minutes_left, 'minute') + return 'less than a minute' + + +class RunningAvg(object): + def __init__(self, gamma, init_value=None): + """Keep a running estimate of a quantity. This is a bit like mean + but more sensitive to recent changes. + + Parameters + ---------- + gamma: float + Must be between 0 and 1, where 0 is the most sensitive to recent + changes. + init_value: float or None + Initial value of the estimate. If None, it will be set on the first update. + """ + self._value = init_value + self._gamma = gamma + + def update(self, new_val): + """Update the estimate. + + Parameters + ---------- + new_val: float + new observated value of estimated quantity. + """ + if self._value is None: + self._value = new_val + else: + self._value = self._gamma * self._value + (1.0 - self._gamma) * new_val + + def __float__(self): + """Get the current estimate""" + return self._value + + +class SimpleMonitor(gym.Wrapper): + def __init__(self, env=None): + """Adds two qunatities to info returned by every step: + + num_steps: int + Number of steps takes so far + rewards: [float] + All the cumulative rewards for the episodes completed so far. + """ + super().__init__(env) + # current episode state + self._current_reward = None + self._num_steps = None + # temporary monitor state that we do not save + self._time_offset = None + self._total_steps = None + # monitor state + self._episode_rewards = [] + self._episode_lengths = [] + self._episode_end_times = [] + + def _reset(self): + obs = self.env.reset() + # recompute temporary state if needed + if self._time_offset is None: + self._time_offset = time.time() + if len(self._episode_end_times) > 0: + self._time_offset -= self._episode_end_times[-1] + if self._total_steps is None: + self._total_steps = sum(self._episode_lengths) + # update monitor state + if self._current_reward is not None: + self._episode_rewards.append(self._current_reward) + self._episode_lengths.append(self._num_steps) + self._episode_end_times.append(time.time() - self._time_offset) + # reset episode state + self._current_reward = 0 + self._num_steps = 0 + + return obs + + def _step(self, action): + obs, rew, done, info = self.env.step(action) + self._current_reward += rew + self._num_steps += 1 + self._total_steps += 1 + info['steps'] = self._total_steps + info['rewards'] = self._episode_rewards + return (obs, rew, done, info) + + def get_state(self): + return { + 'env_id': self.env.unwrapped.spec.id, + 'episode_data': { + 'episode_rewards': self._episode_rewards, + 'episode_lengths': self._episode_lengths, + 'episode_end_times': self._episode_end_times, + 'initial_reset_time': 0, + } + } + + def set_state(self, state): + assert state['env_id'] == self.env.unwrapped.spec.id + ed = state['episode_data'] + self._episode_rewards = ed['episode_rewards'] + self._episode_lengths = ed['episode_lengths'] + self._episode_end_times = ed['episode_end_times'] + + +def boolean_flag(parser, name, default=False, help=None): + """Add a boolean flag to argparse parser. + + Parameters + ---------- + parser: argparse.Parser + parser to add the flag to + name: str + -- will enable the flag, while --no- will disable it + default: bool or None + default value of the flag + help: str + help string for the flag + """ + parser.add_argument("--" + name, action="store_true", default=default, help=help) + parser.add_argument("--no-" + name, action="store_false", dest=name) + + +def get_wrapper_by_name(env, classname): + """Given an a gym environment possibly wrapped multiple times, returns a wrapper + of class named classname or raises ValueError if no such wrapper was applied + + Parameters + ---------- + env: gym.Env of gym.Wrapper + gym environment + classname: str + name of the wrapper + + Returns + ------- + wrapper: gym.Wrapper + wrapper named classname + """ + currentenv = env + while True: + if classname == currentenv.class_name(): + return currentenv + elif isinstance(currentenv, gym.Wrapper): + currentenv = currentenv.env + else: + raise ValueError("Couldn't find wrapper named %s" % classname) + + +def relatively_safe_pickle_dump(obj, path, compression=False): + """This is just like regular pickle dump, except from the fact that failure cases are + different: + + - It's never possible that we end up with a pickle in corrupted state. + - If a there was a different file at the path, that file will remain unchanged in the + even of failure (provided that filesystem rename is atomic). + - it is sometimes possible that we end up with useless temp file which needs to be + deleted manually (it will be removed automatically on the next function call) + + The indended use case is periodic checkpoints of experiment state, such that we never + corrupt previous checkpoints if the current one fails. + + Parameters + ---------- + obj: object + object to pickle + path: str + path to the output file + compression: bool + if true pickle will be compressed + """ + temp_storage = path + ".relatively_safe" + if compression: + # Using gzip here would be simpler, but the size is limited to 2GB + with tempfile.NamedTemporaryFile() as uncompressed_file: + pickle.dump(obj, uncompressed_file) + with zipfile.ZipFile(temp_storage, "w", compression=zipfile.ZIP_DEFLATED) as myzip: + myzip.write(uncompressed_file.name, "data") + else: + with open(temp_storage, "wb") as f: + pickle.dump(obj, f) + os.rename(temp_storage, path) + + +def pickle_load(path, compression=False): + """Unpickle a possible compressed pickle. + + Parameters + ---------- + path: str + path to the output file + compression: bool + if true assumes that pickle was compressed when created and attempts decompression. + + Returns + ------- + obj: object + the unpickled object + """ + + if compression: + with zipfile.ZipFile(path, "r", compression=zipfile.ZIP_DEFLATED) as myzip: + with myzip.open("data") as f: + return pickle.load(f) + else: + with open(path, "rb") as f: + return pickle.load(f) diff --git a/baselines/common/schedules.py b/baselines/common/schedules.py new file mode 100644 index 0000000000..9dfff50f95 --- /dev/null +++ b/baselines/common/schedules.py @@ -0,0 +1,99 @@ +"""This file is used for specifying various schedules that evolve over +time throughout the execution of the algorithm, such as: + - learning rate for the optimizer + - exploration epsilon for the epsilon greedy exploration strategy + - beta parameter for beta parameter in prioritized replay + +Each schedule has a function `value(t)` which returns the current value +of the parameter given the timestep t of the optimization procedure. +""" + + +class Schedule(object): + def value(self, t): + """Value of the schedule at time t""" + raise NotImplementedError() + + +class ConstantSchedule(object): + def __init__(self, value): + """Value remains constant over time. + + Parameters + ---------- + value: float + Constant value of the schedule + """ + self._v = value + + def value(self, t): + """See Schedule.value""" + return self._v + + +def linear_interpolation(l, r, alpha): + return l + alpha * (r - l) + + +class PiecewiseSchedule(object): + def __init__(self, endpoints, interpolation=linear_interpolation, outside_value=None): + """Piecewise schedule. + + endpoints: [(int, int)] + list of pairs `(time, value)` meanining that schedule should output + `value` when `t==time`. All the values for time must be sorted in + an increasing order. When t is between two times, e.g. `(time_a, value_a)` + and `(time_b, value_b)`, such that `time_a <= t < time_b` then value outputs + `interpolation(value_a, value_b, alpha)` where alpha is a fraction of + time passed between `time_a` and `time_b` for time `t`. + interpolation: lambda float, float, float: float + a function that takes value to the left and to the right of t according + to the `endpoints`. Alpha is the fraction of distance from left endpoint to + right endpoint that t has covered. See linear_interpolation for example. + outside_value: float + if the value is requested outside of all the intervals sepecified in + `endpoints` this value is returned. If None then AssertionError is + raised when outside value is requested. + """ + idxes = [e[0] for e in endpoints] + assert idxes == sorted(idxes) + self._interpolation = interpolation + self._outside_value = outside_value + self._endpoints = endpoints + + def value(self, t): + """See Schedule.value""" + for (l_t, l), (r_t, r) in zip(self._endpoints[:-1], self._endpoints[1:]): + if l_t <= t and t < r_t: + alpha = float(t - l_t) / (r_t - l_t) + return self._interpolation(l, r, alpha) + + # t does not belong to any of the pieces, so doom. + assert self._outside_value is not None + return self._outside_value + + +class LinearSchedule(object): + def __init__(self, schedule_timesteps, final_p, initial_p=1.0): + """Linear interpolation between initial_p and final_p over + schedule_timesteps. After this many timesteps pass final_p is + returned. + + Parameters + ---------- + schedule_timesteps: int + Number of timesteps for which to linearly anneal initial_p + to final_p + initial_p: float + initial output value + final_p: float + final output value + """ + self.schedule_timesteps = schedule_timesteps + self.final_p = final_p + self.initial_p = initial_p + + def value(self, t): + """See Schedule.value""" + fraction = min(float(t) / self.schedule_timesteps, 1.0) + return self.initial_p + fraction * (self.final_p - self.initial_p) diff --git a/baselines/common/segment_tree.py b/baselines/common/segment_tree.py new file mode 100644 index 0000000000..a5a7dfc20f --- /dev/null +++ b/baselines/common/segment_tree.py @@ -0,0 +1,146 @@ +import operator + + +class SegmentTree(object): + def __init__(self, capacity, operation, neutral_element): + """Build a Segment Tree data structure. + + https://en.wikipedia.org/wiki/Segment_tree + + Can be used as regular array, but with two + important differences: + + a) setting item's value is slightly slower. + It is O(lg capacity) instead of O(1). + b) user has access to an efficient `reduce` + operation which reduces `operation` over + a contiguous subsequence of items in the + array. + + Paramters + --------- + capacity: int + Total size of the array - must be a power of two. + operation: lambda obj, obj -> obj + and operation for combining elements (eg. sum, max) + must for a mathematical group together with the set of + possible values for array elements. + neutral_element: obj + neutral element for the operation above. eg. float('-inf') + for max and 0 for sum. + """ + assert capacity > 0 and capacity & (capacity - 1) == 0, "capacity must be positive and a power of 2." + self._capacity = capacity + self._value = [neutral_element for _ in range(2 * capacity)] + self._operation = operation + + def _reduce_helper(self, start, end, node, node_start, node_end): + if start == node_start and end == node_end: + return self._value[node] + mid = (node_start + node_end) // 2 + if end <= mid: + return self._reduce_helper(start, end, 2 * node, node_start, mid) + else: + if mid + 1 <= start: + return self._reduce_helper(start, end, 2 * node + 1, mid + 1, node_end) + else: + return self._operation( + self._reduce_helper(start, mid, 2 * node, node_start, mid), + self._reduce_helper(mid + 1, end, 2 * node + 1, mid + 1, node_end) + ) + + def reduce(self, start=0, end=None): + """Returns result of applying `self.operation` + to a contiguous subsequence of the array. + + self.operation(arr[start], operation(arr[start+1], operation(... arr[end]))) + + Parameters + ---------- + start: int + beginning of the subsequence + end: int + end of the subsequences + + Returns + ------- + reduced: obj + result of reducing self.operation over the specified range of array elements. + """ + if end is None: + end = self._capacity + if end < 0: + end += self._capacity + end -= 1 + return self._reduce_helper(start, end, 1, 0, self._capacity - 1) + + def __setitem__(self, idx, val): + # index of the leaf + idx += self._capacity + self._value[idx] = val + idx //= 2 + while idx >= 1: + self._value[idx] = self._operation( + self._value[2 * idx], + self._value[2 * idx + 1] + ) + idx //= 2 + + def __getitem__(self, idx): + assert 0 <= idx < self._capacity + return self._value[self._capacity + idx] + + +class SumSegmentTree(SegmentTree): + def __init__(self, capacity): + super(SumSegmentTree, self).__init__( + capacity=capacity, + operation=operator.add, + neutral_element=0.0 + ) + + def sum(self, start=0, end=None): + """Returns arr[start] + ... + arr[end]""" + return super(SumSegmentTree, self).reduce(start, end) + + def find_prefixsum_idx(self, prefixsum): + """Find the highest index `i` in the array such that + sum(arr[0] + arr[1] + ... + arr[i - i]) <= prefixsum + + if array values are probabilities, this function + allows to sample indexes according to the discrete + probability efficiently. + + Parameters + ---------- + perfixsum: float + upperbound on the sum of array prefix + + Returns + ------- + idx: int + highest index satisfying the prefixsum constraint + """ + assert 0 <= prefixsum <= self.sum() + 1e-5 + idx = 1 + while idx < self._capacity: # while non-leaf + if self._value[2 * idx] > prefixsum: + idx = 2 * idx + else: + prefixsum -= self._value[2 * idx] + idx = 2 * idx + 1 + return idx - self._capacity + + +class MinSegmentTree(SegmentTree): + def __init__(self, capacity): + super(MinSegmentTree, self).__init__( + capacity=capacity, + operation=min, + neutral_element=float('inf') + ) + + def min(self, start=0, end=None): + """Returns min(arr[start], ..., arr[end])""" + + return super(MinSegmentTree, self).reduce(start, end) diff --git a/baselines/common/tests/test_schedules.py b/baselines/common/tests/test_schedules.py new file mode 100644 index 0000000000..4e8d02d291 --- /dev/null +++ b/baselines/common/tests/test_schedules.py @@ -0,0 +1,26 @@ +import numpy as np + +from baselines.common.schedules import ConstantSchedule, PiecewiseSchedule + + +def test_piecewise_schedule(): + ps = PiecewiseSchedule([(-5, 100), (5, 200), (10, 50), (100, 50), (200, -50)], outside_value=500) + + assert np.isclose(ps.value(-10), 500) + assert np.isclose(ps.value(0), 150) + assert np.isclose(ps.value(5), 200) + assert np.isclose(ps.value(9), 80) + assert np.isclose(ps.value(50), 50) + assert np.isclose(ps.value(80), 50) + assert np.isclose(ps.value(150), 0) + assert np.isclose(ps.value(175), -25) + assert np.isclose(ps.value(201), 500) + assert np.isclose(ps.value(500), 500) + + assert np.isclose(ps.value(200 - 1e-10), -50) + + +def test_constant_schedule(): + cs = ConstantSchedule(5) + for i in range(-100, 100): + assert np.isclose(cs.value(i), 5) diff --git a/baselines/common/tests/test_segment_tree.py b/baselines/common/tests/test_segment_tree.py new file mode 100644 index 0000000000..700e0bb456 --- /dev/null +++ b/baselines/common/tests/test_segment_tree.py @@ -0,0 +1,103 @@ +import numpy as np + +from baselines.common.segment_tree import SumSegmentTree, MinSegmentTree + + +def test_tree_set(): + tree = SumSegmentTree(4) + + tree[2] = 1.0 + tree[3] = 3.0 + + assert np.isclose(tree.sum(), 4.0) + assert np.isclose(tree.sum(0, 2), 0.0) + assert np.isclose(tree.sum(0, 3), 1.0) + assert np.isclose(tree.sum(2, 3), 1.0) + assert np.isclose(tree.sum(2, -1), 1.0) + assert np.isclose(tree.sum(2, 4), 4.0) + + +def test_tree_set_overlap(): + tree = SumSegmentTree(4) + + tree[2] = 1.0 + tree[2] = 3.0 + + assert np.isclose(tree.sum(), 3.0) + assert np.isclose(tree.sum(2, 3), 3.0) + assert np.isclose(tree.sum(2, -1), 3.0) + assert np.isclose(tree.sum(2, 4), 3.0) + assert np.isclose(tree.sum(1, 2), 0.0) + + +def test_prefixsum_idx(): + tree = SumSegmentTree(4) + + tree[2] = 1.0 + tree[3] = 3.0 + + assert tree.find_prefixsum_idx(0.0) == 2 + assert tree.find_prefixsum_idx(0.5) == 2 + assert tree.find_prefixsum_idx(0.99) == 2 + assert tree.find_prefixsum_idx(1.01) == 3 + assert tree.find_prefixsum_idx(3.00) == 3 + assert tree.find_prefixsum_idx(4.00) == 3 + + +def test_prefixsum_idx2(): + tree = SumSegmentTree(4) + + tree[0] = 0.5 + tree[1] = 1.0 + tree[2] = 1.0 + tree[3] = 3.0 + + assert tree.find_prefixsum_idx(0.00) == 0 + assert tree.find_prefixsum_idx(0.55) == 1 + assert tree.find_prefixsum_idx(0.99) == 1 + assert tree.find_prefixsum_idx(1.51) == 2 + assert tree.find_prefixsum_idx(3.00) == 3 + assert tree.find_prefixsum_idx(5.50) == 3 + + +def test_max_interval_tree(): + tree = MinSegmentTree(4) + + tree[0] = 1.0 + tree[2] = 0.5 + tree[3] = 3.0 + + assert np.isclose(tree.min(), 0.5) + assert np.isclose(tree.min(0, 2), 1.0) + assert np.isclose(tree.min(0, 3), 0.5) + assert np.isclose(tree.min(0, -1), 0.5) + assert np.isclose(tree.min(2, 4), 0.5) + assert np.isclose(tree.min(3, 4), 3.0) + + tree[2] = 0.7 + + assert np.isclose(tree.min(), 0.7) + assert np.isclose(tree.min(0, 2), 1.0) + assert np.isclose(tree.min(0, 3), 0.7) + assert np.isclose(tree.min(0, -1), 0.7) + assert np.isclose(tree.min(2, 4), 0.7) + assert np.isclose(tree.min(3, 4), 3.0) + + tree[2] = 4.0 + + assert np.isclose(tree.min(), 1.0) + assert np.isclose(tree.min(0, 2), 1.0) + assert np.isclose(tree.min(0, 3), 1.0) + assert np.isclose(tree.min(0, -1), 1.0) + assert np.isclose(tree.min(2, 4), 3.0) + assert np.isclose(tree.min(2, 3), 4.0) + assert np.isclose(tree.min(2, -1), 4.0) + assert np.isclose(tree.min(3, 4), 3.0) + + +if __name__ == '__main__': + test_tree_set() + test_tree_set_overlap() + test_prefixsum_idx() + test_prefixsum_idx2() + test_max_interval_tree() diff --git a/baselines/common/tests/test_tf_util.py b/baselines/common/tests/test_tf_util.py new file mode 100644 index 0000000000..2e0f08816f --- /dev/null +++ b/baselines/common/tests/test_tf_util.py @@ -0,0 +1,69 @@ +# tests for tf_util +import tensorflow as tf +from baselines.common.tf_util import ( + function, + initialize, + set_value, + single_threaded_session +) + + +def test_set_value(): + a = tf.Variable(42.) + with single_threaded_session(): + set_value(a, 5) + assert a.eval() == 5 + g = tf.get_default_graph() + g.finalize() + set_value(a, 6) + assert a.eval() == 6 + + # test the test + try: + assert a.eval() == 7 + except AssertionError: + pass + else: + assert False, "assertion should have failed" + + +def test_function(): + tf.reset_default_graph() + x = tf.placeholder(tf.int32, (), name="x") + y = tf.placeholder(tf.int32, (), name="y") + z = 3 * x + 2 * y + lin = function([x, y], z, givens={y: 0}) + + with single_threaded_session(): + initialize() + + assert lin(2) == 6 + assert lin(x=3) == 9 + assert lin(2, 2) == 10 + assert lin(x=2, y=3) == 12 + + +def test_multikwargs(): + tf.reset_default_graph() + x = tf.placeholder(tf.int32, (), name="x") + with tf.variable_scope("other"): + x2 = tf.placeholder(tf.int32, (), name="x") + z = 3 * x + 2 * x2 + + lin = function([x, x2], z, givens={x2: 0}) + with single_threaded_session(): + initialize() + assert lin(2) == 6 + assert lin(2, 2) == 10 + expt_caught = False + try: + lin(x=2) + except AssertionError: + expt_caught = True + assert expt_caught + + +if __name__ == '__main__': + test_set_value() + test_function() + test_multikwargs() diff --git a/baselines/common/tf_util.py b/baselines/common/tf_util.py new file mode 100644 index 0000000000..4599d228a8 --- /dev/null +++ b/baselines/common/tf_util.py @@ -0,0 +1,789 @@ +import numpy as np +import tensorflow as tf # pylint: ignore-module +import builtins +import functools +import copy +import os +import collections + + +# ================================================================ +# Make consistent with numpy +# ================================================================ + +clip = tf.clip_by_value + + +def sum(x, axis=None, keepdims=False): + axis = None if axis is None else [axis] + return tf.reduce_sum(x, axis=axis, keep_dims=keepdims) + + +def mean(x, axis=None, keepdims=False): + axis = None if axis is None else [axis] + return tf.reduce_mean(x, axis=axis, keep_dims=keepdims) + + +def var(x, axis=None, keepdims=False): + meanx = mean(x, axis=axis, keepdims=keepdims) + return mean(tf.square(x - meanx), axis=axis, keepdims=keepdims) + + +def std(x, axis=None, keepdims=False): + return tf.sqrt(var(x, axis=axis, keepdims=keepdims)) + + +def max(x, axis=None, keepdims=False): + axis = None if axis is None else [axis] + return tf.reduce_max(x, axis=axis, keep_dims=keepdims) + + +def min(x, axis=None, keepdims=False): + axis = None if axis is None else [axis] + return tf.reduce_min(x, axis=axis, keep_dims=keepdims) + + +def concatenate(arrs, axis=0): + return tf.concat(axis=axis, values=arrs) + + +def argmax(x, axis=None): + return tf.argmax(x, axis=axis) + + +def switch(condition, then_expression, else_expression): + '''Switches between two operations depending on a scalar value (int or bool). + Note that both `then_expression` and `else_expression` + should be symbolic tensors of the *same shape*. + + # Arguments + condition: scalar tensor. + then_expression: TensorFlow operation. + else_expression: TensorFlow operation. + ''' + x_shape = copy.copy(then_expression.get_shape()) + x = tf.cond(tf.cast(condition, 'bool'), + lambda: then_expression, + lambda: else_expression) + x.set_shape(x_shape) + return x + +# ================================================================ +# Extras +# ================================================================ + + +def l2loss(params): + if len(params) == 0: + return tf.constant(0.0) + else: + return tf.add_n([sum(tf.square(p)) for p in params]) + + +def lrelu(x, leak=0.2): + f1 = 0.5 * (1 + leak) + f2 = 0.5 * (1 - leak) + return f1 * x + f2 * abs(x) + + +def categorical_sample_logits(X): + # https://github.com/tensorflow/tensorflow/issues/456 + U = tf.random_uniform(tf.shape(X)) + return argmax(X - tf.log(-tf.log(U)), axis=1) + + +# ================================================================ +# Inputs +# ================================================================ + + +def is_placeholder(x): + return type(x) is tf.Tensor and len(x.op.inputs) == 0 + + +class TfInput(object): + def __init__(self, name="(unnamed)"): + """Generalized Tensorflow placeholder. The main differences are: + - possibly uses multiple placeholders internally and returns multiple values + - can apply light postprocessing to the value feed to placeholder. + """ + self.name = name + + def get(self): + """Return the tf variable(s) representing the possibly postprocessed value + of placeholder(s). + """ + raise NotImplemented() + + def make_feed_dict(data): + """Given data input it to the placeholder(s).""" + raise NotImplemented() + + +class PlacholderTfInput(TfInput): + def __init__(self, placeholder): + """Wrapper for regular tensorflow placeholder.""" + super().__init__(placeholder.name) + self._placeholder = placeholder + + def get(self): + return self._placeholder + + def make_feed_dict(self, data): + return {self._placeholder: data} + + +class BatchInput(PlacholderTfInput): + def __init__(self, shape, dtype=tf.float32, name=None): + """Creates a placeholder for a batch of tensors of a given shape and dtype + + Parameters + ---------- + shape: [int] + shape of a single elemenet of the batch + dtype: tf.dtype + number representation used for tensor contents + name: str + name of the underlying placeholder + """ + super().__init__(tf.placeholder(dtype, [None] + list(shape), name=name)) + + +class Uint8Input(PlacholderTfInput): + def __init__(self, shape, name=None): + """Takes input in uint8 format which is cast to float32 and divided by 255 + before passing it to the model. + + On GPU this ensures lower data transfer times. + + Parameters + ---------- + shape: [int] + shape of the tensor. + name: str + name of the underlying placeholder + """ + + super().__init__(tf.placeholder(tf.uint8, [None] + list(shape), name=name)) + self._shape = shape + self._output = tf.cast(super().get(), tf.float32) / 255.0 + + def get(self): + return self._output + + +def ensure_tf_input(thing): + """Takes either tf.placeholder of TfInput and outputs equivalent TfInput""" + if isinstance(thing, TfInput): + return thing + elif is_placeholder(thing): + return PlacholderTfInput(thing) + else: + raise ValueError("Must be a placeholder or TfInput") + +# ================================================================ +# Mathematical utils +# ================================================================ + + +def huber_loss(x, delta=1.0): + """Reference: https://en.wikipedia.org/wiki/Huber_loss""" + return tf.where( + tf.abs(x) < delta, + tf.square(x) * 0.5, + delta * (tf.abs(x) - 0.5 * delta) + ) + +# ================================================================ +# Optimizer utils +# ================================================================ + + +def minimize_and_clip(optimizer, objective, var_list, clip_val=10): + """Minimized `objective` using `optimizer` w.r.t. variables in + `var_list` while ensure the norm of the gradients for each + variable is clipped to `clip_val` + """ + gradients = optimizer.compute_gradients(objective, var_list=var_list) + for i, (grad, var) in enumerate(gradients): + if grad is not None: + gradients[i] = (tf.clip_by_norm(grad, clip_val), var) + return optimizer.apply_gradients(gradients) + + +# ================================================================ +# Global session +# ================================================================ + +def get_session(): + """Returns recently made Tensorflow session""" + return tf.get_default_session() + + +def make_session(num_cpu): + """Returns a session that will use CPU's only""" + tf_config = tf.ConfigProto( + inter_op_parallelism_threads=num_cpu, + intra_op_parallelism_threads=num_cpu) + return tf.Session(config=tf_config) + + +def single_threaded_session(): + """Returns a session which will only use a single CPU""" + return make_session(1) + + +ALREADY_INITIALIZED = set() + + +def initialize(): + """Initialize all the uninitialized variables in the global scope.""" + new_variables = set(tf.global_variables()) - ALREADY_INITIALIZED + get_session().run(tf.variables_initializer(new_variables)) + ALREADY_INITIALIZED.update(new_variables) + + +def eval(expr, feed_dict=None): + if feed_dict is None: + feed_dict = {} + return get_session().run(expr, feed_dict=feed_dict) + + +VALUE_SETTERS = collections.OrderedDict() + + +def set_value(v, val): + global VALUE_SETTERS + if v in VALUE_SETTERS: + set_op, set_endpoint = VALUE_SETTERS[v] + else: + set_endpoint = tf.placeholder(v.dtype) + set_op = v.assign(set_endpoint) + VALUE_SETTERS[v] = (set_op, set_endpoint) + get_session().run(set_op, feed_dict={set_endpoint: val}) + + +# ================================================================ +# Saving variables +# ================================================================ + + +def load_state(fname): + saver = tf.train.Saver() + saver.restore(get_session(), fname) + + +def save_state(fname): + os.makedirs(os.path.dirname(fname), exist_ok=True) + saver = tf.train.Saver() + saver.save(get_session(), fname) + +# ================================================================ +# Model components +# ================================================================ + + +def normc_initializer(std=1.0): + def _initializer(shape, dtype=None, partition_info=None): # pylint: disable=W0613 + out = np.random.randn(*shape).astype(np.float32) + out *= std / np.sqrt(np.square(out).sum(axis=0, keepdims=True)) + return tf.constant(out) + return _initializer + + +def conv2d(x, num_filters, name, filter_size=(3, 3), stride=(1, 1), pad="SAME", dtype=tf.float32, collections=None, + summary_tag=None): + with tf.variable_scope(name): + stride_shape = [1, stride[0], stride[1], 1] + filter_shape = [filter_size[0], filter_size[1], int(x.get_shape()[3]), num_filters] + + # there are "num input feature maps * filter height * filter width" + # inputs to each hidden unit + fan_in = intprod(filter_shape[:3]) + # each unit in the lower layer receives a gradient from: + # "num output feature maps * filter height * filter width" / + # pooling size + fan_out = intprod(filter_shape[:2]) * num_filters + # initialize weights with random weights + w_bound = np.sqrt(6. / (fan_in + fan_out)) + + w = tf.get_variable("W", filter_shape, dtype, tf.random_uniform_initializer(-w_bound, w_bound), + collections=collections) + b = tf.get_variable("b", [1, 1, 1, num_filters], initializer=tf.zeros_initializer(), + collections=collections) + + if summary_tag is not None: + tf.summary.image(summary_tag, + tf.transpose(tf.reshape(w, [filter_size[0], filter_size[1], -1, 1]), + [2, 0, 1, 3]), + max_images=10) + + return tf.nn.conv2d(x, w, stride_shape, pad) + b + + +def dense(x, size, name, weight_init=None, bias=True): + w = tf.get_variable(name + "/w", [x.get_shape()[1], size], initializer=weight_init) + ret = tf.matmul(x, w) + if bias: + b = tf.get_variable(name + "/b", [size], initializer=tf.zeros_initializer()) + return ret + b + else: + return ret + + +def wndense(x, size, name, init_scale=1.0): + v = tf.get_variable(name + "/V", [int(x.get_shape()[1]), size], + initializer=tf.random_normal_initializer(0, 0.05)) + g = tf.get_variable(name + "/g", [size], initializer=tf.constant_initializer(init_scale)) + b = tf.get_variable(name + "/b", [size], initializer=tf.constant_initializer(0.0)) + + # use weight normalization (Salimans & Kingma, 2016) + x = tf.matmul(x, v) + scaler = g / tf.sqrt(sum(tf.square(v), axis=0, keepdims=True)) + return tf.reshape(scaler, [1, size]) * x + tf.reshape(b, [1, size]) + + +def densenobias(x, size, name, weight_init=None): + return dense(x, size, name, weight_init=weight_init, bias=False) + + +def dropout(x, pkeep, phase=None, mask=None): + mask = tf.floor(pkeep + tf.random_uniform(tf.shape(x))) if mask is None else mask + if phase is None: + return mask * x + else: + return switch(phase, mask * x, pkeep * x) + + +def batchnorm(x, name, phase, updates, gamma=0.96): + k = x.get_shape()[1] + runningmean = tf.get_variable(name + "/mean", + shape=[1, k], + initializer=tf.constant_initializer(0.0), + trainable=False) + runningvar = tf.get_variable(name + "/var", + shape=[1, k], + initializer=tf.constant_initializer(1e-4), + trainable=False) + testy = (x - runningmean) / tf.sqrt(runningvar) + + mean_ = mean(x, axis=0, keepdims=True) + var_ = mean(tf.square(x), axis=0, keepdims=True) + std = tf.sqrt(var_) + trainy = (x - mean_) / std + + updates.extend([ + tf.assign(runningmean, runningmean * gamma + mean_ * (1 - gamma)), + tf.assign(runningvar, runningvar * gamma + var_ * (1 - gamma)) + ]) + + y = switch(phase, trainy, testy) + + scaling = tf.get_variable(name + "/scaling", + shape=[1, k], + initializer=tf.constant_initializer(1.0), + trainable=True) + + translation = tf.get_variable(name + "/translation", + shape=[1, k], + initializer=tf.constant_initializer(0.0), + trainable=True) + + return y * scaling + translation + + +# ================================================================ +# Theano-like Function +# ================================================================ + + + +def function(inputs, outputs, updates=None, givens=None): + """Just like Theano function. Take a bunch of tensorflow placeholders and expersions + computed based on those placeholders and produces f(inputs) -> outputs. Function f takes + values to be feed to the inputs placeholders and produces the values of the experessions + in outputs. + + Input values can be passed in the same order as inputs or can be provided as kwargs based + on placeholder name (passed to constructor or accessible via placeholder.op.name). + + Example: + x = tf.placeholder(tf.int32, (), name="x") + y = tf.placeholder(tf.int32, (), name="y") + z = 3 * x + 2 * y + lin = function([x, y], z, givens={y: 0}) + + with single_threaded_session(): + initialize() + + assert lin(2) == 6 + assert lin(x=3) == 9 + assert lin(2, 2) == 10 + assert lin(x=2, y=3) == 12 + + Parameters + ---------- + inputs: [tf.placeholder or TfInput] + list of input arguments + outputs: [tf.Variable] or tf.Variable + list of outputs or a single output to be returned from function. Returned + value will also have the same shape. + """ + if isinstance(outputs, list): + return _Function(inputs, outputs, updates, givens=givens) + elif isinstance(outputs, (dict, collections.OrderedDict)): + f = _Function(inputs, outputs.values(), updates, givens=givens) + return lambda *args, **kwargs: type(outputs)(zip(outputs.keys(), f(*args, **kwargs))) + else: + f = _Function(inputs, [outputs], updates, givens=givens) + return lambda *args, **kwargs: f(*args, **kwargs)[0] + + +class _Function(object): + def __init__(self, inputs, outputs, updates, givens, check_nan=False): + for inpt in inputs: + if not issubclass(type(inpt), TfInput): + assert len(inpt.op.inputs) == 0, "inputs should all be placeholders of baselines.common.TfInput" + self.inputs = inputs + updates = updates or [] + self.update_group = tf.group(*updates) + self.outputs_update = list(outputs) + [self.update_group] + self.givens = {} if givens is None else givens + self.check_nan = check_nan + + def _feed_input(self, feed_dict, inpt, value): + if issubclass(type(inpt), TfInput): + feed_dict.update(inpt.make_feed_dict(value)) + elif is_placeholder(inpt): + feed_dict[inpt] = value + + def __call__(self, *args, **kwargs): + assert len(args) <= len(self.inputs), "Too many arguments provided" + feed_dict = {} + # Update the args + for inpt, value in zip(self.inputs, args): + self._feed_input(feed_dict, inpt, value) + # Update the kwargs + kwargs_passed_inpt_names = set() + for inpt in self.inputs[len(args):]: + inpt_name = inpt.name.split(':')[0] + inpt_name = inpt_name.split('/')[-1] + assert inpt_name not in kwargs_passed_inpt_names, \ + "this function has two arguments with the same name \"{}\", so kwargs cannot be used.".format(inpt_name) + if inpt_name in kwargs: + kwargs_passed_inpt_names.add(inpt_name) + self._feed_input(feed_dict, inpt, kwargs.pop(inpt_name)) + else: + assert inpt in self.givens, "Missing argument " + inpt_name + assert len(kwargs) == 0, "Function got extra arguments " + str(list(kwargs.keys())) + # Update feed dict with givens. + for inpt in self.givens: + feed_dict[inpt] = feed_dict.get(inpt, self.givens[inpt]) + results = get_session().run(self.outputs_update, feed_dict=feed_dict)[:-1] + if self.check_nan: + if any(np.isnan(r).any() for r in results): + raise RuntimeError("Nan detected") + return results + + +def mem_friendly_function(nondata_inputs, data_inputs, outputs, batch_size): + if isinstance(outputs, list): + return _MemFriendlyFunction(nondata_inputs, data_inputs, outputs, batch_size) + else: + f = _MemFriendlyFunction(nondata_inputs, data_inputs, [outputs], batch_size) + return lambda *inputs: f(*inputs)[0] + + +class _MemFriendlyFunction(object): + def __init__(self, nondata_inputs, data_inputs, outputs, batch_size): + self.nondata_inputs = nondata_inputs + self.data_inputs = data_inputs + self.outputs = list(outputs) + self.batch_size = batch_size + + def __call__(self, *inputvals): + assert len(inputvals) == len(self.nondata_inputs) + len(self.data_inputs) + nondata_vals = inputvals[0:len(self.nondata_inputs)] + data_vals = inputvals[len(self.nondata_inputs):] + feed_dict = dict(zip(self.nondata_inputs, nondata_vals)) + n = data_vals[0].shape[0] + for v in data_vals[1:]: + assert v.shape[0] == n + for i_start in range(0, n, self.batch_size): + slice_vals = [v[i_start:builtins.min(i_start + self.batch_size, n)] for v in data_vals] + for (var, val) in zip(self.data_inputs, slice_vals): + feed_dict[var] = val + results = tf.get_default_session().run(self.outputs, feed_dict=feed_dict) + if i_start == 0: + sum_results = results + else: + for i in range(len(results)): + sum_results[i] = sum_results[i] + results[i] + for i in range(len(results)): + sum_results[i] = sum_results[i] / n + return sum_results + +# ================================================================ +# Modules +# ================================================================ + + +class Module(object): + def __init__(self, name): + self.name = name + self.first_time = True + self.scope = None + self.cache = {} + + def __call__(self, *args): + if args in self.cache: + print("(%s) retrieving value from cache" % (self.name,)) + return self.cache[args] + with tf.variable_scope(self.name, reuse=not self.first_time): + scope = tf.get_variable_scope().name + if self.first_time: + self.scope = scope + print("(%s) running function for the first time" % (self.name,)) + else: + assert self.scope == scope, "Tried calling function with a different scope" + print("(%s) running function on new inputs" % (self.name,)) + self.first_time = False + out = self._call(*args) + self.cache[args] = out + return out + + def _call(self, *args): + raise NotImplementedError + + @property + def trainable_variables(self): + assert self.scope is not None, "need to call module once before getting variables" + return tf.get_collection(tf.GraphKeys.TRAINABLE_VARIABLES, self.scope) + + @property + def variables(self): + assert self.scope is not None, "need to call module once before getting variables" + return tf.get_collection(tf.GraphKeys.VARIABLES, self.scope) + + +def module(name): + @functools.wraps + def wrapper(f): + class WrapperModule(Module): + def _call(self, *args): + return f(*args) + return WrapperModule(name) + return wrapper + +# ================================================================ +# Graph traversal +# ================================================================ + + +VARIABLES = {} + + +def get_parents(node): + return node.op.inputs + + +def topsorted(outputs): + """ + Topological sort via non-recursive depth-first search + """ + assert isinstance(outputs, (list, tuple)) + marks = {} + out = [] + stack = [] # pylint: disable=W0621 + # i: node + # jidx = number of children visited so far from that node + # marks: state of each node, which is one of + # 0: haven't visited + # 1: have visited, but not done visiting children + # 2: done visiting children + for x in outputs: + stack.append((x, 0)) + while stack: + (i, jidx) = stack.pop() + if jidx == 0: + m = marks.get(i, 0) + if m == 0: + marks[i] = 1 + elif m == 1: + raise ValueError("not a dag") + else: + continue + ps = get_parents(i) + if jidx == len(ps): + marks[i] = 2 + out.append(i) + else: + stack.append((i, jidx + 1)) + j = ps[jidx] + stack.append((j, 0)) + return out + + +# ================================================================ +# Flat vectors +# ================================================================ + +def var_shape(x): + out = x.get_shape().as_list() + assert all(isinstance(a, int) for a in out), \ + "shape function assumes that shape is fully known" + return out + + +def numel(x): + return intprod(var_shape(x)) + + +def intprod(x): + return int(np.prod(x)) + + +def flatgrad(loss, var_list): + grads = tf.gradients(loss, var_list) + return tf.concat(axis=0, values=[ + tf.reshape(grad if grad is not None else tf.zeros_like(v), [numel(v)]) + for (v, grad) in zip(var_list, grads) + ]) + + +class SetFromFlat(object): + def __init__(self, var_list, dtype=tf.float32): + assigns = [] + shapes = list(map(var_shape, var_list)) + total_size = np.sum([intprod(shape) for shape in shapes]) + + self.theta = theta = tf.placeholder(dtype, [total_size]) + start = 0 + assigns = [] + for (shape, v) in zip(shapes, var_list): + size = intprod(shape) + assigns.append(tf.assign(v, tf.reshape(theta[start:start + size], shape))) + start += size + self.op = tf.group(*assigns) + + def __call__(self, theta): + get_session().run(self.op, feed_dict={self.theta: theta}) + + +class GetFlat(object): + def __init__(self, var_list): + self.op = tf.concat(axis=0, values=[tf.reshape(v, [numel(v)]) for v in var_list]) + + def __call__(self): + return get_session().run(self.op) + +# ================================================================ +# Misc +# ================================================================ + + +def fancy_slice_2d(X, inds0, inds1): + """ + like numpy X[inds0, inds1] + XXX this implementation is bad + """ + inds0 = tf.cast(inds0, tf.int64) + inds1 = tf.cast(inds1, tf.int64) + shape = tf.cast(tf.shape(X), tf.int64) + ncols = shape[1] + Xflat = tf.reshape(X, [-1]) + return tf.gather(Xflat, inds0 * ncols + inds1) + + +# ================================================================ +# Scopes +# ================================================================ + + +def scope_vars(scope, trainable_only=False): + """ + Get variables inside a scope + The scope can be specified as a string + + Parameters + ---------- + scope: str or VariableScope + scope in which the variables reside. + trainable_only: bool + whether or not to return only the variables that were marked as trainable. + + Returns + ------- + vars: [tf.Variable] + list of variables in `scope`. + """ + return tf.get_collection( + tf.GraphKeys.TRAINABLE_VARIABLES if trainable_only else tf.GraphKeys.VARIABLES, + scope=scope if isinstance(scope, str) else scope.name + ) + + +def scope_name(): + """Returns the name of current scope as a string, e.g. deepq/q_func""" + return tf.get_variable_scope().name + + +def absolute_scope_name(relative_scope_name): + """Appends parent scope name to `relative_scope_name`""" + return scope_name() + "/" + relative_scope_name + + +def lengths_to_mask(lengths_b, max_length): + """ + Turns a vector of lengths into a boolean mask + + Args: + lengths_b: an integer vector of lengths + max_length: maximum length to fill the mask + + Returns: + a boolean array of shape (batch_size, max_length) + row[i] consists of True repeated lengths_b[i] times, followed by False + """ + lengths_b = tf.convert_to_tensor(lengths_b) + assert lengths_b.get_shape().ndims == 1 + mask_bt = tf.expand_dims(tf.range(max_length), 0) < tf.expand_dims(lengths_b, 1) + return mask_bt + + +def in_session(f): + @functools.wraps(f) + def newfunc(*args, **kwargs): + with tf.Session(): + f(*args, **kwargs) + return newfunc + + +_PLACEHOLDER_CACHE = {} # name -> (placeholder, dtype, shape) + + +def get_placeholder(name, dtype, shape): + if name in _PLACEHOLDER_CACHE: + out, dtype1, shape1 = _PLACEHOLDER_CACHE[name] + assert dtype1 == dtype and shape1 == shape + return out + else: + out = tf.placeholder(dtype=dtype, shape=shape, name=name) + _PLACEHOLDER_CACHE[name] = (out, dtype, shape) + return out + + +def get_placeholder_cached(name): + return _PLACEHOLDER_CACHE[name][0] + + +def flattenallbut0(x): + return tf.reshape(x, [-1, intprod(x.get_shape().as_list()[1:])]) + + +def reset(): + global _PLACEHOLDER_CACHE + global VARIABLES + _PLACEHOLDER_CACHE = {} + VARIABLES = {} + tf.reset_default_graph() diff --git a/baselines/deepq/__init__.py b/baselines/deepq/__init__.py new file mode 100644 index 0000000000..cc04c49ae9 --- /dev/null +++ b/baselines/deepq/__init__.py @@ -0,0 +1,5 @@ +from baselines.deepq import models # noqa +from baselines.deepq.build_graph import build_act, build_train # noqa + +from baselines.deepq.simple import learn, load # noqa +from baselines.deepq.replay_buffer import ReplayBuffer, PrioritizedReplayBuffer # noqa diff --git a/baselines/deepq/build_graph.py b/baselines/deepq/build_graph.py new file mode 100644 index 0000000000..f0a560ed99 --- /dev/null +++ b/baselines/deepq/build_graph.py @@ -0,0 +1,249 @@ +"""Deep Q learning graph + +The functions in this file can are used to create the following functions: + +======= act ======== + + Function to chose an action given an observation + + Parameters + ---------- + observation: object + Observation that can be feed into the output of make_obs_ph + stochastic: bool + if set to False all the actions are always deterministic (default False) + update_eps_ph: float + update epsilon a new value, if negative not update happens + (default: no update) + + Returns + ------- + Tensor of dtype tf.int64 and shape (BATCH_SIZE,) with an action to be performed for + every element of the batch. + + +======= train ======= + + Function that takes a transition (s,a,r,s') and optimizes Bellman equation's error: + + td_error = Q(s,a) - (r + gamma * max_a' Q(s', a')) + loss = hauber_loss[td_error] + + Parameters + ---------- + obs_t: object + a batch of observations + action: np.array + actions that were selected upon seeing obs_t. + dtype must be int32 and shape must be (batch_size,) + reward: np.array + immediate reward attained after executing those actions + dtype must be float32 and shape must be (batch_size,) + obs_tp1: object + observations that followed obs_t + done: np.array + 1 if obs_t was the last observation in the episode and 0 otherwise + obs_tp1 gets ignored, but must be of the valid shape. + dtype must be float32 and shape must be (batch_size,) + weight: np.array + imporance weights for every element of the batch (gradient is multiplied + by the importance weight) dtype must be float32 and shape must be (batch_size,) + + Returns + ------- + td_error: np.array + a list of differences between Q(s,a) and the target in Bellman's equation. + dtype is float32 and shape is (batch_size,) + +======= update_target ======== + + copy the parameters from optimized Q function to the target Q function. + In Q learning we actually optimize the following error: + + Q(s,a) - (r + gamma * max_a' Q'(s', a')) + + Where Q' is lagging behind Q to stablize the learning. For example for Atari + + Q' is set to Q once every 10000 updates training steps. + +""" +import tensorflow as tf +import baselines.common.tf_util as U + + +def build_act(make_obs_ph, q_func, num_actions, scope="deepq", reuse=None): + """Creates the act function: + + Parameters + ---------- + make_obs_ph: str -> tf.placeholder or TfInput + a function that take a name and creates a placeholder of input with that name + q_func: (tf.Variable, int, str, bool) -> tf.Variable + the model that takes the following inputs: + observation_in: object + the output of observation placeholder + num_actions: int + number of actions + scope: str + reuse: bool + should be passed to outer variable scope + and returns a tensor of shape (batch_size, num_actions) with values of every action. + num_actions: int + number of actions. + scope: str or VariableScope + optional scope for variable_scope. + reuse: bool or None + whether or not the variables should be reused. To be able to reuse the scope must be given. + + Returns + ------- + act: (tf.Variable, bool, float) -> tf.Variable + function to select and action given obsercation. +` See the top of the file for details. + """ + with tf.variable_scope(scope, reuse=reuse): + observations_ph = U.ensure_tf_input(make_obs_ph("observation")) + stochastic_ph = tf.placeholder(tf.bool, (), name="stochastic") + update_eps_ph = tf.placeholder(tf.float32, (), name="update_eps") + + eps = tf.get_variable("eps", (), initializer=tf.constant_initializer(0)) + + q_values = q_func(observations_ph.get(), num_actions, scope="q_func") + deterministic_actions = tf.argmax(q_values, axis=1) + + batch_size = tf.shape(observations_ph.get())[0] + random_actions = tf.random_uniform(tf.stack([batch_size]), minval=0, maxval=num_actions, dtype=tf.int64) + chose_random = tf.random_uniform(tf.stack([batch_size]), minval=0, maxval=1, dtype=tf.float32) < eps + stochastic_actions = tf.where(chose_random, random_actions, deterministic_actions) + + output_actions = tf.cond(stochastic_ph, lambda: stochastic_actions, lambda: deterministic_actions) + update_eps_expr = eps.assign(tf.cond(update_eps_ph >= 0, lambda: update_eps_ph, lambda: eps)) + + act = U.function(inputs=[observations_ph, stochastic_ph, update_eps_ph], + outputs=output_actions, + givens={update_eps_ph: -1.0, stochastic_ph: True}, + updates=[update_eps_expr]) + return act + + +def build_train(make_obs_ph, q_func, num_actions, optimizer, grad_norm_clipping=None, gamma=1.0, double_q=True, scope="deepq", reuse=None): + """Creates the act function: + + Parameters + ---------- + make_obs_ph: str -> tf.placeholder or TfInput + a function that take a name and creates a placeholder of input with that name + q_func: (tf.Variable, int, str, bool) -> tf.Variable + the model that takes the following inputs: + observation_in: object + the output of observation placeholder + num_actions: int + number of actions + scope: str + reuse: bool + should be passed to outer variable scope + and returns a tensor of shape (batch_size, num_actions) with values of every action. + num_actions: int + number of actions + reuse: bool + whether or not to reuse the graph variables + optimizer: tf.train.Optimizer + optimizer to use for the Q-learning objective. + grad_norm_clipping: float or None + clip graident norms to this value. If None no clipping is performed. + gamma: float + discount rate. + double_q: bool + if true will use Double Q Learning (https://arxiv.org/abs/1509.06461). + In general it is a good idea to keep it enabled. + scope: str or VariableScope + optional scope for variable_scope. + reuse: bool or None + whether or not the variables should be reused. To be able to reuse the scope must be given. + + Returns + ------- + act: (tf.Variable, bool, float) -> tf.Variable + function to select and action given obsercation. +` See the top of the file for details. + train: (object, np.array, np.array, object, np.array, np.array) -> np.array + optimize the error in Bellman's equation. +` See the top of the file for details. + update_target: () -> () + copy the parameters from optimized Q function to the target Q function. +` See the top of the file for details. + debug: {str: function} + a bunch of functions to print debug data like q_values. + """ + act_f = build_act(make_obs_ph, q_func, num_actions, scope=scope, reuse=reuse) + + with tf.variable_scope(scope, reuse=reuse): + # set up placeholders + obs_t_input = U.ensure_tf_input(make_obs_ph("obs_t")) + act_t_ph = tf.placeholder(tf.int32, [None], name="action") + rew_t_ph = tf.placeholder(tf.float32, [None], name="reward") + obs_tp1_input = U.ensure_tf_input(make_obs_ph("obs_tp1")) + done_mask_ph = tf.placeholder(tf.float32, [None], name="done") + importance_weights_ph = tf.placeholder(tf.float32, [None], name="weight") + + # q network evaluation + q_t = q_func(obs_t_input.get(), num_actions, scope="q_func", reuse=True) # reuse parameters from act + q_func_vars = U.scope_vars(U.absolute_scope_name("q_func")) + + # target q network evalution + q_tp1 = q_func(obs_tp1_input.get(), num_actions, scope="target_q_func") + target_q_func_vars = U.scope_vars(U.absolute_scope_name("target_q_func")) + + # q scores for actions which we know were selected in the given state. + q_t_selected = tf.reduce_sum(q_t * tf.one_hot(act_t_ph, num_actions), 1) + + # compute estimate of best possible value starting from state at t + 1 + if double_q: + q_tp1_using_online_net = q_func(obs_tp1_input.get(), num_actions, scope="q_func", reuse=True) + q_tp1_best_using_online_net = tf.arg_max(q_tp1_using_online_net, 1) + q_tp1_best = tf.reduce_sum(q_tp1 * tf.one_hot(q_tp1_best_using_online_net, num_actions), 1) + else: + q_tp1_best = tf.reduce_max(q_tp1, 1) + q_tp1_best_masked = (1.0 - done_mask_ph) * q_tp1_best + + # compute RHS of bellman equation + q_t_selected_target = rew_t_ph + gamma * q_tp1_best_masked + + # compute the error (potentially clipped) + td_error = q_t_selected - tf.stop_gradient(q_t_selected_target) + errors = U.huber_loss(td_error) + weighted_error = tf.reduce_mean(importance_weights_ph * errors) + # compute optimization op (potentially with gradient clipping) + if grad_norm_clipping is not None: + optimize_expr = U.minimize_and_clip(optimizer, + weighted_error, + var_list=q_func_vars, + clip_val=grad_norm_clipping) + else: + optimize_expr = optimizer.minimize(weighted_error, var_list=q_func_vars) + + # update_target_fn will be called periodically to copy Q network to target Q network + update_target_expr = [] + for var, var_target in zip(sorted(q_func_vars, key=lambda v: v.name), + sorted(target_q_func_vars, key=lambda v: v.name)): + update_target_expr.append(var_target.assign(var)) + update_target_expr = tf.group(*update_target_expr) + + # Create callable functions + train = U.function( + inputs=[ + obs_t_input, + act_t_ph, + rew_t_ph, + obs_tp1_input, + done_mask_ph, + importance_weights_ph + ], + outputs=td_error, + updates=[optimize_expr] + ) + update_target = U.function([], [], updates=[update_target_expr]) + + q_values = U.function([obs_t_input], q_t) + + return act_f, train, update_target, {'q_values': q_values} diff --git a/baselines/deepq/experiments/__init__.py b/baselines/deepq/experiments/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/baselines/deepq/experiments/atari/__init__.py b/baselines/deepq/experiments/atari/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/baselines/deepq/experiments/atari/download_model.py b/baselines/deepq/experiments/atari/download_model.py new file mode 100644 index 0000000000..5a40946b7d --- /dev/null +++ b/baselines/deepq/experiments/atari/download_model.py @@ -0,0 +1,51 @@ +import argparse +import progressbar + +from baselines.common.azure_utils import Container + + +def parse_args(): + parser = argparse.ArgumentParser("Download a pretrained model from Azure.") + # Environment + parser.add_argument("--model-dir", type=str, default=None, + help="save model in this directory this directory. ") + parser.add_argument("--account-name", type=str, default="openaisciszymon", + help="account name for Azure Blob Storage") + parser.add_argument("--account-key", type=str, default=None, + help="account key for Azure Blob Storage") + parser.add_argument("--container", type=str, default="dqn-blogpost", + help="container name and blob name separated by colon serparated by colon") + parser.add_argument("--blob", type=str, default=None, help="blob with the model") + return parser.parse_args() + + +def main(): + args = parse_args() + c = Container(account_name=args.account_name, + account_key=args.account_key, + container_name=args.container) + + if args.blob is None: + print("Listing available models:") + print() + for blob in sorted(c.list(prefix="model-")): + print(blob) + else: + print("Downloading {} to {}...".format(args.blob, args.model_dir)) + bar = None + + def callback(current, total): + nonlocal bar + if bar is None: + bar = progressbar.ProgressBar(max_value=total) + bar.update(current) + + assert c.exists(args.blob), "model {} does not exist".format(args.blob) + + assert args.model_dir is not None + + c.get(args.model_dir, args.blob, callback=callback) + + +if __name__ == '__main__': + main() diff --git a/baselines/deepq/experiments/atari/enjoy.py b/baselines/deepq/experiments/atari/enjoy.py new file mode 100644 index 0000000000..0589138d2a --- /dev/null +++ b/baselines/deepq/experiments/atari/enjoy.py @@ -0,0 +1,70 @@ +import argparse +import gym +import os +import numpy as np + +from gym.monitoring import VideoRecorder + +import baselines.common.tf_util as U + +from baselines import deepq +from baselines.common.misc_util import ( + boolean_flag, + SimpleMonitor, +) +from baselines.common.atari_wrappers_deprecated import wrap_dqn +from baselines.deepq.experiments.atari.model import model, dueling_model + + +def parse_args(): + parser = argparse.ArgumentParser("Run an already learned DQN model.") + # Environment + parser.add_argument("--env", type=str, required=True, help="name of the game") + parser.add_argument("--model-dir", type=str, default=None, help="load model from this directory. ") + parser.add_argument("--video", type=str, default=None, help="Path to mp4 file where the video of first episode will be recorded.") + boolean_flag(parser, "stochastic", default=True, help="whether or not to use stochastic actions according to models eps value") + boolean_flag(parser, "dueling", default=False, help="whether or not to use dueling model") + + return parser.parse_args() + + +def make_env(game_name): + env = gym.make(game_name + "NoFrameskip-v3") + env = SimpleMonitor(env) + env = wrap_dqn(env) + return env + + +def play(env, act, stochastic, video_path): + num_episodes = 0 + video_recorder = None + video_recorder = VideoRecorder( + env, video_path, enabled=video_path is not None) + obs = env.reset() + while True: + env.unwrapped.render() + video_recorder.capture_frame() + action = act(np.array(obs)[None], stochastic=stochastic)[0] + obs, rew, done, info = env.step(action) + if done: + obs = env.reset() + if len(info["rewards"]) > num_episodes: + if len(info["rewards"]) == 1 and video_recorder.enabled: + # save video of first episode + print("Saved video.") + video_recorder.close() + video_recorder.enabled = False + print(info["rewards"][-1]) + num_episodes = len(info["rewards"]) + + +if __name__ == '__main__': + with U.make_session(4) as sess: + args = parse_args() + env = make_env(args.env) + act = deepq.build_act( + make_obs_ph=lambda name: U.Uint8Input(env.observation_space.shape, name=name), + q_func=dueling_model if args.dueling else model, + num_actions=env.action_space.n) + U.load_state(os.path.join(args.model_dir, "saved")) + play(env, act, args.stochastic, args.video) diff --git a/baselines/deepq/experiments/atari/model.py b/baselines/deepq/experiments/atari/model.py new file mode 100644 index 0000000000..5db12dc55d --- /dev/null +++ b/baselines/deepq/experiments/atari/model.py @@ -0,0 +1,43 @@ +import tensorflow as tf +import tensorflow.contrib.layers as layers + + +def model(img_in, num_actions, scope, reuse=False): + """As described in https://storage.googleapis.com/deepmind-data/assets/papers/DeepMindNature14236Paper.pdf""" + with tf.variable_scope(scope, reuse=reuse): + out = img_in + with tf.variable_scope("convnet"): + # original architecture + out = layers.convolution2d(out, num_outputs=32, kernel_size=8, stride=4, activation_fn=tf.nn.relu) + out = layers.convolution2d(out, num_outputs=64, kernel_size=4, stride=2, activation_fn=tf.nn.relu) + out = layers.convolution2d(out, num_outputs=64, kernel_size=3, stride=1, activation_fn=tf.nn.relu) + out = layers.flatten(out) + + with tf.variable_scope("action_value"): + out = layers.fully_connected(out, num_outputs=512, activation_fn=tf.nn.relu) + out = layers.fully_connected(out, num_outputs=num_actions, activation_fn=None) + + return out + + +def dueling_model(img_in, num_actions, scope, reuse=False): + """As described in https://arxiv.org/abs/1511.06581""" + with tf.variable_scope(scope, reuse=reuse): + out = img_in + with tf.variable_scope("convnet"): + # original architecture + out = layers.convolution2d(out, num_outputs=32, kernel_size=8, stride=4, activation_fn=tf.nn.relu) + out = layers.convolution2d(out, num_outputs=64, kernel_size=4, stride=2, activation_fn=tf.nn.relu) + out = layers.convolution2d(out, num_outputs=64, kernel_size=3, stride=1, activation_fn=tf.nn.relu) + out = layers.flatten(out) + + with tf.variable_scope("state_value"): + state_hidden = layers.fully_connected(out, num_outputs=512, activation_fn=tf.nn.relu) + state_score = layers.fully_connected(state_hidden, num_outputs=1, activation_fn=None) + with tf.variable_scope("action_value"): + actions_hidden = layers.fully_connected(out, num_outputs=512, activation_fn=tf.nn.relu) + action_scores = layers.fully_connected(actions_hidden, num_outputs=num_actions, activation_fn=None) + action_scores_mean = tf.reduce_mean(action_scores, 1) + action_scores = action_scores - tf.expand_dims(action_scores_mean, 1) + + return state_score + action_scores diff --git a/baselines/deepq/experiments/atari/train.py b/baselines/deepq/experiments/atari/train.py new file mode 100644 index 0000000000..1f590909d5 --- /dev/null +++ b/baselines/deepq/experiments/atari/train.py @@ -0,0 +1,229 @@ +import argparse +import gym +import numpy as np +import os +import tensorflow as tf +import tempfile +import time + +import baselines.common.tf_util as U + +from baselines import logger +from baselines import deepq +from baselines.deepq.replay_buffer import ReplayBuffer, PrioritizedReplayBuffer +from baselines.common.misc_util import ( + boolean_flag, + pickle_load, + pretty_eta, + relatively_safe_pickle_dump, + set_global_seeds, + RunningAvg, + SimpleMonitor +) +from baselines.common.schedules import LinearSchedule, PiecewiseSchedule +# when updating this to non-deperecated ones, it is important to +# copy over LazyFrames +from baselines.common.atari_wrappers_deprecated import wrap_dqn +from baselines.common.azure_utils import Container +from .model import model, dueling_model + + +def parse_args(): + parser = argparse.ArgumentParser("DQN experiments for Atari games") + # Environment + parser.add_argument("--env", type=str, default="Pong", help="name of the game") + parser.add_argument("--seed", type=int, default=42, help="which seed to use") + # Core DQN parameters + parser.add_argument("--replay-buffer-size", type=int, default=int(1e6), help="replay buffer size") + parser.add_argument("--lr", type=float, default=1e-4, help="learning rate for Adam optimizer") + parser.add_argument("--num-steps", type=int, default=int(2e8), help="total number of steps to run the environment for") + parser.add_argument("--batch-size", type=int, default=32, help="number of transitions to optimize at the same time") + parser.add_argument("--learning-freq", type=int, default=4, help="number of iterations between every optimization step") + parser.add_argument("--target-update-freq", type=int, default=40000, help="number of iterations between every target network update") + # Bells and whistles + boolean_flag(parser, "double-q", default=True, help="whether or not to use double q learning") + boolean_flag(parser, "dueling", default=False, help="whether or not to use dueling model") + boolean_flag(parser, "prioritized", default=False, help="whether or not to use prioritized replay buffer") + parser.add_argument("--prioritized-alpha", type=float, default=0.6, help="alpha parameter for prioritized replay buffer") + parser.add_argument("--prioritized-beta0", type=float, default=0.4, help="initial value of beta parameters for prioritized replay") + parser.add_argument("--prioritized-eps", type=float, default=1e-6, help="eps parameter for prioritized replay buffer") + # Checkpointing + parser.add_argument("--save-dir", type=str, default=None, help="directory in which training state and model should be saved.") + parser.add_argument("--save-azure-container", type=str, default=None, + help="It present data will saved/loaded from Azure. Should be in format ACCOUNT_NAME:ACCOUNT_KEY:CONTAINER") + parser.add_argument("--save-freq", type=int, default=1e6, help="save model once every time this many iterations are completed") + boolean_flag(parser, "load-on-start", default=True, help="if true and model was previously saved then training will be resumed") + return parser.parse_args() + + +def make_env(game_name): + env = gym.make(game_name + "NoFrameskip-v3") + monitored_env = SimpleMonitor(env) # puts rewards and number of steps in info, before environment is wrapped + env = wrap_dqn(monitored_env) # applies a bunch of modification to simplify the observation space (downsample, make b/w) + return env, monitored_env + + +def maybe_save_model(savedir, container, state): + """This function checkpoints the model and state of the training algorithm.""" + if savedir is None: + return + start_time = time.time() + model_dir = "model-{}".format(state["num_iters"]) + U.save_state(os.path.join(savedir, model_dir, "saved")) + if container is not None: + container.put(os.path.join(savedir, model_dir), model_dir) + relatively_safe_pickle_dump(state, os.path.join(savedir, 'training_state.pkl.zip'), compression=True) + if container is not None: + container.put(os.path.join(savedir, 'training_state.pkl.zip'), 'training_state.pkl.zip') + relatively_safe_pickle_dump(state["monitor_state"], os.path.join(savedir, 'monitor_state.pkl')) + if container is not None: + container.put(os.path.join(savedir, 'monitor_state.pkl'), 'monitor_state.pkl') + logger.log("Saved model in {} seconds\n".format(time.time() - start_time)) + + +def maybe_load_model(savedir, container): + """Load model if present at the specified path.""" + if savedir is None: + return + + state_path = os.path.join(os.path.join(savedir, 'training_state.pkl.zip')) + if container is not None: + logger.log("Attempting to download model from Azure") + found_model = container.get(savedir, 'training_state.pkl.zip') + else: + found_model = os.path.exists(state_path) + if found_model: + state = pickle_load(state_path, compression=True) + model_dir = "model-{}".format(state["num_iters"]) + if container is not None: + container.get(savedir, model_dir) + U.load_state(os.path.join(savedir, model_dir, "saved")) + logger.log("Loaded models checkpoint at {} iterations".format(state["num_iters"])) + return state + + +if __name__ == '__main__': + args = parse_args() + # Parse savedir and azure container. + savedir = args.save_dir + if args.save_azure_container is not None: + account_name, account_key, container_name = args.save_azure_container.split(":") + container = Container(account_name=account_name, + account_key=account_key, + container_name=container_name, + maybe_create=True) + if savedir is None: + # Careful! This will not get cleaned up. Docker spoils the developers. + savedir = tempfile.TemporaryDirectory().name + else: + container = None + # Create and seed the env. + env, monitored_env = make_env(args.env) + if args.seed > 0: + set_global_seeds(args.seed) + env.unwrapped.seed(args.seed) + + with U.make_session(4) as sess: + # Create training graph and replay buffer + act, train, update_target, debug = deepq.build_train( + make_obs_ph=lambda name: U.Uint8Input(env.observation_space.shape, name=name), + q_func=dueling_model if args.dueling else model, + num_actions=env.action_space.n, + optimizer=tf.train.AdamOptimizer(learning_rate=args.lr, epsilon=1e-4), + gamma=0.99, + grad_norm_clipping=10, + double_q=args.double_q + ) + + approximate_num_iters = args.num_steps / 4 + exploration = PiecewiseSchedule([ + (0, 1.0), + (approximate_num_iters / 50, 0.1), + (approximate_num_iters / 5, 0.01) + ], outside_value=0.01) + + if args.prioritized: + replay_buffer = PrioritizedReplayBuffer(args.replay_buffer_size, args.prioritized_alpha) + beta_schedule = LinearSchedule(approximate_num_iters, initial_p=args.prioritized_beta0, final_p=1.0) + else: + replay_buffer = ReplayBuffer(args.replay_buffer_size) + + U.initialize() + update_target() + num_iters = 0 + + # Load the model + state = maybe_load_model(savedir, container) + if state is not None: + num_iters, replay_buffer = state["num_iters"], state["replay_buffer"], + monitored_env.set_state(state["monitor_state"]) + + start_time, start_steps = None, None + steps_per_iter = RunningAvg(0.999) + iteration_time_est = RunningAvg(0.999) + obs = env.reset() + + # Main trianing loop + while True: + num_iters += 1 + # Take action and store transition in the replay buffer. + action = act(np.array(obs)[None], update_eps=exploration.value(num_iters))[0] + new_obs, rew, done, info = env.step(action) + replay_buffer.add(obs, action, rew, new_obs, float(done)) + obs = new_obs + if done: + obs = env.reset() + + if (num_iters > max(5 * args.batch_size, args.replay_buffer_size // 20) and + num_iters % args.learning_freq == 0): + # Sample a bunch of transitions from replay buffer + if args.prioritized: + experience = replay_buffer.sample(args.batch_size, beta=beta_schedule.value(num_iters)) + (obses_t, actions, rewards, obses_tp1, dones, weights, batch_idxes) = experience + else: + obses_t, actions, rewards, obses_tp1, dones = replay_buffer.sample(args.batch_size) + weights = np.ones_like(rewards) + # Minimize the error in Bellman's equation and compute TD-error + td_errors = train(obses_t, actions, rewards, obses_tp1, dones, weights) + # Update the priorities in the replay buffer + if args.prioritized: + new_priorities = np.abs(td_errors) + args.prioritized_eps + replay_buffer.update_priorities(batch_idxes, new_priorities) + # Update target network. + if num_iters % args.target_update_freq == 0: + update_target() + + if start_time is not None: + steps_per_iter.update(info['steps'] - start_steps) + iteration_time_est.update(time.time() - start_time) + start_time, start_steps = time.time(), info["steps"] + + # Save the model and training state. + if num_iters > 0 and (num_iters % args.save_freq == 0 or info["steps"] > args.num_steps): + maybe_save_model(savedir, container, { + 'replay_buffer': replay_buffer, + 'num_iters': num_iters, + 'monitor_state': monitored_env.get_state() + }) + + if info["steps"] > args.num_steps: + break + + if done: + steps_left = args.num_steps - info["steps"] + completion = np.round(info["steps"] / args.num_steps, 1) + + logger.record_tabular("% completion", completion) + logger.record_tabular("steps", info["steps"]) + logger.record_tabular("iters", num_iters) + logger.record_tabular("episodes", len(info["rewards"])) + logger.record_tabular("reward (100 epi mean)", np.mean(info["rewards"][-100:])) + logger.record_tabular("exploration", exploration.value(num_iters)) + if args.prioritized: + logger.record_tabular("max priority", replay_buffer._max_priority) + fps_estimate = (float(steps_per_iter) / (float(iteration_time_est) + 1e-6) + if steps_per_iter._value is not None else "calculating...") + logger.dump_tabular() + logger.log() + logger.log("ETA: " + pretty_eta(int(steps_left / fps_estimate))) + logger.log() diff --git a/baselines/deepq/experiments/atari/wang2015_eval.py b/baselines/deepq/experiments/atari/wang2015_eval.py new file mode 100644 index 0000000000..177dcdf3a2 --- /dev/null +++ b/baselines/deepq/experiments/atari/wang2015_eval.py @@ -0,0 +1,81 @@ +import argparse +import gym +import numpy as np +import os + +import baselines.common.tf_util as U + +from baselines import deepq +from baselines.common.misc_util import get_wrapper_by_name, SimpleMonitor, boolean_flag, set_global_seeds +from baselines.common.atari_wrappers_deprecated import wrap_dqn +from baselines.deepq.experiments.atari.model import model, dueling_model + + +def make_env(game_name): + env = gym.make(game_name + "NoFrameskip-v3") + env_monitored = SimpleMonitor(env) + env = wrap_dqn(env_monitored) + return env_monitored, env + + +def parse_args(): + parser = argparse.ArgumentParser("Evaluate an already learned DQN model.") + # Environment + parser.add_argument("--env", type=str, required=True, help="name of the game") + parser.add_argument("--model-dir", type=str, default=None, help="load model from this directory. ") + boolean_flag(parser, "stochastic", default=True, help="whether or not to use stochastic actions according to models eps value") + boolean_flag(parser, "dueling", default=False, help="whether or not to use dueling model") + + return parser.parse_args() + + +def wang2015_eval(game_name, act, stochastic): + print("==================== wang2015 evaluation ====================") + episode_rewards = [] + + for num_noops in range(1, 31): + env_monitored, eval_env = make_env(game_name) + eval_env.unwrapped.seed(1) + + get_wrapper_by_name(eval_env, "NoopResetEnv").override_num_noops = num_noops + + eval_episode_steps = 0 + done = True + while True: + if done: + obs = eval_env.reset() + eval_episode_steps += 1 + action = act(np.array(obs)[None], stochastic=stochastic)[0] + + obs, reward, done, info = eval_env.step(action) + if done: + obs = eval_env.reset() + if len(info["rewards"]) > 0: + episode_rewards.append(info["rewards"][0]) + break + if info["steps"] > 108000: # 5 minutes of gameplay + episode_rewards.append(env_monitored._current_reward) + break + print("Num steps in episode {} was {} yielding {} reward".format( + num_noops, eval_episode_steps, episode_rewards[-1]), flush=True) + print("Evaluation results: " + str(np.mean(episode_rewards))) + print("=============================================================") + return np.mean(episode_rewards) + + +def main(): + set_global_seeds(1) + args = parse_args() + with U.make_session(4) as sess: # noqa + _, env = make_env(args.env) + act = deepq.build_act( + make_obs_ph=lambda name: U.Uint8Input(env.observation_space.shape, name=name), + q_func=dueling_model if args.dueling else model, + num_actions=env.action_space.n) + + U.load_state(os.path.join(args.model_dir, "saved")) + wang2015_eval(args.env, act, stochastic=args.stochastic) + + +if __name__ == '__main__': + main() diff --git a/baselines/deepq/experiments/custom_cartpole.py b/baselines/deepq/experiments/custom_cartpole.py new file mode 100644 index 0000000000..8b8a66ee2e --- /dev/null +++ b/baselines/deepq/experiments/custom_cartpole.py @@ -0,0 +1,78 @@ +import gym +import itertools +import numpy as np +import tensorflow as tf +import tensorflow.contrib.layers as layers + +import baselines.common.tf_util as U + +from baselines import logger +from baselines import deepq +from baselines.deepq.replay_buffer import ReplayBuffer +from baselines.common.schedules import LinearSchedule + + +def model(inpt, num_actions, scope, reuse=False): + """This model takes as input an observation and returns values of all actions.""" + with tf.variable_scope(scope, reuse=reuse): + out = inpt + out = layers.fully_connected(out, num_outputs=64, activation_fn=tf.nn.tanh) + out = layers.fully_connected(out, num_outputs=num_actions, activation_fn=None) + return out + + +if __name__ == '__main__': + with U.make_session(8): + # Create the environment + env = gym.make("CartPole-v0") + # Create all the functions necessary to train the model + act, train, update_target, debug = deepq.build_train( + make_obs_ph=lambda name: U.BatchInput(env.observation_space.shape, name=name), + q_func=model, + num_actions=env.action_space.n, + optimizer=tf.train.AdamOptimizer(learning_rate=5e-4), + ) + # Create the replay buffer + replay_buffer = ReplayBuffer(50000) + # Create the schedule for exploration starting from 1 (every action is random) down to + # 0.02 (98% of actions are selected according to values predicted by the model). + exploration = LinearSchedule(schedule_timesteps=10000, initial_p=1.0, final_p=0.02) + + # Initialize the parameters and copy them to the target network. + U.initialize() + update_target() + + episode_rewards = [0.0] + obs = env.reset() + for t in itertools.count(): + # Take action and update exploration to the newest value + action = act(obs[None], update_eps=exploration.value(t))[0] + new_obs, rew, done, _ = env.step(action) + # Store transition in the replay buffer. + replay_buffer.add(obs, action, rew, new_obs, float(done)) + obs = new_obs + + episode_rewards[-1] += rew + if done: + obs = env.reset() + episode_rewards.append(0) + + is_solved = t > 100 and np.mean(episode_rewards[-101:-1]) >= 200 + if is_solved: + # Show off the result + env.render() + else: + # Minimize the error in Bellman's equation on a batch sampled from replay buffer. + if t > 1000: + obses_t, actions, rewards, obses_tp1, dones = replay_buffer.sample(32) + train(obses_t, actions, rewards, obses_tp1, dones, np.ones_like(rewards)) + # Update target network periodically. + if t % 1000 == 0: + update_target() + + if done and len(episode_rewards) % 10 == 0: + logger.record_tabular("steps", t) + logger.record_tabular("episodes", len(episode_rewards)) + logger.record_tabular("mean episode reward", round(np.mean(episode_rewards[-101:-1]), 1)) + logger.record_tabular("% time spent exploring", int(100 * exploration.value(t))) + logger.dump_tabular() diff --git a/baselines/deepq/experiments/enjoy_cartpole.py b/baselines/deepq/experiments/enjoy_cartpole.py new file mode 100644 index 0000000000..1c6176bac3 --- /dev/null +++ b/baselines/deepq/experiments/enjoy_cartpole.py @@ -0,0 +1,21 @@ +import gym + +from baselines import deepq + + +def main(): + env = gym.make("CartPole-v0") + act = deepq.load("cartpole_model.pkl") + + while True: + obs, done = env.reset(), False + episode_rew = 0 + while not done: + env.render() + obs, rew, done, _ = env.step(act(obs[None])[0]) + episode_rew += rew + print("Episode reward", episode_rew) + + +if __name__ == '__main__': + main() diff --git a/baselines/deepq/experiments/enjoy_pong.py b/baselines/deepq/experiments/enjoy_pong.py new file mode 100644 index 0000000000..d27e0d0df2 --- /dev/null +++ b/baselines/deepq/experiments/enjoy_pong.py @@ -0,0 +1,23 @@ +import gym + +from baselines import deepq +from baselines.common.atari_wrappers_deprecated import wrap_dqn, ScaledFloatFrame + + +def main(): + env = gym.make("PongNoFrameskip-v3") + env = ScaledFloatFrame(wrap_dqn(env)) + act = deepq.load("pong_model.pkl") + + while True: + obs, done = env.reset(), False + episode_rew = 0 + while not done: + env.render() + obs, rew, done, _ = env.step(act(obs[None])[0]) + episode_rew += rew + print("Episode reward", episode_rew) + + +if __name__ == '__main__': + main() diff --git a/baselines/deepq/experiments/train_cartpole.py b/baselines/deepq/experiments/train_cartpole.py new file mode 100644 index 0000000000..0cc4cecb1c --- /dev/null +++ b/baselines/deepq/experiments/train_cartpole.py @@ -0,0 +1,31 @@ +import gym + +from baselines import deepq + + +def callback(lcl, glb): + # stop training if reward exceeds 199 + is_solved = lcl['t'] > 100 and sum(lcl['episode_rewards'][-101:-1]) / 100 >= 199 + return is_solved + + +def main(): + env = gym.make("CartPole-v0") + model = deepq.models.mlp([64]) + act = deepq.learn( + env, + q_func=model, + lr=1e-3, + max_timesteps=100000, + buffer_size=50000, + exploration_fraction=0.1, + exploration_final_eps=0.02, + print_freq=10, + callback=callback + ) + print("Saving model to cartpole_model.pkl") + act.save("cartpole_model.pkl") + + +if __name__ == '__main__': + main() diff --git a/baselines/deepq/experiments/train_pong.py b/baselines/deepq/experiments/train_pong.py new file mode 100644 index 0000000000..86dcc653d3 --- /dev/null +++ b/baselines/deepq/experiments/train_pong.py @@ -0,0 +1,34 @@ +import gym + +from baselines import deepq +from baselines.common.atari_wrappers_deprecated import wrap_dqn, ScaledFloatFrame + + +def main(): + env = gym.make("PongNoFrameskip-v3") + env = ScaledFloatFrame(wrap_dqn(env)) + model = deepq.models.cnn_to_mlp( + convs=[(32, 8, 4), (64, 4, 2), (64, 3, 1)], + hiddens=[256], + dueling=True + ) + act = deepq.learn( + env, + q_func=model, + lr=1e-4, + max_timesteps=2000000, + buffer_size=10000, + exploration_fraction=0.1, + exploration_final_eps=0.01, + train_freq=4, + learning_starts=10000, + target_network_update_freq=1000, + gamma=0.99, + prioritized_replay=True + ) + act.save("pong_model.pkl") + env.close() + + +if __name__ == '__main__': + main() diff --git a/baselines/deepq/models.py b/baselines/deepq/models.py new file mode 100644 index 0000000000..28b1197567 --- /dev/null +++ b/baselines/deepq/models.py @@ -0,0 +1,82 @@ +import tensorflow as tf +import tensorflow.contrib.layers as layers + + +def _mlp(hiddens, inpt, num_actions, scope, reuse=False): + with tf.variable_scope(scope, reuse=reuse): + out = inpt + for hidden in hiddens: + out = layers.fully_connected(out, num_outputs=hidden, activation_fn=tf.nn.relu) + out = layers.fully_connected(out, num_outputs=num_actions, activation_fn=None) + return out + + +def mlp(hiddens=[]): + """This model takes as input an observation and returns values of all actions. + + Parameters + ---------- + hiddens: [int] + list of sizes of hidden layers + + Returns + ------- + q_func: function + q_function for DQN algorithm. + """ + return lambda *args, **kwargs: _mlp(hiddens, *args, **kwargs) + + +def _cnn_to_mlp(convs, hiddens, dueling, inpt, num_actions, scope, reuse=False): + with tf.variable_scope(scope, reuse=reuse): + out = inpt + with tf.variable_scope("convnet"): + for num_outputs, kernel_size, stride in convs: + out = layers.convolution2d(out, + num_outputs=num_outputs, + kernel_size=kernel_size, + stride=stride, + activation_fn=tf.nn.relu) + out = layers.flatten(out) + with tf.variable_scope("action_value"): + action_out = out + for hidden in hiddens: + action_out = layers.fully_connected(action_out, num_outputs=hidden, activation_fn=tf.nn.relu) + action_scores = layers.fully_connected(action_out, num_outputs=num_actions, activation_fn=None) + + if dueling: + with tf.variable_scope("state_value"): + state_out = out + for hidden in hiddens: + state_out = layers.fully_connected(state_out, num_outputs=hidden, activation_fn=tf.nn.relu) + state_score = layers.fully_connected(state_out, num_outputs=1, activation_fn=None) + action_scores_mean = tf.reduce_mean(action_scores, 1) + action_scores_centered = action_scores - tf.expand_dims(action_scores_mean, 1) + return state_score + action_scores_centered + else: + return action_scores + return out + + +def cnn_to_mlp(convs, hiddens, dueling=False): + """This model takes as input an observation and returns values of all actions. + + Parameters + ---------- + convs: [(int, int int)] + list of convolutional layers in form of + (num_outputs, kernel_size, stride) + hiddens: [int] + list of sizes of hidden layers + dueling: bool + if true double the output MLP to compute a baseline + for action scores + + Returns + ------- + q_func: function + q_function for DQN algorithm. + """ + + return lambda *args, **kwargs: _cnn_to_mlp(convs, hiddens, dueling, *args, **kwargs) + diff --git a/baselines/deepq/replay_buffer.py b/baselines/deepq/replay_buffer.py new file mode 100644 index 0000000000..0c92f87af0 --- /dev/null +++ b/baselines/deepq/replay_buffer.py @@ -0,0 +1,190 @@ +import numpy as np +import random + +from baselines.common.segment_tree import SumSegmentTree, MinSegmentTree + + +class ReplayBuffer(object): + def __init__(self, size): + """Create Prioritized Replay buffer. + + Parameters + ---------- + size: int + Max number of transitions to store in the buffer. When the buffer + overflows the old memories are dropped. + """ + self._storage = [] + self._maxsize = size + self._next_idx = 0 + + def __len__(self): + return len(self._storage) + + def add(self, obs_t, action, reward, obs_tp1, done): + data = (obs_t, action, reward, obs_tp1, done) + + if self._next_idx >= len(self._storage): + self._storage.append(data) + else: + self._storage[self._next_idx] = data + self._next_idx = (self._next_idx + 1) % self._maxsize + + def _encode_sample(self, idxes): + obses_t, actions, rewards, obses_tp1, dones = [], [], [], [], [] + for i in idxes: + data = self._storage[i] + obs_t, action, reward, obs_tp1, done = data + obses_t.append(np.array(obs_t, copy=False)) + actions.append(np.array(action, copy=False)) + rewards.append(reward) + obses_tp1.append(np.array(obs_tp1, copy=False)) + dones.append(done) + return np.array(obses_t), np.array(actions), np.array(rewards), np.array(obses_tp1), np.array(dones) + + def sample(self, batch_size): + """Sample a batch of experiences. + + Parameters + ---------- + batch_size: int + How many transitions to sample. + + Returns + ------- + obs_batch: np.array + batch of observations + act_batch: np.array + batch of actions executed given obs_batch + rew_batch: np.array + rewards received as results of executing act_batch + next_obs_batch: np.array + next set of observations seen after executing act_batch + done_mask: np.array + done_mask[i] = 1 if executing act_batch[i] resulted in + the end of an episode and 0 otherwise. + """ + idxes = [random.randint(0, len(self._storage) - 1) for _ in range(batch_size)] + return self._encode_sample(idxes) + + +class PrioritizedReplayBuffer(ReplayBuffer): + def __init__(self, size, alpha): + """Create Prioritized Replay buffer. + + Parameters + ---------- + size: int + Max number of transitions to store in the buffer. When the buffer + overflows the old memories are dropped. + alpha: float + how much prioritization is used + (0 - no prioritization, 1 - full prioritization) + + See Also + -------- + ReplayBuffer.__init__ + """ + super(PrioritizedReplayBuffer, self).__init__(size) + assert alpha > 0 + self._alpha = alpha + + it_capacity = 1 + while it_capacity < size: + it_capacity *= 2 + + self._it_sum = SumSegmentTree(it_capacity) + self._it_min = MinSegmentTree(it_capacity) + self._max_priority = 1.0 + + def add(self, *args, **kwargs): + """See ReplayBuffer.store_effect""" + idx = self._next_idx + super().add(*args, **kwargs) + self._it_sum[idx] = self._max_priority ** self._alpha + self._it_min[idx] = self._max_priority ** self._alpha + + def _sample_proportional(self, batch_size): + res = [] + for _ in range(batch_size): + # TODO(szymon): should we ensure no repeats? + mass = random.random() * self._it_sum.sum(0, len(self._storage) - 1) + idx = self._it_sum.find_prefixsum_idx(mass) + res.append(idx) + return res + + def sample(self, batch_size, beta): + """Sample a batch of experiences. + + compared to ReplayBuffer.sample + it also returns importance weights and idxes + of sampled experiences. + + + Parameters + ---------- + batch_size: int + How many transitions to sample. + beta: float + To what degree to use importance weights + (0 - no corrections, 1 - full correction) + + Returns + ------- + obs_batch: np.array + batch of observations + act_batch: np.array + batch of actions executed given obs_batch + rew_batch: np.array + rewards received as results of executing act_batch + next_obs_batch: np.array + next set of observations seen after executing act_batch + done_mask: np.array + done_mask[i] = 1 if executing act_batch[i] resulted in + the end of an episode and 0 otherwise. + weights: np.array + Array of shape (batch_size,) and dtype np.float32 + denoting importance weight of each sampled transition + idxes: np.array + Array of shape (batch_size,) and dtype np.int32 + idexes in buffer of sampled experiences + """ + assert beta > 0 + + idxes = self._sample_proportional(batch_size) + + weights = [] + p_min = self._it_min.min() / self._it_sum.sum() + max_weight = (p_min * len(self._storage)) ** (-beta) + + for idx in idxes: + p_sample = self._it_sum[idx] / self._it_sum.sum() + weight = (p_sample * len(self._storage)) ** (-beta) + weights.append(weight / max_weight) + weights = np.array(weights) + encoded_sample = self._encode_sample(idxes) + return tuple(list(encoded_sample) + [weights, idxes]) + + def update_priorities(self, idxes, priorities): + """Update priorities of sampled transitions. + + sets priority of transition at index idxes[i] in buffer + to priorities[i]. + + Parameters + ---------- + idxes: [int] + List of idxes of sampled transitions + priorities: [float] + List of updated priorities corresponding to + transitions at the sampled idxes denoted by + variable `idxes`. + """ + assert len(idxes) == len(priorities) + for idx, priority in zip(idxes, priorities): + assert priority > 0 + assert 0 <= idx < len(self._storage) + self._it_sum[idx] = priority ** self._alpha + self._it_min[idx] = priority ** self._alpha + + self._max_priority = max(self._max_priority, priority) diff --git a/baselines/deepq/simple.py b/baselines/deepq/simple.py new file mode 100644 index 0000000000..1792ac8097 --- /dev/null +++ b/baselines/deepq/simple.py @@ -0,0 +1,267 @@ +import numpy as np +import os +import dill +import tempfile +import tensorflow as tf +import zipfile + +import baselines.common.tf_util as U + +from baselines import logger +from baselines.common.schedules import LinearSchedule +from baselines import deepq +from baselines.deepq.replay_buffer import ReplayBuffer, PrioritizedReplayBuffer + + +class ActWrapper(object): + def __init__(self, act, act_params): + self._act = act + self._act_params = act_params + + @staticmethod + def load(path, num_cpu=16): + with open(path, "rb") as f: + model_data, act_params = dill.load(f) + act = deepq.build_act(**act_params) + sess = U.make_session(num_cpu=num_cpu) + sess.__enter__() + with tempfile.TemporaryDirectory() as td: + arc_path = os.path.join(td, "packed.zip") + with open(arc_path, "wb") as f: + f.write(model_data) + + zipfile.ZipFile(arc_path, 'r', zipfile.ZIP_DEFLATED).extractall(td) + U.load_state(os.path.join(td, "model")) + + return ActWrapper(act, act_params) + + def __call__(self, *args, **kwargs): + return self._act(*args, **kwargs) + + def save(self, path): + """Save model to a pickle located at `path`""" + with tempfile.TemporaryDirectory() as td: + U.save_state(os.path.join(td, "model")) + arc_name = os.path.join(td, "packed.zip") + with zipfile.ZipFile(arc_name, 'w') as zipf: + for root, dirs, files in os.walk(td): + for fname in files: + file_path = os.path.join(root, fname) + if file_path != arc_name: + zipf.write(file_path, os.path.relpath(file_path, td)) + with open(arc_name, "rb") as f: + model_data = f.read() + with open(path, "wb") as f: + dill.dump((model_data, self._act_params), f) + + +def load(path, num_cpu=16): + """Load act function that was returned by learn function. + + Parameters + ---------- + path: str + path to the act function pickle + num_cpu: int + number of cpus to use for executing the policy + + Returns + ------- + act: ActWrapper + function that takes a batch of obsercations + and returns actions. + """ + return ActWrapper.load(path, num_cpu=num_cpu) + + +def learn(env, + q_func, + lr=5e-4, + max_timesteps=100000, + buffer_size=50000, + exploration_fraction=0.1, + exploration_final_eps=0.02, + train_freq=1, + batch_size=32, + print_freq=1, + checkpoint_freq=10000, + learning_starts=1000, + gamma=1.0, + target_network_update_freq=500, + prioritized_replay=False, + prioritized_replay_alpha=0.6, + prioritized_replay_beta0=0.4, + prioritized_replay_beta_iters=None, + prioritized_replay_eps=1e-6, + num_cpu=16, + callback=None): + """Train a deepq model. + + Parameters + ------- + env : gym.Env + environment to train on + q_func: (tf.Variable, int, str, bool) -> tf.Variable + the model that takes the following inputs: + observation_in: object + the output of observation placeholder + num_actions: int + number of actions + scope: str + reuse: bool + should be passed to outer variable scope + and returns a tensor of shape (batch_size, num_actions) with values of every action. + lr: float + learning rate for adam optimizer + max_timesteps: int + number of env steps to optimizer for + buffer_size: int + size of the replay buffer + exploration_fraction: float + fraction of entire training period over which the exploration rate is annealed + exploration_final_eps: float + final value of random action probability + train_freq: int + update the model every `train_freq` steps. + set to None to disable printing + batch_size: int + size of a batched sampled from replay buffer for training + print_freq: int + how often to print out training progress + checkpoint_freq: int + how often to save the model. This is so that the best version is restored + at the end of the training. If you do not wish to restore the best version at + the end of the training set this variable to None. + learning_starts: int + how many steps of the model to collect transitions for before learning starts + gamma: float + discount factor + target_network_update_freq: int + update the target network every `target_network_update_freq` steps. + prioritized_replay: True + if True prioritized replay buffer will be used. + prioritized_replay_alpha: float + alpha parameter for prioritized replay buffer + prioritized_replay_beta0: float + initial value of beta for prioritized replay buffer + prioritized_replay_beta_iters: int + number of iterations over which beta will be annealed from initial value + to 1.0. If set to None equals to max_timesteps. + prioritized_replay_eps: float + epsilon to add to the TD errors when updating priorities. + num_cpu: int + number of cpus to use for training + callback: (locals, globals) -> None + function called at every steps with state of the algorithm. + If callback returns true training stops. + + Returns + ------- + act: ActWrapper + Wrapper over act function. Adds ability to save it and load it. + See header of baselines/deepq/categorical.py for details on the act function. + """ + # Create all the functions necessary to train the model + + sess = U.make_session(num_cpu=num_cpu) + sess.__enter__() + + def make_obs_ph(name): + return U.BatchInput(env.observation_space.shape, name=name) + + act, train, update_target, debug = deepq.build_train( + make_obs_ph=make_obs_ph, + q_func=q_func, + num_actions=env.action_space.n, + optimizer=tf.train.AdamOptimizer(learning_rate=lr), + gamma=gamma, + grad_norm_clipping=10 + ) + act_params = { + 'make_obs_ph': make_obs_ph, + 'q_func': q_func, + 'num_actions': env.action_space.n, + } + # Create the replay buffer + if prioritized_replay: + replay_buffer = PrioritizedReplayBuffer(buffer_size, alpha=prioritized_replay_alpha) + if prioritized_replay_beta_iters is None: + prioritized_replay_beta_iters = max_timesteps + beta_schedule = LinearSchedule(prioritized_replay_beta_iters, + initial_p=prioritized_replay_beta0, + final_p=1.0) + else: + replay_buffer = ReplayBuffer(buffer_size) + beta_schedule = None + # Create the schedule for exploration starting from 1. + exploration = LinearSchedule(schedule_timesteps=int(exploration_fraction * max_timesteps), + initial_p=1.0, + final_p=exploration_final_eps) + + # Initialize the parameters and copy them to the target network. + U.initialize() + update_target() + + episode_rewards = [0.0] + saved_mean_reward = None + obs = env.reset() + with tempfile.TemporaryDirectory() as td: + model_saved = False + model_file = os.path.join(td, "model") + for t in range(max_timesteps): + if callback is not None: + if callback(locals(), globals()): + break + # Take action and update exploration to the newest value + action = act(np.array(obs)[None], update_eps=exploration.value(t))[0] + new_obs, rew, done, _ = env.step(action) + # Store transition in the replay buffer. + replay_buffer.add(obs, action, rew, new_obs, float(done)) + obs = new_obs + + episode_rewards[-1] += rew + if done: + obs = env.reset() + episode_rewards.append(0) + + if t > learning_starts and t % train_freq == 0: + # Minimize the error in Bellman's equation on a batch sampled from replay buffer. + if prioritized_replay: + experience = replay_buffer.sample(batch_size, beta=beta_schedule.value(t)) + (obses_t, actions, rewards, obses_tp1, dones, weights, batch_idxes) = experience + else: + obses_t, actions, rewards, obses_tp1, dones = replay_buffer.sample(batch_size) + weights, batch_idxes = np.ones_like(rewards), None + td_errors = train(obses_t, actions, rewards, obses_tp1, dones, np.ones_like(rewards)) + if prioritized_replay: + new_priorities = np.abs(td_errors) + prioritized_replay_eps + replay_buffer.update_priorities(batch_idxes, new_priorities) + + if t > learning_starts and t % target_network_update_freq == 0: + # Update target network periodically. + update_target() + + mean_100ep_reward = round(np.mean(episode_rewards[-101:-1]), 1) + num_episodes = len(episode_rewards) + if done and print_freq is not None and len(episode_rewards) % print_freq == 0: + logger.record_tabular("steps", t) + logger.record_tabular("episodes", num_episodes) + logger.record_tabular("mean 100 episode reward", mean_100ep_reward) + logger.record_tabular("% time spent exploring", int(100 * exploration.value(t))) + logger.dump_tabular() + + if (checkpoint_freq is not None and t > learning_starts and + num_episodes > 100 and t % checkpoint_freq == 0): + if saved_mean_reward is None or mean_100ep_reward > saved_mean_reward: + if print_freq is not None: + logger.log("Saving model due to mean reward increase: {} -> {}".format( + saved_mean_reward, mean_100ep_reward)) + U.save_state(model_file) + model_saved = True + saved_mean_reward = mean_100ep_reward + if model_saved: + if print_freq is not None: + logger.log("Restored model with mean reward: {}".format(saved_mean_reward)) + U.load_state(model_file) + + return ActWrapper(act, act_params) diff --git a/baselines/logger.py b/baselines/logger.py new file mode 100644 index 0000000000..ce8354829a --- /dev/null +++ b/baselines/logger.py @@ -0,0 +1,292 @@ +""" + +See README.md for a description of the logging API. + +OFF state corresponds to having Logger.CURRENT == Logger.DEFAULT +ON state is otherwise + +""" + +from collections import OrderedDict +import os +import sys +import shutil +import os.path as osp +import json + +LOG_OUTPUT_FORMATS = ['stdout', 'log', 'json'] + +DEBUG = 10 +INFO = 20 +WARN = 30 +ERROR = 40 + +DISABLED = 50 + + +class OutputFormat(object): + def writekvs(self, kvs): + """ + Write key-value pairs + """ + raise NotImplementedError + + def writeseq(self, args): + """ + Write a sequence of other data (e.g. a logging message) + """ + pass + + def close(self): + return + + +class HumanOutputFormat(OutputFormat): + def __init__(self, file): + self.file = file + + def writekvs(self, kvs): + # Create strings for printing + key2str = OrderedDict() + for (key, val) in kvs.items(): + valstr = '%-8.3g' % (val,) if hasattr(val, '__float__') else val + key2str[self._truncate(key)] = self._truncate(valstr) + + # Find max widths + keywidth = max(map(len, key2str.keys())) + valwidth = max(map(len, key2str.values())) + + # Write out the data + dashes = '-' * (keywidth + valwidth + 7) + lines = [dashes] + for (key, val) in key2str.items(): + lines.append('| %s%s | %s%s |' % ( + key, + ' ' * (keywidth - len(key)), + val, + ' ' * (valwidth - len(val)), + )) + lines.append(dashes) + self.file.write('\n'.join(lines) + '\n') + + # Flush the output to the file + self.file.flush() + + def _truncate(self, s): + return s[:20] + '...' if len(s) > 23 else s + + def writeseq(self, args): + for arg in args: + self.file.write(arg) + self.file.write('\n') + self.file.flush() + + +class JSONOutputFormat(OutputFormat): + def __init__(self, file): + self.file = file + + def writekvs(self, kvs): + for k, v in kvs.items(): + if hasattr(v, 'dtype'): + v = v.tolist() + kvs[k] = float(v) + self.file.write(json.dumps(kvs) + '\n') + self.file.flush() + + +def make_output_format(format, ev_dir): + os.makedirs(ev_dir, exist_ok=True) + if format == 'stdout': + return HumanOutputFormat(sys.stdout) + elif format == 'log': + log_file = open(osp.join(ev_dir, 'log.txt'), 'wt') + return HumanOutputFormat(log_file) + elif format == 'json': + json_file = open(osp.join(ev_dir, 'progress.json'), 'wt') + return JSONOutputFormat(json_file) + else: + raise ValueError('Unknown format specified: %s' % (format,)) + +# ================================================================ +# API +# ================================================================ + + +def logkv(key, val): + """ + Log a value of some diagnostic + Call this once for each diagnostic quantity, each iteration + """ + Logger.CURRENT.logkv(key, val) + + +def dumpkvs(): + """ + Write all of the diagnostics from the current iteration + + level: int. (see logger.py docs) If the global logger level is higher than + the level argument here, don't print to stdout. + """ + Logger.CURRENT.dumpkvs() + + +# for backwards compatibility +record_tabular = logkv +dump_tabular = dumpkvs + + +def log(*args, level=INFO): + """ + Write the sequence of args, with no separators, to the console and output files (if you've configured an output file). + """ + Logger.CURRENT.log(*args, level=level) + + +def debug(*args): + log(*args, level=DEBUG) + + +def info(*args): + log(*args, level=INFO) + + +def warn(*args): + log(*args, level=WARN) + + +def error(*args): + log(*args, level=ERROR) + + +def set_level(level): + """ + Set logging threshold on current logger. + """ + Logger.CURRENT.set_level(level) + + +def get_dir(): + """ + Get directory that log files are being written to. + will be None if there is no output directory (i.e., if you didn't call start) + """ + return Logger.CURRENT.get_dir() + + +def get_expt_dir(): + sys.stderr.write("get_expt_dir() is Deprecated. Switch to get_dir() [%s]\n" % (get_dir(),)) + return get_dir() + + +# ================================================================ +# Backend +# ================================================================ + + +class Logger(object): + DEFAULT = None # A logger with no output files. (See right below class definition) + # So that you can still log to the terminal without setting up any output files + CURRENT = None # Current logger being used by the free functions above + + def __init__(self, dir, output_formats): + self.name2val = OrderedDict() # values this iteration + self.level = INFO + self.dir = dir + self.output_formats = output_formats + + # Logging API, forwarded + # ---------------------------------------- + def logkv(self, key, val): + self.name2val[key] = val + + def dumpkvs(self): + for fmt in self.output_formats: + fmt.writekvs(self.name2val) + self.name2val.clear() + + def log(self, *args, level=INFO): + if self.level <= level: + self._do_log(args) + + # Configuration + # ---------------------------------------- + def set_level(self, level): + self.level = level + + def get_dir(self): + return self.dir + + def close(self): + for fmt in self.output_formats: + fmt.close() + + # Misc + # ---------------------------------------- + def _do_log(self, args): + for fmt in self.output_formats: + fmt.writeseq(args) + + +# ================================================================ + +Logger.DEFAULT = Logger(output_formats=[HumanOutputFormat(sys.stdout)], dir=None) +Logger.CURRENT = Logger.DEFAULT + + +class session(object): + """ + Context manager that sets up the loggers for an experiment. + """ + + CURRENT = None # Set to a LoggerContext object using enter/exit or context manager + + def __init__(self, dir, format_strs=None): + self.dir = dir + if format_strs is None: + format_strs = LOG_OUTPUT_FORMATS + output_formats = [make_output_format(f, dir) for f in format_strs] + Logger.CURRENT = Logger(dir=dir, output_formats=output_formats) + + def __enter__(self): + os.makedirs(self.evaluation_dir(), exist_ok=True) + output_formats = [make_output_format(f, self.evaluation_dir()) for f in LOG_OUTPUT_FORMATS] + Logger.CURRENT = Logger(dir=self.dir, output_formats=output_formats) + + def __exit__(self, *args): + Logger.CURRENT.close() + Logger.CURRENT = Logger.DEFAULT + + def evaluation_dir(self): + return self.dir + + +# ================================================================ + + +def _demo(): + info("hi") + debug("shouldn't appear") + set_level(DEBUG) + debug("should appear") + dir = "/tmp/testlogging" + if os.path.exists(dir): + shutil.rmtree(dir) + with session(dir=dir): + record_tabular("a", 3) + record_tabular("b", 2.5) + dump_tabular() + record_tabular("b", -2.5) + record_tabular("a", 5.5) + dump_tabular() + info("^^^ should see a = 5.5") + + record_tabular("b", -2.5) + dump_tabular() + + record_tabular("a", "longasslongasslongasslongasslongasslongassvalue") + dump_tabular() + + +if __name__ == "__main__": + _demo() diff --git a/data/cartpole.gif b/data/cartpole.gif new file mode 100644 index 0000000000000000000000000000000000000000..05d16dcb3f3e1e11a167580c722e46a91333e213 GIT binary patch literal 334931 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 d5gz!~y)18?q7Sol#t{Gk#<%LhZ%DMdR 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

q}RvTvqcC$L46ZWDFqyl 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řyou`Nzl?yMW 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 z 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 W0^bn$hQK!jz9I1cIRg8>jQtO4%H@^- literal 0 HcmV?d00001 diff --git a/setup.py b/setup.py new file mode 100644 index 0000000000..f67e0b1211 --- /dev/null +++ b/setup.py @@ -0,0 +1,25 @@ +from setuptools import setup, find_packages +import os + + +repo_dir = os.path.dirname(os.path.abspath(__file__)) + + +setup(name='baselines', + packages=[package for package in find_packages() + if package.startswith('baselines')], + install_requires=[ + 'scipy', + 'tqdm', + 'joblib', + 'zmq', + 'dill', + 'tensorflow >= 1.0.0', + 'azure==1.0.3', + 'progressbar2', + ], + description="OpenAI baselines: high quality implementations of reinforcement learning algorithms", + author="OpenAI", + url='https://github.com/openai/baselines', + author_email="gym@openai.com", + version="0.1.0")