├── common ├── __init__.py ├── action_info_types.py ├── random_agent.py ├── box_quantizer.py ├── interactive_agent.py ├── markov_ensemble.py ├── interactive_markov_agent.py ├── markov_model.py └── demo_recorder.py ├── examples ├── __init__.py ├── lunar_lander │ ├── __init__.py │ ├── lunar_lander.pickle │ ├── readme.md │ └── interactively_trainable_agent.py └── mountain_car │ ├── __init__.py │ ├── mountain_car.pickle │ ├── readme.md │ └── interactively_trainable_agent.py ├── .gitignore ├── notebooks ├── fps.pdf ├── fps.png ├── lunar_lander.pdf ├── lunar_lander.png ├── mountain_car.pdf ├── mountain_car.png ├── interactive_training.pdf ├── interactive_training.png └── explore_metrics.ipynb ├── requirements.txt ├── readme.md └── LICENSE /common/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /examples/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /examples/lunar_lander/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /examples/mountain_car/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # IDE files 2 | .idea/ 3 | __pycache__ -------------------------------------------------------------------------------- /notebooks/fps.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/electronicarts/interactive_training/HEAD/notebooks/fps.pdf -------------------------------------------------------------------------------- /notebooks/fps.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/electronicarts/interactive_training/HEAD/notebooks/fps.png -------------------------------------------------------------------------------- /notebooks/lunar_lander.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/electronicarts/interactive_training/HEAD/notebooks/lunar_lander.pdf -------------------------------------------------------------------------------- /notebooks/lunar_lander.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/electronicarts/interactive_training/HEAD/notebooks/lunar_lander.png -------------------------------------------------------------------------------- /notebooks/mountain_car.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/electronicarts/interactive_training/HEAD/notebooks/mountain_car.pdf -------------------------------------------------------------------------------- /notebooks/mountain_car.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/electronicarts/interactive_training/HEAD/notebooks/mountain_car.png -------------------------------------------------------------------------------- /notebooks/interactive_training.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/electronicarts/interactive_training/HEAD/notebooks/interactive_training.pdf -------------------------------------------------------------------------------- /notebooks/interactive_training.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/electronicarts/interactive_training/HEAD/notebooks/interactive_training.png -------------------------------------------------------------------------------- /examples/lunar_lander/lunar_lander.pickle: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/electronicarts/interactive_training/HEAD/examples/lunar_lander/lunar_lander.pickle -------------------------------------------------------------------------------- /examples/mountain_car/mountain_car.pickle: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/electronicarts/interactive_training/HEAD/examples/mountain_car/mountain_car.pickle -------------------------------------------------------------------------------- /examples/mountain_car/readme.md: -------------------------------------------------------------------------------- 1 | # Interactive Mountain Car 2 | 3 | To run: `python interactively_trainable_agent.py` 4 | 5 | Controls: 6 | 7 | - Left: Left Arrow 8 | - Right: Right Arrow 9 | - NoOp: Spacebar 10 | -------------------------------------------------------------------------------- /requirements.txt: -------------------------------------------------------------------------------- 1 | certifi==2019.3.9 2 | future==0.17.1 3 | gym==0.12.5 4 | numpy==1.16.4 5 | pyglet==1.3.2 6 | pyobjc-core==5.2 7 | pyobjc-framework-Cocoa==5.2 8 | pyobjc-framework-Quartz==5.2 9 | scipy==1.3.0 10 | singleton-decorator==1.0.0 11 | six==1.12.0 12 | -------------------------------------------------------------------------------- /examples/lunar_lander/readme.md: -------------------------------------------------------------------------------- 1 | # Interactive Lunar Lander 2 | 3 | To run: `python interactively_trainable_agent.py` 4 | 5 | Controls: 6 | 7 | - Left Thruster: Left Arrow 8 | - Bottom Thruster: Up Arrow 9 | - Right Thruster: Right Arrow 10 | - NoOp: Spacebar 11 | 12 | Note: 13 | 14 | Currently there are OpenAI Gym issues that might make this fail on MacOS. 15 | -------------------------------------------------------------------------------- /common/action_info_types.py: -------------------------------------------------------------------------------- 1 | """ Copyright (C) 2019 Electronic Arts Inc. All rights reserved. 2 | Enumeration of possible action info types.""" 3 | 4 | 5 | class ActionInfoType: 6 | human = "human" # Human provided the action 7 | agent = None # An agent other than Markov agent provided the action 8 | found = True # Markov agent provided the action 9 | not_found = False # Markov agent couldn't provide the action 10 | -------------------------------------------------------------------------------- /common/random_agent.py: -------------------------------------------------------------------------------- 1 | """ Copyright (C) 2019 Electronic Arts Inc. All rights reserved. 2 | Random agent is the base for other agents and allows base line random action sampling.""" 3 | from common.action_info_types import ActionInfoType 4 | 5 | 6 | class RandomAgent: 7 | def __init__(self, env): 8 | self.env = env 9 | 10 | def get_action(self, observation, reward, done, info): 11 | """ Can return an additional object describing the action. """ 12 | return self.env.action_space.sample(), ActionInfoType.agent 13 | 14 | -------------------------------------------------------------------------------- /common/box_quantizer.py: -------------------------------------------------------------------------------- 1 | """ Copyright (C) 2019 Electronic Arts Inc. All rights reserved. 2 | The module provides simple uniform quantization under the assumption that 3 | the range of state variables is known. We expect observations represented 4 | as a numpy array and quantize them into bins of size defined by fidelity. """ 5 | import numpy as np 6 | 7 | 8 | class BoxQuantizer: 9 | def __init__(self, box, fidelity): 10 | self.box_low = box[0] 11 | self.box_high = box[1] 12 | self.size = box[1] - box[0] 13 | self.fidelity = fidelity 14 | 15 | def quantize(self, vec): 16 | return tuple(np.floor((vec - self.box_low)/self.size * self.fidelity)) 17 | 18 | if __name__ == "__main__": 19 | box = [np.array([-2, -1]), np.array([2, 1])] 20 | fidelity = np.array([20, 5]) 21 | bq = BoxQuantizer(box, fidelity) 22 | vec = np.array([-0, 0.2]) 23 | print(bq.quantize(vec)) 24 | -------------------------------------------------------------------------------- /common/interactive_agent.py: -------------------------------------------------------------------------------- 1 | """ Copyright (C) 2019 Electronic Arts Inc. All rights reserved. 2 | An interactive agent allows a human player to override the actions of an agent 3 | supplied in the class instance constructor. """ 4 | from common.action_info_types import ActionInfoType 5 | 6 | 7 | class InteractiveAgent: 8 | def __init__(self, key_to_action, agent): 9 | self.key_to_action = key_to_action 10 | self.auto_agent = agent 11 | self.latest_key = None 12 | 13 | def get_action(self, observation, reward, done, info): 14 | action = self.key_to_action.get(self.latest_key) 15 | if action is not None: 16 | return action, ActionInfoType.human 17 | else: 18 | return self.auto_agent.get_action(observation, reward, done, info) 19 | 20 | def on_press(self, key, mod): 21 | self.latest_key = key 22 | 23 | def on_release(self, key, mod): 24 | self.latest_key = None 25 | -------------------------------------------------------------------------------- /readme.md: -------------------------------------------------------------------------------- 1 | # Interactive Training 2 | 3 | The repository provides two minimal examples of Markov Ensemble discussed in the paper "Towards Interactive Training of Non-Player Characters in Video Games" (http://arxiv.org/abs/1906.00535) presented at 2019 ICML Workshop on Human in the Loop Learning (HILL 2019), Long Beach, USA. 4 | 5 | ## Credits 6 | + Igor Borovikov - iborovikov@ea.com 7 | + Jesse Harder - jharder@ea.com 8 | 9 | ## Project Structure 10 | 11 | - **common/** - a source of code files used throughout the project. 12 | - **examples/** - contains two example demonstrations that can be run: lunar_lander and mountain_car. 13 | - **notebooks/** - contains a Jupyter Notebook and various files produced by the notebook regarding performance in the example environments. 14 | 15 | ## Running Examples 16 | 17 | To run the examples in this project, navigate to the desired folder under `examples/`. Within either `lunar_lander/` or `mountain_car/`, run `python interactively_trainable_agent.py`. Each folder contains a readme with more information on running that example. 18 | 19 | 20 | ## License 21 | Modified BSD License (3-Clause BSD license) see the file LICENSE in the project root. 22 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | Copyright (C) 2019 Electronic Arts Inc. All rights reserved. 2 | 3 | Redistribution and use in source and binary forms, with or without 4 | modification, are permitted provided that the following conditions 5 | are met: 6 | 7 | 1. Redistributions of source code must retain the above copyright 8 | notice, this list of conditions and the following disclaimer. 9 | 2. Redistributions in binary form must reproduce the above copyright 10 | notice, this list of conditions and the following disclaimer in the 11 | documentation and/or other materials provided with the distribution. 12 | 3. Neither the name of Electronic Arts, Inc. ("EA") nor the names of 13 | its contributors may be used to endorse or promote products derived 14 | from this software without specific prior written permission. 15 | 16 | THIS SOFTWARE IS PROVIDED BY ELECTRONIC ARTS AND ITS CONTRIBUTORS "AS IS" AND ANY 17 | EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 18 | WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 19 | DISCLAIMED. IN NO EVENT SHALL ELECTRONIC ARTS OR ITS CONTRIBUTORS BE LIABLE FOR ANY 20 | DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 21 | (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 22 | LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND 23 | ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 24 | (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 25 | THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 26 | -------------------------------------------------------------------------------- /common/markov_ensemble.py: -------------------------------------------------------------------------------- 1 | """ Copyright (C) 2019 Electronic Arts Inc. All rights reserved. 2 | The classes cover a range of Markov model orders from min_order to max_order, 3 | constructed from the same sequences of observations and raw actions. Such models 4 | represent the first step in building models ensemble (see Algorithm 1 in the paper). """ 5 | from common.action_info_types import ActionInfoType 6 | from common.markov_model import MarkovModel 7 | 8 | 9 | class MarkovEnsemble: 10 | def __init__(self, observations, actions, min_order, max_order, quantizers): 11 | self.models = [MarkovModel(observations, actions, m, q) 12 | for m in range(min_order, max_order) 13 | for q in quantizers] 14 | 15 | def get_action(self, observations, actions): 16 | for mcm in self.models[::-1]: 17 | action, found = mcm.next_action(observations, actions) 18 | if found is True: 19 | return action, ActionInfoType.found 20 | return None, ActionInfoType.not_found 21 | 22 | 23 | class MarkovEnsembleStack: 24 | def __init__(self, min_order, max_order, quantizers): 25 | self.min_order = min_order 26 | self.max_order = max_order 27 | self.quantizers = quantizers 28 | self.stack = [] 29 | 30 | def add_demo(self, observations, actions): 31 | self.stack.append(MarkovEnsemble( 32 | observations, actions, self.min_order, self.max_order, self.quantizers 33 | )) 34 | 35 | def get_action(self, observations, actions): 36 | for model in self.stack: 37 | action, action_info = model.get_action(observations, actions) 38 | if action_info: 39 | return action, action_info 40 | return None, ActionInfoType.not_found 41 | 42 | -------------------------------------------------------------------------------- /common/interactive_markov_agent.py: -------------------------------------------------------------------------------- 1 | """ Copyright (C) 2019 Electronic Arts Inc. All rights reserved. 2 | InteractiveMarkovAgent class combines interactive player input with the input from the ensemble model. 3 | Also, it updates the ensemble as needed to capture new demonstrations from the player. """ 4 | from common.action_info_types import ActionInfoType 5 | from common.interactive_agent import InteractiveAgent 6 | from common.demo_recorder import DemoRecorder 7 | 8 | 9 | class InteractiveMarkovAgent(InteractiveAgent): 10 | def __init__(self, key_to_action, agent, ensemble_stack): 11 | super().__init__(key_to_action, agent) 12 | self.demos = DemoRecorder() 13 | self.ensemble = ensemble_stack 14 | 15 | def get_action(self, observation, reward, done, info): 16 | action = None 17 | action_info = None 18 | 19 | # Check if there is human input and record that as the next action to take 20 | human_action = self.key_to_action.get(self.latest_key) 21 | if human_action is not None: 22 | action = human_action 23 | action_info = ActionInfoType.human 24 | 25 | # If there is no human input, check for an action computed by the ensemble model 26 | if action is None: 27 | ensemble_action, action_found = self.ensemble.get_action(self.demos.observations, self.demos.actions) 28 | if action_found: 29 | action = ensemble_action 30 | action_info = ActionInfoType.found 31 | 32 | # If ensemble didn't produce an action, let the auto play agent to produce one: 33 | if action is None: 34 | action, action_info = self.auto_agent.get_action(observation, reward, done, info) 35 | 36 | # Record action regardless of its origin and update ensemble as needed 37 | demo_status = self.demos.update(action, action_info, observation, reward, done) 38 | if DemoRecorder.ended == demo_status or (action_info == "human" and done): 39 | self.ensemble.add_demo(self.demos.demos[-1]["observations"], 40 | self.demos.demos[-1]["actions"]) 41 | 42 | return action, action_info 43 | -------------------------------------------------------------------------------- /examples/mountain_car/interactively_trainable_agent.py: -------------------------------------------------------------------------------- 1 | """ Copyright (C) 2019 Electronic Arts Inc. All rights reserved. 2 | The module demonstrates interactively trainable Mountain Car agent based on Markov Ensemble.""" 3 | import gym 4 | import numpy as np 5 | import sys 6 | sys.path.append('../../') 7 | 8 | from common.action_info_types import ActionInfoType 9 | from common.box_quantizer import BoxQuantizer 10 | from common.interactive_markov_agent import InteractiveMarkovAgent 11 | from common.markov_ensemble import MarkovEnsembleStack 12 | from common.random_agent import RandomAgent 13 | 14 | 15 | if __name__ == '__main__': 16 | env = gym.make("MountainCar-v0") 17 | 18 | # RandomAgent provides default actions: 19 | random_agent = RandomAgent(env) 20 | 21 | # Ensemble and its parameters: 22 | min_order = 0 23 | max_order = 6 24 | box = [np.array([-1.3, -0.1]), np.array([0.7, 0.1])] # The actual box: position -1.2 0.6; velocity -0.07 0.07 25 | quantizers = [BoxQuantizer(box, np.array([2**k, 2**k])).quantize for k in range(3, 10)] 26 | mes = MarkovEnsembleStack(min_order, max_order, quantizers) 27 | 28 | key_to_action = { 29 | 65361: 0, # Left 30 | 32: 1, # Space 31 | 65363: 2 # Right 32 | } 33 | interactive_agent = InteractiveMarkovAgent(key_to_action, random_agent, mes) 34 | 35 | observation, reward, done, info = env.reset(), None, False, None 36 | interactive_agent.demos.update(None, ActionInfoType.agent, observation, reward, done) 37 | 38 | episode_id = 0 39 | for _ in range(15000): 40 | env.render() 41 | env.unwrapped.viewer.window.on_key_press = interactive_agent.on_press 42 | env.unwrapped.viewer.window.on_key_release = interactive_agent.on_release 43 | 44 | action, _ = interactive_agent.get_action(observation, reward, done, info) 45 | observation, reward, done, info = env.step(action) 46 | 47 | if done: 48 | episode_id += 1 49 | print("Episode", episode_id, "ended.") 50 | interactive_agent.demos.end_episode(reward, 'mountain_car.pickle') 51 | observation, reward, done, info = env.reset(), None, False, None 52 | interactive_agent.demos.update(None, ActionInfoType.agent, observation, reward, done) 53 | 54 | env.close() 55 | -------------------------------------------------------------------------------- /common/markov_model.py: -------------------------------------------------------------------------------- 1 | """ Copyright (C) 2019 Electronic Arts Inc. All rights reserved. 2 | A Markov model defines probabilities of transitions in a stochastic system. 3 | Here, using demonstration episodes (games played by a human player), 4 | we compute the probabilities of the next action in the currently observed state 5 | and with N actions already taken. The model may not necessarily find such an 6 | action if the game state together with the sequence of previous actions 7 | was never observed in the human play-through. 8 | 9 | This model doesn't build an explicit dictionary of frequencies; instead, it keeps 10 | the original user input and collects pointers into it. This way we simplify 11 | sampling of the original continuous channels which helps to preserve temporal 12 | coherence of the model playback better and reproduce the distribution of 13 | the observed inputs. 14 | """ 15 | from collections import defaultdict 16 | import numpy as np 17 | from common.action_info_types import ActionInfoType 18 | 19 | 20 | class MarkovModel: 21 | def __init__(self, states, actions, model_order, state_preproc=lambda x: x): 22 | self.order = model_order 23 | self.state_preproc = state_preproc 24 | self.states = [self.state_preproc(s) for s in states] 25 | self.actions = actions 26 | self.ngram_pointers = defaultdict(list) 27 | self.last_action_idx = 0 28 | self._build_dictionary() 29 | 30 | def _build_dictionary(self): 31 | """Key is last state and N actions preceding it. """ 32 | sequence_length = len(self.actions) 33 | for ii in range(sequence_length - self.order): 34 | ngram = tuple([self.states[ii + self.order - 1]] + self.actions[ii: ii + self.order]) 35 | self.ngram_pointers[ngram].append(ii) 36 | 37 | def next_action(self, states, actions): 38 | """ Expects states and actions already being preprocessed. """ 39 | last_state = self.state_preproc(states[-1]) 40 | ngram = tuple([last_state] + list(actions[-self.order:])) 41 | occurrences = self.ngram_pointers.get(ngram, []) 42 | if not occurrences: 43 | return None, ActionInfoType.not_found 44 | pick_id = 0 if len(occurrences) == 1 else np.random.choice(range(len(occurrences))) 45 | idx = occurrences[pick_id] 46 | self.last_action_idx = idx 47 | return self.actions[idx + self.order], ActionInfoType.found 48 | -------------------------------------------------------------------------------- /examples/lunar_lander/interactively_trainable_agent.py: -------------------------------------------------------------------------------- 1 | """ Copyright (C) 2019 Electronic Arts Inc. All rights reserved. 2 | The module demonstrates interactively trainable Lunar Lander agent based on Markov Ensemble.""" 3 | import gym 4 | import time 5 | import numpy as np 6 | import sys 7 | sys.path.append('../../') 8 | 9 | from common.action_info_types import ActionInfoType 10 | from common.box_quantizer import BoxQuantizer 11 | from common.interactive_markov_agent import InteractiveMarkovAgent 12 | from common.markov_ensemble import MarkovEnsembleStack 13 | from common.random_agent import RandomAgent 14 | 15 | 16 | if __name__ == '__main__': 17 | env = gym.make("LunarLander-v2") 18 | print(env.observation_space) 19 | 20 | # Provides default actions: 21 | random_agent = RandomAgent(env) 22 | 23 | # Ensemble and its parameters: 24 | min_order = 0 25 | max_order = 6 26 | box = [np.array([-10]*8), np.array([10]*8)] 27 | quantizers = [BoxQuantizer(box, np.array([2**k]*8)).quantize for k in range(3, 12)] 28 | mes = MarkovEnsembleStack(min_order, max_order, quantizers) 29 | 30 | # See OpenAI documentation for the definition of the state-action space for the lander environment. 31 | # https://gym.openai.com/envs/LunarLander-v2/ 32 | key_to_action = { 33 | 32: 0, # No action, stops all thrusters. Space. 34 | 65363: 1, # Right thruster. Right arrow. 35 | 65362: 2, # Main thruster. Up arrow. 36 | 65361: 3 # Left thruster. Left Arrow. 37 | } 38 | interactive_agent = InteractiveMarkovAgent(key_to_action, random_agent, mes) 39 | 40 | observation, reward, done, info = env.reset(), 0, False, None 41 | interactive_agent.demos.update(None, ActionInfoType.agent, observation, reward, done) 42 | 43 | episode_id = 0 44 | for _ in range(15000): 45 | env.render() 46 | env.unwrapped.viewer.window.on_key_press = interactive_agent.on_press 47 | env.unwrapped.viewer.window.on_key_release = interactive_agent.on_release 48 | 49 | action, _ = interactive_agent.get_action(observation, reward, done, info) 50 | observation, reward, done, info = env.step(action) 51 | time.sleep(0.1) # Simplifies human interaction. 52 | 53 | if done: 54 | episode_id += 1 55 | print("Episode", episode_id, "ended.") 56 | interactive_agent.demos.end_episode(reward, 'lunar_lander.pickle') 57 | time.sleep(1) # Simplifies human interaction. 58 | observation, reward, done, info = env.reset(), 0, False, None 59 | interactive_agent.demos.update(None, ActionInfoType.agent, observation, reward, done) 60 | 61 | env.close() 62 | -------------------------------------------------------------------------------- /common/demo_recorder.py: -------------------------------------------------------------------------------- 1 | """ Copyright (C) 2019 Electronic Arts Inc. All rights reserved. 2 | DemoRecorder instance records observations and actions, keeps separate 3 | records for human demonstrations. It can save episodes as native pickled files 4 | with references only to numpy and defaultdict. We use these demonstrations 5 | to build Markov Ensembles. """ 6 | import pickle 7 | from collections import defaultdict 8 | from common.action_info_types import ActionInfoType 9 | 10 | 11 | class DemoRecorder: 12 | ended = 1 13 | in_progress = 2 14 | no_update = 3 15 | 16 | def __init__(self): 17 | self.curr_episode = defaultdict(list) 18 | self.episodes = [] 19 | self.curr_demo = defaultdict(list) 20 | self.demos = [] 21 | 22 | def end_episode(self, reward, save_file="episodes.pickle"): 23 | self.rewards.append(reward) 24 | print('Total reward:', sum([r for r in self.rewards if r is not None])) 25 | if self.curr_demo: 26 | self.demos.append(self.curr_demo) 27 | self.curr_demo = defaultdict(list) 28 | self.episodes.append(self.curr_episode) 29 | self.curr_episode = defaultdict(list) 30 | if save_file: 31 | with open(save_file, "wb") as outfile: 32 | pickle.dump(self.episodes, outfile, protocol=pickle.HIGHEST_PROTOCOL) 33 | 34 | @property 35 | def observations(self): 36 | return self.curr_episode['observations'] 37 | 38 | @property 39 | def actions(self): 40 | return self.curr_episode['actions'] 41 | 42 | @property 43 | def action_infos(self): 44 | return self.curr_episode['action_infos'] 45 | 46 | @property 47 | def rewards(self): 48 | return self.curr_episode['rewards'] 49 | 50 | def update(self, action, action_info, observation, reward, done): 51 | self.observations.append(observation) 52 | self.actions.append(action) 53 | self.action_infos.append(action_info) 54 | self.rewards.append(reward) 55 | 56 | human_input_stopped = len(self.action_infos) > 1 and \ 57 | self.action_infos[-2] == ActionInfoType.human and \ 58 | action_info == ActionInfoType.agent 59 | 60 | if self.curr_demo and human_input_stopped: 61 | self.demos.append(self.curr_demo) 62 | self.curr_demo = defaultdict(list) 63 | return self.ended 64 | 65 | if action_info is not None and not done: 66 | self.curr_demo["observations"].append(observation) 67 | self.curr_demo["actions"].append(action) 68 | return self.in_progress 69 | 70 | return self.no_update 71 | -------------------------------------------------------------------------------- /notebooks/explore_metrics.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "code", 5 | "execution_count": 1, 6 | "metadata": {}, 7 | "outputs": [], 8 | "source": [ 9 | "# Copyright (C) 2019 Electronic Arts Inc. All rights reserved.\n", 10 | "import os\n", 11 | "from collections import defaultdict\n", 12 | "import numpy as np\n", 13 | "import pandas as pd\n", 14 | "import matplotlib.pyplot as plt\n", 15 | "%matplotlib inline" 16 | ] 17 | }, 18 | { 19 | "cell_type": "code", 20 | "execution_count": 2, 21 | "metadata": {}, 22 | "outputs": [ 23 | { 24 | "name": "stdout", 25 | "output_type": "stream", 26 | "text": [ 27 | "50 episodes loaded.\n" 28 | ] 29 | }, 30 | { 31 | "data": { 32 | "text/plain": [ 33 | "dict_keys(['observations', 'actions', 'action_infos'])" 34 | ] 35 | }, 36 | "execution_count": 2, 37 | "metadata": {}, 38 | "output_type": "execute_result" 39 | } 40 | ], 41 | "source": [ 42 | "import pickle\n", 43 | "with open('..\\\\examples\\mountain_car\\\\mountain_car.pickle', \"rb\") as infile:\n", 44 | " episodes = pickle.load(infile)\n", 45 | "print(len(episodes), \"episodes loaded.\")\n", 46 | "episodes[0].keys()" 47 | ] 48 | }, 49 | { 50 | "cell_type": "code", 51 | "execution_count": 4, 52 | "metadata": {}, 53 | "outputs": [], 54 | "source": [ 55 | "max_x = [max([ob[0] for ob in episode['observations']]) for episode in episodes]\n", 56 | "# print(\"Max x\", max_x)\n", 57 | "\n", 58 | "human_inputs = [len([info for info in episode['action_infos'] if info==\"human\"]) for episode in episodes]\n", 59 | "# print(\"Num human inputs\", human_inputs)\n", 60 | "\n", 61 | "ensemble_inputs = [len([info for info in episode['action_infos'] if info==True]) for episode in episodes]\n", 62 | "# print(\"Num sccessful ensemble inputs\", ensemble_inputs)\n", 63 | "\n", 64 | "failed_ensemble_inputs = [len([info for info in episode['action_infos'] if info==False]) for episode in episodes]\n", 65 | "# print(\"Num failed ensemble inputs\", failed_ensemble_inputs)\n", 66 | "\n", 67 | "random_inputs = [len([info for info in episode['action_infos'] if info==None]) for episode in episodes]\n", 68 | "# print('Random inputs', random_inputs)\n", 69 | "\n", 70 | "episode_lengths = [len(episode['actions']) for episode in episodes]\n", 71 | "# print('Episode lengths', episode_lengths)\n", 72 | "\n", 73 | "# Number of good human actions, i.e., when sign of velocity is same as the direction of input\n", 74 | "good_human_inputs = [len([ (a, ob, info) for a, ob, info in zip(episode['actions'], episode['observations'], episode['action_infos']) if info == \"human\" and (a - 1)*ob[0] >= 0]) for episode in episodes]\n", 75 | "# print('\"Good\" human inputs count', good_human_inputs)\n", 76 | "\n", 77 | "# Number of good ensemble actions, i.e., when sign of velocity is same as the direction of input\n", 78 | "good_ensemble_inputs = [len([ (a, ob, info) for a, ob, info in zip(episode['actions'], episode['observations'], episode['action_infos']) if info == True and (a - 1)*ob[0] >= 0]) for episode in episodes]\n", 79 | "# print('Good ensemble inputs count', good_ensemble_inputs)" 80 | ] 81 | }, 82 | { 83 | "cell_type": "code", 84 | "execution_count": 5, 85 | "metadata": {}, 86 | "outputs": [ 87 | { 88 | "data": { 89 | "image/png": "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BP6FnflQRDwiqUcjq58MTI+ID4BlkpYCg4And+bYZmZmhVI0p9AjYnlELAfeByLjtbMukvR8eoq9U1p2APBGRp2qtGw7ki6QNF/S/LfffrsZYZiZmeVe0SRwSSdJegVYBjwMVAJ/2cnd3QB8AhgAVAO1d7Jnm1A66x8JETElIgZGxMBu3brtZBhmZmb5kbdT6JJGA3MiYp2k7wOfAn4cEfUN2P3vwGDg/og4UtJxwJk7c+yIWJERx01A7XyaVcCBGVXLgTd35hjbuWLvnOxm6/7WNKpa3elEszn77LMZNWoUp59++jblnm7UzKx05bMH/oM0eQ8BhgPTSHrG9dkUEauANpLaRMRckh50k0naL2P1S0DtHeqzgTGS9pDUE+gF/HVnjlEsSmk60c2bNxc6BDOzXUY+E3jtnd0jgRsi4m5g9x3UXy1pL+AR4FZJ1wMN/saXVEFyE9qhkqoknQv8TNIiSc8DxwHfAIiIF4A7gBeBOcCFpXwHen3TiUYEF110EYcddhgjR45k5cqVW7bNmTOHPn36MGTIEO66666s+62pqeHb3/42Rx99NP379+fGG28Ekh77sGHDOP300+nTpw9jx46ldiCgBQsWMHToUI466iiGDx9OdXU1AMOGDePyyy9n6NChXH/99bz66qsMHjyYo48+mh/+8IfstddeAIwfP5677757Swxjx45l9uzZuW0wM7NdSD4T+N8l3QicAfw5HSp1R8c7meQGtm+QJNdXgS82dJCIODMi9ouIdhFRHhFTI2J8RBweEf0j4qSIqM6of3VEfCIiDo2Inb3GXhTqm0505syZvPzyyyxatIibbrqJJ554AoCNGzdy/vnn88c//pFHH32Ut956K+t+p06dyt577828efOYN28eN910E8uWLQPgmWeeYfLkybz44ou89tprPP7442zatImLL76YGTNmsGDBAs455xy+973vbdnf6tWrefjhh/nmN7/JxIkTmThxIvPmzWP//fffUue8887jt7/9LQBr1qzhiSee4MQTT8TMzLLLZwL/MvB/wPCIWA10Ar5dX+WIeC/tDX8M+CPwB5p3F/our77pRB955BHOPPNM2rZty/7778/xxx8PwEsvvUTPnj3p1asXkhg3blzW/d57773ccsstDBgwgGOOOYZVq1bxyiuvADBo0CDKy8tp06YNAwYMoLKykpdffpnF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\n", 90 | "text/plain": [ 91 | "
" 92 | ] 93 | }, 94 | "metadata": {}, 95 | "output_type": "display_data" 96 | } 97 | ], 98 | "source": [ 99 | "t = range(1, len(max_x) + 1)\n", 100 | "\n", 101 | "# fig, ax = plt.subplots(figsize=(12,7))\n", 102 | "fig, ax = plt.subplots(figsize=(7,6))\n", 103 | "\n", 104 | "ax1 = plt.subplot(3, 1, 1)\n", 105 | "# color = 'red'\n", 106 | "ax1.set_ylabel('Performance\\n(goal $x = 0.5$)')\n", 107 | "ax1.plot(t, max_x, label=\"Best $x$\")\n", 108 | "ax1.tick_params(axis='y')\n", 109 | "ax1.legend(loc='upper left')\n", 110 | "plt.title(\"Performance of interactive Markov Ensemble for Mountain Car\")\n", 111 | "\n", 112 | "ax2 = plt.subplot(3, 1, 2)\n", 113 | "color = 'tab:red'\n", 114 | "ax2.set_ylabel('$N$ actions from\\nMarkov Ensemble') # we already handled the x-label with ax1\n", 115 | "ax2.plot(t, ensemble_inputs, label='All')\n", 116 | "ax2.plot(t, good_ensemble_inputs, label='Add energy', linestyle=\"--\")\n", 117 | "ax2.tick_params(axis='y')\n", 118 | "ax2.legend()\n", 119 | "plt.title(\"Actions produced by Markov Ensemble\")\n", 120 | "\n", 121 | "ax3 = plt.subplot(3, 1, 3)\n", 122 | "ax3.set_ylabel('$N$ actions\\nfrom human')\n", 123 | "ax3.bar(t, human_inputs, label='All')\n", 124 | "ax3.bar(t, good_human_inputs, width=0.65, label='Add energy')\n", 125 | "ax3.set_ylim([0,200])\n", 126 | "ax3.legend(loc='upper left')\n", 127 | "ax3.set_xlabel('Episode')\n", 128 | "plt.title(\"Human actions\")\n", 129 | "\n", 130 | "fig.tight_layout() # otherwise the right y-label is slightly clipped\n", 131 | "plt.savefig('mountain_car.pdf')\n", 132 | "plt.savefig('mountain_car.png')\n", 133 | "plt.show()\n", 134 | "plt.close()" 135 | ] 136 | }, 137 | { 138 | "cell_type": "code", 139 | "execution_count": 6, 140 | "metadata": {}, 141 | "outputs": [ 142 | { 143 | "name": "stdout", 144 | "output_type": "stream", 145 | "text": [ 146 | "60 episodes loaded.\n" 147 | ] 148 | }, 149 | { 150 | "data": { 151 | "text/plain": [ 152 | "dict_keys(['observations', 'actions', 'action_infos', 'rewards'])" 153 | ] 154 | }, 155 | "execution_count": 6, 156 | "metadata": {}, 157 | "output_type": "execute_result" 158 | } 159 | ], 160 | "source": [ 161 | "with open('..\\\\examples\\\\lunar_lander\\\\lunar_lander.pickle', \"rb\") as infile:\n", 162 | " episodes = pickle.load(infile)\n", 163 | "print(len(episodes), \"episodes loaded.\")\n", 164 | "episodes[0].keys()" 165 | ] 166 | }, 167 | { 168 | "cell_type": "code", 169 | "execution_count": 9, 170 | "metadata": {}, 171 | "outputs": [], 172 | "source": [ 173 | "rewards = [sum(episode['rewards']) for episode in episodes]\n", 174 | "# print(\"Rewards\", rewards)\n", 175 | "\n", 176 | "# TODO: detect first human input\n", 177 | "ma0 = np.mean(rewards[:10])\n", 178 | "# print('ma0:', ma0)\n", 179 | "ma1 = [np.mean(rewards[10+i:10+i+10]) for i in range(len(rewards)- 10 - 10)]\n", 180 | "# print('ma1:',ma1)\n", 181 | "\n", 182 | "human_inputs = [len([info for info in episode['action_infos'] if info==\"human\"]) for episode in episodes]\n", 183 | "# print(\"Num human inputs\", human_inputs)\n", 184 | "\n", 185 | "ensemble_inputs = [len([info for info in episode['action_infos'] if info==True]) for episode in episodes]\n", 186 | "# print(\"Num sccessful ensemble inputs\", ensemble_inputs)\n", 187 | "\n", 188 | "failed_ensemble_inputs = [len([info for info in episode['action_infos'] if info==False]) for episode in episodes]\n", 189 | "# print(\"Num failed ensemble inputs\", failed_ensemble_inputs)\n", 190 | "\n", 191 | "random_inputs = [len([info for info in episode['action_infos'] if info==None]) for episode in episodes]\n", 192 | "# print('Random inputs', random_inputs)\n", 193 | "\n", 194 | "episode_lengths = [len(episode['actions']) for episode in episodes]\n", 195 | "# print('Episode lengths', episode_lengths)" 196 | ] 197 | }, 198 | { 199 | "cell_type": "code", 200 | "execution_count": 11, 201 | "metadata": {}, 202 | "outputs": [ 203 | { 204 | "data": { 205 | "image/png": "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BzN69GjefffdzZ/vggsu4OCDD2bQoEGbP2tNTQ2HHnoolZWVfPGLX+Tpp59u1XotigQuqW/G4jeB2h7qM4ETJXWWNBDYE3gh3/GZmZW7Tz75hMrKys2PSy+9tEnbLViwgClTprBo0SLuvPNOXn/9dV544QXOOussfv3rXwMwcuRInnvuOV566SVOPPFEfv7zn2/e/tVXX+WPf/wjL7zwApdffjkbNmzY5hhXXnkl8+bNY+HChTz11FMsXLiQ9evXM378eKZMmcKCBQt44okn6NatG1dccQXjx4+nqqqK8ePHb7WfiRMncuqpp7Jw4UJOPvlkLrjggs3v1dTU8Mwzz/DQQw9tbrHfddddHHXUUVRVVbFgwQIqKyuzrtftaXPXwCXdDYwCekmqBi4DRkmqJDk9vhT4PkBEvCJpBrAY2AicFxGbChG3mVk569q1K1VVVZuXa6+BN2b48OH07Zu00fbYYw+OPPJIAA444ABmzZoFJPe5jx8/npqaGtavX7/VfdNjxoyhc+fOdO7cmT59+rBixQr69++/1TFmzJjBzTffzMaNG6mpqWHx4sVIom/fvgwfPhyAHXbYodFYn332We677z4AJkyYwEUXXbT5vXHjxtGuXTv222+/zWcIhg8fzhlnnMGGDRsYN25cqyfwNtcCj4iTIqJvRHSMiP4RcUtETIiIAyJicEQcFxE1GetfGRF7RMTeEfFIIWM3M7NtdejQgc8++wxIBjBZv3795vc6d+68+XW7du02L7dr146NGzcCcP755zNx4kQWLVrETTfdtNW905nbt2/ffvM2td555x1+8Ytf8OSTT7Jw4ULGjBnDunXriIgW38aVuX1mHBFJV6xDDz2UOXPm0K9fPyZMmMAdd9zRouPV1eYSuJmZlZaKigrmz58PwIMPPljvae7t+fjjj+nXL7nBaOrUqVltu3r1arp168aOO+7IihUreOSRpJ23zz77sHz5cubOnQvAmjVr2LhxIz169GDNmjX17uvggw/mnnvuAWDatGmMHDlyu8detmwZffr04eyzz+bMM8/kxRdfzCr2xuTsFLqkzsC3gYrM40TEFbk6ppmZtb2Jec4++2zGjh3LiBEjGD16NN26dctq+8mTJ3P88cfTr18/DjroIN55550mbztkyBCGDh3K/vvvz6BBgzjkkEMA6NSpE9OnT+f888/nk08+oWvXrjzxxBMcdthhXHXVVVRWVnLxxRdvta/rr7+eM844g2uuuYbevXtz2223bffYs2fP5pprrqFjx45079691Vvgqm3qtzZJjwIfA/OBzdelI+LaBjfKk2HDhkVTrs1Y6fJsZFZKlixZwr777lvoMKwZ6vu3kzQ/IoY1tm0uO7H1j4j6hkQ1MzOzFsrlNfC/SDogh/s3MzMrW7lsgY8ETpf0DvApyahpERGDc3hMM7Oy1Bq9qi2/WnoJO5cJ/Os53LeZmaW6dOnChx9+6ClFi0jtfOBdunRp9j5ylsAjYhmApD5A8yM0M7Pt6t+/P9XV1bz//vuFDsWy0KVLl20GnclGLm8jO45k0pHPAyuB3YElJHN3m5lZK+nYseNWo5NZeWhyJzZJx0vqkb7+maT7JH1pO5v8L+Ag4PWIGAiMBv7comjNzMwMyK4X+r9FxBpJI4GjgKkk03w2ZENEfAi0k9QuImaRTAdqZmZmLZRNAq8djGUMcGNEPAh02s76qyR1B+YA0yRNIZlwxMzMzFoomwT+X5JuAsYDD6dDpW5v+7HAJ8CPgEeBt4BvNDdQMzMz2yKbTmwnAEcDv4iIVZI+B/zPhlaOiL8DSNoB+EOLojQzM7OtZJPAN5HcDna8pMztHqtvZUnfB64gaYV/RjqQCzCoeaFaufP45WZmW2STwB8EVgEvkoys1pifAvtHxAfNCcyKhxOrmVn+ZZPAs52c5C3gH1nGY2aWF/X98AT/+LTikU0C/4ukAyJiURPXvzjd5nkyWuwRcUE2AZqZmdm2sumFPhKYL+k1SQslLZK0cDvr3wT8CXiOZE7w2sd2SbpV0kpJL2eU7SLpcUlvpM87p+WSdL2kN9OYtjewjJmZWcnIpgWe7eQkGyPix1luA3A7cANwR0bZJODJiLhK0qR0+V/SmPZMHweSDCxzYDOOaTnga+NmZrnT5AReOzlJFmZJOofkFrLMU+h/a+Q4cyRV1CkeC4xKX08FZpMk8LHAHZHMyfacpJ0k9Y2ImixjNTMzKypZTWYiaQjw1XTx6YhYsJ3Vv5s+X5xR1tzbyHatTcoRUZPOcAbQD/hrxnrVadk2CTz9MXEOwIABA5oRgrWm1mydu6VvZuUom8lMLgSmAX3Sx+8lnd/Q+hExsJ5Ha98DXt/Et/XOkB4RN0fEsIgY1rt371YOw8zMLL+yaYGfCRyYMcLa1cCzwK/rW1nSqfWVR8Qd9ZU3YkXtqXFJfUmmJ4Wkxb1bxnr9geXN2L+ZmVlRyaYXutgyoQnp6/pawLWGZzy+CkwGjssyvlozgdPS16eRDCpTW35q2hv9IOBjX/82M7NykE0L/DbgeUn3kyTuccCtDa0cEVudXpe0I3BnYweRdDdJh7VekqqBy4CrgBmSzgTeBY5PV38YOAZ4k2TQmO9l8XnMzMyKVja90K+TNBs4hCSBnxYRVVkc6x8kt3s1dpyTGnhrdD3rBnBeFjFYG+cOaWZmTdNoApf0TESMlLSGpIOYMt6LiNihge3+wJYOZe2A/YAZLQ/ZzMzMGk3gETEyfe6R5b5/kfF6I7AsIqqz3IdZm+GzA2bWlmRzG9nVTSmrFRFPZTz+7ORtZmbWerLphf5P9ZQ1OLyqpG+lY5d/LGm1pDWSVmcfopmZmdXVlGvg5wL/DAyqM3lJD+DP29n058A3ImJJy0I0MzOzuprSC/0u4BHg/5JMIlJrTSPjmq9w8jYzM8uNpnRi+xj4GGjo9q6tSPpW+nKepOnAA2w9mcl9zYjTrKTU1yEO3CnOzJquyfeBS5oKXBgRq9LlnYFrI+KMOqt+I+P1P4AjM5YDcAK3Ns29zc2sGGQzEtvg2uQNEBEfSRpad6WI8GhoZmZmOZZNAm8naeeI+AhA0i5Zbm9mlnc+o2KlKpsEfC3wF0n3psvHA1e2fkhmrcd/vM2sVGUzFvodkuYBh5MMp/qtiFics8jMzMysQdmeAq8BXgC6kMwWdmhEzKlvRUk7AacCFZnHiYgLmheqmVnx8Vkgy5VseqGfBVwI9AeqgIOAZ0la5PV5GHgOWAR81rIwzYqT/3ibWa5k0wK/EBgOPBcRh0naB7h8O+t3iYgftyg6MzOzDP5RvEU2Y6Gvi4h1AJI6R8SrwN7bWf9OSWdL6itpl9pHi6I1MzMzILsWeHV6XfsB4HFJHwHLt7P+euAa4F/ZMi94AIOaE6iZmZltkU0v9G+mLydLmgXsCDy6nU1+DHwhIj5oQXxmZtZCPu1cmpo1EEtEPNWE1V4hGUq11UhaCqwBNgEbI2JYelp+Oklv96XACbWDzZhZ8fE48c3jJF1+cjmS2iagKm2tZ05m0tLbyA6r06qfBDwZEVdJmpQu/0sLj2FmZtamNWU+8AER8W4z9v1A+si1scCo9PVUYDZO4GZtnluMtj3+/9G4prTAH5XUB1hCck/3wvR5UUSsbmijiJgqqROwV1r0WkRsaGG8ATwmKYCbIuJmYNeIqEmPWZPGug1J5wDnAAwYMKCFYZht4VO+ZlYITZkPfL80Ee8PHAAMBsYBgyV9GhED69tO0iiSFvFSkqFXd5N0WkMjtzXRIRGxPE3Sj0t6takbpsn+ZoBhw4ZFI6ubWRHxjygrR026Bh4R64GXJL0JfAL0AvYkaYk35FrgyIh4DUDSXsDdwJebG2xELE+fV0q6HxgBrJDUN2199wVWNnf/ZmaWP/7h1TJNuQa+NzAGOBboDTwOTAPOSRN7QzrWJm+AiHhdUsfmBiqpG9AuItakr48ErgBmAqcBV6XPDzb3GGZmVl6K+Vp7U1rgS4CXSBLkzIj4tJH1a82TdAtwZ7p8MjA/+xA32xW4XxIkcd8VEY9KmgvMkHQm8C7JNKdmZs1WzH/UrXw0JYGfS3LteyLwG0kfknZiI+nI1lBP83OB84ALSK6BzwF+29xAI+JtYEg95R8Co5u7XzMzazr/uGk7mtKJ7abMZUn9STqyHQB8m3puFZPUHrglIk4BrmudUM3MzKxW1gO5REQ1UE0yXWhD62yS1FtSp0auk5uZmVkz5HIktqXAnyXNBP5eWxgRbpGbmZm1UC4T+PL00Q7okcPjmFkr8jXO5mnNevO/gTVFqydwSXdGxARgVURMae39m1n5cmJzHdgW7XKwzy9L2h04Q9LOknbJfOTgeGZmZmUnF6fQ/x/JPOGDSO77VsZ7kZabmZnlRWuftWgrZ0FaPYFHxPXA9ZJujIhzW3v/Zmaloq0kAitOOevE5uRtVnj5ShBORFZq45oXw//pXPZCN7NmKIY/HGZWeE7gZmWqOT8U8rWNmTXOCdzMzHLKl3JyIxe3kZmZmVmOuQVuZmZbKbUOaaXKCdzMrEyV2ynnUuNT6GZmZkXILXAzsyZyi9XaErfAzczMipATuJmZWREqiQQu6WhJr0l6U9KkQsdjZmaWa0WfwCW1B34DfB3YDzhJ0n6FjcrMzCy3ij6BAyOANyPi7YhYD9wDjC1wTGZmZjmliCh0DC0i6TvA0RFxVro8ATgwIibWWe8c4Jx0cW/gtRyE0wv4IAf7LRbl/vnBdQCug3L//OA6gJbVwe4R0buxlUrhNjLVU7bNr5KIuBm4OaeBSPMiYlguj9GWlfvnB9cBuA7K/fOD6wDyUwelcAq9GtgtY7k/sLxAsZiZmeVFKSTwucCekgZK6gScCMwscExmZmY5VfSn0CNio6SJwB+B9sCtEfFKgcLJ6Sn6IlDunx9cB+A6KPfPD64DyEMdFH0nNjMzs3JUCqfQzczMyo4TuJmZWRFyAm8F5TiUq6RbJa2U9HJG2S6SHpf0Rvq8cyFjzCVJu0maJWmJpFckXZiWl1MddJH0gqQFaR1cnpYPlPR8WgfT086lJU1Se0kvSXooXS6bOpC0VNIiSVWS5qVlZfM9AJC0k6R7Jb2a/k34Sj7qwAm8hcp4KNfbgaPrlE0CnoyIPYEn0+VStRH4SUTsCxwEnJf+u5dTHXwKHB4RQ4BK4GhJBwFXA79M6+Aj4MwCxpgvFwJLMpbLrQ4Oi4jKjPuey+l7ADAFeDQi9gGGkPxfyHkdOIG3XFkO5RoRc4C/1SkeC0xNX08FxuU1qDyKiJqIeDF9vYbkC9uP8qqDiIi16WLH9BHA4cC9aXlJ1wGApP7AGOB36bIoszqoR9l8DyTtABwK3AIQEesjYhV5qAMn8JbrB/w1Y7k6LStHu0ZEDSQJDuhT4HjyQlIFMBR4njKrg/TUcRWwEngceAtYFREb01XK4fvwK+Ai4LN0uSflVQcBPCZpfjpkNZTX92AQ8D5wW3oZ5XeSupGHOnACb7kmDeVqpUlSd+A/gB9GxOpCx5NvEbEpIipJRkAcAexb32r5jSp/JB0LrIyI+ZnF9axasnUAHBIRXyK5jHiepEMLHVCedQC+BNwYEUOBv5OnSwZO4C3noVy3WCGpL0D6vLLA8eSUpI4kyXtaRNyXFpdVHdRKTxnOJukPsJOk2kGiSv37cAhwnKSlJJfPDidpkZdNHd5NW8sAAAMsSURBVETE8vR5JXA/yQ+5cvoeVAPVEfF8unwvSULPeR04gbech3LdYiZwWvr6NODBAsaSU+l1zluAJRFxXcZb5VQHvSXtlL7uChxB0hdgFvCddLWSroOIuDgi+kdEBcl3/08RcTJlUgeSuknqUfsaOBJ4mTL6HkTEe8BfJe2dFo0GFpOHOvBIbK1A0jEkv7prh3K9ssAh5Zyku4FRJFPmrQAuAx4AZgADgHeB4yOibke3kiBpJPA0sIgt1z4vIbkOXi51MJikc057ksbAjIi4QtIgktboLsBLwCkR8WnhIs0PSaOAn0bEseVSB+nnvD9d7ADcFRFXSupJmXwPACRVknRi7AS8DXyP9DtBDuvACdzMzKwI+RS6mZlZEXICNzMzK0JO4GZmZkXICdzMzKwIOYGbmZkVISdwszIlaVM6g1TtY7ujR0n6gaRTW+G4SyX1aul+zMqdbyMzK1OS1kZE9wIcdykwLCI+yPexzUqJW+BmtpW0hXx1Otf3C5K+kJZPlvTT9PUFkhZLWijpnrRsF0kPpGXPpQO9IKmnpMfSiR5uImOscEmnpMeoknRTOj2vmTWBE7hZ+epa5xT6+Iz3VkfECOAGklEG65oEDI2IwcAP0rLLgZfSskuAO9Lyy4Bn0okeZpKMTIWkfYHxJJNhVAKbgJNb9yOala4Oja9iZiXqkzRx1ufujOdf1vP+QmCapAdIhtAFGAl8GyAi/pS2vHckmSv5W2n5f0r6KF1/NPBlYG4ytDxdKe1JL8xalRO4mdUnGnhdawxJYj4O+DdJ+7P9aTTr24eAqRFxcUsCNStXPoVuZvUZn/H8bOYbktoBu0XELOAiYCegOzCH9BR4OrHHB+kc6ZnlXwd2Tnf1JPAdSX3S93aRtHsOP5NZSXEL3Kx8dZVUlbH8aETU3krWWdLzJD/yT6qzXXvg9+npcQG/jIhVkiYDt0laCPyDLVMpXg7cLelF4CmSmZmIiMWSfgY8lv4o2ACcByxr7Q9qVop8G5mZbcW3eZkVB59CNzMzK0JugZuZmRUht8DNzMyKkBO4mZlZEXICNzMzK0JO4GZmZkXICdzMzKwI/Tf/xvizBjUE/QAAAABJRU5ErkJggg==\n", 206 | "text/plain": [ 207 | "
" 208 | ] 209 | }, 210 | "metadata": {}, 211 | "output_type": "display_data" 212 | } 213 | ], 214 | "source": [ 215 | "t = range(len(rewards))\n", 216 | "\n", 217 | "# fig, ax = plt.subplots(figsize=(12,7))\n", 218 | "fig, ax = plt.subplots(figsize=(7,6))\n", 219 | "\n", 220 | "ax1 = plt.subplot(3, 1, 1)\n", 221 | "color = 'red'\n", 222 | "ax1.set_ylabel('Performance')\n", 223 | "ax1.plot(t, rewards, label=\"Reward\")\n", 224 | "ma = [ma0 for _ in range(10)] + [ma1[0] for _ in range(10)] + ma1\n", 225 | "# print(ma)\n", 226 | "ax1.plot(t, ma, label=\"Avg Reward\", linestyle=\"--\")\n", 227 | "# ax1.plot(range(20, len(rewards)), ma1, label=\"Reward MA(10)\", linestyle=\"--\")\n", 228 | "ax1.tick_params(axis='y')\n", 229 | "ax1.legend(loc='lower right')\n", 230 | "plt.title(\"Performance of interactive Markov Ensemble for Lunar Lander\")\n", 231 | "\n", 232 | "ax2 = plt.subplot(3, 1, 2)\n", 233 | "color = 'tab:red'\n", 234 | "ax2.set_ylabel('$N$ actions from\\nMarkov Ensemble') # we already handled the x-label with ax1\n", 235 | "ax2.plot(t, ensemble_inputs, label='Ensemble actions')\n", 236 | "# ax2.plot(t, good_ensemble_inputs, label='Ensemble actions: \"Good\"\\n(adding kinetic energy)', linestyle=\"--\")\n", 237 | "ax2.tick_params(axis='y')\n", 238 | "ax2.legend()\n", 239 | "plt.title(\"Actions by Markov Ensemble\")\n", 240 | "\n", 241 | "ax3 = plt.subplot(3, 1, 3)\n", 242 | "ax3.set_ylabel('$N$ actions\\nfrom human')\n", 243 | "ax3.bar(t, human_inputs, label='Human actions')\n", 244 | "# ax3.bar(t, good_human_inputs, width=0.65, label='Human actions: \"Good\"\\n(adding kinetic energy)')\n", 245 | "# ax3.set_ylim([0,200])\n", 246 | "ax3.legend(loc='upper right')\n", 247 | "ax3.set_xlabel('Episode')\n", 248 | "plt.title(\"Human actions\")\n", 249 | "\n", 250 | "fig.tight_layout()\n", 251 | "plt.savefig('lunar_lander.pdf')\n", 252 | "plt.savefig('lunar_lander.png')\n", 253 | "plt.show()\n", 254 | "plt.close()" 255 | ] 256 | } 257 | ], 258 | "metadata": { 259 | "kernelspec": { 260 | "display_name": "Python 3", 261 | "language": "python", 262 | "name": "python3" 263 | }, 264 | "language_info": { 265 | "codemirror_mode": { 266 | "name": "ipython", 267 | "version": 3 268 | }, 269 | "file_extension": ".py", 270 | "mimetype": "text/x-python", 271 | "name": "python", 272 | "nbconvert_exporter": "python", 273 | "pygments_lexer": "ipython3", 274 | "version": "3.6.5" 275 | } 276 | }, 277 | "nbformat": 4, 278 | "nbformat_minor": 2 279 | } 280 | --------------------------------------------------------------------------------