diff --git a/intersimple-expert-rollout-setobs2.py b/intersimple-expert-rollout-setobs2.py new file mode 100644 index 0000000..c48a733 --- /dev/null +++ b/intersimple-expert-rollout-setobs2.py @@ -0,0 +1,61 @@ +import torch +import functools +from src.core.sampling import rollout_sb3 +from intersim.envs import IntersimpleLidarFlatIncrementingAgent +from intersim.envs.intersimple import speed_reward +from intersim.expert import NormalizedIntersimpleExpert +from src.util.wrappers import CollisionPenaltyWrapper, Setobs +import numpy as np +from gym.wrappers import TransformObservation + +obs_min = np.array([ + [-1000, -1000, 0, -np.pi, -1e-1, 0.], + [0, -np.pi, -20, -20, -np.pi, -1e-1], + [0, -np.pi, -20, -20, -np.pi, -1e-1], + [0, -np.pi, -20, -20, -np.pi, -1e-1], + [0, -np.pi, -20, -20, -np.pi, -1e-1], + [0, -np.pi, -20, -20, -np.pi, -1e-1], +]).reshape(-1) + +obs_max = np.array([ + [1000, 1000, 20, np.pi, 1e-1, 0.], + [50, np.pi, 20, 20, np.pi, 1e-1], + [50, np.pi, 20, 20, np.pi, 1e-1], + [50, np.pi, 20, 20, np.pi, 1e-1], + [50, np.pi, 20, 20, np.pi, 1e-1], + [50, np.pi, 20, 20, np.pi, 1e-1], +]).reshape(-1) + +def main(track:int, loc:int=0): + env = IntersimpleLidarFlatIncrementingAgent( + loc=loc, + track=track, + n_rays=5, + reward=functools.partial( + speed_reward, + collision_penalty=0 + ), + ) + + policy = NormalizedIntersimpleExpert(env, mu=0.001) + + env = Setobs(TransformObservation( + CollisionPenaltyWrapper( + env, + collision_distance=6, collision_penalty=100 + ), lambda obs: (obs - obs_min) / (obs_max - obs_min + 1e-10) + )) + print(env.nv, 'vehicles') + expert_data = rollout_sb3(env, policy, n_episodes=150, max_steps_per_episode=200) + + states, actions, rewards, dones = expert_data + print(f'Expert mean episode length {(~dones).sum() / states.shape[0]}') + print(f'Expert mean reward per episode {rewards[~dones].sum() / states.shape[0]}') + print(f'Observation mean', states[~dones].mean(0)) + print(f'Observation std', states[~dones].std(0)) + + torch.save(expert_data, f'intersimple-expert-data-setobs2-loc{loc}-track{track}.pt') + +if __name__=='__main__': + import fire + fire.Fire(main) \ No newline at end of file diff --git a/scratch/arec/intersimple/commands.txt b/scratch/arec/intersimple/commands.txt deleted file mode 100644 index aa91797..0000000 --- a/scratch/arec/intersimple/commands.txt +++ /dev/null @@ -1,22 +0,0 @@ -python -m render_options --model_name='gail_options_image_mid_wcollision' --env='NRasterizedRoute' --options=True --width=36 --height=36 --m_per_px=2 --agent=50 --stop_on_collision=False - -import torch, os -from src.data import load_experts -folder = 'expert_data/DR_USA_Roundabout_FT/track0000' -single_agent = os.path.join(folder, 'expert.pkl') -multi_agent = os.path.join(folder,'joint_expert_states.pt') -multi_agent_actions = os.path.join(folder,'joint_expert_actions.pt') -demonstrations = load_experts([single_agent], flatten=False) -demonstrations[0].__dict__.keys() -len(demonstrations[0].obs) -single_agent_lengths = [len(demonstration.obs) for demonstration in demonstrations] -states = torch.load(multi_agent) -actions = torch.load(multi_agent_actions) -multi_agent_lengths = [sum(~torch.isnan(states[:,i,0])).item() for i in range(states.shape[1])] - -single_agent_actions = [demonstration.acts for demonstration in demonstrations] -multi_agent_actions = [actions[~torch.isnan(actions[:,i,0])] for i in range(actions.shape[1])] - -import pickle -with open(single_agent, "rb") as f: - new_trajectories = pickle.load(f) \ No newline at end of file diff --git a/scratch/arec/intersimple/data/__init__.py b/scratch/arec/intersimple/data/__init__.py deleted file mode 100644 index e69de29..0000000 diff --git a/scratch/arec/intersimple/data/expert.py b/scratch/arec/intersimple/data/expert.py deleted file mode 100644 index 587b68d..0000000 --- a/scratch/arec/intersimple/data/expert.py +++ /dev/null @@ -1,145 +0,0 @@ -from intersim.envs.intersimple import Intersimple -from stable_baselines3.common.policies import BasePolicy -import gym -import intersim.envs.intersimple -import imitation.data.rollout as rollout -from stable_baselines3.common.vec_env.dummy_vec_env import DummyVecEnv -from imitation.data.wrappers import RolloutInfoWrapper - -class IntersimExpert(BasePolicy): - - def __init__(self, intersim_env, mu=0, *args, **kwargs): - super().__init__( - observation_space=gym.spaces.Space(), - action_space=gym.spaces.Space(), - *args, **kwargs - ) - self._intersim = intersim_env - self._mu = mu - - def forward(self, *args, **kwargs): - raise NotImplementedError() - - def _predict(self, *args, **kwargs): - raise NotImplementedError() - - def _action(self): - target_t = min(self._intersim._ind + 1, len(self._intersim._svt.simstate) - 1) - target_state = self._intersim._svt.simstate[target_t] - return self._intersim.target_state(target_state, mu=self._mu) - - def predict(self, *args, **kwargs): - return self._action(), None - -class IntersimpleExpert(BasePolicy): - - def __init__(self, intersimple_env, mu=0, *args, **kwargs): - super().__init__( - observation_space=intersimple_env.observation_space, - action_space=intersimple_env.action_space, - *args, **kwargs - ) - self._intersimple = intersimple_env - self._intersim_expert = IntersimExpert(intersimple_env._env, mu=mu) - - def forward(self, *args, **kwargs): - raise NotImplementedError() - - def _predict(self, *args, **kwargs): - raise NotImplementedError() - - def _action(self): - return self._intersim_expert._action()[self._intersimple._agent] - - def predict(self, *args, **kwargs): - return self._action(), None - -class NormalizedIntersimpleExpert(IntersimpleExpert): - - def __init__(self, *args, **kwargs): - super().__init__(*args, **kwargs) - - def predict(self, *args, **kwargs): - action, _ = super().predict(*args, **kwargs) - return self._intersimple._normalize(action), None - -class DummyVecEnvPolicy(BasePolicy): - - def __init__(self, experts): - self._experts = [e() for e in experts] - - def forward(self, *args, **kwargs): - raise NotImplementedError() - - def _predict(self, *args, **kwargs): - raise NotImplementedError() - - def predict(self, *args, **kwargs): - predictions = [e.predict() for e in self._experts] - actions = [p[0] for p in predictions] - states = [p[1] for p in predictions] - return actions, states - - def forward(self, *args, **kwargs): - raise NotImplementedError() - - def _predict(self, *args, **kwargs): - raise NotImplementedError() - -def save_video(env, expert): - env.reset() - env.render() - done = False - while not done: - actions, _ = expert.predict() - _, _, done, _ = env.step(actions) - env.render() - env.close() - -def demonstrations(expert='NormalizedIntersimpleExpert', env='NRasterizedIncrementingAgent', path=None, min_timesteps=None, min_episodes=None, video=False, env_args={}, policy_args={}): - """Rollout and save expert demos. - - Usage: - python -m intersimple.expert - Args: - expert (class): class of expert - env (class): class of env intersim.envs.intersimple - path (str): path to store output - min_timesteps (int): min number of timesteps for call to rollout.rollout_and_save - min_episodes (int): min number of episodes for call to rollout.rollout_and_save - video (bool): whether to save a video of the expert until a single environment instantiation stops - env_args (dict): dictionary of kwargs when instantiating environment class - policy_args (dict): dictionary of kwargs when instantiating Expert policy - """ - - Env = intersim.envs.intersimple.__dict__[env] - Expert = globals()[expert] - - env = Env(**env_args) - info_env = RolloutInfoWrapper(env) # getting rollout info (dictionary) from environment - venv = DummyVecEnv([lambda: info_env]) # making a DummyVecEnv with a list of a function that when called returns the rollout info - - policy = Expert(env, **policy_args) # instantiate an expert policy from specified class with instantiated environment and policy kwargs - venv_policy = DummyVecEnvPolicy([lambda: policy]) # make a DummyVecEnvPolicy with a list of a function that when called returns the Expert policy - - if min_timesteps is None and min_episodes is None: - min_episodes = env.nv # one episode per vehicle being controlled in environment (hopefully an incrementing agent environment) - - if video: - save_video(env, policy) - - path = path or (policy.__class__.__name__ + '_' + env.__class__.__name__ + '.pkl') - suntil = rollout.make_sample_until( - min_timesteps=min_timesteps, - min_episodes=min_episodes, - ) - rollout.rollout_and_save( - path=path, - policy=venv_policy, - venv=venv, - sample_until=suntil - ) - -if __name__ == '__main__': - import fire - fire.Fire(demonstrations) diff --git a/scratch/arec/intersimple/data/generate.sh b/scratch/arec/intersimple/data/generate.sh deleted file mode 100755 index 90918c9..0000000 --- a/scratch/arec/intersimple/data/generate.sh +++ /dev/null @@ -1,9 +0,0 @@ -#python -m expert --env=IntersimpleReward --min_timesteps=200 --env_args='{agent:51}' --path='NormalizedIntersimpleExpert_IntersimpleRewardAgent51.pkl' -#python -m expert --env=IntersimpleReward --min_timesteps=200 --env_args='{agent:51}' --policy_args='{mu:0.005}' --path='NormalizedIntersimpleExpert_IntersimpleRewardAgent51Mu.005.pkl' -#python -m expert --env=IntersimpleReward --min_timesteps=200 --env_args='{agent:51}' --policy_args='{mu:0.001}' --path='NormalizedIntersimpleExpert_IntersimpleRewardAgent51Mu.001.pkl' -#python -m expert --env=NRasterized --min_timesteps=200 --env_args='{agent:51,width:36,height:36,m_per_px:2}' --policy_args='{mu:0.001}' --path='NormalizedIntersimpleExpertMu.001_NRasterizedAgent51w36h36mppx2.pkl' -# python -m expert --env=NRasterizedRandomAgent --min_timesteps=10000 --env_args='{width:36,height:36,m_per_px:2}' --policy_args='{mu:0.001}' --path='NormalizedIntersimpleExpertMu.001N10000_NRasterizedRandomAgentw36h36mppx2.pkl' -#python -m expert --env=NRasterized --min_timesteps=200 --env_args='{agent:51,width:36,height:36,m_per_px:2}' --policy_args='{mu:0.001}' --path='NormalizedIntersimpleExpertMu.001_NRasterizedAgent51w36h36mppx2.pkl' -#python -m expert --env=NRasterized --min_timesteps=3000 --video --env_args='{width:36,height:36,m_per_px:2}' --policy_args='{mu:0.001}' --path='NormalizedIntersimpleExpertMu.001_NRasterizedRandomAgentw36h36mppx2.pkl' -#python -m expert --env=NRasterizedIncrementingAgent --env_args='{width:36,height:36,m_per_px:2}' --policy_args='{mu:0.001}' --path='NormalizedIntersimpleExpertMu.001_NRasterizedIncrementingAgentw36h36mppx2.pkl' -python -m process_all_experts --env_args='{width:36,height:36,m_per_px:2}' --policy_args='{mu:0.001}' diff --git a/scratch/arec/intersimple/data/load_experts.py b/scratch/arec/intersimple/data/load_experts.py deleted file mode 100644 index 7a8e78b..0000000 --- a/scratch/arec/intersimple/data/load_experts.py +++ /dev/null @@ -1,23 +0,0 @@ -import pickle -import imitation.data.rollout as rollout -from tqdm import tqdm - -def load_experts(expert_files=[]): - """ - Load expert trajectories from files and combine their transitions into a single RB - - Args: - expert_files (list): list of expert file strings - Returns: - transitions (list): list of combined expert episode transitions - """ - transitions = [] - for file in tqdm(expert_files): - with open(file, "rb") as f: - trajectories = pickle.load(f) - transitions = transitions + rollout.flatten_trajectories(trajectories) - return transitions - -if __name__=='__main__': - import fire - fire.Fire(load_experts) \ No newline at end of file diff --git a/scratch/arec/intersimple/data/process_all_experts.py b/scratch/arec/intersimple/data/process_all_experts.py deleted file mode 100644 index 1499e7b..0000000 --- a/scratch/arec/intersimple/data/process_all_experts.py +++ /dev/null @@ -1,48 +0,0 @@ -import tqdm -import expert -import copy -import os -import intersim -from tqdm import tqdm - -def process_all_experts(filename='expert.pkl',env_args={}, policy_args={}): - """ - Process all experts in the Interaction Dataset - For now, using NormalizedIntersimpleExpert with NRasterizedIncrementingAgent environment - - Args: - filename (str): name for track file - env_args (dict): default environment kwargs - policy_args (dict): default policy kwargs - """ - I, J = len(intersim.LOCATIONS), intersim.MAX_TRACKS - pbar = tqdm(total=I*J) - for loc in range(I): - for track in range(J): - - it_env_args = copy.deepcopy(env_args) - it_env_args.update({ - 'loc':loc, - 'track':track, - }) - out_folder = os.path.join(intersim.LOCATIONS[loc], 'track%04i'%(track)) - if not os.path.isdir(out_folder): - os.makedirs(out_folder) - it_path = os.path.join(out_folder,filename) - - expert.demonstrations( - expert='NormalizedIntersimpleExpert', - env='NRasterizedIncrementingAgent', - path=it_path, - env_args=it_env_args, - policy_args=policy_args, - ) - pbar.update(1) - pbar.close() - - -if __name__=='__main__': - import fire - fire.Fire(process_all_experts) - - diff --git a/scratch/arec/intersimple/gail/discriminator.py b/scratch/arec/intersimple/gail/discriminator.py deleted file mode 100644 index 1c9664c..0000000 --- a/scratch/arec/intersimple/gail/discriminator.py +++ /dev/null @@ -1,101 +0,0 @@ -import torch - -# imitation.rewards.discrim_nets.DiscrimNetGAIL is composed of self.discriminator (nn.Module), -# which gets called with inputs (state, action) when needed. - -class CnnDiscriminator(torch.nn.Module): - """ConvNet similar to stable_baselines3.common.policies.ActorCriticCnnPolicy.""" - - def __init__(self, env): - super().__init__() - - obs_channels, _, _ = env.observation_space.shape - (action_size,) = env.action_space.shape - in_channels = obs_channels + action_size - - self.cnn = torch.nn.Sequential( - torch.nn.Conv2d(in_channels, 32, kernel_size=(8, 8), stride=(4, 4)), # 5+1 -> 32 - torch.nn.ReLU(), - torch.nn.Conv2d(32, 64, kernel_size=(4, 4), stride=(2, 2)), # 32 -> 64 - torch.nn.ReLU(), - torch.nn.Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1)), # 64 -> 64 - torch.nn.ReLU(), - torch.nn.Flatten(start_dim=1, end_dim=-1), - torch.nn.LazyLinear(512), # 28224 -> 512 - torch.nn.ReLU(), - torch.nn.LazyLinear(1), # 512 -> 1 - ) - - @staticmethod - def _concatenate(state, action): - b, _, h, w = state.shape - _, a = action.shape - act = action.unsqueeze(-1).unsqueeze(-1).expand((b, a, h, w)) - sa = torch.cat((state, act), -3) - return sa - - def forward(self, state, action): - sa = self._concatenate(state, action) - assert sa.ndim == 4 - return self.cnn(sa).squeeze(1) - -class CnnDiscriminatorFlatAction(torch.nn.Module): - """ConvNet similar to stable_baselines3.common.policies.ActorCriticCnnPolicy.""" - - def __init__(self, env): - super().__init__() - - obs_channels, _, _ = env.observation_space.shape - (action_size,) = env.action_space.shape - in_channels = obs_channels - - self.cnn = torch.nn.Sequential( - torch.nn.Conv2d(in_channels, 32, kernel_size=(8, 8), stride=(4, 4)), # in_channels -> 32 - torch.nn.ReLU(), - torch.nn.Conv2d(32, 64, kernel_size=(4, 4), stride=(2, 2)), # 32 -> 64 - torch.nn.ReLU(), - torch.nn.Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1)), # 64 -> 64 - torch.nn.ReLU(), - torch.nn.Flatten(start_dim=1, end_dim=-1), - torch.nn.LazyLinear(128), # 28224 -> 128 - ) - self.decoder = torch.nn.Sequential( - torch.nn.LazyLinear(64), #128 + 2 -> 64 - torch.nn.ReLU(), - torch.nn.LazyLinear(64), #64 -> 64 - torch.nn.ReLU(), - torch.nn.LazyLinear(1) #64 -> 1 - ) - - @staticmethod - def _concatenate(state, action): - b, s= state.shape - b, a = action.shape - sa = torch.cat((state, action), -1) - return sa - - def forward(self, state, action): - s = self.cnn(state.float()) - sa = self._concatenate(s, action) - assert sa.ndim == 2 - return self.decoder(sa).squeeze(1) - -class MlpDiscriminator(torch.nn.Module): - """MLP similar to stable_baselines3.common.policies.ActorCriticPolicy.""" - - def __init__(self, env=None): - super().__init__() - self.flatten = torch.nn.Flatten(start_dim=1, end_dim=-1) - self.mlp = torch.nn.Sequential( - torch.nn.LazyLinear(64), # 42 -> 64 - torch.nn.Tanh(), - torch.nn.LazyLinear(64), # 64 -> 64 - torch.nn.Tanh(), - torch.nn.LazyLinear(1), # 64 -> 1 - ) - - def forward(self, state, action): - flat = self.flatten(state) - sa = torch.cat((action, flat), -1) - assert sa.ndim == 2 - return self.mlp(sa).squeeze(1) diff --git a/scratch/arec/intersimple/gail/test_discriminator.py b/scratch/arec/intersimple/gail/test_discriminator.py deleted file mode 100644 index 1de614c..0000000 --- a/scratch/arec/intersimple/gail/test_discriminator.py +++ /dev/null @@ -1,45 +0,0 @@ -from intersim.envs.intersimple import NRasterized -from discriminator import CnnDiscriminator -import torch - -def test_image_concatenation(): - env = NRasterized() - disc = CnnDiscriminator(env) - s = torch.tensor(env.reset()).unsqueeze(0) - a = torch.tensor([[0.5]]) - sa = disc._concatenate(s, a) - - assert s.shape == (1, 5, 200, 200) - assert a.shape == (1, 1) - assert sa.shape == (1, 6, 200, 200) - assert torch.allclose(sa[:, :5], 1.0 * s) - assert (sa[:, 5] == a.unsqueeze(-1)).all() - -def test_image_concatenation3(): - env = NRasterized() - disc = CnnDiscriminator(env) - - s1 = env.reset() - a1 = 0.15 - s2, _, _, _ = env.step(0.9) - a2 = 0.25 - s3, _, _, _ = env.step(-0.9) - a3 = 0.35 - - s = torch.stack([ - torch.tensor(s1), - torch.tensor(s2), - torch.tensor(s3) - ], axis=0) - a = torch.tensor([ - [a1], - [a2], - [a3], - ]) - sa = disc._concatenate(s, a) - - assert s.shape == (3, 5, 200, 200) - assert a.shape == (3, 1) - assert sa.shape == (3, 6, 200, 200) - assert torch.allclose(sa[:, :5], 1.0 * s) - assert (sa[:, 5] == a.unsqueeze(-1)).all() diff --git a/scratch/arec/intersimple/gail_image_multiagent_nocollision.py b/scratch/arec/intersimple/gail_image_multiagent_nocollision.py deleted file mode 100644 index 4619b5a..0000000 --- a/scratch/arec/intersimple/gail_image_multiagent_nocollision.py +++ /dev/null @@ -1,70 +0,0 @@ -# %% -import pathlib -import pickle -import tempfile - -import stable_baselines3 as sb3 -from stable_baselines3.common.env_util import make_vec_env - -from imitation.algorithms import adversarial, bc -from imitation.data import rollout -from imitation.util import logger - -from intersim.envs.intersimple import NRasterized - -from gail.discriminator import CnnDiscriminatorFlatAction - -model_name = 'gail_image_multiagent_nocollision' - -# %% -# Load pickled test demonstrations. -with open("data/NormalizedIntersimpleExpertMu.001_NRasterizedRandomAgentw36h36mppx2.pkl", "rb") as f: - # This is a list of `imitation.data.types.Trajectory`, where - # every instance contains observations and actions for a single expert - # demonstration. - trajectories = pickle.load(f) - -# %% -# Convert List[types.Trajectory] to an instance of `imitation.data.types.Transitions`. -# This is a more general dataclass containing unordered -# (observation, actions, next_observation) transitions. -transitions = rollout.flatten_trajectories(trajectories) - -venv = make_vec_env(NRasterized, n_envs=2, env_kwargs={'stop_on_collision':False, 'width': 36, 'height': 36, 'm_per_px': 2}) - -tempdir = tempfile.TemporaryDirectory(prefix="quickstart") -tempdir_path = pathlib.Path(tempdir.name) -print(f"All Tensorboards and logging are being written inside {tempdir_path}/.") - -# Train GAIL on expert data. -# GAIL, and AIRL also accept as `expert_data` any Pytorch-style DataLoader that -# iterates over dictionaries containing observations, actions, and next_observations. -logger.configure(tempdir_path / "GAIL/") -gail_trainer = adversarial.GAIL( - venv, - expert_data=transitions, - expert_batch_size=32, - #n_disc_updates_per_round=2048, - discrim_kwargs={'discrim_net': CnnDiscriminatorFlatAction(venv)}, - gen_algo=sb3.PPO("CnnPolicy", venv, verbose=1, n_steps=1024), - allow_variable_horizon=True, -) -gail_trainer.train(total_timesteps=100000) -gail_trainer.gen_algo.save(model_name) - -#del gail_trainer - -# %% -model = sb3.PPO.load(model_name) - -env = NRasterized(stop_on_collision=False, width=36, height=36, m_per_px=2) - -obs = env.reset() -while True: - action, _states = model.predict(obs) - obs, rewards, done, info = env.step(action) - env.render(mode='post') - if done: - break - -env.close(filestr='render/'+model_name) diff --git a/scratch/arec/intersimple/gail_image_singleagent_nocollision.py b/scratch/arec/intersimple/gail_image_singleagent_nocollision.py deleted file mode 100644 index 1c8cec4..0000000 --- a/scratch/arec/intersimple/gail_image_singleagent_nocollision.py +++ /dev/null @@ -1,70 +0,0 @@ -# %% -import pathlib -import pickle -import tempfile - -import stable_baselines3 as sb3 -from stable_baselines3.common.env_util import make_vec_env - -from imitation.algorithms import adversarial, bc -from imitation.data import rollout -from imitation.util import logger - -from intersim.envs.intersimple import NRasterized - -from gail.discriminator import CnnDiscriminator - -model_name = 'gail_image_singleagent_nocollision' - -# %% -# Load pickled test demonstrations. -with open("data/NormalizedIntersimpleExpertMu.001_NRasterizedAgent51w36h36mppx2.pkl", "rb") as f: - # This is a list of `imitation.data.types.Trajectory`, where - # every instance contains observations and actions for a single expert - # demonstration. - trajectories = pickle.load(f) - -# %% -# Convert List[types.Trajectory] to an instance of `imitation.data.types.Transitions`. -# This is a more general dataclass containing unordered -# (observation, actions, next_observation) transitions. -transitions = rollout.flatten_trajectories(trajectories) - -venv = make_vec_env(NRasterized, n_envs=2, env_kwargs={'agent':51, 'stop_on_collision':False, 'width': 36, 'height': 36, 'm_per_px': 2}) - -tempdir = tempfile.TemporaryDirectory(prefix="quickstart") -tempdir_path = pathlib.Path(tempdir.name) -print(f"All Tensorboards and logging are being written inside {tempdir_path}/.") - -# Train GAIL on expert data. -# GAIL, and AIRL also accept as `expert_data` any Pytorch-style DataLoader that -# iterates over dictionaries containing observations, actions, and next_observations. -logger.configure(tempdir_path / "GAIL/") -gail_trainer = adversarial.GAIL( - venv, - expert_data=transitions, - expert_batch_size=32, - #n_disc_updates_per_round=2048, - discrim_kwargs={'discrim_net': CnnDiscriminator(venv)}, - gen_algo=sb3.PPO("CnnPolicy", venv, verbose=1, n_steps=1024), - allow_variable_horizon=True, -) -gail_trainer.train(total_timesteps=100000) -gail_trainer.gen_algo.save(model_name) - -#del gail_trainer - -# %% -model = sb3.PPO.load(model_name) - -env = NRasterized(agent=51, width=36, height=36, m_per_px=2, stop_on_collision=False) - -obs = env.reset() -while True: - action, _states = model.predict(obs) - obs, rewards, done, info = env.step(action) - env.render(mode='post') - if done: - break - -env.close(filestr='render/'+model_name) diff --git a/scratch/arec/intersimple/gail_options_image.py b/scratch/arec/intersimple/gail_options_image.py deleted file mode 100644 index 94ad1d5..0000000 --- a/scratch/arec/intersimple/gail_options_image.py +++ /dev/null @@ -1,172 +0,0 @@ -# %% -import sys -sys.path.append('../../../') -from src.discriminator import CnnDiscriminator, CnnDiscriminatorFlatAction -from src.policies import OptionsCnnPolicy -from src.util import render_env -from src.data import load_experts -from src.gail.options import OptionsEnv, LLOptions, HLOptions, RenderOptions -from src.gail.train import train_discriminator, train_generator - -from imitation.algorithms import adversarial -from imitation.util import logger -import imitation.data.rollout as rollout - -import stable_baselines3 -from stable_baselines3.common.env_util import make_vec_env - -import torch -import torch.utils.data -import numpy as np -import itertools -import gym -import pickle -import tempfile -import pathlib -from tqdm import tqdm - -from intersim.envs.intersimple import NRasterized, NRasterizedRoute, NRasterizedRandomAgent, NRasterizedIncrementingAgent, NRasterizedRouteRandomAgent - -ALL_OPTIONS = [(v,t) for v in [0,2,4,6,8] for t in [5, 10]] # option 0 is safe fallback - -def flatten_transitions(transitions): - return { - 'obs': np.stack(list(t['obs'] for t in transitions), axis=0), - 'next_obs': np.stack(list(t['next_obs'] for t in transitions), axis=0), - 'acts': np.stack(list(t['acts'] for t in transitions), axis=0), - 'dones': np.stack(list(t['dones'] for t in transitions), axis=0), - } - -def train(expert_data, env_class=NRasterizedRouteRandomAgent, env_settings={}, - epochs=10, discrim_batch_size=32, generator_steps=2048, discount=0.99): - """ - Args: - expert_data: list of transitions - env_class: environment class - env_settings: environment settings - epochs: number of epochs to train for - discrim_batch_size: discriminator batch size - generator_steps: number of steps taken in generator - discount: discount factor - Returns: - generator (stable_baselines3.PPO): options policy - """ - env = env_class(**env_settings) - env.discount = discount - - tempdir = tempfile.TemporaryDirectory(prefix="quickstart") - tempdir_path = pathlib.Path(tempdir.name) - logger.configure(tempdir_path / "GAIL/") - print(f"All Tensorboards and logging are being written inside {tempdir_path}/.") - - venv = make_vec_env(env_class, n_envs=1, env_kwargs=env_settings) - discriminator = adversarial.GAIL( - expert_data=expert_data, - expert_batch_size=discrim_batch_size, - discrim_kwargs={'discrim_net': CnnDiscriminatorFlatAction(venv)}, - #discrim_kwargs={'discrim_net': CnnDiscriminator(venv)}, - venv=venv, # unused - gen_algo=stable_baselines3.PPO("CnnPolicy", venv), # unused - ) - - generator = stable_baselines3.PPO( - OptionsCnnPolicy, - OptionsEnv(env, options=ALL_OPTIONS), - verbose=1, - n_steps=generator_steps, - ) - - # PPO.train requires logger as set up in - # PPO._setup_learn (called by PPO.learn) - generator._logger = stable_baselines3.common.utils.configure_logger( - generator.verbose, - generator.tensorboard_log, - ) - - for _ in tqdm(range(epochs)): - train_discriminator(LLOptions(env, options=ALL_OPTIONS), generator, discriminator, num_samples=discrim_batch_size) - train_generator(HLOptions(env, options=ALL_OPTIONS), generator, discriminator, num_samples=generator_steps) - - return generator - -# %% -if __name__ == '__main__': - # %% - model_name = 'gail_options_image_mid_wcollision' - env_class = NRasterizedRouteRandomAgent - env_settings = {'width': 36, 'height': 36, 'm_per_px': 2, 'stop_on_collision': False} - - #env_class = NRasterized - #env_settings = {'agent': 51, 'width': 36, 'height': 36, 'm_per_px': 2} - files = ['../../../expert_data/DR_USA_Roundabout_FT/track%04i/expert.pkl'%(i) for i in range(5)] - transitions=load_experts(files) - - generator = train( - transitions, - env_class=env_class, - env_settings=env_settings, - epochs=2, - discrim_batch_size=256, - generator_steps=10,#256, - discount=0.99 - ) - - generator.save(model_name) - - # Render - render_settings = {'width': 36, 'height': 36, 'm_per_px': 2, 'agent':51, 'stop_on_collision': False} - render_env(model_name=model_name, env='NRasterizedRoute', options=True, options_list=ALL_OPTIONS, - **render_settings) - - -# %% Tests - -def test_ll_expert_data(): - with open("data/NormalizedIntersimpleExpertMu.001_NRasterizedAgent51w36h36mppx2.pkl", "rb") as f: - expert_trajectories = pickle.load(f) - expert_transitions = rollout.flatten_trajectories(expert_trajectories) - - env = LLOptions(NRasterized(agent=51, width=36, height=36, m_per_px=2)) - - gen_transitions = list(itertools.islice(env.sample_ll( - policy=stable_baselines3.PPO( - OptionsCnnPolicy, - OptionsEnv(env), - verbose=1, - ) - ), 10)) - gen_transitions = flatten_transitions(gen_transitions) - - assert expert_transitions[:10].obs.shape == gen_transitions['obs'].shape - assert expert_transitions[:10].next_obs.shape == gen_transitions['next_obs'].shape - assert expert_transitions[:10].acts.shape == gen_transitions['acts'].shape - assert expert_transitions[:10].dones.shape == gen_transitions['dones'].shape - -def test_ll_states(): - env = NRasterized() - policy = stable_baselines3.PPO( - OptionsCnnPolicy, - OptionsEnv(env), - verbose=1, - ) - llenv = LLOptions(env) - transitions = list(itertools.islice(llenv.sample_ll(policy=policy), 100)) - - env2 = NRasterized() - s2 = env2.reset() - for i, t in enumerate(transitions): - assert i == 0 or np.array_equal(t['obs'], transitions[i-1]['next_obs']) - assert np.array_equal(t['obs'], s2) - assert t['acts'].shape == (1,) - - nexts2, _, done2, _ = env2.step(t['acts']) - assert np.array_equal(t['next_obs'], nexts2) - assert np.array_equal(t['dones'], done2) - - if done2: - break - - s2 = nexts2 - -def test_hl_transitions(): - pass diff --git a/scratch/arec/intersimple/gail_options_scratch.py b/scratch/arec/intersimple/gail_options_scratch.py deleted file mode 100644 index 74b8ac5..0000000 --- a/scratch/arec/intersimple/gail_options_scratch.py +++ /dev/null @@ -1,559 +0,0 @@ -# %% -from gail.discriminator import CnnDiscriminator, CnnDiscriminatorFlatAction -from imitation.algorithms import adversarial -import stable_baselines3 -import torch.utils.data -import numpy as np -from intersim.envs.intersimple import NRasterized, NRasterizedRandomAgent -import itertools -from torch.distributions import Categorical -import gym -import torch -import pickle -import imitation.data.rollout as rollout -import tempfile -import pathlib -from imitation.util import logger -from stable_baselines3.common.env_util import make_vec_env -from tqdm import tqdm - -import logging -logging.basicConfig(level=logging.DEBUG) - -ALL_OPTIONS = [(v,t) for v in [0,2,4,6,8] for t in [5, 10, 20]] # option 0 is safe fallback - -class OptionsCnnPolicy(stable_baselines3.common.policies.ActorCriticCnnPolicy): - """ - Class for high-level options policy (generator) - """ - def __init__(self, observation_space, *args, **kwargs): - super().__init__(observation_space['obs'], *args, **kwargs) - - def _prior_distribution(self, s): - """ - Return prior distribution over high-level options (before masking) - Args: - s (torch.tensor): observation - Returns: - values (torch.tensor): values from critic - dist (torch.distributions): prior distribution over actions - """ - latent_pi, latent_vf, latent_sde = self._get_latent(s) - distribution = self._get_action_dist_from_latent(latent_pi, latent_sde) - values = self.value_net(latent_vf) - return values, distribution.distribution - - def predict(self, obs): - """ - Will mask invalid states before making action selections - Args: - obs: dict with keys: - obs (torch.tensor): (B,o) true observations - mask (torch.tensor): (B,m) mask over valid actions - Returns: - ch (torch.tensor): (B,a) sampled actions - values (torch.tensor): (B,) predicted value at observation - log_probs (torch.tensor): (B,) log probabilities of selected actions - """ - s, m = obs['obs'], obs['mask'] - values, prior = self._prior_distribution(s) - posterior = Categorical(prior.probs * m) - ch = posterior.sample() - return ch, values, posterior.log_prob(ch) - - def evaluate_actions(self, obs, ch): - """ - Evaluate particular actions - Args: - obs: dict with keys: - obs (torch.tensor): (B,o) true observations - mask (torch.tensor): (B,m) masks over valid actions - ch (torch.tensor): (B,a) selected actions - Returns: - values (torch.tensor): (B,) predicted value at observation - log_probs (torch.tensor): (B,) log probabilities of selected actions - ent (torch.tensor): (B,) entropy of each distribution over actions - """ - s, m = obs['obs'], obs['mask'] - values, prior = self._prior_distribution(s) - posterior = Categorical(prior.probs * m) - return values, posterior.log_prob(ch), posterior.entropy() # additional values used by PPO.train - -class OptionsEnv(gym.Wrapper): - """ - Wrap an intersimple environment with an options generator - """ - def __init__(self, env, *args, **kwargs): - """ - Initialize wrapped environment and set high-level action and observation spaces - """ - super().__init__(env, *args, **kwargs) - num_hl_options = len(ALL_OPTIONS) - self.action_space = gym.spaces.Discrete(num_hl_options) - self.observation_space = gym.spaces.Dict({ - 'obs': env.observation_space, - 'mask': gym.spaces.Box(low=0, high=1, shape=(num_hl_options,)), - }) - - def _after_choice(self): - pass - - def _after_step(self): - pass - - def _transitions(self): - raise NotImplementedError('Use `LLOptions` or `HLOptions` for sampling.') - - def sample(self, generator): - """ - yield transitions using a generator - Args: - generator (sb3.PPO) - Yields: - - """ - self.done = True - while True: - self.episode_start = False - - if self.done: - # reset environment - self.s = self.env.reset() - self.m = available_actions(self.env) - self.done = False - self.episode_start = True - - # set the action, the value of the start state, and the logprob of the action - # according to the current environment state and mask - self.ch, self.value, self.log_prob = generator.policy.predict({ - 'obs': torch.tensor(self.s).unsqueeze(0).to(generator.policy.device), - 'mask': torch.tensor(self.m).unsqueeze(0).to(generator.policy.device), - }) - - # store a float list of actions to take given the option selected in the environment - self.plan = list(map(float, generate_plan(self.env, self.ch))) - - # run whatever _after_choice might dictate in a child class - self._after_choice() - - # some checks - assert not self.done - assert self.plan - assert feasible(self.env, self.plan, self.ch) - - # execute the option so long as the episode isn't complete and the plan is still feasible - while not self.done and self.plan and feasible(self.env, self.plan, self.ch): - - # pop first action - self.a, self.plan = self.plan[0], self.plan[1:] - - # normalize action ?? - self.a = self.env._normalize(self.a) - - # step through environment - self.nexts, _, self.done, _ = self.env.step(self.a) - self.nextm = available_actions(self.env) - - # run whatever _after_step might dictate in child class - self._after_step() - - # update state and mask to current - self.s = self.nexts - self.m = self.nextm - - # transitions yielded from self._transitions() functions specied in child classes - yield from self._transitions() - - ### NOTE: only yields after a full option has been executed / exited - -class LLOptions(OptionsEnv): - """Sample low-level (state, action) tuples for discriminator training.""" - - def __init__(self, *args, **kwargs): - """ - LLOption uses the true LL observations - """ - super().__init__(*args, **kwargs) - # overwrite observation space to just output obs directly - self.observation_space = self.observation_space['obs'] - - def _after_choice(self): - """ - After each option choice, initialize/reset the transition buffer - """ - self._transition_buffer = [] - - def _after_step(self): - """ - After each ll action, append s, s', a, done to transition buffer - """ - self._transition_buffer.append({ - 'obs': self.s, - 'next_obs': self.nexts, - 'acts': np.array((self.a,)), - 'dones': np.array(self.done), - }) - - def _transitions(self): - """ - Yield from the transition buffer - """ - yield from self._transition_buffer - - def sample_ll(self, policy): - """ - Args: - policy - Returns: - gen: iterable which samples low-level transitions from the environment - """ - return self.sample(policy) - -class HLOptions(OptionsEnv): - """Sample high-level (state, action, reward) tuples for generator training.""" - - def __init__(self, *args, **kwargs): - super().__init__(*args, **kwargs) - - def _after_choice(self): - """ - After an option selection, initialize total reward and number of steps - """ - self.r = 0 - self.steps = 0 - - def _after_step(self): - """ - After each low-level action, add the discounted discriminated reward score (given a discriminator) - """ - self.r += self.discount**self.steps * self.discriminator.discrim_net.reward_train( - state=torch.tensor(self.s).unsqueeze(0).to(self.discriminator.discrim_net.device()), - action=torch.tensor([[self.a]]).to(self.discriminator.discrim_net.device()), - next_state=torch.tensor(self.s).unsqueeze(0).to(self.discriminator.discrim_net.device()), # unused - done=torch.tensor(self.done).unsqueeze(0).to(self.discriminator.discrim_net.device()), # unused - ) - self.steps += 1 - - def _transitions(self): - """ - Yield a single dictionary per high-level selected action - Fields: - obs: high-level state and mask at selection - action: chosen high-level action - reward: accumulated option reward - episode_start: whether the action was chosen at the episode start - value: the value estimate from the starting state - log_prob: the log_prob of the selected action from the starting state - done: whether the episode has ended - - """ - yield { - 'obs': {'obs': self.s, 'mask': self.m}, - 'action': self.ch, - 'reward': self.r.detach(), - 'episode_start': self.episode_start, - 'value': self.value.detach(), - 'log_prob': self.log_prob.detach(), - 'done': self.done, - } - - def sample_hl(self, policy, discriminator): - """ - Args: - policy - discriminator: function with which to score rewards - Returns: - gen: iterable which samples high-level transitions from the environment - """ - self.discriminator = discriminator - return self.sample(policy) - -class RenderOptions(LLOptions): - - def _after_step(self): - """ - Render the environment after each low-level step - """ - super()._after_step() - self.env.render() - - def close(self, *args, **kwargs): - """ - On 'close', close the environment - """ - self.env.close(*args, **kwargs) - -def available_actions(env): - """Return mask of available actions given current `env` state.""" - valid = np.array([feasible(env, generate_plan(env, i), i) for i in range(len(ALL_OPTIONS))]) - return valid - -def target_velocity_plan(current_v: float, target_v: float, t: int, dt: float): - """Smoothly target a velocity in a given number of steps""" - # for now, constant acceleration - a = (target_v - current_v) / (t * dt) - return a*np.ones((t,)) - -def generate_plan(env, i): - """Generate input profile for high-level action `i`.""" - assert i < len(ALL_OPTIONS), "Invalid option index {i}" - target_v, t = ALL_OPTIONS[i] - current_v = env._env.state[env._agent, 1].item() # extract from env - plan = target_velocity_plan(current_v, target_v, t, env._env._dt) - assert len(plan) == t, "incorrect plan length" - return plan - -def check_future_collisions_fast(env, actions): - """Checks whether `env._agent` would collide with other agents assuming `actions` as input. - - Vehicles are (over-)approximated by single circles. - - Args: - env (gym.Env): current environment state - actions (list of torch.Tensor): list of B (T, nv, adims) T-length action profiles - Returns: - feasible (torch.Tensor): tensor of shape (B,) indicating whether the respective action profiles are collision-free - """ - B, (T, nv, _) = len(actions), actions[0].shape - - states = torch.stack(env._env.propagate_action_profile(actions), axis=0) - assert states.shape == (B, T, nv, 5) - - distance = ((states[:, :, :, :2] - states[:, :, env._agent:env._agent+1, :2])**2).sum(-1).sqrt() - distance = torch.where(distance.isnan(), np.inf*torch.ones_like(distance), distance) # only collide with spawned agents - distance[:, :, env._agent] = np.inf # cannot collide with itself - assert distance.shape == (B, T, nv) - - radius = (env._env._lengths**2 + env._env._widths**2).sqrt() / 2 - min_distance = radius[env._agent] + radius - min_distance = min_distance.unsqueeze(0).unsqueeze(0) - assert min_distance.shape == (1, 1, nv) - - return (distance > min_distance).all(-1).all(-1) - -def check_future_collisions_circles(env, actions, n_circles:int=2): - """Checks whether `env._agent` would collide with other agents assuming `actions` as input. - - Vehicles are (over-)approximated by multiple circles. - - Args: - env (gym.Env): current environment state - actions (list of torch.Tensor): list of B (T, nv, adims) T-length action profiles - Returns: - feasible (torch.Tensor): tensor of shape (B,) indicating whether the respective action profiles are collision-free - """ - assert n_circles >= 2 - B, (T, nv, _) = len(actions), actions[0].shape - - states = torch.stack(env._env.propagate_action_profile(actions), axis=0) - assert states.shape == (B, T, nv, 5) - centers = states[:, :, :, :2] - psi = states[:, :, :, 3] - lon = torch.stack([psi.cos(), psi.sin()],dim=-1) # (B, T, nv, 2) - - # offset between [-env._env.lengths+env._env.widths/2, env._env.lengths/2-env._env.widths/2] - back = (-env._env._lengths/2+env._env._widths/2).unsqueeze(-1) # (nv, 1) - length = (env._env._lengths-env._env._widths).unsqueeze(-1) # (nv, 1) - diff_d = back + length*(torch.arange(n_circles)/(n_circles-1)).unsqueeze(0) # (nv, n_circles) - assert diff_d.shape == (nv, n_circles) - - offsets = diff_d[None, None, :, :, None] * lon[:, :, :, None, :] - assert offsets.shape == (B, T, nv, n_circles, 2) - - expanded_centers=centers.unsqueeze(-2) + offsets #(B, T, nv, n_circles, 2) - assert expanded_centers.shape == (B, T, nv, n_circles, 2) - agent_centers = expanded_centers[:,:,env._agent:env._agent+1,:,:] #(B, T, 1, n_circles, 2) - ds = expanded_centers.reshape((B, T, nv*n_circles, 1, 2)) - agent_centers #(B, T, nv*nc,1, 2) - (B, T, 1, nc, 2) = (B, T, nv*nc, nc, 2) - - distance = (ds**2).sum(-1).sqrt().reshape((B, T, nv, n_circles, n_circles)) # (B, T, nv, nc, nc) - distance = torch.where(distance.isnan(), np.inf*torch.ones_like(distance), distance) # only collide with spawned agents - distance[:, :, env._agent] = np.inf # cannot collide with itself - assert distance.shape == (B, T, nv, n_circles, n_circles) - - radius = env._env._widths*np.sqrt(2) / 2 - min_distance = radius[env._agent] + radius - min_distance = min_distance[None, None, :, None, None] - assert min_distance.shape == (1, 1, nv, 1, 1) - - return (distance > min_distance).all(-1).all(-1).all(-1).all(-1) - -def feasible(env, plan, ch): - """Check if input profile is feasible given current `env` state. Action `ch=0` is safe fallback.""" - - # zero pad plan - Take (T,) np plan and convert it to (T, nv, 1) torch.Tensor - full_plan = torch.zeros(len(plan), env._env._nv, 1) - full_plan[:, env._agent, 0] = torch.tensor(plan) - # valid = check_future_collisions_fast(env, [full_plan]) # check_future_collisions_fast takes in B-list and outputs (B,) bool tensor - valid = check_future_collisions_circles(env, [full_plan]) - return ch == 0 or valid.item() - -def flatten_transitions(transitions): - return { - 'obs': np.stack(list(t['obs'] for t in transitions), axis=0), - 'next_obs': np.stack(list(t['next_obs'] for t in transitions), axis=0), - 'acts': np.stack(list(t['acts'] for t in transitions), axis=0), - 'dones': np.stack(list(t['dones'] for t in transitions), axis=0), - } - -def train_discriminator(env, generator, discriminator, num_samples): - transitions = list(itertools.islice(env.sample_ll(generator), num_samples)) - generator_samples = flatten_transitions(transitions) - discriminator.train_disc(gen_samples=generator_samples) - -def train_generator(env, generator, discriminator, num_samples): - generator_samples = list(itertools.islice(env.sample_hl(generator, discriminator), num_samples+1)) - - generator.rollout_buffer.reset() - for s in generator_samples[:-1]: - generator.rollout_buffer.add( - obs=s['obs'], - action=s['action'].cpu(), - reward=s['reward'].cpu(), - episode_start=s['episode_start'], - value=s['value'], - log_prob=s['log_prob'], - ) - - generator.rollout_buffer.compute_returns_and_advantage( - last_values=generator_samples[-1]['value'], - dones=generator_samples[-1]['done'], - ) - - generator.train() - -def train(expert_data, env_class=NRasterizedRandomAgent, env_settings={}, epochs=10, discrim_batch_size=32, generator_steps=2048, discount=0.99): - """ - Args: - expert_data: list of transitions - env_class: environment class - env_settings: environment settings - epochs: number of epochs to train for - discrim_batch_size: discriminator batch size - generator_steps: number of steps taken in generator - discount: discount factor - Returns: - generator (stable_baselines3.PPO): options policy - """ - env = env_class(**env_settings) - env.discount = discount - - tempdir = tempfile.TemporaryDirectory(prefix="quickstart") - tempdir_path = pathlib.Path(tempdir.name) - logger.configure(tempdir_path / "GAIL/") - print(f"All Tensorboards and logging are being written inside {tempdir_path}/.") - - venv = make_vec_env(env_class, n_envs=1, env_kwargs=env_settings) - discriminator = adversarial.GAIL( - expert_data=expert_data, - expert_batch_size=discrim_batch_size, - discrim_kwargs={'discrim_net': CnnDiscriminatorFlatAction(venv)}, - #discrim_kwargs={'discrim_net': CnnDiscriminator(venv)}, - venv=venv, # unused - gen_algo=stable_baselines3.PPO("CnnPolicy", venv), # unused - ) - - generator = stable_baselines3.PPO( - OptionsCnnPolicy, - OptionsEnv(env), - verbose=1, - n_steps=generator_steps, - ) - - # PPO.train requires logger as set up in - # PPO._setup_learn (called by PPO.learn) - generator._logger = stable_baselines3.common.utils.configure_logger( - generator.verbose, - generator.tensorboard_log, - ) - - for _ in tqdm(range(epochs)): - train_discriminator(LLOptions(env), generator, discriminator, num_samples=discrim_batch_size) - train_generator(HLOptions(env), generator, discriminator, num_samples=generator_steps) - - return generator - -# %% -if __name__ == '__main__': - # %% - model_name = 'gail_options_image' - env_class = NRasterizedRandomAgent - env_settings = {'width': 36, 'height': 36, 'm_per_px': 2} - - with open("data/NormalizedIntersimpleExpertMu.001_NRasterizedIncrementingAgentw36h36mppx2.pkl", "rb") as f: - trajectories = pickle.load(f) - #import pdb - #pdb.set_trace() - transitions = rollout.flatten_trajectories(trajectories) - generator = train( - transitions, - env_class=env_class, - env_settings=env_settings, - epochs=2, - discrim_batch_size=32, - generator_steps=2048, - discount=0.99 - ) - - generator.save(model_name) # save ppo sb3 generator class - - # %% - model = stable_baselines3.PPO.load(model_name) # not actually used - - env = RenderOptions(NRasterizedRandomAgent(**env_settings)) - for s in env.sample_ll(generator): - if s['dones']: - break - - env.close(filestr='render/'+model_name) - -# %% Tests - -def test_ll_expert_data(): - with open("data/NormalizedIntersimpleExpertMu.001_NRasterizedAgent51w36h36mppx2.pkl", "rb") as f: - expert_trajectories = pickle.load(f) - expert_transitions = rollout.flatten_trajectories(expert_trajectories) - - env = LLOptions(NRasterized(agent=51, width=36, height=36, m_per_px=2)) - - gen_transitions = list(itertools.islice(env.sample_ll( - policy=stable_baselines3.PPO( - OptionsCnnPolicy, - OptionsEnv(env), - verbose=1, - ) - ), 10)) - gen_transitions = flatten_transitions(gen_transitions) - - assert expert_transitions[:10].obs.shape == gen_transitions['obs'].shape - assert expert_transitions[:10].next_obs.shape == gen_transitions['next_obs'].shape - assert expert_transitions[:10].acts.shape == gen_transitions['acts'].shape - assert expert_transitions[:10].dones.shape == gen_transitions['dones'].shape - -def test_ll_states(): - env = NRasterized() - policy = stable_baselines3.PPO( - OptionsCnnPolicy, - OptionsEnv(env), - verbose=1, - ) - llenv = LLOptions(env) - transitions = list(itertools.islice(llenv.sample_ll(policy=policy), 100)) - - env2 = NRasterized() - s2 = env2.reset() - for i, t in enumerate(transitions): - assert i == 0 or np.array_equal(t['obs'], transitions[i-1]['next_obs']) - assert np.array_equal(t['obs'], s2) - assert t['acts'].shape == (1,) - - nexts2, _, done2, _ = env2.step(t['acts']) - assert np.array_equal(t['next_obs'], nexts2) - assert np.array_equal(t['dones'], done2) - - if done2: - break - - s2 = nexts2 - -def test_hl_transitions(): - pass diff --git a/scratch/arec/intersimple/options_gail.py b/scratch/arec/intersimple/options_gail.py deleted file mode 100644 index 4ab8f12..0000000 --- a/scratch/arec/intersimple/options_gail.py +++ /dev/null @@ -1,510 +0,0 @@ -# %% -from gail.discriminator import CnnDiscriminator, CnnDiscriminatorFlatAction -from imitation.algorithms import adversarial -import stable_baselines3 -import torch.utils.data -import numpy as np -from intersim.envs.intersimple import NRasterized, NRasterizedRandomAgent -import itertools -from torch.distributions import Categorical -import gym -import torch -import pickle -import imitation.data.rollout as rollout -import tempfile -import pathlib -from imitation.util import logger -from stable_baselines3.common.env_util import make_vec_env -from tqdm import tqdm - -import logging -logging.basicConfig(level=logging.DEBUG) - -ALL_OPTIONS = [(v,t) for v in [0,2,4,6,8] for t in [5, 10, 20]] # option 0 is safe fallback - -class OptionsCnnPolicy(stable_baselines3.common.policies.ActorCriticCnnPolicy): - """ - Class for high-level options policy (generator) - """ - def __init__(self, observation_space, *args, **kwargs): - super().__init__(observation_space['obs'], *args, **kwargs) - - def _prior_distribution(self, s): - """ - Return prior distribution over high-level options (before masking) - Args: - s (torch.tensor): observation - Returns: - values (torch.tensor): values from critic - dist (torch.distributions): prior distribution over actions - """ - latent_pi, latent_vf, latent_sde = self._get_latent(s) - distribution = self._get_action_dist_from_latent(latent_pi, latent_sde) - values = self.value_net(latent_vf) - return values, distribution.distribution - - def predict(self, obs): - """ - Will mask invalid states before making action selections - Args: - obs: dict with keys: - obs (torch.tensor): (B,o) true observations - mask (torch.tensor): (B,m) mask over valid actions - Returns: - ch (torch.tensor): (B,a) sampled actions - values (torch.tensor): (B,) predicted value at observation - log_probs (torch.tensor): (B,) log probabilities of selected actions - """ - s, m = obs['obs'], obs['mask'] - values, prior = self._prior_distribution(s) - posterior = Categorical(prior.probs * m) - ch = posterior.sample() - return ch, values, posterior.log_prob(ch) - - def evaluate_actions(self, obs, ch): - """ - Evaluate particular actions - Args: - obs: dict with keys: - obs (torch.tensor): (B,o) true observations - mask (torch.tensor): (B,m) masks over valid actions - ch (torch.tensor): (B,a) selected actions - Returns: - values (torch.tensor): (B,) predicted value at observation - log_probs (torch.tensor): (B,) log probabilities of selected actions - ent (torch.tensor): (B,) entropy of each distribution over actions - """ - s, m = obs['obs'], obs['mask'] - values, prior = self._prior_distribution(s) - posterior = Categorical(prior.probs * m) - return values, posterior.log_prob(ch), posterior.entropy() # additional values used by PPO.train - -class OptionsEnv(gym.Wrapper): - """ - Wrap an intersimple environment with an options generator - """ - def __init__(self, env, render=False, *args, **kwargs): - """ - Initialize wrapped environment and set high-level action and observation spaces - """ - super().__init__(env, *args, **kwargs) - num_hl_options = len(ALL_OPTIONS) - self.action_space = gym.spaces.Discrete(num_hl_options) - self.observation_space = gym.spaces.Dict({ - 'obs': env.observation_space, - 'mask': gym.spaces.Box(low=0, high=1, shape=(num_hl_options,)), - }) - self._hl_transition_buffer = [] - self._ll_transition_buffer = [] - self.render=render - - def _after_option_choice(self): - """ - After initial option choice, - """ - self._hl_r = 0 - self._hl_steps = 0 - - def _after_step(self): - """ - After each step, add the ll transition to the appropriate buffer, add to reward, add to steps, and possibly render - """ - - self._ll_transition_buffer.append({ - 'obs': self.s, - 'next_obs': self.nexts, - 'acts': np.array((self.a,)), - 'dones': np.array(self.done), - }) - self.r += self.discount**self.steps * self.discriminator.discrim_net.reward_train( - state=torch.tensor(self.s).unsqueeze(0).to(self.discriminator.discrim_net.device()), - action=torch.tensor([[self.a]]).to(self.discriminator.discrim_net.device()), - next_state=torch.tensor(self.s).unsqueeze(0).to(self.discriminator.discrim_net.device()), # unused - done=torch.tensor(self.done).unsqueeze(0).to(self.discriminator.discrim_net.device()), # unused - ) - self.steps += 1 - if self.render: - self.env.render() - - def _after_option(self): - """ - After each low-level action, add the discounted discriminated reward score (given a discriminator) - """ - self._hl_transition_buffer.append({ - 'obs': {'obs': self.os, 'mask': self.m}, - 'action': self.ch, - 'reward': self.r.detach(), - 'episode_start': self.episode_start, - 'value': self.value.detach(), - 'log_prob': self.log_prob.detach(), - 'done': self.done, - }) - - def close(self, *args, **kwargs): - """ - On 'close', close the environment - """ - self.env.close(*args, **kwargs) - - def sample(self, generator, controller): - """ - yield transitions using a generator - Args: - generator (sb3.PPO) - controller (str): 'high' or 'low' to yield from proper buffer - Yields: - - """ - self.done = True - # DO I WANT TO EMPTY THE BUFFERS??? Probs naw - while True: - - # yield from buffers to empty what was stored previously - if controller = 'high': - yield from self._hl_transition_buffer - elif controller == 'low': - yield from self._ll_transition_buffer - else: - raise('Improper buffer') - - self.episode_start = False - if self.done: - # reset environment - self.s = self.env.reset() - self.done = False - self.episode_start = True - - self.os = self.s.copy() # option start state - self.m = available_actions(self.env) - - # set the action, the value of the start state, and the logprob of the action - # according to the current environment state and mask - self.ch, self.value, self.log_prob = generator.policy.predict({ - 'obs': torch.tensor(self.os).unsqueeze(0).to(generator.policy.device), - 'mask': torch.tensor(self.m).unsqueeze(0).to(generator.policy.device), - }) - - # store a float list of actions to take given the option selected in the environment - self.plan = list(map(float, generate_plan(self.env, self.ch))) - - # run whatever _after_choice might dictate in a child class - self._after_option_choice() - - # some checks - assert not self.done - assert self.plan - assert feasible(self.env, self.plan, self.ch) - - # execute the option so long as the episode isn't complete and the plan is still feasible - while not self.done and self.plan and feasible(self.env, self.plan, self.ch): - - # pop first action - self.a, self.plan = self.plan[0], self.plan[1:] - - # normalize action ?? - self.a = self.env._normalize(self.a) - - # step through environment - self.nexts, _, self.done, _ = self.env.step(self.a) - - # run whatever _after_step might dictate in child class - self._after_step() - - # update state and mask to current - self.s = self.nexts - - # run whatever to do after option - self._after_option() - - def sample_ll(self, policy): - """ - Not quite sure how this works???? - Why would you do this over LLOptions.sample(policy) - """ - return self.sample(policy, 'low') - - def sample_hl(self, policy, discriminator): - """ - Args: - policy - discriminator: function with which to score rewards - Returns: - gen: an which samples high-level transitions from the environment - """ - self.discriminator = discriminator - return self.sample(policy) - -def available_actions(env): - """Return mask of available actions given current `env` state.""" - valid = np.array([feasible(env, generate_plan(env, i), i) for i in range(len(ALL_OPTIONS))]) - return valid - -def target_velocity_plan(current_v: float, target_v: float, t: int, dt: float): - """Smoothly target a velocity in a given number of steps""" - # for now, constant acceleration - a = (target_v - current_v) / (t * dt) - return a*np.ones((t,)) - -def generate_plan(env, i): - """Generate input profile for high-level action `i`.""" - assert i < len(ALL_OPTIONS), "Invalid option index {i}" - target_v, t = ALL_OPTIONS[i] - current_v = env._env.state[env._agent, 1].item() # extract from env - plan = target_velocity_plan(current_v, target_v, t, env._env._dt) - assert len(plan) == t, "incorrect plan length" - return plan - -def check_future_collisions_fast(env, actions): - """Checks whether `env._agent` would collide with other agents assuming `actions` as input. - - Vehicles are (over-)approximated by single circles. - - Args: - env (gym.Env): current environment state - actions (list of torch.Tensor): list of B (T, nv, adims) T-length action profiles - Returns: - feasible (torch.Tensor): tensor of shape (B,) indicating whether the respective action profiles are collision-free - """ - B, (T, nv, _) = len(actions), actions[0].shape - - states = torch.stack(env._env.propagate_action_profile(actions), axis=0) - assert states.shape == (B, T, nv, 5) - - distance = ((states[:, :, :, :2] - states[:, :, env._agent:env._agent+1, :2])**2).sum(-1).sqrt() - distance = torch.where(distance.isnan(), np.inf*torch.ones_like(distance), distance) # only collide with spawned agents - distance[:, :, env._agent] = np.inf # cannot collide with itself - assert distance.shape == (B, T, nv) - - radius = (env._env._lengths**2 + env._env._widths**2).sqrt() / 2 - min_distance = radius[env._agent] + radius - min_distance = min_distance.unsqueeze(0).unsqueeze(0) - assert min_distance.shape == (1, 1, nv) - - return (distance > min_distance).all(-1).all(-1) - -def check_future_collisions_circles(env, actions, n_circles:int=2): - """Checks whether `env._agent` would collide with other agents assuming `actions` as input. - - Vehicles are (over-)approximated by multiple circles. - - Args: - env (gym.Env): current environment state - actions (list of torch.Tensor): list of B (T, nv, adims) T-length action profiles - Returns: - feasible (torch.Tensor): tensor of shape (B,) indicating whether the respective action profiles are collision-free - """ - assert n_circles >= 2 - B, (T, nv, _) = len(actions), actions[0].shape - - states = torch.stack(env._env.propagate_action_profile(actions), axis=0) - assert states.shape == (B, T, nv, 5) - centers = states[:, :, :, :2] - psi = states[:, :, :, 3] - lon = torch.stack([psi.cos(), psi.sin()],dim=-1) # (B, T, nv, 2) - - # offset between [-env._env.lengths+env._env.widths/2, env._env.lengths/2-env._env.widths/2] - back = (-env._env._lengths/2+env._env._widths/2).unsqueeze(-1) # (nv, 1) - length = (env._env._lengths-env._env._widths).unsqueeze(-1) # (nv, 1) - diff_d = back + length*(torch.arange(n_circles)/(n_circles-1)).unsqueeze(0) # (nv, n_circles) - assert diff_d.shape == (nv, n_circles) - - offsets = diff_d[None, None, :, :, None] * lon[:, :, :, None, :] - assert offsets.shape == (B, T, nv, n_circles, 2) - - expanded_centers=centers.unsqueeze(-2) + offsets #(B, T, nv, n_circles, 2) - assert expanded_centers.shape == (B, T, nv, n_circles, 2) - agent_centers = expanded_centers[:,:,env._agent:env._agent+1,:,:] #(B, T, 1, n_circles, 2) - ds = expanded_centers.reshape((B, T, nv*n_circles, 1, 2)) - agent_centers #(B, T, nv*nc,1, 2) - (B, T, 1, nc, 2) = (B, T, nv*nc, nc, 2) - - distance = (ds**2).sum(-1).sqrt().reshape((B, T, nv, n_circles, n_circles)) # (B, T, nv, nc, nc) - distance = torch.where(distance.isnan(), np.inf*torch.ones_like(distance), distance) # only collide with spawned agents - distance[:, :, env._agent] = np.inf # cannot collide with itself - assert distance.shape == (B, T, nv, n_circles, n_circles) - - radius = env._env._widths*np.sqrt(2) / 2 - min_distance = radius[env._agent] + radius - min_distance = min_distance[None, None, :, None, None] - assert min_distance.shape == (1, 1, nv, 1, 1) - - return (distance > min_distance).all(-1).all(-1).all(-1).all(-1) - -def feasible(env, plan, ch): - """Check if input profile is feasible given current `env` state. Action `ch=0` is safe fallback.""" - - # zero pad plan - Take (T,) np plan and convert it to (T, nv, 1) torch.Tensor - full_plan = torch.zeros(len(plan), env._env._nv, 1) - full_plan[:, env._agent, 0] = torch.tensor(plan) - # valid = check_future_collisions_fast(env, [full_plan]) # check_future_collisions_fast takes in B-list and outputs (B,) bool tensor - valid = check_future_collisions_circles(env, [full_plan]) - return ch == 0 or valid.item() - -def flatten_transitions(transitions): - return { - 'obs': np.stack(list(t['obs'] for t in transitions), axis=0), - 'next_obs': np.stack(list(t['next_obs'] for t in transitions), axis=0), - 'acts': np.stack(list(t['acts'] for t in transitions), axis=0), - 'dones': np.stack(list(t['dones'] for t in transitions), axis=0), - } - -def train_discriminator(env, generator, discriminator, num_samples): - transitions = list(itertools.islice(env.sample_ll(generator), num_samples)) - generator_samples = flatten_transitions(transitions) - discriminator.train_disc(gen_samples=generator_samples) - -def train_generator(env, generator, discriminator, num_samples): - generator_samples = list(itertools.islice(env.sample_hl(generator, discriminator), num_samples+1)) - - generator.rollout_buffer.reset() - for s in generator_samples[:-1]: - generator.rollout_buffer.add( - obs=s['obs'], - action=s['action'].cpu(), - reward=s['reward'].cpu(), - episode_start=s['episode_start'], - value=s['value'], - log_prob=s['log_prob'], - ) - - generator.rollout_buffer.compute_returns_and_advantage( - last_values=generator_samples[-1]['value'], - dones=generator_samples[-1]['done'], - ) - - generator.train() - -def train(expert_data, env_class=NRasterizedRandomAgent, env_settings={}, epochs=10, discrim_batch_size=32, generator_steps=2048, discount=0.99): - """ - Args: - expert_data: list of transitions - env_class: environment class - env_settings: environment settings - epochs: number of epochs to train for - discrim_batch_size: discriminator batch size - generator_steps: number of steps taken in generator - discount: discount factor - Returns: - generator (stable_baselines3.PPO): options policy - """ - env = env_class(**env_settings) - env.discount = discount - - tempdir = tempfile.TemporaryDirectory(prefix="quickstart") - tempdir_path = pathlib.Path(tempdir.name) - logger.configure(tempdir_path / "GAIL/") - print(f"All Tensorboards and logging are being written inside {tempdir_path}/.") - - venv = make_vec_env(env_class, n_envs=1, env_kwargs=env_settings) - discriminator = adversarial.GAIL( - expert_data=expert_data, - expert_batch_size=discrim_batch_size, - discrim_kwargs={'discrim_net': CnnDiscriminatorFlatAction(venv)}, - #discrim_kwargs={'discrim_net': CnnDiscriminator(venv)}, - venv=venv, # unused - gen_algo=stable_baselines3.PPO("CnnPolicy", venv), # unused - ) - - generator = stable_baselines3.PPO( - OptionsCnnPolicy, - OptionsEnv(env), - verbose=1, - n_steps=generator_steps, - ) - - # PPO.train requires logger as set up in - # PPO._setup_learn (called by PPO.learn) - generator._logger = stable_baselines3.common.utils.configure_logger( - generator.verbose, - generator.tensorboard_log, - ) - - for _ in tqdm(range(epochs)): - train_discriminator(LLOptions(env), generator, discriminator, num_samples=discrim_batch_size) - train_generator(HLOptions(env), generator, discriminator, num_samples=generator_steps) - - return generator - -# %% -if __name__ == '__main__': - # %% - model_name = 'gail_options_image' - env_class = NRasterizedRandomAgent - env_settings = {'width': 36, 'height': 36, 'm_per_px': 2} - - with open("data/NormalizedIntersimpleExpertMu.001_NRasterizedIncrementingAgentw36h36mppx2.pkl", "rb") as f: - trajectories = pickle.load(f) - #import pdb - #pdb.set_trace() - transitions = rollout.flatten_trajectories(trajectories) - generator = train( - transitions, - env_class=env_class, - env_settings=env_settings, - epochs=2, - discrim_batch_size=32, - generator_steps=2048, - discount=0.99 - ) - - generator.save(model_name) # save ppo sb3 generator class - - # %% - model = stable_baselines3.PPO.load(model_name) # not actually used - - env = OptionsGail(NRasterizedRandomAgent(**env_settings), render=True) - for s in env.sample_ll(generator): - if s['dones']: - break - - env.close(filestr='render/'+model_name) - -# %% Tests - -def test_ll_expert_data(): - with open("data/NormalizedIntersimpleExpertMu.001_NRasterizedAgent51w36h36mppx2.pkl", "rb") as f: - expert_trajectories = pickle.load(f) - expert_transitions = rollout.flatten_trajectories(expert_trajectories) - - env = LLOptions(NRasterized(agent=51, width=36, height=36, m_per_px=2)) - - gen_transitions = list(itertools.islice(env.sample_ll( - policy=stable_baselines3.PPO( - OptionsCnnPolicy, - OptionsEnv(env), - verbose=1, - ) - ), 10)) - gen_transitions = flatten_transitions(gen_transitions) - - assert expert_transitions[:10].obs.shape == gen_transitions['obs'].shape - assert expert_transitions[:10].next_obs.shape == gen_transitions['next_obs'].shape - assert expert_transitions[:10].acts.shape == gen_transitions['acts'].shape - assert expert_transitions[:10].dones.shape == gen_transitions['dones'].shape - -def test_ll_states(): - env = NRasterized() - policy = stable_baselines3.PPO( - OptionsCnnPolicy, - OptionsEnv(env), - verbose=1, - ) - llenv = LLOptions(env) - transitions = list(itertools.islice(llenv.sample_ll(policy=policy), 100)) - - env2 = NRasterized() - s2 = env2.reset() - for i, t in enumerate(transitions): - assert i == 0 or np.array_equal(t['obs'], transitions[i-1]['next_obs']) - assert np.array_equal(t['obs'], s2) - assert t['acts'].shape == (1,) - - nexts2, _, done2, _ = env2.step(t['acts']) - assert np.array_equal(t['next_obs'], nexts2) - assert np.array_equal(t['dones'], done2) - - if done2: - break - - s2 = nexts2 - -def test_hl_transitions(): - pass diff --git a/scratch/arec/intersimple/plan.txt b/scratch/arec/intersimple/plan.txt deleted file mode 100644 index dac52b6..0000000 --- a/scratch/arec/intersimple/plan.txt +++ /dev/null @@ -1,55 +0,0 @@ -Environment --- each 'environment' follows a single roundabout and track id (recording of that roundabout) --- on reset, the environment we will use changes the vehicle to control while having the other agents follow their true data (expert controller) ----- Note this can be problematic as it can lead to vehicles behind you crashing into you - -TRAINING ---------- -1. Load pre-trained massive set of transitions --- For all roundabouts - -- For all tracks - -- For all vehicles - -- For all valid timesteps - -- Rasterized state (incl. path), action - -2. HGAIL --- For each epoch - -- INSTANTIATE A NEW ENVIRONMENT (Roundabout + Track) w/ randomized agent, from set of all expert environments - -- Train discriminator off training data + yielded low-level transitions in replay buffer - -- Train generator off yielded high-level transitions + summed low-level discriminator rewards - -TESTING ----------- -1. Save average vehicle velocities for all expert vehicles (loop roundabout + track + vehicle, average over time) - -2. Run test suite for: expert, BC, GAIL, RAIL, HGAIL, (and hopefully HRAIL) --- For all roundabouts, tracks - -- Get expert velocities for track - -- Simulate incrementing agent environment (e.g. on reset, agent +=1) - -- Store low-level true joint states, actions, and controlled vehicle index - -- Per-vehicle statistics (v_all, v_mean, v_shortfall, a_all, jerk_all, n_collisions, T) --- Aggregate statistics + joint - -Problems ------------ -Should train without stopping for collisions, however when doing so, end up with policy that always takes decelerate option --- It seems safe at the start of each vehicles sim, but actually it isn't since a car will spawn and hit it -Solutions: - -- Hold cars from spawning if their spawn location is full - -- Start simulations a few seconds later (after cars clear their spawn places) <- Preferred - -Test could run indefinitely if stop_on_collision is off -Solution: - -- Set maximum episode length in intersimple - - - - - - - - -Save massive set of transition raw states beforehand (1 from training, but with raw states) -# -- For all roundabouts, tracks -# -- For all vehicles, steps -# -- Raw vehicle state, action \ No newline at end of file diff --git a/scratch/arec/intersimple/render_env_from_model.py b/scratch/arec/intersimple/render_env_from_model.py deleted file mode 100644 index 8223c73..0000000 --- a/scratch/arec/intersimple/render_env_from_model.py +++ /dev/null @@ -1,58 +0,0 @@ - -import stable_baselines3 as sb3 -from intersim.envs.intersimple import NRasterized - - -def render_env(model_name='gail_image_multiagent_nocollision', agent=51, environment=NRasterized): - """ - Render a video from an model, agent, and environment - Args: - model_name (str): name of the model - agent (int): agent to start the video from - environment (gym.Env): gym environment class to render environment on - """ - - model = sb3.PPO.load(model_name) - - env = environment(stop_on_collision=False, width=36, height=36, m_per_px=2, agent=agent) - - obs = env.reset() - i=0 - while True and i < 600: - i+=1 - action, _states = model.predict(obs) - obs, rewards, done, info = env.step(action) - env.render(mode='post') - if done: - break - - env.close(filestr='render/'+model_name+'_agent%i'%(agent)) - -def render_options_env(model_name='gail_image_multiagent_nocollision', agent=51, environment=NRasterized): - """ - Render a video from an model, agent, and environment - Args: - model_name (str): name of the model - agent (int): agent to start the video from - environment (gym.Env): gym environment class to render environment on - """ - - model = sb3.PPO.load(model_name) - - env = environment(stop_on_collision=False, width=36, height=36, m_per_px=2, agent=agent) - - obs = env.reset() - i=0 - while True and i < 600: - i+=1 - action, _states = model.predict(obs) - obs, rewards, done, info = env.step(action) - env.render(mode='post') - if done: - break - - env.close(filestr='render/'+model_name+'_agent%i'%(agent)) - -if __name__ == '__main__': - import fire - fire.Fire(render_env) \ No newline at end of file diff --git a/scratch/arec/intersimple/render_options.py b/scratch/arec/intersimple/render_options.py deleted file mode 100644 index 947b120..0000000 --- a/scratch/arec/intersimple/render_options.py +++ /dev/null @@ -1,11 +0,0 @@ -import sys -sys.path.append('../../../') -from src.util import render_env -ALL_OPTIONS = [(v,t) for v in [0,2,4,6,8] for t in [5, 10]] - -def render_wrapper(**kwargs): - render_env(**kwargs, options_list=ALL_OPTIONS) - -if __name__=='__main__': - import fire - fire.Fire(render_wrapper) \ No newline at end of file diff --git a/scratch/arec/test.py b/scratch/arec/test.py deleted file mode 100644 index e69de29..0000000 diff --git a/scratch/etienne/intersimple/airl_flat.py b/scratch/etienne/intersimple/airl_flat.py deleted file mode 100644 index e21a38a..0000000 --- a/scratch/etienne/intersimple/airl_flat.py +++ /dev/null @@ -1,64 +0,0 @@ -# %% -import pathlib -import pickle -import tempfile - -import stable_baselines3 as sb3 -from stable_baselines3.common.env_util import make_vec_env - -from imitation.algorithms import adversarial, bc -from imitation.data import rollout -from imitation.util import logger - -from intersim.envs.intersimple import IntersimpleReward - -model_name = 'airl_flat' - -# Load pickled test demonstrations. -with open("data/NormalizedIntersimpleExpert_IntersimpleRewardAgent51.pkl", "rb") as f: - # This is a list of `imitation.data.types.Trajectory`, where - # every instance contains observations and actions for a single expert - # demonstration. - trajectories = pickle.load(f) - -# %% -# Convert List[types.Trajectory] to an instance of `imitation.data.types.Transitions`. -# This is a more general dataclass containing unordered -# (observation, actions, next_observation) transitions. -transitions = rollout.flatten_trajectories(trajectories) - -venv = make_vec_env(IntersimpleReward, n_envs=2, env_kwargs={'agent': 51}) - -tempdir = tempfile.TemporaryDirectory(prefix="quickstart") -tempdir_path = pathlib.Path(tempdir.name) -print(f"All Tensorboards and logging are being written inside {tempdir_path}/.") - -# Train AIRL on expert data. -# GAIL, and AIRL also accept as `expert_data` any Pytorch-style DataLoader that -# iterates over dictionaries containing observations, actions, and next_observations. -logger.configure(tempdir_path / "AIRL/") -airl_trainer = adversarial.AIRL( - venv, - expert_data=transitions, - expert_batch_size=64, - gen_algo=sb3.PPO("MlpPolicy", venv, verbose=1, n_steps=1024), # n_steps = 2048 ? -) -airl_trainer.train(total_timesteps=100000) -airl_trainer.gen_algo.save(model_name) - -del airl_trainer - -# %% -model = sb3.PPO.load(model_name) - -env = IntersimpleReward(agent=51) - -obs = env.reset() -while True: - action, _states = model.predict(obs) - obs, rewards, done, info = env.step(action) - env.render(mode='post') - if done: - break - -env.close(filestr='render/'+model_name) \ No newline at end of file diff --git a/scratch/etienne/intersimple/bc_flat b/scratch/etienne/intersimple/bc_flat deleted file mode 100644 index 148f405..0000000 Binary files a/scratch/etienne/intersimple/bc_flat and /dev/null differ diff --git a/scratch/etienne/intersimple/bc_flat.py b/scratch/etienne/intersimple/bc_flat.py deleted file mode 100644 index 2011a06..0000000 --- a/scratch/etienne/intersimple/bc_flat.py +++ /dev/null @@ -1,59 +0,0 @@ -# %% -import pathlib -import pickle -import tempfile - -import stable_baselines3 as sb3 -from stable_baselines3.common.env_util import make_vec_env - -from imitation.algorithms import adversarial, bc -from imitation.data import rollout -from imitation.util import logger - -from intersim.envs.intersimple import IntersimpleReward - -model_name = 'bc_flat' - -# Load pickled test demonstrations. -with open("data/NormalizedIntersimpleExpert_IntersimpleRewardAgent51.pkl", "rb") as f: - # This is a list of `imitation.data.types.Trajectory`, where - # every instance contains observations and actions for a single expert - # demonstration. - trajectories = pickle.load(f) - -# %% -# Convert List[types.Trajectory] to an instance of `imitation.data.types.Transitions`. -# This is a more general dataclass containing unordered -# (observation, actions, next_observation) transitions. -transitions = rollout.flatten_trajectories(trajectories) - -venv = make_vec_env(IntersimpleReward, n_envs=2, env_kwargs={'agent': 51}) - -tempdir = tempfile.TemporaryDirectory(prefix="quickstart") -tempdir_path = pathlib.Path(tempdir.name) -print(f"All Tensorboards and logging are being written inside {tempdir_path}/.") - -# Train BC on expert data. -# BC also accepts as `expert_data` any PyTorch-style DataLoader that iterates over -# dictionaries containing observations and actions. -logger.configure(tempdir_path / "BC/") -bc_trainer = bc.BC(venv.observation_space, venv.action_space, expert_data=transitions) -bc_trainer.train(n_epochs=1000) -bc_trainer.save_policy(model_name) - -del bc_trainer - -# %% -model = bc.reconstruct_policy(model_name) - -env = IntersimpleReward(agent=51) - -obs = env.reset() -while True: - action, _states = model.predict(obs) - obs, rewards, done, info = env.step(action) - env.render(mode='post') - if done: - break - -env.close(filestr='render/'+model_name) diff --git a/scratch/etienne/intersimple/data/NormalizedIntersimpleExpert_IntersimpleRewardAgent51.pkl b/scratch/etienne/intersimple/data/NormalizedIntersimpleExpert_IntersimpleRewardAgent51.pkl deleted file mode 100644 index 27be74d..0000000 Binary files a/scratch/etienne/intersimple/data/NormalizedIntersimpleExpert_IntersimpleRewardAgent51.pkl and /dev/null differ diff --git a/scratch/etienne/intersimple/data/NormalizedIntersimpleExpert_NRasterizedAgent51.pkl b/scratch/etienne/intersimple/data/NormalizedIntersimpleExpert_NRasterizedAgent51.pkl deleted file mode 100644 index f875544..0000000 Binary files a/scratch/etienne/intersimple/data/NormalizedIntersimpleExpert_NRasterizedAgent51.pkl and /dev/null differ diff --git a/scratch/etienne/intersimple/data/expert.py b/scratch/etienne/intersimple/data/expert.py deleted file mode 100644 index 0c046a2..0000000 --- a/scratch/etienne/intersimple/data/expert.py +++ /dev/null @@ -1,138 +0,0 @@ -from intersim.envs.intersimple import Intersimple, InfoFilter -from stable_baselines3.common.policies import BasePolicy -import gym -from intersim.envs.intersimple import * -from gail.envs import * -import imitation.data.rollout as rollout -from stable_baselines3.common.vec_env.dummy_vec_env import DummyVecEnv -from imitation.data.wrappers import RolloutInfoWrapper - -class IntersimExpert(BasePolicy): - - def __init__(self, intersim_env, mu=0, *args, **kwargs): - super().__init__( - observation_space=gym.spaces.Space(), - action_space=gym.spaces.Space(), - *args, **kwargs - ) - self._intersim = intersim_env - self._mu = mu - - def forward(self, *args, **kwargs): - raise NotImplementedError() - - def _predict(self, *args, **kwargs): - raise NotImplementedError() - - def _action(self): - target_t = min(self._intersim._ind + 1, len(self._intersim._svt.simstate) - 1) - target_state = self._intersim._svt.simstate[target_t] - return self._intersim.target_state(target_state, mu=self._mu) - - def predict(self, *args, **kwargs): - return self._action(), None - -class IntersimpleExpert(BasePolicy): - - def __init__(self, intersimple_env, mu=0, *args, **kwargs): - super().__init__( - observation_space=intersimple_env.observation_space, - action_space=intersimple_env.action_space, - *args, **kwargs - ) - self._intersimple = intersimple_env - self._intersim_expert = IntersimExpert(intersimple_env._env, mu=mu) - - def forward(self, *args, **kwargs): - raise NotImplementedError() - - def _predict(self, *args, **kwargs): - raise NotImplementedError() - - def _action(self): - # RandomLocation mixin re-initializes the intersim sub-env - self._intersim_expert._intersim = self._intersimple._env - return self._intersim_expert._action()[self._intersimple._agent] - - def predict(self, *args, **kwargs): - return self._action(), None - -class NormalizedIntersimpleExpert(IntersimpleExpert): - - def __init__(self, *args, **kwargs): - super().__init__(*args, **kwargs) - - def predict(self, *args, **kwargs): - action, _ = super().predict(*args, **kwargs) - return self._intersimple._normalize(action), None - -class DummyVecEnvPolicy(BasePolicy): - - def __init__(self, experts): - self._experts = [e() for e in experts] - - def forward(self, *args, **kwargs): - raise NotImplementedError() - - def _predict(self, *args, **kwargs): - raise NotImplementedError() - - def predict(self, *args, **kwargs): - predictions = [e.predict() for e in self._experts] - actions = [p[0] for p in predictions] - states = [p[1] for p in predictions] - return actions, states - - def forward(self, *args, **kwargs): - raise NotImplementedError() - - def _predict(self, *args, **kwargs): - raise NotImplementedError() - -def save_video(env, expert): - env.reset() - env.render() - done = False - while not done: - actions, _ = expert.predict() - _, _, done, _ = env.step(actions) - env.render() - env.close() - -def demonstrations(expert='NormalizedIntersimpleExpert', env='NRasterizedRandomAgent', path=None, min_timesteps=25000, min_episodes=None, video=False, env_args={}, policy_args={}): - """Rollout and save expert demos. - - Usage: - python -m intersimple.expert - - """ - Env = globals()[env] - Expert = globals()[expert] - - env = Env(**env_args) - info_env = RolloutInfoWrapper(env) - venv = DummyVecEnv([lambda: info_env]) - - policy = Expert(env, **policy_args) - venv_policy = DummyVecEnvPolicy([lambda: policy]) - - if video: - save_video(env, policy) - - path = path or (policy.__class__.__name__ + '_' + env.__class__.__name__ + '.pkl') - include_infos = isinstance(env, InfoFilter) - - rollout.rollout_and_save( - path=path, - policy=venv_policy, - venv=venv, - sample_until=rollout.make_sample_until( - min_timesteps=min_timesteps, - min_episodes=min_episodes, - ), - exclude_infos=not include_infos, - ) - -if __name__ == '__main__': - import fire - fire.Fire(demonstrations) diff --git a/scratch/etienne/intersimple/data/generate.sh b/scratch/etienne/intersimple/data/generate.sh deleted file mode 100755 index 066af5d..0000000 --- a/scratch/etienne/intersimple/data/generate.sh +++ /dev/null @@ -1,15 +0,0 @@ -#python -m expert --env=IntersimpleReward --min_timesteps=200 --env_args='{agent:51}' --path='NormalizedIntersimpleExpert_IntersimpleRewardAgent51.pkl' -#python -m expert --env=IntersimpleReward --min_timesteps=200 --env_args='{agent:51}' --policy_args='{mu:0.005}' --path='NormalizedIntersimpleExpert_IntersimpleRewardAgent51Mu.005.pkl' -#python -m expert --env=IntersimpleReward --min_timesteps=200 --env_args='{agent:51}' --policy_args='{mu:0.001}' --path='NormalizedIntersimpleExpert_IntersimpleRewardAgent51Mu.001.pkl' -#python -m expert --env=NRasterized --min_timesteps=200 --env_args='{agent:51,width:36,height:36,m_per_px:2}' --policy_args='{mu:0.001}' --path='NormalizedIntersimpleExpertMu.001_NRasterizedAgent51w36h36mppx2.pkl' -#python -m expert --env=NRasterized --min_timesteps=200 --env_args='{agent:51,width:36,height:36,m_per_px:2}' --policy_args='{mu:0.001}' --path='NormalizedIntersimpleExpertMu.001_NRasterizedAgent51w36h36mppx2.pkl' -#python -m expert --env=NRasterized --min_timesteps=3000 --video --env_args='{width:36,height:36,m_per_px:2}' --policy_args='{mu:0.001}' --path='NormalizedIntersimpleExpertMu.001_NRasterizedRandomAgentw36h36mppx2.pkl' -#python -m expert --env=NRasterizedRandomAgent --min_timesteps=200 --env_args='{width:36,height:36,m_per_px:2}' --policy_args='{mu:0.001}' --path='NormalizedIntersimpleExpertMu.001_NRasterizedRandomAgentw36h36mppx2.pkl' -#python -m expert --env=NRasterizedRandomAgent --min_timesteps=10000 --env_args='{width:36,height:36,m_per_px:2}' --policy_args='{mu:0.001}' --path='NormalizedIntersimpleExpertMu.001N10000_NRasterizedRandomAgentw36h36mppx2.pkl' -#python -m expert --env=NRasterizedRouteRandomAgent --min_timesteps=10000 --env_args='{width:70,height:70,m_per_px:1}' --policy_args='{mu:0.001}' --path='NormalizedIntersimpleExpertMu.001N10000_NRasterizedRouteRandomAgentw70h70mppx1.pkl' -#python -m expert --env=NRasterizedRouteRandomAgentLocation --min_timesteps=100000 --env_args='{width:70,height:70,m_per_px:1}' --policy_args='{mu:0.001}' --path='NormalizedIntersimpleExpertMu.001N100000_NRasterizedRouteRandomAgentLocationw70h70mppx1.pkl' -#python -m expert --env=NRasterizedRouteRandomAgentLocation --min_timesteps=100000 --env_args='{width:70,height:70,m_per_px:1,map_color:128}' --policy_args='{mu:0.001}' --path='NormalizedIntersimpleExpertMu.001N100000_NRasterizedRouteRandomAgentLocationw70h70mppx1mapc128.pkl' -#python -m expert --env=NRasterizedRouteSpeedRandomAgentLocation --min_timesteps=10000 --env_args='{width:70,height:70,m_per_px:1,map_color:128,mu:0.001}' --policy_args='{mu:0.001}' --path='NormalizedIntersimpleExpertMu.001N10000_NRasterizedRouteSpeedRandomAgentLocationw70h70mppx1mapc128mu.001.pkl' -#python -m data.expert --env=NRasterizedRouteSpeedRandomAgentLocation --min_timesteps=10000 --env_args='{width:70,height:70,m_per_px:1,map_color:128,mu:0.001,skip_frames:5}' --policy_args='{mu:0.001}' --path='NormalizedIntersimpleExpertMu.001N10000_NRasterizedRouteSpeedRandomAgentLocationw70h70mppx1mapc128mu.001skip5.pkl' -#python -m data.expert --env=TLNRasterizedRouteRandomAgentLocation --min_timesteps=100000 --env_args='{width:70,height:70,m_per_px:1,mu:0.001,random_skip:True,max_episode_steps:50}' --policy_args='{mu:0.001}' --path='NormalizedIntersimpleExpertMu.001N100000_TLNRasterizedRouteRandomAgentLocationw70h70mppx1mu.001rskips50.pkl' -python -m data.expert --env=TLNRasterizedRouteRandomAgentLocation --min_timesteps=50000 --env_args='{width:70,height:70,m_per_px:1,mu:0.001,random_skip:True,max_episode_steps:50}' --policy_args='{mu:0.001}' --path='NormalizedIntersimpleExpertMu.001N50000_TLNRasterizedRouteRandomAgentLocationw70h70mppx1mu.001rskips50.pkl' diff --git a/scratch/etienne/intersimple/gail/envs.py b/scratch/etienne/intersimple/gail/envs.py deleted file mode 100644 index 6f3b3fd..0000000 --- a/scratch/etienne/intersimple/gail/envs.py +++ /dev/null @@ -1,46 +0,0 @@ -import gym -from gym.wrappers.time_limit import TimeLimit -import numpy as np -from intersim.envs.intersimple import NRasterizedRouteRandomAgentLocation, RandomLocation, RandomAgent, RewardVisualization, Reward, \ - ImageObservationAnimation, RasterizedRoute, NObservations, RasterizedObservation, \ - NormalizedActionSpace, ActionVisualization, InteractionSimulatorMarkerViz, ImitationCompat, Intersimple - -class RasterizedSpeed: - - def __init__(self, max_speed=12, *args, **kwargs): - super().__init__(*args, **kwargs) - channels, height, width = self.observation_space.shape - self.observation_space = gym.spaces.Box( - low=0, - high=255, - shape=(channels+1, height, width), - dtype=np.uint8 - ) - self._max_speed = max_speed - - def _simple_obs(self, intersim_obs, intersim_info): - img = super()._simple_obs(intersim_obs, intersim_info) - - ego_speed = intersim_obs['state'][self._agent, 2] - scaled_speed = (255 * ego_speed) // self._max_speed - speed_layer = scaled_speed * np.ones_like(img[:1], dtype=np.uint8) - speed_layer = speed_layer.clamp(0, 255) - - obs = np.concatenate((img, speed_layer), axis=0) - return obs - -class NRasterizedRouteSpeedRandomAgentLocation(RandomLocation, RandomAgent, RewardVisualization, - Reward, ImageObservationAnimation, RasterizedRoute, NObservations, RasterizedSpeed, RasterizedObservation, - NormalizedActionSpace, ActionVisualization, InteractionSimulatorMarkerViz, ImitationCompat, Intersimple): - pass - -class TransparentTimeLimit(TimeLimit): - - def __getattr__(self, name): - return getattr(self.env, name) - - def close(self, *args, **kwargs): - return self.env.close(*args, **kwargs) - -def TLNRasterizedRouteRandomAgentLocation(max_episode_steps, *args, **kwargs): - return TransparentTimeLimit(NRasterizedRouteRandomAgentLocation(*args, **kwargs), max_episode_steps=max_episode_steps) diff --git a/scratch/etienne/intersimple/gail/options2.py b/scratch/etienne/intersimple/gail/options2.py deleted file mode 100644 index 67afa8f..0000000 --- a/scratch/etienne/intersimple/gail/options2.py +++ /dev/null @@ -1,127 +0,0 @@ -import gym -import torch -from src.util.collisions import feasible -import numpy as np -from collections import deque - -def imitation_discriminator(discriminator): - return lambda obs, action, next_obs, done: discriminator.discrim_net.predict_reward_train( - state=torch.tensor(obs).unsqueeze(0).to(discriminator.discrim_net.device()), - action=torch.tensor([[action]]).to(discriminator.discrim_net.device()), - next_state=torch.tensor(next_obs).unsqueeze(0).to(discriminator.discrim_net.device()), # unused - done=torch.tensor(done).unsqueeze(0).to(discriminator.discrim_net.device()), # unused - ).item() - -class OptionsEnv(gym.Wrapper): - - def __init__(self, env, options, discriminator, discount, ll_buffer, *args, **kwargs): - super().__init__(env, *args, **kwargs) - - self.options = options - num_hl_options = len(self.options) - self.action_space = gym.spaces.Discrete(num_hl_options) - self.observation_space = gym.spaces.Dict({ - 'obs': env.observation_space, - 'mask': gym.spaces.Box(low=0, high=1, shape=(num_hl_options,)), - }) - - self.discriminator = discriminator - self.discount = discount - self.ll_buffer = ll_buffer - - @staticmethod - def _hl_observation(obs, mask): - return { - 'obs': obs, - 'mask': mask, - } - - def reset(self): - self.done = False - self.obs = self.env.reset() - self.m = available_actions(self.env, self.options) - return self._hl_observation(self.obs, self.m) - - def _ll_step(self, action): - return self.env.step(action) - - def step(self, action): - assert self.m[action] - assert not self.done - - plan = list(map(float, generate_plan(self.env, action, self.options))) - reward = 0 - steps = 0 - - while not self.done and plan and \ - (feasible(self.env, safety_plan(self.env, plan)) or self.m.sum() == 1): - - a, plan = plan[0], plan[1:] - a = self.env._normalize(a) - - next_obs, _, self.done, info = self._ll_step(a) - - reward += self.discount**steps * self.discriminator(self.obs, a, next_obs, self.done) - - self.ll_buffer.append({ - 'obs': self.obs, - 'next_obs': next_obs, - 'acts': np.array((a,)), - 'dones': np.array(self.done), - }) - - steps += 1 - self.obs = next_obs - - self.m = available_actions(self.env, self.options) - - return self._hl_observation(self.obs, self.m), reward, self.done, info - -class RenderOptions(OptionsEnv): - - def __init__(self, env, options, *args, **kwargs): - super().__init__(env, options, discriminator=lambda s, a, n, d: 0, discount=1, ll_buffer=deque(maxlen=0), *args, **kwargs) - - def _ll_step(self, action): - out = super()._ll_step(action) - self.env.render(mode='post') - return out - - def close(self, *args, **kwargs): - self.env.close(*args, **kwargs) - -def safety_plan(env, plan): - return np.concatenate((plan, np.array(5 * [env._env._min_acc])), axis=0) - -def available_actions(env, options): - """Return mask of available actions given current `env` state. - Action 0 is considered safe fallback. - """ - plans = [generate_plan(env, i, options) for i, _ in enumerate(options)] - # is emergency braking still possible? - plans = list(map(lambda p: safety_plan(env, p), plans)) - - T = max(len(p) for p in plans) - plans = [np.pad(p, ((0, T-len(p)),), constant_values=np.nan) for p in plans] - plans = np.stack(plans, axis=0) - - valid = feasible(env, plans) - if not valid.any(): - valid[0] = True - - return valid - -def target_velocity_plan(current_v: float, target_v: float, t: int, dt: float): - """Smoothly target a velocity in a given number of steps""" - # for now, constant acceleration - a = (target_v - current_v) / (t * dt) - return a*np.ones((t,)) - -def generate_plan(env, i, options): - """Generate input profile for high-level action `i`.""" - assert i < len(options), "Invalid option index {i}" - target_v, t = options[i] - current_v = env._env.state[env._agent, 1].item() # extract from env - plan = target_velocity_plan(current_v, target_v, t, env._env._dt) - assert len(plan) == t, "incorrect plan length" - return plan diff --git a/scratch/etienne/intersimple/gail_flat.py b/scratch/etienne/intersimple/gail_flat.py deleted file mode 100644 index 9714687..0000000 --- a/scratch/etienne/intersimple/gail_flat.py +++ /dev/null @@ -1,70 +0,0 @@ -# %% -import pathlib -import pickle -import tempfile - -import stable_baselines3 as sb3 -from stable_baselines3.common.env_util import make_vec_env - -from imitation.algorithms import adversarial, bc -from imitation.data import rollout -from imitation.util import logger - -from intersim.envs.intersimple import IntersimpleReward - -from gail.discriminator import MlpDiscriminator - -model_name = 'gail_flat' - -# %% -# Load pickled test demonstrations. -with open("data/NormalizedIntersimpleExpert_IntersimpleRewardAgent51.pkl", "rb") as f: - # This is a list of `imitation.data.types.Trajectory`, where - # every instance contains observations and actions for a single expert - # demonstration. - trajectories = pickle.load(f) - -# %% -# Convert List[types.Trajectory] to an instance of `imitation.data.types.Transitions`. -# This is a more general dataclass containing unordered -# (observation, actions, next_observation) transitions. -transitions = rollout.flatten_trajectories(trajectories) - -venv = make_vec_env(IntersimpleReward, n_envs=2, env_kwargs={'agent': 51}) - -tempdir = tempfile.TemporaryDirectory(prefix="quickstart") -tempdir_path = pathlib.Path(tempdir.name) -print(f"All Tensorboards and logging are being written inside {tempdir_path}/.") - -# Train GAIL on expert data. -# GAIL, and AIRL also accept as `expert_data` any Pytorch-style DataLoader that -# iterates over dictionaries containing observations, actions, and next_observations. -logger.configure(tempdir_path / "GAIL/") -gail_trainer = adversarial.GAIL( - venv, - expert_data=transitions, - expert_batch_size=150, - n_disc_updates_per_round=32, - discrim_kwargs={'discrim_net': MlpDiscriminator()}, - gen_algo=sb3.PPO("MlpPolicy", venv, verbose=1, n_steps=4530), - allow_variable_horizon=True, -) -gail_trainer.train(total_timesteps=400000) -gail_trainer.gen_algo.save(model_name) - -#del gail_trainer - -# %% -model = sb3.PPO.load(model_name) - -env = IntersimpleReward(agent=51) - -obs = env.reset() -while True: - action, _states = model.predict(obs) - obs, rewards, done, info = env.step(action) - env.render(mode='post') - if done: - break - -env.close(filestr='render/'+model_name) \ No newline at end of file diff --git a/scratch/etienne/intersimple/gail_flat_ray.py b/scratch/etienne/intersimple/gail_flat_ray.py deleted file mode 100644 index 2d37c41..0000000 --- a/scratch/etienne/intersimple/gail_flat_ray.py +++ /dev/null @@ -1,115 +0,0 @@ -# %% -import pathlib -import pickle -import tempfile - -import stable_baselines3 as sb3 -from stable_baselines3.common.env_util import make_vec_env - -from imitation.algorithms import adversarial, bc -from imitation.data import rollout -from imitation.util import logger - -from intersim.envs.intersimple import IntersimpleReward, speed_reward - -from gail.discriminator import MlpDiscriminator -import numpy as np -import functools -from stable_baselines3.common.evaluation import evaluate_policy -from ray import tune -import os -import torch - -model_name = 'gail_flat' - -# %% -# Load pickled test demonstrations. -#with open("data/NormalizedIntersimpleExpert_IntersimpleRewardAgent51.pkl", "rb") as f: -with open("data/NormalizedIntersimpleExpert_IntersimpleRewardAgent51Mu.001.pkl", "rb") as f: - # This is a list of `imitation.data.types.Trajectory`, where - # every instance contains observations and actions for a single expert - # demonstration. - trajectories = pickle.load(f) - -# %% -# Convert List[types.Trajectory] to an instance of `imitation.data.types.Transitions`. -# This is a more general dataclass containing unordered -# (observation, actions, next_observation) transitions. -transitions = rollout.flatten_trajectories(trajectories) - -venv = make_vec_env(IntersimpleReward, n_envs=2, env_kwargs={'agent': 51}) - -tempdir = tempfile.TemporaryDirectory(prefix="quickstart") -tempdir_path = pathlib.Path(tempdir.name) -print(f"All Tensorboards and logging are being written inside {tempdir_path}/.") - -def training_function(config, checkpoint_dir=None): - logger.configure(tempdir_path / "GAIL/") - - discriminator = MlpDiscriminator() - if checkpoint_dir: - discriminator.load_state_dict(torch.load(os.path.join(checkpoint_dir, 'disc_checkpoint'))) - generator = sb3.PPO.load(os.path.join(checkpoint_dir, 'gen_checkpoint')) - else: - generator = sb3.PPO("MlpPolicy", venv, verbose=1, n_steps=config['n_steps']) - - gail_trainer = adversarial.GAIL( - venv, - expert_data=transitions, - expert_batch_size=config['expert_batch_size'], - n_disc_updates_per_round=config['n_disc_updates_per_round'], - discrim_kwargs={'discrim_net': MlpDiscriminator()}, - gen_algo=generator, - allow_variable_horizon=True, - ) - - def callback(epoch): - print("callback") - eval_env = IntersimpleReward(agent=51, reward=functools.partial(speed_reward, collision_penalty=0.)) - #sync_envs_normalization(self.training_env, self.eval_env) - episode_rewards, episode_lengths = evaluate_policy(generator, eval_env, return_episode_rewards=True) - tune.report( - reward=np.mean(episode_rewards), - length=np.mean(episode_lengths), - training_iteration=epoch, - ) - - with tune.checkpoint_dir(step=epoch) as checkpoint_dir: - gail_trainer.gen_algo.save(os.path.join(checkpoint_dir, 'gen_checkpoint')) - torch.save(discriminator.state_dict(), os.path.join(checkpoint_dir, 'disc_checkpoint')) - - gail_trainer.train(total_timesteps=40000, callback=callback) - -analysis = tune.run( - training_function, - config = { - 'expert_batch_size': tune.randint(1, 22), #220, - 'n_disc_updates_per_round': tune.randint(2, 100), #16, - 'n_steps': tune.randint(1, 10000), #4096, - }, - resources_per_trial={ - 'cpu': 1, - # 'gpu': 1, - }, - local_dir='ray', - num_samples=10, -) - -print('Best config', analysis.get_best_config(metric='progress', mode='max')) - -#del gail_trainer - -# %% -model = sb3.PPO.load(model_name) - -env = IntersimpleReward(agent=51) - -obs = env.reset() -while True: - action, _states = model.predict(obs) - obs, rewards, done, info = env.step(action) - env.render(mode='post') - if done: - break - -env.close(filestr='render/'+model_name) \ No newline at end of file diff --git a/scratch/etienne/intersimple/gail_image.py b/scratch/etienne/intersimple/gail_image.py deleted file mode 100644 index da6dced..0000000 --- a/scratch/etienne/intersimple/gail_image.py +++ /dev/null @@ -1,70 +0,0 @@ -# %% -import pathlib -import pickle -import tempfile - -import stable_baselines3 as sb3 -from stable_baselines3.common.env_util import make_vec_env - -from imitation.algorithms import adversarial, bc -from imitation.data import rollout -from imitation.util import logger - -from intersim.envs.intersimple import NRasterized - -from gail.discriminator import CnnDiscriminator - -model_name = 'gail_image' - -# %% -# Load pickled test demonstrations. -with open("data/NormalizedIntersimpleExpertMu.001_NRasterizedAgent51w36h36mppx2.pkl", "rb") as f: - # This is a list of `imitation.data.types.Trajectory`, where - # every instance contains observations and actions for a single expert - # demonstration. - trajectories = pickle.load(f) - -# %% -# Convert List[types.Trajectory] to an instance of `imitation.data.types.Transitions`. -# This is a more general dataclass containing unordered -# (observation, actions, next_observation) transitions. -transitions = rollout.flatten_trajectories(trajectories) - -venv = make_vec_env(NRasterized, n_envs=2, env_kwargs={'agent': 51, 'width': 36, 'height': 36, 'm_per_px': 2}) - -tempdir = tempfile.TemporaryDirectory(prefix="quickstart") -tempdir_path = pathlib.Path(tempdir.name) -print(f"All Tensorboards and logging are being written inside {tempdir_path}/.") - -# Train GAIL on expert data. -# GAIL, and AIRL also accept as `expert_data` any Pytorch-style DataLoader that -# iterates over dictionaries containing observations, actions, and next_observations. -logger.configure(tempdir_path / "GAIL/") -gail_trainer = adversarial.GAIL( - venv, - expert_data=transitions, - expert_batch_size=32, - #n_disc_updates_per_round=2048, - discrim_kwargs={'discrim_net': CnnDiscriminator(venv)}, - gen_algo=sb3.PPO("CnnPolicy", venv, verbose=1, n_steps=1024), - allow_variable_horizon=True, -) -gail_trainer.train(total_timesteps=100000) -gail_trainer.gen_algo.save(model_name) - -#del gail_trainer - -# %% -model = sb3.PPO.load(model_name) - -env = NRasterized(agent=51, width=36, height=36, m_per_px=2) - -obs = env.reset() -while True: - action, _states = model.predict(obs) - obs, rewards, done, info = env.step(action) - env.render(mode='post') - if done: - break - -env.close(filestr='render/'+model_name) diff --git a/scratch/etienne/intersimple/gail_image_multiagent_nocollision.py b/scratch/etienne/intersimple/gail_image_multiagent_nocollision.py deleted file mode 100644 index 4619b5a..0000000 --- a/scratch/etienne/intersimple/gail_image_multiagent_nocollision.py +++ /dev/null @@ -1,70 +0,0 @@ -# %% -import pathlib -import pickle -import tempfile - -import stable_baselines3 as sb3 -from stable_baselines3.common.env_util import make_vec_env - -from imitation.algorithms import adversarial, bc -from imitation.data import rollout -from imitation.util import logger - -from intersim.envs.intersimple import NRasterized - -from gail.discriminator import CnnDiscriminatorFlatAction - -model_name = 'gail_image_multiagent_nocollision' - -# %% -# Load pickled test demonstrations. -with open("data/NormalizedIntersimpleExpertMu.001_NRasterizedRandomAgentw36h36mppx2.pkl", "rb") as f: - # This is a list of `imitation.data.types.Trajectory`, where - # every instance contains observations and actions for a single expert - # demonstration. - trajectories = pickle.load(f) - -# %% -# Convert List[types.Trajectory] to an instance of `imitation.data.types.Transitions`. -# This is a more general dataclass containing unordered -# (observation, actions, next_observation) transitions. -transitions = rollout.flatten_trajectories(trajectories) - -venv = make_vec_env(NRasterized, n_envs=2, env_kwargs={'stop_on_collision':False, 'width': 36, 'height': 36, 'm_per_px': 2}) - -tempdir = tempfile.TemporaryDirectory(prefix="quickstart") -tempdir_path = pathlib.Path(tempdir.name) -print(f"All Tensorboards and logging are being written inside {tempdir_path}/.") - -# Train GAIL on expert data. -# GAIL, and AIRL also accept as `expert_data` any Pytorch-style DataLoader that -# iterates over dictionaries containing observations, actions, and next_observations. -logger.configure(tempdir_path / "GAIL/") -gail_trainer = adversarial.GAIL( - venv, - expert_data=transitions, - expert_batch_size=32, - #n_disc_updates_per_round=2048, - discrim_kwargs={'discrim_net': CnnDiscriminatorFlatAction(venv)}, - gen_algo=sb3.PPO("CnnPolicy", venv, verbose=1, n_steps=1024), - allow_variable_horizon=True, -) -gail_trainer.train(total_timesteps=100000) -gail_trainer.gen_algo.save(model_name) - -#del gail_trainer - -# %% -model = sb3.PPO.load(model_name) - -env = NRasterized(stop_on_collision=False, width=36, height=36, m_per_px=2) - -obs = env.reset() -while True: - action, _states = model.predict(obs) - obs, rewards, done, info = env.step(action) - env.render(mode='post') - if done: - break - -env.close(filestr='render/'+model_name) diff --git a/scratch/etienne/intersimple/gail_image_random.py b/scratch/etienne/intersimple/gail_image_random.py deleted file mode 100644 index 79794e9..0000000 --- a/scratch/etienne/intersimple/gail_image_random.py +++ /dev/null @@ -1,79 +0,0 @@ -# %% -import pathlib -import pickle -import tempfile - -import stable_baselines3 as sb3 -from stable_baselines3.common.env_util import make_vec_env - -from imitation.algorithms import adversarial, bc -from imitation.data import rollout -from imitation.util import logger - -from intersim.envs.intersimple import NRasterizedRandomAgent, IntersimpleReward, speed_reward -import functools -from stable_baselines3.common.evaluation import evaluate_policy - -from gail.discriminator import CnnDiscriminator - -model_name = 'gail_image_random' - -# %% -# Load pickled test demonstrations. -with open("data/NormalizedIntersimpleExpertMu.001_NRasterizedRandomAgentw36h36mppx2.pkl", "rb") as f: - # This is a list of `imitation.data.types.Trajectory`, where - # every instance contains observations and actions for a single expert - # demonstration. - trajectories = pickle.load(f) - -# %% -# Convert List[types.Trajectory] to an instance of `imitation.data.types.Transitions`. -# This is a more general dataclass containing unordered -# (observation, actions, next_observation) transitions. -transitions = rollout.flatten_trajectories(trajectories) - -env_kwargs = {'width': 36, 'height': 36, 'm_per_px': 2} -venv = make_vec_env(NRasterizedRandomAgent, n_envs=2, env_kwargs=env_kwargs) - -tempdir = tempfile.TemporaryDirectory(prefix="quickstart") -tempdir_path = pathlib.Path(tempdir.name) -print(f"All Tensorboards and logging are being written inside {tempdir_path}/.") - -# Train GAIL on expert data. -# GAIL, and AIRL also accept as `expert_data` any Pytorch-style DataLoader that -# iterates over dictionaries containing observations, actions, and next_observations. -logger.configure(tempdir_path / "GAIL/") -generator = sb3.PPO("CnnPolicy", venv, verbose=1, n_steps=1024) -gail_trainer = adversarial.GAIL( - venv, - expert_data=transitions, - expert_batch_size=32, - #n_disc_updates_per_round=2048, - discrim_kwargs={'discrim_net': CnnDiscriminator(venv)}, - gen_algo=generator, - allow_variable_horizon=True, -) -def callback(round): - eval_env = NRasterizedRandomAgent(reward=functools.partial(speed_reward, collision_penalty=0.), **env_kwargs) - #sync_envs_normalization(self.training_env, self.eval_env) - episode_rewards, episode_lengths = evaluate_policy(generator, eval_env, return_episode_rewards=True) - -gail_trainer.train(total_timesteps=100000, callback=callback) -gail_trainer.gen_algo.save(model_name) - -#del gail_trainer - -# %% -model = sb3.PPO.load(model_name) - -env = NRasterizedRandomAgent(width=36, height=36, m_per_px=2) - -obs = env.reset() -while True: - action, _states = model.predict(obs) - obs, rewards, done, info = env.step(action) - env.render(mode='post') - if done: - break - -env.close(filestr='render/'+model_name) diff --git a/scratch/etienne/intersimple/gail_image_random_ray.py b/scratch/etienne/intersimple/gail_image_random_ray.py deleted file mode 100644 index 3c00c5c..0000000 --- a/scratch/etienne/intersimple/gail_image_random_ray.py +++ /dev/null @@ -1,171 +0,0 @@ -# %% -import pathlib -import pickle -import tempfile -import os -import random -import numpy as np -import torch - -# set up ray tune -import ray -from ray import tune -from ray.tune import Analysis, ExperimentAnalysis -from ray.tune.schedulers import ASHAScheduler -from ray.tune.suggest.hyperopt import HyperOptSearch -from ray.tune.suggest import ConcurrencyLimiter - -import stable_baselines3 as sb3 -from stable_baselines3.common.env_util import make_vec_env - - -from imitation.algorithms import adversarial, bc -from imitation.data import rollout -from imitation.util import logger - -from intersim.envs.intersimple import NRasterizedRandomAgent, IntersimpleReward, speed_reward, NRasterized, NRasterizedRandomAgentVerbose -import functools -from stable_baselines3.common.evaluation import evaluate_policy -from gym.wrappers import TimeLimit - -from gail.discriminator import CnnDiscriminator - -model_name = 'gail_image_random_ray' -env_kwargs={'width': 36, 'height': 36, 'm_per_px': 2} - -# %% - -import argparse -parser = argparse.ArgumentParser() -parser.add_argument("--outdir", help="result directory", default='ray') -parser.add_argument("--test", help="test run", default=False, action="store_true") -args = parser.parse_args() -outdir = args.outdir - -# %% -# Load pickled test demonstrations. -with open("data/NormalizedIntersimpleExpertMu.001N10000_NRasterizedRandomAgentw36h36mppx2.pkl", "rb") as f: - # This is a list of `imitation.data.types.Trajectory`, where - # every instance contains observations and actions for a single expert - # demonstration. - trajectories = pickle.load(f) - -# Convert List[types.Trajectory] to an instance of `imitation.data.types.Transitions`. -# This is a more general dataclass containing unordered -# (observation, actions, next_observation) transitions. -transitions = rollout.flatten_trajectories(trajectories) -# Store transitions in shared ray memory -ray_transitions = ray.put(transitions) - -# %% -venv = make_vec_env(NRasterizedRandomAgent, n_envs=2, env_kwargs=env_kwargs) - -tempdir = tempfile.TemporaryDirectory(prefix="quickstart") -tempdir_path = pathlib.Path(tempdir.name) -print(f"All Tensorboards and logging are being written inside {tempdir_path}/.") -logger.configure(tempdir_path / "GAIL/") - -def get_ray_config(test=False): - if test: - return { - 'expert_batch_size': 2, - 'ppo_n_steps': 2, - 'ppo_batch_size': 2, - 'ppo_n_epochs': 1, - 'total_timesteps': 10, - } - else: - return { - 'expert_batch_size': tune.choice([2**x for x in range(6,10)]), - 'ppo_n_steps': tune.choice([2048, 3072, 4096]), - 'ppo_batch_size': tune.choice([2**x for x in range(9,13)]), - 'ppo_n_epochs': tune.choice([6,10]), - 'total_timesteps': 400_000, - } - - -def ray_train(config, checkpoint_dir=None): - # Train GAIL on expert data. - # GAIL, and AIRL also accept as `expert_data` any Pytorch-style DataLoader that - # iterates over dictionaries containing observations, actions, and next_observations. - - discriminator = CnnDiscriminator(venv) - if checkpoint_dir: - discriminator.load_state_dict(torch.load(os.path.join(checkpoint_dir, 'disc_checkpoint'))) - generator = sb3.PPO.load(os.path.join(checkpoint_dir, 'gen_checkpoint')) - else: - generator = sb3.PPO( - "CnnPolicy", venv, verbose=0, - n_steps=config["ppo_n_steps"], - batch_size=config["ppo_batch_size"], - n_epochs=config["ppo_n_epochs"] - ) - gail_trainer = adversarial.GAIL( - venv, - expert_data=ray.get(ray_transitions), - expert_batch_size=config["expert_batch_size"], - #n_disc_updates_per_round=2048, - discrim_kwargs={'discrim_net': discriminator}, - gen_algo=generator, - allow_variable_horizon=True, - ) - def callback(round): - # eval_env = NRasterized(agent=51, reward=functools.partial(speed_reward, collision_penalty=0.), **env_kwargs) - eval_env = TimeLimit(NRasterizedRandomAgent(reward=functools.partial(speed_reward, collision_penalty=0.), **env_kwargs), max_episode_steps=1000) - episode_rewards, episode_lengths = evaluate_policy(generator, eval_env, return_episode_rewards=True) - tune.report( - reward=np.mean(episode_rewards), - length=np.mean(episode_lengths), - training_iteration=round, - ) - with tune.checkpoint_dir(step=round) as checkpoint_dir: - gail_trainer.gen_algo.save(os.path.join(checkpoint_dir, 'gen_checkpoint')) - torch.save(discriminator.state_dict(), os.path.join(checkpoint_dir, 'disc_checkpoint')) - - gail_trainer.train(total_timesteps=config['total_timesteps'], callback=callback) - - -ray_config = get_ray_config(args.test) -search = HyperOptSearch(ray_config, metric='length', mode="max",) -search = ConcurrencyLimiter(search, max_concurrent=10) -custom_scheduler = ASHAScheduler(time_attr='training_iteration', metric='length', mode="max", grace_period=15) - -analysis = tune.run( - ray_train, - # config=ray_config, - search_alg=search, - scheduler=custom_scheduler, - local_dir=outdir, - resources_per_trial={"cpu":10, "gpu": 0.2}, - num_samples=1 if args.test else 100, -) - -del analysis - -# %% -# outdir = "ray/ray_train_2021-09-20_13-33-50/ray_train_f06785b0_33_expert_batch_size=128,ppo_batch_size=1024,ppo_n_epochs=6,ppo_n_steps=2048,total_timesteps=400000_2021-09-20_15-52-05" - -# %% -analysis = Analysis(outdir, default_metric="length", default_mode="max") -filepath = analysis.get_best_logdir() -print("Best ray experiment:", filepath) -config = analysis.get_best_config() -print("Best config:", config) - -# %% - -model = sb3.PPO.load(os.path.join(analysis.get_last_checkpoint(), 'gen_checkpoint')) - -# env = NRasterized(agent=51, **env_kwargs) -env = TimeLimit(NRasterizedRandomAgent(reward=functools.partial(speed_reward, collision_penalty=0.), **env_kwargs), max_episode_steps=1000) -obs = env.reset() -while True: - action, _states = model.predict(obs) - obs, rewards, done, info = env.step(action) - env.render(mode='post') - if done: - break - -env.env.close(filestr='render/'+model_name) -# %% - diff --git a/scratch/etienne/intersimple/gail_image_singleagent_nocollision.py b/scratch/etienne/intersimple/gail_image_singleagent_nocollision.py deleted file mode 100644 index 1c8cec4..0000000 --- a/scratch/etienne/intersimple/gail_image_singleagent_nocollision.py +++ /dev/null @@ -1,70 +0,0 @@ -# %% -import pathlib -import pickle -import tempfile - -import stable_baselines3 as sb3 -from stable_baselines3.common.env_util import make_vec_env - -from imitation.algorithms import adversarial, bc -from imitation.data import rollout -from imitation.util import logger - -from intersim.envs.intersimple import NRasterized - -from gail.discriminator import CnnDiscriminator - -model_name = 'gail_image_singleagent_nocollision' - -# %% -# Load pickled test demonstrations. -with open("data/NormalizedIntersimpleExpertMu.001_NRasterizedAgent51w36h36mppx2.pkl", "rb") as f: - # This is a list of `imitation.data.types.Trajectory`, where - # every instance contains observations and actions for a single expert - # demonstration. - trajectories = pickle.load(f) - -# %% -# Convert List[types.Trajectory] to an instance of `imitation.data.types.Transitions`. -# This is a more general dataclass containing unordered -# (observation, actions, next_observation) transitions. -transitions = rollout.flatten_trajectories(trajectories) - -venv = make_vec_env(NRasterized, n_envs=2, env_kwargs={'agent':51, 'stop_on_collision':False, 'width': 36, 'height': 36, 'm_per_px': 2}) - -tempdir = tempfile.TemporaryDirectory(prefix="quickstart") -tempdir_path = pathlib.Path(tempdir.name) -print(f"All Tensorboards and logging are being written inside {tempdir_path}/.") - -# Train GAIL on expert data. -# GAIL, and AIRL also accept as `expert_data` any Pytorch-style DataLoader that -# iterates over dictionaries containing observations, actions, and next_observations. -logger.configure(tempdir_path / "GAIL/") -gail_trainer = adversarial.GAIL( - venv, - expert_data=transitions, - expert_batch_size=32, - #n_disc_updates_per_round=2048, - discrim_kwargs={'discrim_net': CnnDiscriminator(venv)}, - gen_algo=sb3.PPO("CnnPolicy", venv, verbose=1, n_steps=1024), - allow_variable_horizon=True, -) -gail_trainer.train(total_timesteps=100000) -gail_trainer.gen_algo.save(model_name) - -#del gail_trainer - -# %% -model = sb3.PPO.load(model_name) - -env = NRasterized(agent=51, width=36, height=36, m_per_px=2, stop_on_collision=False) - -obs = env.reset() -while True: - action, _states = model.predict(obs) - obs, rewards, done, info = env.step(action) - env.render(mode='post') - if done: - break - -env.close(filestr='render/'+model_name) diff --git a/scratch/etienne/intersimple/gail_options_image.py b/scratch/etienne/intersimple/gail_options_image.py deleted file mode 100644 index 3dd83c8..0000000 --- a/scratch/etienne/intersimple/gail_options_image.py +++ /dev/null @@ -1,90 +0,0 @@ -# %% -import sys -sys.path.append('../../../') - -from src.discriminator import CnnDiscriminator, CnnDiscriminatorFlatAction -from imitation.algorithms import adversarial -import stable_baselines3 -import torch.utils.data -import numpy as np -from intersim.envs.intersimple import NRasterized -import itertools -from torch.distributions import Categorical -import gym -import torch -import pickle -import imitation.data.rollout as rollout -import tempfile -import pathlib -from imitation.util import logger -from stable_baselines3.common.env_util import make_vec_env -from tqdm import tqdm -from src.policies.options import OptionsCnnPolicy -from src.gail.options import OptionsEnv, LLOptions, HLOptions, RenderOptions -from src.gail.train import train_discriminator, train_generator - -model_name = 'gail_options_image' -env_settings = {'agent': 51, 'width': 36, 'height': 36, 'm_per_px': 2} - -ALL_OPTIONS = [(v,t) for v in [0,2,4,6,8] for t in [5, 10]] # option 0 is safe fallback - -def train(expert_data, epochs=20, expert_batch_size=32, generator_steps=1024, discount=0.99): - env = NRasterized(**env_settings) - env.discount = discount - - tempdir = tempfile.TemporaryDirectory(prefix="quickstart") - tempdir_path = pathlib.Path(tempdir.name) - logger.configure(tempdir_path / "GAIL/") - print(f"All Tensorboards and logging are being written inside {tempdir_path}/.") - - venv = make_vec_env(NRasterized, n_envs=1, env_kwargs=env_settings) - discriminator = adversarial.GAIL( - expert_data=expert_data, - expert_batch_size=expert_batch_size, - discrim_kwargs={'discrim_net': CnnDiscriminatorFlatAction(venv)}, - #discrim_kwargs={'discrim_net': CnnDiscriminator(venv)}, - venv=venv, # unused - gen_algo=stable_baselines3.PPO("CnnPolicy", venv), # unused - ) - - generator = stable_baselines3.PPO( - OptionsCnnPolicy, - OptionsEnv(env, options=ALL_OPTIONS), - verbose=1, - n_steps=generator_steps, - ) - - # PPO.train requires logger as set up in - # PPO._setup_learn (called by PPO.learn) - generator._logger = stable_baselines3.common.utils.configure_logger( - generator.verbose, - generator.tensorboard_log, - ) - - for _ in tqdm(range(epochs)): - train_discriminator(LLOptions(env, options=ALL_OPTIONS), generator, discriminator, num_samples=expert_batch_size) - train_generator(HLOptions(env, options=ALL_OPTIONS), generator, discriminator, num_samples=generator_steps) - - return generator - -# %% -if __name__ == '__main__': - # %% - - with open("data/NormalizedIntersimpleExpertMu.001_NRasterizedAgent51w36h36mppx2.pkl", "rb") as f: - trajectories = pickle.load(f) - transitions = rollout.flatten_trajectories(trajectories) - generator = train(transitions) - - generator.save(model_name) - - # %% - model = stable_baselines3.PPO.load(model_name) - - env = RenderOptions(NRasterized(**env_settings), options=ALL_OPTIONS) - - for s in env.sample_ll(model): - if s['dones']: - break - - env.close(filestr='render/'+model_name) diff --git a/scratch/etienne/intersimple/gail_options_image_alltracks.py b/scratch/etienne/intersimple/gail_options_image_alltracks.py deleted file mode 100644 index 84b418b..0000000 --- a/scratch/etienne/intersimple/gail_options_image_alltracks.py +++ /dev/null @@ -1,410 +0,0 @@ -# %% -import sys -sys.path.append('../../../') -from src.discriminator import CnnDiscriminator, CnnDiscriminatorFlatAction -from src.policies import OptionsCnnPolicy -from src.util import feasible -from src.data import load_experts - -from imitation.algorithms import adversarial -from imitation.util import logger -import imitation.data.rollout as rollout - -import stable_baselines3 -from stable_baselines3.common.env_util import make_vec_env - -import torch -import torch.utils.data -import numpy as np -import itertools -import gym -import pickle -import tempfile -import pathlib -from tqdm import tqdm - -from intersim.envs.intersimple import NRasterized, NRasterizedRandomAgent, NRasterizedIncrementingAgent - -ALL_OPTIONS = [(v,t) for v in [0,2,4,6,8] for t in [5, 10, 20]] # option 0 is safe fallback - -class OptionsEnv(gym.Wrapper): - """ - Wrap an intersimple environment with an options generator - """ - def __init__(self, env, *args, **kwargs): - """ - Initialize wrapped environment and set high-level action and observation spaces - """ - super().__init__(env, *args, **kwargs) - num_hl_options = len(ALL_OPTIONS) - self.action_space = gym.spaces.Discrete(num_hl_options) - self.observation_space = gym.spaces.Dict({ - 'obs': env.observation_space, - 'mask': gym.spaces.Box(low=0, high=1, shape=(num_hl_options,)), - }) - - def _after_choice(self): - pass - - def _after_step(self): - pass - - def _transitions(self): - raise NotImplementedError('Use `LLOptions` or `HLOptions` for sampling.') - - def sample(self, generator): - """ - yield transitions using a generator - Args: - generator (sb3.PPO) - Yields: - - """ - self.done = True - while True: - self.episode_start = False - if self.done: - self.s = self.env.reset() - self.done = False - self.episode_start = True - - self.m = available_actions(self.env) - self.ch, self.value, self.log_prob = generator.policy.predict({ - 'obs': torch.tensor(self.s).unsqueeze(0).to(generator.policy.device), - 'mask': torch.tensor(self.m).unsqueeze(0).to(generator.policy.device), - }) - self.plan = list(map(float, generate_plan(self.env, self.ch))) - - self._after_choice() - - assert not self.done - assert self.plan - #assert feasible(self.env, self.plan, self.ch) - - while not self.done and self.plan and feasible(self.env, self.plan, self.ch): - self.a, self.plan = self.plan[0], self.plan[1:] - self.a = self.env._normalize(self.a) - self.nexts, _, self.done, _ = self.env.step(self.a) - - self._after_step() - - self.s = self.nexts - - yield from self._transitions() - -class LLOptions(OptionsEnv): - """Sample low-level (state, action) tuples for discriminator training.""" - - def __init__(self, *args, **kwargs): - """ - LLOption uses the true LL observations - """ - super().__init__(*args, **kwargs) - # overwrite observation space to just output obs directly - self.observation_space = self.observation_space['obs'] - - def _after_choice(self): - """ - After each option choice, initialize/reset the transition buffer - """ - self._transition_buffer = [] - - def _after_step(self): - """ - After each ll action, append s, s', a, done to transition buffer - """ - self._transition_buffer.append({ - 'obs': self.s, - 'next_obs': self.nexts, - 'acts': np.array((self.a,)), - 'dones': np.array(self.done), - }) - - def _transitions(self): - """ - Yield from the transition buffer - """ - yield from self._transition_buffer - - def sample_ll(self, policy): - """ - Args: - policy - Returns: - gen: iterable which samples low-level transitions from the environment - """ - return self.sample(policy) - -class HLOptions(OptionsEnv): - """Sample high-level (state, action, reward) tuples for generator training.""" - - def __init__(self, *args, **kwargs): - super().__init__(*args, **kwargs) - - def _after_choice(self): - """ - After an option selection, initialize total reward and number of steps - """ - self.obs = {'obs': np.copy(self.s), 'mask': np.copy(self.m)} - self.r = 0 - self.steps = 0 - - def _after_step(self): - """ - After each low-level action, add the discounted discriminated reward score (given a discriminator) - """ - self.r += self.discount**self.steps * self.discriminator.discrim_net.reward_train( - state=torch.tensor(self.s).unsqueeze(0).to(self.discriminator.discrim_net.device()), - action=torch.tensor([[self.a]]).to(self.discriminator.discrim_net.device()), - next_state=torch.tensor(self.s).unsqueeze(0).to(self.discriminator.discrim_net.device()), # unused - done=torch.tensor(self.done).unsqueeze(0).to(self.discriminator.discrim_net.device()), # unused - ) - self.steps += 1 - - def _transitions(self): - """ - Yield a single dictionary per high-level selected action - Fields: - obs: high-level state and mask at selection - action: chosen high-level action - reward: accumulated option reward - episode_start: whether the action was chosen at the episode start - value: the value estimate from the starting state - log_prob: the log_prob of the selected action from the starting state - done: whether the episode has ended - - """ - yield { - 'obs': self.obs, - 'action': self.ch, - 'reward': self.r.detach(), - 'episode_start': self.episode_start, - 'value': self.value.detach(), - 'log_prob': self.log_prob.detach(), - 'done': self.done, - } - - def sample_hl(self, policy, discriminator): - """ - Args: - policy - discriminator: function with which to score rewards - Returns: - gen: iterable which samples high-level transitions from the environment - """ - self.discriminator = discriminator - return self.sample(policy) - -class RenderOptions(LLOptions): - - def _after_step(self): - """ - Render the environment after each low-level step - """ - super()._after_step() - self.env.render() - - def close(self, *args, **kwargs): - """ - On 'close', close the environment - """ - self.env.close(*args, **kwargs) - -def available_actions(env): - """Return mask of available actions given current `env` state.""" - valid = np.array([feasible(env, generate_plan(env, i), i) for i in range(len(ALL_OPTIONS))]) - return valid - -def target_velocity_plan(current_v: float, target_v: float, t: int, dt: float): - """Smoothly target a velocity in a given number of steps""" - # for now, constant acceleration - a = (target_v - current_v) / (t * dt) - return a*np.ones((t,)) - -def generate_plan(env, i): - """Generate input profile for high-level action `i`. - - Args: - env (gym.Env): current environment state - i (int): high-level action `i` - Returns: - plan (np.array): length T array of acceleration values - """ - assert i < len(ALL_OPTIONS), "Invalid option index {i}" - target_v, t = ALL_OPTIONS[i] - current_v = env._env.state[env._agent, 1].item() # extract from env - plan = target_velocity_plan(current_v, target_v, t, env._env._dt) - assert len(plan) == t, "incorrect plan length" - return plan - -def flatten_transitions(transitions): - return { - 'obs': np.stack(list(t['obs'] for t in transitions), axis=0), - 'next_obs': np.stack(list(t['next_obs'] for t in transitions), axis=0), - 'acts': np.stack(list(t['acts'] for t in transitions), axis=0), - 'dones': np.stack(list(t['dones'] for t in transitions), axis=0), - } - -def train_discriminator(env, generator, discriminator, num_samples): - transitions = list(itertools.islice(env.sample_ll(generator), num_samples)) - generator_samples = flatten_transitions(transitions) - discriminator.train_disc(gen_samples=generator_samples) - -def train_generator(env, generator, discriminator, num_samples): - generator_samples = list(itertools.islice(env.sample_hl(generator, discriminator), num_samples+1)) - - generator.rollout_buffer.reset() - for s in generator_samples[:-1]: - generator.rollout_buffer.add( - obs=s['obs'], - action=s['action'].cpu(), - reward=s['reward'].cpu(), - episode_start=s['episode_start'], - value=s['value'], - log_prob=s['log_prob'], - ) - - generator.rollout_buffer.compute_returns_and_advantage( - last_values=generator_samples[-1]['value'], - dones=generator_samples[-1]['done'], - ) - - generator.train() - -def train(expert_data, env_class=NRasterizedRandomAgent, env_settings={}, epochs=10, discrim_batch_size=32, generator_steps=2048, discount=0.99): - """ - Args: - expert_data: list of transitions - env_class: environment class - env_settings: environment settings - epochs: number of epochs to train for - discrim_batch_size: discriminator batch size - generator_steps: number of steps taken in generator - discount: discount factor - Returns: - generator (stable_baselines3.PPO): options policy - """ - env = env_class(**env_settings) - env.discount = discount - - tempdir = tempfile.TemporaryDirectory(prefix="quickstart") - tempdir_path = pathlib.Path(tempdir.name) - logger.configure(tempdir_path / "GAIL/") - print(f"All Tensorboards and logging are being written inside {tempdir_path}/.") - - venv = make_vec_env(env_class, n_envs=1, env_kwargs=env_settings) - discriminator = adversarial.GAIL( - expert_data=expert_data, - expert_batch_size=discrim_batch_size, - discrim_kwargs={'discrim_net': CnnDiscriminatorFlatAction(venv)}, - #discrim_kwargs={'discrim_net': CnnDiscriminator(venv)}, - venv=venv, # unused - gen_algo=stable_baselines3.PPO("CnnPolicy", venv), # unused - ) - - generator = stable_baselines3.PPO( - OptionsCnnPolicy, - OptionsEnv(env), - verbose=1, - n_steps=generator_steps, - ) - - # PPO.train requires logger as set up in - # PPO._setup_learn (called by PPO.learn) - generator._logger = stable_baselines3.common.utils.configure_logger( - generator.verbose, - generator.tensorboard_log, - ) - - for _ in tqdm(range(epochs)): - train_discriminator(LLOptions(env), generator, discriminator, num_samples=discrim_batch_size) - train_generator(HLOptions(env), generator, discriminator, num_samples=generator_steps) - - return generator - -# %% -if __name__ == '__main__': - # %% - model_name = 'gail_options_image' - env_class = NRasterizedRandomAgent - env_settings = {'width': 36, 'height': 36, 'm_per_px': 2} - - #env_class = NRasterized - #env_settings = {'agent': 51, 'width': 36, 'height': 36, 'm_per_px': 2} - files = ['../../../expert_data/DR_USA_Roundabout_FT/track%04i/expert.pkl'%(i) for i in range(5)] - transitions=load_experts(files) - - generator = train( - transitions, - env_class=env_class, - env_settings=env_settings, - epochs=10, - discrim_batch_size=32, - generator_steps=2048, - discount=0.99 - ) - - generator.save(model_name) - - # %% - model = stable_baselines3.PPO.load(model_name) - - env = RenderOptions(NRasterizedRandomAgent(**env_args)) - - for s in env.sample_ll(model): - if s['dones']: - break - - env.close(filestr='render/'+model_name) - -# %% Tests - -def test_ll_expert_data(): - with open("data/NormalizedIntersimpleExpertMu.001_NRasterizedAgent51w36h36mppx2.pkl", "rb") as f: - expert_trajectories = pickle.load(f) - expert_transitions = rollout.flatten_trajectories(expert_trajectories) - - env = LLOptions(NRasterized(agent=51, width=36, height=36, m_per_px=2)) - - gen_transitions = list(itertools.islice(env.sample_ll( - policy=stable_baselines3.PPO( - OptionsCnnPolicy, - OptionsEnv(env), - verbose=1, - ) - ), 10)) - gen_transitions = flatten_transitions(gen_transitions) - - assert expert_transitions[:10].obs.shape == gen_transitions['obs'].shape - assert expert_transitions[:10].next_obs.shape == gen_transitions['next_obs'].shape - assert expert_transitions[:10].acts.shape == gen_transitions['acts'].shape - assert expert_transitions[:10].dones.shape == gen_transitions['dones'].shape - -def test_ll_states(): - env = NRasterized() - policy = stable_baselines3.PPO( - OptionsCnnPolicy, - OptionsEnv(env), - verbose=1, - ) - llenv = LLOptions(env) - transitions = list(itertools.islice(llenv.sample_ll(policy=policy), 100)) - - env2 = NRasterized() - s2 = env2.reset() - for i, t in enumerate(transitions): - assert i == 0 or np.array_equal(t['obs'], transitions[i-1]['next_obs']) - assert np.array_equal(t['obs'], s2) - assert t['acts'].shape == (1,) - - nexts2, _, done2, _ = env2.step(t['acts']) - assert np.array_equal(t['next_obs'], nexts2) - assert np.array_equal(t['dones'], done2) - - if done2: - break - - s2 = nexts2 - -def test_hl_transitions(): - pass diff --git a/scratch/etienne/intersimple/gail_options_image_random.py b/scratch/etienne/intersimple/gail_options_image_random.py deleted file mode 100644 index 216ea9f..0000000 --- a/scratch/etienne/intersimple/gail_options_image_random.py +++ /dev/null @@ -1,91 +0,0 @@ -# %% -import sys -sys.path.append('../../../') - -from src.discriminator import CnnDiscriminatorFlatAction -from imitation.algorithms import adversarial -import stable_baselines3 -import torch.utils.data -import numpy as np -from intersim.envs.intersimple import NRasterizedRouteRandomAgent -import itertools -from torch.distributions import Categorical -import gym -import torch -import pickle -import imitation.data.rollout as rollout -import tempfile -import pathlib -from imitation.util import logger -from stable_baselines3.common.env_util import make_vec_env -from tqdm import tqdm -from src.policies.options import OptionsCnnPolicy -from src.gail.options import OptionsEnv, LLOptions, HLOptions, RenderOptions -from src.gail.train import train_discriminator, train_generator - -model_name = 'gail_options_image_random' -env_settings = {'width': 70, 'height': 70, 'm_per_px': 1} - -ALL_OPTIONS = [(v,t) for v in [0,2,4,6,8] for t in [5, 10, 20]] # option 0 is safe fallback - -def train(expert_data, epochs=100, expert_batch_size=64, generator_steps=1024, discount=0.99): - env = NRasterizedRouteRandomAgent(**env_settings) - env.discount = discount - - tempdir = tempfile.TemporaryDirectory(prefix="quickstart") - tempdir_path = pathlib.Path(tempdir.name) - logger.configure(tempdir_path / "GAIL/") - print(f"All Tensorboards and logging are being written inside {tempdir_path}/.") - - venv = make_vec_env(NRasterizedRouteRandomAgent, n_envs=1, env_kwargs=env_settings) - discriminator = adversarial.GAIL( - expert_data=expert_data, - expert_batch_size=expert_batch_size, - discrim_kwargs={'discrim_net': CnnDiscriminatorFlatAction(venv)}, - #discrim_kwargs={'discrim_net': CnnDiscriminator(venv)}, - venv=venv, # unused - gen_algo=stable_baselines3.PPO("CnnPolicy", venv), # unused - ) - - generator = stable_baselines3.PPO( - OptionsCnnPolicy, - OptionsEnv(env, options=ALL_OPTIONS), - verbose=1, - n_steps=generator_steps, - ) - - # PPO.train requires logger as set up in - # PPO._setup_learn (called by PPO.learn) - generator._logger = stable_baselines3.common.utils.configure_logger( - generator.verbose, - generator.tensorboard_log, - ) - - for _ in tqdm(range(epochs)): - train_discriminator(LLOptions(env, options=ALL_OPTIONS), generator, discriminator, num_samples=expert_batch_size) - train_generator(HLOptions(env, options=ALL_OPTIONS), generator, discriminator, num_samples=generator_steps) - generator.save(model_name) - - return generator - -def video(model_name, env): - model = stable_baselines3.PPO.load(model_name) - env = RenderOptions(env, options=ALL_OPTIONS) - for s in env.sample_ll(model): - if s['dones']: - break - env.close(filestr='render/'+model_name) - -def evaluate(): - video( - model_name=model_name, - env=NRasterizedRouteRandomAgent(**env_settings) - ) - -# %% -if __name__ == '__main__': - - with open("data/NormalizedIntersimpleExpertMu.001N10000_NRasterizedRouteRandomAgentw70h70mppx1.pkl", "rb") as f: - trajectories = pickle.load(f) - transitions = rollout.flatten_trajectories(trajectories) - train(transitions) diff --git a/scratch/etienne/intersimple/gail_options_image_random_location.py b/scratch/etienne/intersimple/gail_options_image_random_location.py deleted file mode 100644 index 63ad89d..0000000 --- a/scratch/etienne/intersimple/gail_options_image_random_location.py +++ /dev/null @@ -1,144 +0,0 @@ -# %% -from collections import deque -import sys -sys.path.append('../../../') - -from src.discriminator import CnnDiscriminator, CnnDiscriminatorFlatAction -from imitation.algorithms import adversarial -import stable_baselines3 -import pickle -import imitation.data.rollout as rollout -import tempfile -import pathlib -from imitation.util import logger -from tqdm import tqdm -from src.policies.options import OptionsCnnPolicy -from src.gail.train import flatten_transitions -from gail.options2 import OptionsEnv, RenderOptions, imitation_discriminator -from gail.envs import TLNRasterizedRouteRandomAgentLocation -from stable_baselines3.common.vec_env.dummy_vec_env import DummyVecEnv -from stable_baselines3.common.env_util import make_vec_env -import torch -import numpy as np - -model_name = 'gail_options_image_random_location' -env_settings = {'width': 70, 'height': 70, 'm_per_px': 1, 'mu': 0.001, 'random_skip': True, 'max_episode_steps': 200} - -ALL_OPTIONS = [(v,t) for v in [0,2,4,8,10] for t in [5, 10, 20]] # option 0 is safe fallback - -class NoisyDiscriminator(CnnDiscriminatorFlatAction): - - def __init__(self, *args, std=0.0, **kwargs): - super().__init__(*args, **kwargs) - self.std = std - - def forward(self, state, action): - noise = self.std * torch.randn(*action.shape, device=action.device) - return super().forward(state, action + noise) - -class LLBuffer(deque): - - def sample(self, n): - assert n <= self.maxlen, f'Sample size of {n} exceeds buffer capacity of {self.maxlen}' - assert n <= len(self), f'Sample size of {n} exceeds buffer size of {len(self)}' - ind = np.random.randint(len(self), size=n) - return list(self[i] for i in ind) - -def train( - expert_data, - expert_batch_size=4096, - discriminator_updates_per_round=20, - generator_steps=1024, - generator_batch_size=1024, - generator_total_steps=8192, - generator_updates_per_round=10, - discount=1.0, - epochs=200, - ): - env = TLNRasterizedRouteRandomAgentLocation(**env_settings) - - tempdir = tempfile.TemporaryDirectory(prefix="quickstart") - tempdir_path = pathlib.Path(tempdir.name) - logger.configure(tempdir_path / "GAIL/") - print(f"All Tensorboards and logging are being written inside {tempdir_path}/.") - - venv = DummyVecEnv([lambda: env]) - discriminator = adversarial.GAIL( - expert_data=expert_data, - expert_batch_size=expert_batch_size, - #discrim_kwargs={'discrim_net': NoisyDiscriminator(venv, std=0.25)}, - disc_opt_cls=torch.optim.RMSprop, - disc_opt_kwargs={'lr': 0.0001, 'weight_decay': 0.003}, - discrim_kwargs={'discrim_net': CnnDiscriminator(venv)}, - venv=venv, # unused - gen_algo=stable_baselines3.PPO("CnnPolicy", venv), # unused - ) - - ll_buffer = LLBuffer(maxlen=expert_batch_size*10) - - options_env = make_vec_env( - OptionsEnv, - n_envs=1, - #vec_env_cls=SubprocVecEnv, - env_kwargs={ - 'env': env, - 'options': ALL_OPTIONS, - 'discriminator': imitation_discriminator(discriminator), - 'discount': discount, - 'll_buffer': ll_buffer, - } - ) - - generator = stable_baselines3.PPO( - OptionsCnnPolicy, - options_env, - verbose=1, - batch_size=generator_batch_size, - n_steps=generator_steps, - n_epochs=generator_updates_per_round, - gamma=1.0, - learning_rate=1e-4, - ) - - for _ in tqdm(range(epochs)): - ll_buffer.clear() - - # train generator - generator.learn(total_timesteps=generator_total_steps) - - # train discriminator - for _ in range(discriminator_updates_per_round): - generator_samples = ll_buffer.sample(expert_batch_size) - generator_samples = flatten_transitions(generator_samples) - discriminator.train_disc(gen_samples=generator_samples) - - generator.save(model_name) - - return generator - -def video(model_name, env): - model = stable_baselines3.PPO.load(model_name) - - done = False - obs = env.reset() - while not done: - action, _ = model.predict(obs) - obs, _, done, _ = env.step(action) - - env.close(filestr='render/'+model_name) - -def evaluate(): - video_settings = { **env_settings, 'random_skip': False, 'max_episode_steps': 200 } - env = TLNRasterizedRouteRandomAgentLocation(**video_settings) - env = RenderOptions(env, options=ALL_OPTIONS) - video( - model_name=model_name, - env=env - ) - -# %% -if __name__ == '__main__': - with open("data/NormalizedIntersimpleExpertMu.001N50000_TLNRasterizedRouteRandomAgentLocationw70h70mppx1mu.001rskips50.pkl", "rb") as f: - trajectories = pickle.load(f) - transitions = rollout.flatten_trajectories(trajectories) - train(transitions) diff --git a/scratch/etienne/intersimple/imitation_quickstart.py b/scratch/etienne/intersimple/imitation_quickstart.py deleted file mode 100644 index 996519f..0000000 --- a/scratch/etienne/intersimple/imitation_quickstart.py +++ /dev/null @@ -1,63 +0,0 @@ -# %% -import pathlib -import pickle -import tempfile - -import stable_baselines3 as sb3 -from stable_baselines3.common.env_util import make_vec_env - -from imitation.algorithms import adversarial, bc -from imitation.data import rollout -from imitation.util import logger - -from intersim.envs.intersimple import IntersimpleReward - -# Load pickled test demonstrations. -with open("data/NormalizedIntersimpleExpert_IntersimpleRewardAgent51.pkl", "rb") as f: - # This is a list of `imitation.data.types.Trajectory`, where - # every instance contains observations and actions for a single expert - # demonstration. - trajectories = pickle.load(f) - -# %% -# Convert List[types.Trajectory] to an instance of `imitation.data.types.Transitions`. -# This is a more general dataclass containing unordered -# (observation, actions, next_observation) transitions. -transitions = rollout.flatten_trajectories(trajectories) - -venv = make_vec_env(IntersimpleReward, n_envs=2, env_kwargs={'agent': 51}) - -tempdir = tempfile.TemporaryDirectory(prefix="quickstart") -tempdir_path = pathlib.Path(tempdir.name) -print(f"All Tensorboards and logging are being written inside {tempdir_path}/.") - -# Train BC on expert data. -# BC also accepts as `expert_data` any PyTorch-style DataLoader that iterates over -# dictionaries containing observations and actions. -logger.configure(tempdir_path / "BC/") -bc_trainer = bc.BC(venv.observation_space, venv.action_space, expert_data=transitions) -bc_trainer.train(n_epochs=1) - -# Train GAIL on expert data. -# GAIL, and AIRL also accept as `expert_data` any Pytorch-style DataLoader that -# iterates over dictionaries containing observations, actions, and next_observations. -logger.configure(tempdir_path / "GAIL/") -gail_trainer = adversarial.GAIL( - venv, - expert_data=transitions, - expert_batch_size=32, - gen_algo=sb3.PPO("MlpPolicy", venv, verbose=1, n_steps=1024), -) -gail_trainer.train(total_timesteps=2048) - -# Train AIRL on expert data. -logger.configure(tempdir_path / "AIRL/") -airl_trainer = adversarial.AIRL( - venv, - expert_data=transitions, - expert_batch_size=32, - gen_algo=sb3.PPO("MlpPolicy", venv, verbose=1, n_steps=1024), -) -airl_trainer.train(total_timesteps=2048) - -# %% diff --git a/scratch/etienne/intersimple/ppo_const.py b/scratch/etienne/intersimple/ppo_const.py deleted file mode 100644 index 7fb598f..0000000 --- a/scratch/etienne/intersimple/ppo_const.py +++ /dev/null @@ -1,36 +0,0 @@ -# %% -from stable_baselines3 import PPO -from stable_baselines3.common.env_util import make_vec_env -from intersim.envs.intersimple import IntersimpleReward, speed_reward - -model_name = "ppo_const" - -env = IntersimpleReward( - agent=51, - #reward=speed_reward, -) - -# %% -model = PPO( - "MlpPolicy", env, - verbose=1, -) -model.learn(total_timesteps=100000) -model.save(model_name) - -print('Done training.') - -del model # remove to demonstrate saving and loading - -# %% -model = PPO.load(model_name) - -obs = env.reset() -while True: - action, _states = model.predict(obs) - obs, rewards, done, info = env.step(action) - env.render(mode='post') - if done: - break - -env.close(filestr='render/'+model_name) diff --git a/scratch/etienne/intersimple/ppo_const_collision.py b/scratch/etienne/intersimple/ppo_const_collision.py deleted file mode 100644 index ab535c8..0000000 --- a/scratch/etienne/intersimple/ppo_const_collision.py +++ /dev/null @@ -1,41 +0,0 @@ -# %% -from stable_baselines3 import PPO -from stable_baselines3.common.env_util import make_vec_env -from intersim.envs.intersimple import ConstCollisionReward, IntersimpleFlatAgent - -model_name = "ppo_const_collision" - -class IntersimpleConstCollisionAgent(ConstCollisionReward, IntersimpleFlatAgent): - pass - -env = IntersimpleConstCollisionAgent( - agent=51, - speed_reward_weight=0.001, - collision_penalty=1000 -) - -# %% -model = PPO( - "MlpPolicy", env, - learning_rate=3e-6, - verbose=1, -) -model.learn(total_timesteps=2e5) -model.save(model_name) - -print('Done training.') - -del model # remove to demonstrate saving and loading - -# %% -model = PPO.load(model_name) - -obs = env.reset() -while True: - action, _states = model.predict(obs) - obs, rewards, done, info = env.step(action) - env.render(mode='post') - if done: - break - -env.close(filestr='render/'+model_name) diff --git a/scratch/etienne/intersimple/ppo_const_image.py b/scratch/etienne/intersimple/ppo_const_image.py deleted file mode 100644 index eb05b46..0000000 --- a/scratch/etienne/intersimple/ppo_const_image.py +++ /dev/null @@ -1,35 +0,0 @@ -# %% -from stable_baselines3 import PPO -from stable_baselines3.common.env_util import make_vec_env -from intersim.envs.intersimple import NRasterized - -model_name = "ppo_const_image" - -env = NRasterized( - agent=51, -) - -# %% -model = PPO( - "CnnPolicy", env, - verbose=1, -) -model.learn(total_timesteps=100000) -model.save(model_name) - -print('Done training.') - -del model # remove to demonstrate saving and loading - -# %% -model = PPO.load(model_name) - -obs = env.reset() -while True: - action, _states = model.predict(obs) - obs, rewards, done, info = env.step(action) - env.render(mode='post') - if done: - break - -env.close(filestr='render/'+model_name) \ No newline at end of file diff --git a/scratch/etienne/intersimple/ppo_const_image_random.py b/scratch/etienne/intersimple/ppo_const_image_random.py deleted file mode 100644 index da99f18..0000000 --- a/scratch/etienne/intersimple/ppo_const_image_random.py +++ /dev/null @@ -1,33 +0,0 @@ -# %% -from stable_baselines3 import PPO -from intersim.envs.intersimple import NRasterizedRandomAgent -import functools - -model_name = "ppo_const_image_random" - -env = NRasterizedRandomAgent() - -# %% -model = PPO( - "CnnPolicy", env, - verbose=1, -) -model.learn(total_timesteps=2e5) -model.save(model_name) - -print('Done training.') - -del model # remove to demonstrate saving and loading - -# %% -model = PPO.load(model_name) - -obs = env.reset() -while True: - action, _states = model.predict(obs) - obs, rewards, done, info = env.step(action) - env.render(mode='post') - if done: - break - -env.close(filestr='render/'+model_name) diff --git a/scratch/etienne/intersimple/ppo_intersimple_tspeed.py b/scratch/etienne/intersimple/ppo_intersimple_tspeed.py deleted file mode 100644 index 3d915f5..0000000 --- a/scratch/etienne/intersimple/ppo_intersimple_tspeed.py +++ /dev/null @@ -1,25 +0,0 @@ -from stable_baselines3 import PPO -from stable_baselines3.common.env_util import make_vec_env -from intersim.envs.intersimple import IntersimpleTargetSpeed - -env = IntersimpleTargetSpeed() - -model = PPO("MlpPolicy", env, verbose=1) -model.learn(total_timesteps=25000) -model.save("ppo_intersimple") - -print('Done training.') - -del model # remove to demonstrate saving and loading - -model = PPO.load("ppo_intersimple") - -obs = env.reset() -while True: - action, _states = model.predict(obs) - obs, rewards, done, info = env.step(action) - env.render(mode='post') - if done: - break - -env.close() diff --git a/scratch/etienne/intersimple/ppo_speed.py b/scratch/etienne/intersimple/ppo_speed.py deleted file mode 100644 index 1aa911b..0000000 --- a/scratch/etienne/intersimple/ppo_speed.py +++ /dev/null @@ -1,46 +0,0 @@ -# %% -from stable_baselines3 import PPO -from intersim.envs.intersimple import IntersimpleReward, speed_reward -import functools - -model_name = "ppo_speed" - -#def reward(state, action, info): -# speed = state[2].item() -# r = speed if speed < 10 else (10 - 5 * (speed - 10)) -# return 0.1 * r - -env = IntersimpleReward( - agent=51, - reward=functools.partial( - speed_reward, - collision_penalty=0 - ), -) - -# %% -model = PPO( - "MlpPolicy", env, - verbose=1, -) -model.learn(total_timesteps=100000) -model.save(model_name) - -print('Done training.') - -del model # remove to demonstrate saving and loading - -# %% -model = PPO.load(model_name) - -obs = env.reset() -while True: - action, _states = model.predict(obs) - obs, rewards, done, info = env.step(action) - env.render(mode='post') - if done: - break - -env.close(filestr='render/'+model_name) - -# %% diff --git a/scratch/etienne/intersimple/ppo_speed_image.py b/scratch/etienne/intersimple/ppo_speed_image.py deleted file mode 100644 index 2ac95d8..0000000 --- a/scratch/etienne/intersimple/ppo_speed_image.py +++ /dev/null @@ -1,46 +0,0 @@ -# %% -from stable_baselines3 import PPO -from intersim.envs.intersimple import NRasterized, speed_reward -import functools - -model_name = "ppo_speed_image" - -#def reward(state, action, info): -# speed = state[2].item() -# r = speed if speed < 10 else (10 - 5 * (speed - 10)) -# return 0.1 * r - -env = NRasterized( - agent=20, - reward=functools.partial( - speed_reward, - collision_penalty=0 - ), -) - -# %% -model = PPO( - "CnnPolicy", env, - verbose=1, -) -model.learn(total_timesteps=100000) -model.save(model_name) - -print('Done training.') - -del model # remove to demonstrate saving and loading - -# %% -model = PPO.load(model_name) - -obs = env.reset() -while True: - action, _states = model.predict(obs) - obs, rewards, done, info = env.step(action) - env.render(mode='post') - if done: - break - -env.close(filestr='render/'+model_name) - -# %% diff --git a/scratch/etienne/intersimple/ppo_speed_image_lowres.py b/scratch/etienne/intersimple/ppo_speed_image_lowres.py deleted file mode 100644 index 3549440..0000000 --- a/scratch/etienne/intersimple/ppo_speed_image_lowres.py +++ /dev/null @@ -1,49 +0,0 @@ -# %% -from stable_baselines3 import PPO -from intersim.envs.intersimple import NRasterized, speed_reward -import functools - -model_name = "ppo_speed_image_lowres" - -#def reward(state, action, info): -# speed = state[2].item() -# r = speed if speed < 10 else (10 - 5 * (speed - 10)) -# return 0.1 * r - -env = NRasterized( - agent=51, - height=36, - width=36, - m_per_px=2, - reward=functools.partial( - speed_reward, - collision_penalty=0 - ), -) - -# %% -model = PPO( - "CnnPolicy", env, - verbose=1, -) -model.learn(total_timesteps=100000) -model.save(model_name) - -print('Done training.') - -del model # remove to demonstrate saving and loading - -# %% -model = PPO.load(model_name) - -obs = env.reset() -while True: - action, _states = model.predict(obs) - obs, rewards, done, info = env.step(action) - env.render(mode='post') - if done: - break - -env.close(filestr='render/'+model_name) - -# %% diff --git a/scratch/etienne/intersimple/ppo_speed_image_lowres_random.py b/scratch/etienne/intersimple/ppo_speed_image_lowres_random.py deleted file mode 100644 index 3b362bd..0000000 --- a/scratch/etienne/intersimple/ppo_speed_image_lowres_random.py +++ /dev/null @@ -1,42 +0,0 @@ -# %% -from stable_baselines3 import PPO -from intersim.envs.intersimple import NRasterizedRandomAgent, speed_reward -import functools - -model_name = "ppo_speed_image_lowres_random" - -env = NRasterizedRandomAgent( - height=36, - width=36, - m_per_px=2, - reward=functools.partial( - speed_reward, - collision_penalty=0 - ) -) - -# %% -model = PPO( - "CnnPolicy", env, - verbose=1, - batch_size=2048, -) -model.learn(total_timesteps=2e5) -model.save(model_name) - -print('Done training.') - -del model # remove to demonstrate saving and loading - -# %% -model = PPO.load(model_name) - -obs = env.reset() -while True: - action, _states = model.predict(obs) - obs, rewards, done, info = env.step(action) - env.render(mode='post') - if done: - break - -env.close(filestr='render/'+model_name) diff --git a/scratch/etienne/intersimple/ppo_speed_image_random.py b/scratch/etienne/intersimple/ppo_speed_image_random.py deleted file mode 100644 index 26fe9e0..0000000 --- a/scratch/etienne/intersimple/ppo_speed_image_random.py +++ /dev/null @@ -1,39 +0,0 @@ -# %% -from stable_baselines3 import PPO -from intersim.envs.intersimple import NRasterizedRandomAgent, speed_reward -import functools - -model_name = "ppo_speed_image_random" - -env = NRasterizedRandomAgent( - reward=functools.partial( - speed_reward, - collision_penalty=0 - ) -) - -# %% -model = PPO( - "CnnPolicy", env, - verbose=1, - batch_size=2048, -) -model.learn(total_timesteps=2e5) -model.save(model_name) - -print('Done training.') - -del model # remove to demonstrate saving and loading - -# %% -model = PPO.load(model_name) - -obs = env.reset() -while True: - action, _states = model.predict(obs) - obs, rewards, done, info = env.step(action) - env.render(mode='post') - if done: - break - -env.close(filestr='render/'+model_name) diff --git a/scratch/etienne/intersimple/ppo_speed_lidar.py b/scratch/etienne/intersimple/ppo_speed_lidar.py deleted file mode 100644 index 40397ad..0000000 --- a/scratch/etienne/intersimple/ppo_speed_lidar.py +++ /dev/null @@ -1,50 +0,0 @@ -# %% -from stable_baselines3 import PPO -from intersim.envs import IntersimpleLidarFlat -from intersim.envs.intersimple import speed_reward -import functools - -model_name = "ppo_speed_lidar" - -#def reward(state, action, info): -# speed = state[2].item() -# r = speed if speed < 10 else (10 - 5 * (speed - 10)) -# return 0.1 * r - -env = IntersimpleLidarFlat( - n_rays=5, - agent=51, - reward=functools.partial( - speed_reward, - collision_penalty=0 - ), -) - -# %% -model = PPO( - "MlpPolicy", env, - learning_rate=1e-4, - verbose=1, - tensorboard_log='runs/' -) -model.learn(total_timesteps=100000) -model.save(model_name) - -print('Done training.') - -del model # remove to demonstrate saving and loading - -# %% -model = PPO.load(model_name) - -obs = env.reset() -while True: - action, _states = model.predict(obs) - obs, rewards, done, info = env.step(action) - env.render(mode='post') - if done: - break - -env.close(filestr='render/'+model_name) - -# %% diff --git a/scratch/etienne/intersimple/ppo_speed_lidar_random.py b/scratch/etienne/intersimple/ppo_speed_lidar_random.py deleted file mode 100644 index 0da4cc5..0000000 --- a/scratch/etienne/intersimple/ppo_speed_lidar_random.py +++ /dev/null @@ -1,49 +0,0 @@ -# %% -from stable_baselines3 import PPO -from intersim.envs import IntersimpleLidarFlatRandom -from intersim.envs.intersimple import speed_reward -import functools - -model_name = "ppo_speed_lidar_random" - -#def reward(state, action, info): -# speed = state[2].item() -# r = speed if speed < 10 else (10 - 5 * (speed - 10)) -# return 0.1 * r - -env = IntersimpleLidarFlatRandom( - n_rays=5, - reward=functools.partial( - speed_reward, - collision_penalty=0 - ), -) - -# %% -model = PPO( - "MlpPolicy", env, - learning_rate=1e-4, - verbose=1, - tensorboard_log='runs/' -) -model.learn(total_timesteps=1000000) -model.save(model_name) - -print('Done training.') - -del model # remove to demonstrate saving and loading - -# %% -model = PPO.load(model_name) - -obs = env.reset() -while True: - action, _states = model.predict(obs) - obs, rewards, done, info = env.step(action) - env.render(mode='post') - if done: - break - -env.close(filestr='render/'+model_name) - -# %% diff --git a/scratch/etienne/intersimple/ppo_speed_random.py b/scratch/etienne/intersimple/ppo_speed_random.py deleted file mode 100644 index 1c5b55f..0000000 --- a/scratch/etienne/intersimple/ppo_speed_random.py +++ /dev/null @@ -1,43 +0,0 @@ -# %% -from stable_baselines3 import PPO -from intersim.envs.intersimple import IntersimpleFlatRandomAgent, Reward, RewardVisualization, speed_reward -import functools - -model_name = "ppo_speed_random" - -class IntersimpleRewardRandom(RewardVisualization, Reward, IntersimpleFlatRandomAgent): - """`IntersimpleFlatAgent` with rewards.""" - pass - -env = IntersimpleRewardRandom( - reward=functools.partial( - speed_reward, - collision_penalty=0 - ) -) - -# %% -model = PPO( - "MlpPolicy", env, - verbose=1, - batch_size=2048, -) -model.learn(total_timesteps=2e5) -model.save(model_name) - -print('Done training.') - -del model # remove to demonstrate saving and loading - -# %% -model = PPO.load(model_name) - -obs = env.reset() -while True: - action, _states = model.predict(obs) - obs, rewards, done, info = env.step(action) - env.render(mode='post') - if done: - break - -env.close(filestr='render/'+model_name) diff --git a/scratch/etienne/intersimple/ppo_tspeed.py b/scratch/etienne/intersimple/ppo_tspeed.py deleted file mode 100644 index 2d8fc04..0000000 --- a/scratch/etienne/intersimple/ppo_tspeed.py +++ /dev/null @@ -1,39 +0,0 @@ -# %% -from stable_baselines3 import PPO -from stable_baselines3.common.env_util import make_vec_env -from intersim.envs.intersimple import IntersimpleTargetSpeedAgent - -model_name = "ppo_tspeed" - -env = IntersimpleTargetSpeedAgent( - agent=51, - target_speed=10, - speed_penalty_weight=0.001, - collision_penalty=1000 -) - -# %% -model = PPO( - "MlpPolicy", env, - learning_rate=3e-6, - verbose=1, -) -model.learn(total_timesteps=2e5) -model.save(model_name) - -print('Done training.') - -del model # remove to demonstrate saving and loading - -# %% -model = PPO.load(model_name) - -obs = env.reset() -while True: - action, _states = model.predict(obs) - obs, rewards, done, info = env.step(action) - env.render(mode='post') - if done: - break - -env.close(filestr='render/'+model_name) diff --git a/scratch/etienne/intersimple/ppo_tspeed_random.py b/scratch/etienne/intersimple/ppo_tspeed_random.py deleted file mode 100644 index 46c9843..0000000 --- a/scratch/etienne/intersimple/ppo_tspeed_random.py +++ /dev/null @@ -1,31 +0,0 @@ -# %% -from stable_baselines3 import PPO -from stable_baselines3.common.env_util import make_vec_env -from intersim.envs.intersimple import IntersimpleTargetSpeedRandom - -model_name = "ppo_tspeed_random" - -# %% -env = IntersimpleTargetSpeedRandom(target_speed=10) - -# %% -model = PPO("MlpPolicy", env, verbose=1) -model.learn(total_timesteps=250000) -model.save(model_name) - -print('Done training.') - -del model # remove to demonstrate saving and loading - -# %% -model = PPO.load(model_name) - -obs = env.reset() -while True: - action, _states = model.predict(obs) - obs, rewards, done, info = env.step(action) - env.render(mode='post') - if done: - break - -env.close() diff --git a/scratch/etienne/intersimple/render/gail_options_image_ani.mp4 b/scratch/etienne/intersimple/render/gail_options_image_ani.mp4 deleted file mode 100644 index 830d7a6..0000000 Binary files a/scratch/etienne/intersimple/render/gail_options_image_ani.mp4 and /dev/null differ diff --git a/scratch/etienne/intersimple/render/gail_options_image_observation.mp4 b/scratch/etienne/intersimple/render/gail_options_image_observation.mp4 deleted file mode 100644 index 7937fa8..0000000 Binary files a/scratch/etienne/intersimple/render/gail_options_image_observation.mp4 and /dev/null differ diff --git a/scratch/etienne/intersimple/render_env_from_model.py b/scratch/etienne/intersimple/render_env_from_model.py deleted file mode 100644 index 0214667..0000000 --- a/scratch/etienne/intersimple/render_env_from_model.py +++ /dev/null @@ -1,33 +0,0 @@ - -import stable_baselines3 as sb3 -from intersim.envs.intersimple import NRasterized - - -def render_env(model_name='gail_image_multiagent_nocollision', agent=51, environment=NRasterized): - """ - Render a video from an model, agent, and environment - Args: - model_name (str): name of the model - agent (int): agent to start the video from - environment (gym.Env): gym environment class to render environment on - """ - - model = sb3.PPO.load(model_name) - - env = environment(stop_on_collision=False, width=36, height=36, m_per_px=2, agent=agent) - - obs = env.reset() - i=0 - while True and i < 600: - i+=1 - action, _states = model.predict(obs) - obs, rewards, done, info = env.step(action) - env.render(mode='post') - if done: - break - - env.close(filestr='render/'+model_name+'_agent%i'%(agent)) - -if __name__ == '__main__': - import fire - fire.Fire(render_env) \ No newline at end of file diff --git a/scratch/etienne/intersimple/train_discrim.py b/scratch/etienne/intersimple/train_discrim.py deleted file mode 100644 index 71a3140..0000000 --- a/scratch/etienne/intersimple/train_discrim.py +++ /dev/null @@ -1,71 +0,0 @@ -# %% -import sys -sys.path.append('../../../') - -import pickle -import imitation.data.rollout as rollout -import imitation.data.types as types -import torch -from gail.envs import TLNRasterizedRouteRandomAgentLocation -import tempfile -import pathlib -from imitation.util import logger -from stable_baselines3.common.vec_env.dummy_vec_env import DummyVecEnv -from imitation.algorithms import adversarial -from src.discriminator import CnnDiscriminator -import stable_baselines3 -from tqdm import tqdm - -with open("data/NormalizedIntersimpleExpertMu.001N50000_TLNRasterizedRouteRandomAgentLocationw70h70mppx1mu.001rskips50.pkl", "rb") as f: - trajectories = pickle.load(f) -transitions = rollout.flatten_trajectories(trajectories) - -# %% -env_settings = {'width': 70, 'height': 70, 'm_per_px': 1, 'mu': 0.001, 'random_skip': True, 'max_episode_steps': 200} -env = TLNRasterizedRouteRandomAgentLocation(**env_settings) - -tempdir = tempfile.TemporaryDirectory(prefix="quickstart") -tempdir_path = pathlib.Path(tempdir.name) -logger.configure(tempdir_path / "GAIL/") -print(f"All Tensorboards and logging are being written inside {tempdir_path}/.") - -expert_batch_size = 4096 - -venv = DummyVecEnv([lambda: env]) -discriminator = adversarial.GAIL( - expert_data=transitions, - expert_batch_size=expert_batch_size, - #discrim_kwargs={'discrim_net': NoisyDiscriminator(venv, std=0.25)}, - disc_opt_cls=torch.optim.RMSprop, - disc_opt_kwargs={'lr': 0.0001, 'weight_decay': 0.003}, - discrim_kwargs={'discrim_net': CnnDiscriminator(venv)}, - venv=venv, # unused - gen_algo=stable_baselines3.PPO("CnnPolicy", venv), # unused -) - -expert_data_loader = torch.utils.data.DataLoader( - transitions, - batch_size=expert_batch_size, - collate_fn=types.transitions_collate_fn, - shuffle=True, - drop_last=True, -) - -gen_data_loader = torch.utils.data.DataLoader( - transitions, - batch_size=expert_batch_size, - collate_fn=types.transitions_collate_fn, - shuffle=True, - drop_last=True, -) - -# %% -epochs = 1000 -for i in tqdm(range(epochs)): - for expert_samples, gen_samples in zip(expert_data_loader, gen_data_loader): - # randomly corrupt actions - gen_samples['acts'] = -1 + 2 * torch.rand(*gen_samples['acts'].shape) - - discriminator.train_disc(expert_samples=expert_samples, gen_samples=gen_samples) - - torch.save(discriminator.discrim_net.state_dict(), 'train_discrim.pt') diff --git a/scratch/etienne/intersimple/trpo_speed_lidar.py b/scratch/etienne/intersimple/trpo_speed_lidar.py deleted file mode 100644 index 74c5413..0000000 --- a/scratch/etienne/intersimple/trpo_speed_lidar.py +++ /dev/null @@ -1,52 +0,0 @@ -# %% -from sb3_contrib import TRPO -from intersim.envs import IntersimpleLidarFlat -from intersim.envs.intersimple import speed_reward -import functools - -model_name = "trpo_speed_lidar" - -#def reward(state, action, info): -# speed = state[2].item() -# r = speed if speed < 10 else (10 - 5 * (speed - 10)) -# return 0.1 * r - -env = IntersimpleLidarFlat( - n_rays=5, - agent=51, - reward=functools.partial( - speed_reward, - collision_penalty=0 - ), -) - -# %% -model = TRPO( - "MlpPolicy", env, - learning_rate=1e-4, - verbose=1, - tensorboard_log='runs/', - #use_sde=True, - #sde_sample_freq=4, -) -model.learn(total_timesteps=1000000) -model.save(model_name) - -print('Done training.') - -del model # remove to demonstrate saving and loading - -# %% -model = TRPO.load(model_name) - -obs = env.reset() -while True: - action, _states = model.predict(obs) - obs, rewards, done, info = env.step(action) - env.render(mode='post') - if done: - break - -env.close(filestr='render/'+model_name) - -# %% diff --git a/scratch/etienne/pillbox/intersim_advil.ipynb b/scratch/etienne/pillbox/intersim_advil.ipynb deleted file mode 100644 index a4cf5ac..0000000 --- a/scratch/etienne/pillbox/intersim_advil.ipynb +++ /dev/null @@ -1,274 +0,0 @@ -{ - "cells": [ - { - "cell_type": "code", - "execution_count": 1, - "source": [ - "%cd learners" - ], - "outputs": [ - { - "output_type": "stream", - "name": "stdout", - "text": [ - "/home/buehrle/dev/InteractionImitation/scratch/etienne/pillbox/learners\n" - ] - } - ], - "metadata": {} - }, - { - "cell_type": "code", - "execution_count": 2, - "source": [ - "%load_ext autoreload\n", - "%autoreload 2" - ], - "outputs": [], - "metadata": {} - }, - { - "cell_type": "code", - "execution_count": 3, - "source": [ - "import torch" - ], - "outputs": [], - "metadata": {} - }, - { - "cell_type": "code", - "execution_count": 5, - "source": [ - "from intersim_advil import IntersimPolicy, IntersimDiscriminator\n", - "from train import train_advil\n", - "\n", - "pi = train_advil(\n", - " 'intersim:intersim-v0',\n", - " policy_class=IntersimPolicy,\n", - " discriminator_class=IntersimDiscriminator,\n", - " iters=1500,\n", - " lr_pi=2e-5,\n", - " lr_f=8e-4,\n", - ")" - ], - "outputs": [ - { - "output_type": "stream", - "name": "stdout", - "text": [ - "Vehicle Trajectory Paths: datasets/trackfiles/DR_USA_Roundabout_FT/vehicle_tracks_000.csv\n", - "Map Path: datasets/maps/DR_USA_Roundabout_FT.osm\n" - ] - }, - { - "output_type": "stream", - "name": "stderr", - "text": [ - " 0%| | 1/1500 [00:00<13:48, 1.81it/s]" - ] - }, - { - "output_type": "stream", - "name": "stdout", - "text": [ - "pi loss: 0.8109868082717183\n", - "mse reg: 0.9072583226644249\n", - "f loss: -0.0031385235927202104\n" - ] - }, - { - "output_type": "stream", - "name": "stderr", - "text": [ - " 7%|███████ | 101/1500 [02:08<42:38, 1.83s/it]" - ] - }, - { - "output_type": "stream", - "name": "stdout", - "text": [ - "pi loss: 1.302757262220359\n", - "mse reg: 0.7177222434486094\n", - "f loss: -0.13115944605799967\n" - ] - }, - { - "output_type": "stream", - "name": "stderr", - "text": [ - " 10%|██████████▍ | 151/1500 [03:05<22:08, 1.02it/s]/workspaces/pillbox/learners/advil.py:118: UserWarning: torch.nn.utils.clip_grad_norm is now deprecated in favor of torch.nn.utils.clip_grad_norm_.\n", - " torch.nn.utils.clip_grad_norm(pi.parameters(), 40.0)\n", - "/workspaces/pillbox/learners/advil.py:145: UserWarning: torch.nn.utils.clip_grad_norm is now deprecated in favor of torch.nn.utils.clip_grad_norm_.\n", - " torch.nn.utils.clip_grad_norm(f.parameters(), 40.0)\n", - " 13%|█████████████▉ | 201/1500 [03:55<20:10, 1.07it/s]" - ] - }, - { - "output_type": "stream", - "name": "stdout", - "text": [ - "pi loss: 7.271015700900185\n", - "mse reg: 0.5915718820988135\n", - "f loss: -1.4101360479975682\n" - ] - }, - { - "output_type": "stream", - "name": "stderr", - "text": [ - " 18%|██████████████████▋ | 269/1500 [04:58<22:45, 1.11s/it]\n" - ] - }, - { - "output_type": "error", - "ename": "KeyboardInterrupt", - "evalue": "", - "traceback": [ - "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", - "\u001b[0;31mKeyboardInterrupt\u001b[0m Traceback (most recent call last)", - "\u001b[0;32m/tmp/ipykernel_3776/4238306702.py\u001b[0m in \u001b[0;36m\u001b[0;34m\u001b[0m\n\u001b[1;32m 2\u001b[0m \u001b[0;32mfrom\u001b[0m \u001b[0mtrain\u001b[0m \u001b[0;32mimport\u001b[0m \u001b[0mtrain_advil\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 3\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 4\u001b[0;31m pi = train_advil(\n\u001b[0m\u001b[1;32m 5\u001b[0m \u001b[0;34m'intersim:intersim-v0'\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 6\u001b[0m \u001b[0mpolicy_class\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mIntersimPolicy\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;32m/workspaces/pillbox/learners/train.py\u001b[0m in \u001b[0;36mtrain_advil\u001b[0;34m(env, policy_class, discriminator_class, iters, lr_pi, lr_f)\u001b[0m\n\u001b[1;32m 188\u001b[0m \u001b[0mbatch_size\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;36m1024\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 189\u001b[0m )\n\u001b[0;32m--> 190\u001b[0;31m pi = advil_training(\n\u001b[0m\u001b[1;32m 191\u001b[0m \u001b[0mexpert_data\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 192\u001b[0m \u001b[0mvenv\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;32m/workspaces/pillbox/learners/advil.py\u001b[0m in \u001b[0;36madvil_training\u001b[0;34m(data_loader, env, iters, policy_class, discriminator_class, lr_pi, lr_f)\u001b[0m\n\u001b[1;32m 215\u001b[0m \u001b[0;31m# acts = (((acts - low) / (high - low)) * 2.0) - 1.0\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 216\u001b[0m \u001b[0mpi_loss\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mmse_reg\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mpi_update\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mobs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0macts\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mpi\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mf\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mpi_opt\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mt\u001b[0m\u001b[0;34m/\u001b[0m\u001b[0miters\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 217\u001b[0;31m \u001b[0mf_loss\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mf_update\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mobs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0macts\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mpi\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mf\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mf_opt\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mt\u001b[0m\u001b[0;34m/\u001b[0m\u001b[0miters\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 218\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mt\u001b[0m \u001b[0;34m%\u001b[0m \u001b[0;36m100\u001b[0m \u001b[0;34m==\u001b[0m \u001b[0;36m0\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 219\u001b[0m \u001b[0mprint\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m\"pi loss:\"\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mpi_loss\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;32m/workspaces/pillbox/learners/advil.py\u001b[0m in \u001b[0;36mf_update\u001b[0;34m(obs, acts, pi, f, f_opt, prog)\u001b[0m\n\u001b[1;32m 141\u001b[0m \u001b[0mf_opt\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mzero_grad\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 142\u001b[0m \u001b[0mf_loss\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mf_expert\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mmean\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;34m-\u001b[0m \u001b[0mf_learner\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mmean\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;31m# + 10 * gp\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 143\u001b[0;31m \u001b[0mf_loss\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mbackward\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 144\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mprog\u001b[0m \u001b[0;34m>\u001b[0m \u001b[0;36m0.1\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 145\u001b[0m \u001b[0mtorch\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mnn\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mutils\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mclip_grad_norm\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mf\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mparameters\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;36m40.0\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;32m/workspaces/pillbox/.venv/lib/python3.9/site-packages/torch/_tensor.py\u001b[0m in \u001b[0;36mbackward\u001b[0;34m(self, gradient, retain_graph, create_graph, inputs)\u001b[0m\n\u001b[1;32m 253\u001b[0m \u001b[0mcreate_graph\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mcreate_graph\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 254\u001b[0m inputs=inputs)\n\u001b[0;32m--> 255\u001b[0;31m \u001b[0mtorch\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mautograd\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mbackward\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mgradient\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mretain_graph\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mcreate_graph\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0minputs\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0minputs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 256\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 257\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0mregister_hook\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mhook\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;32m/workspaces/pillbox/.venv/lib/python3.9/site-packages/torch/autograd/__init__.py\u001b[0m in \u001b[0;36mbackward\u001b[0;34m(tensors, grad_tensors, retain_graph, create_graph, grad_variables, inputs)\u001b[0m\n\u001b[1;32m 145\u001b[0m \u001b[0mretain_graph\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mcreate_graph\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 146\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 147\u001b[0;31m Variable._execution_engine.run_backward(\n\u001b[0m\u001b[1;32m 148\u001b[0m \u001b[0mtensors\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mgrad_tensors_\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mretain_graph\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mcreate_graph\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0minputs\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 149\u001b[0m allow_unreachable=True, accumulate_grad=True) # allow_unreachable flag\n", - "\u001b[0;31mKeyboardInterrupt\u001b[0m: " - ] - } - ], - "metadata": { - "scrolled": true, - "tags": [] - } - }, - { - "cell_type": "code", - "execution_count": 12, - "source": [ - "torch.save(pi.state_dict(), 'intersim:intersim-v0/advil_policy.pt')" - ], - "outputs": [], - "metadata": {} - }, - { - "cell_type": "code", - "execution_count": 13, - "source": [ - "# pi = IntersimPolicy(env=None)\n", - "# pi.load_state_dict(torch.load('intersim:intersim-v0/advil_policy.pt'))" - ], - "outputs": [], - "metadata": {} - }, - { - "cell_type": "code", - "execution_count": 19, - "source": [ - "import gym\n", - "from tqdm import tqdm\n", - "\n", - "def rollout(pi, max_steps=1000):\n", - " env = gym.make('intersim:intersim-v0')\n", - " obs, _ = env.reset()\n", - " \n", - " _except = lambda o, i: torch.cat((o[:i], o[i+1:]))\n", - " \n", - " _relative_state_v = lambda obs: torch.stack((\n", - " obs[..., 0],\n", - " obs[..., 1],\n", - " (obs[..., 2]**2 + obs[..., 3]**2).sqrt(),\n", - " obs[..., 4],\n", - " obs[..., 5],\n", - " ), -1)\n", - " \n", - " for i in tqdm(range(max_steps)):\n", - " pi_obs = torch.stack(tuple(\n", - " torch.cat((e.unsqueeze(0), _relative_state_v(_except(o, i))))\n", - " for i, (e, o) in enumerate(zip(obs['state'], obs['relative_state']))\n", - " ))\n", - " \n", - " actions = pi(pi_obs)\n", - " obs, _, done, _ = env.step(actions)\n", - " env.render(mode='post')\n", - " if done:\n", - " break\n", - " env.close()" - ], - "outputs": [], - "metadata": {} - }, - { - "cell_type": "code", - "execution_count": 20, - "source": [ - "pi.eval()\n", - "rollout(pi, max_steps=200)" - ], - "outputs": [ - { - "output_type": "stream", - "name": "stdout", - "text": [ - "Vehicle Trajectory Paths: datasets/trackfiles/DR_USA_Roundabout_FT/vehicle_tracks_000.csv\n", - "Map Path: datasets/maps/DR_USA_Roundabout_FT.osm\n", - "Environment Reset\n" - ] - }, - { - "output_type": "stream", - "name": "stderr", - "text": [ - "100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████| 200/200 [00:12<00:00, 15.53it/s]\n" - ] - }, - { - "output_type": "display_data", - "data": { - "text/plain": [ - "
" - ], - "image/png": "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" - }, - "metadata": { - "needs_background": "light" - } - } - ], - "metadata": { - "scrolled": true, - "tags": [] - } - }, - { - "cell_type": "code", - "execution_count": null, - "source": [], - "outputs": [], - "metadata": {} - } - ], - "metadata": { - "kernelspec": { - "name": "python3", - "display_name": "Python 3.7.5 64-bit ('.venv': venv)" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.7.5" - }, - "interpreter": { - "hash": "56465d2ea10f338edb3d30adb010c5849fd826fffc543ba31360f3db8b47a703" - } - }, - "nbformat": 4, - "nbformat_minor": 5 -} \ No newline at end of file diff --git a/scratch/etienne/pillbox/intersim_demos.ipynb b/scratch/etienne/pillbox/intersim_demos.ipynb deleted file mode 100644 index 7d4cc31..0000000 --- a/scratch/etienne/pillbox/intersim_demos.ipynb +++ /dev/null @@ -1,249 +0,0 @@ -{ - "cells": [ - { - "cell_type": "code", - "execution_count": 2, - "source": [ - "%cd learners" - ], - "outputs": [ - { - "output_type": "stream", - "name": "stdout", - "text": [ - "/home/buehrle/dev/InteractionImitation/scratch/etienne/pillbox/learners\n" - ] - } - ], - "metadata": {} - }, - { - "cell_type": "code", - "execution_count": 3, - "source": [ - "%load_ext autoreload\n", - "%autoreload 2" - ], - "outputs": [], - "metadata": {} - }, - { - "cell_type": "code", - "execution_count": 1, - "source": [ - "import torch\n", - "import numpy as np" - ], - "outputs": [], - "metadata": {} - }, - { - "cell_type": "code", - "execution_count": 9, - "source": [ - "# save expert demos to ../experts/Intersim/demos.npz\n", - "# make sure to split different experts up\n", - "\n", - "from intersim.envs.simulator import InteractionSimulator\n", - "from intersim.utils import get_map_path, get_svt, SVT_to_stateactions\n", - "import gym\n", - "from tqdm import tqdm\n", - "\n", - "def pillbox_demo(observations, actions, rewards):\n", - " demo = {\n", - " 'env': 'intersim:intersim-v0',\n", - " 'num_trajs': len(observations),\n", - " 'mean_reward': rewards.mean(),\n", - " 'std_reward': rewards.std(),\n", - " }\n", - " demo.update({\n", - " str(i): {\n", - " 'states': o,\n", - " 'actions': a,\n", - " } for i, (o, a) in enumerate(zip(observations, actions))\n", - " })\n", - " return demo\n", - "\n", - "def intersim_expert_demos(loc, track):\n", - " svt, svt_path = get_svt(loc, track)\n", - " osm = get_map_path(loc)\n", - " \n", - " n_actors = svt.simstate.size(1)\n", - " observations = []\n", - " actions = [] ##\n", - " #states, actions = SVT_to_stateactions(svt) ##\n", - " rewards = []\n", - " \n", - " print('Simulating')\n", - " env = gym.make('intersim:intersim-v0', svt=svt, map_path=osm)\n", - " obs, info = env.reset()\n", - " for s in tqdm(svt.simstate[1:]): ##\n", - " #for a in actions: ##\n", - " relative_state = torch.stack((\n", - " obs['relative_state'][..., 0],\n", - " obs['relative_state'][..., 1],\n", - " (obs['relative_state'][..., 2]**2 + obs['relative_state'][..., 3]**2).sqrt(),\n", - " obs['relative_state'][..., 4],\n", - " obs['relative_state'][..., 5],\n", - " ), -1)\n", - " observations.append(torch.cat((\n", - " obs['state'].unsqueeze(1),\n", - " relative_state,\n", - " ), 1))\n", - " obs, r, done, info = env.step(env.target_state(s, mu=.01))\n", - " #obs, r, done, info = env.step(a) ##\n", - " actions.append(info['action_taken'])\n", - " rewards.append(r)\n", - " assert not done, 'Episode terminated during expert demonstration.'\n", - "\n", - " _except_idx = lambda o, i: torch.cat((o[:i], o[i+1:]))\n", - " \n", - " # transpose to per-agent observations and actions\n", - " print('Transposing')\n", - " observations = [torch.stack([_except_idx(o[i], i+1) for o in observations]) for i in range(n_actors)]\n", - " actions = [torch.stack([a[i] for a in actions]) for i in range(n_actors)]\n", - " \n", - " print('Trimming')\n", - " # trim observations and actions to start/end of trajectory\n", - " _alive = lambda o: (~o.isnan().all(2).all(1)).nonzero()\n", - " _start = lambda o: _alive(o).min()\n", - " _end = lambda o: _alive(o).max() + 1\n", - " start_end = [(_start(obs), _end(obs)) for obs in observations]\n", - " observations = [obs[start:end] for obs, (start, end) in zip(observations, start_end)]\n", - " actions = [act[start:end] for act, (start, end) in zip(actions, start_end)]\n", - " \n", - " #print('Cropping')\n", - " ## crop observations to max number of observations\n", - " #max_num_obs = max([(~obs.isnan().all(2)).sum(1).max() for obs in observations])\n", - " #observations = [obs[:, :max_num_obs] for obs in observations]\n", - " \n", - " observations = [o.numpy() for o in observations]\n", - " actions = [a.numpy() for a in actions]\n", - " rewards = np.array(rewards)\n", - " \n", - " return pillbox_demo(observations, actions, rewards)" - ], - "outputs": [], - "metadata": {} - }, - { - "cell_type": "code", - "execution_count": 10, - "source": [ - "demos = intersim_expert_demos(loc=0, track=0)" - ], - "outputs": [ - { - "output_type": "stream", - "name": "stdout", - "text": [ - "Simulating\n", - "Custom Vehicle Trajectory Paths\n", - "Map Path: datasets/maps/DR_USA_Roundabout_FT.osm\n", - "Environment Reset\n" - ] - }, - { - "output_type": "stream", - "name": "stderr", - "text": [ - "100%|███████████████████████████████████████████████████████████████████████████████████████████████████████| 3006/3006 [01:17<00:00, 38.87it/s]\n" - ] - }, - { - "output_type": "stream", - "name": "stdout", - "text": [ - "Transposing\n", - "Trimming\n" - ] - } - ], - "metadata": { - "scrolled": true, - "tags": [ - "outputPrepend" - ] - } - }, - { - "cell_type": "code", - "execution_count": 6, - "source": [ - "demos['num_trajs']" - ], - "outputs": [ - { - "output_type": "execute_result", - "data": { - "text/plain": [ - "151" - ] - }, - "metadata": {}, - "execution_count": 6 - } - ], - "metadata": {} - }, - { - "cell_type": "code", - "execution_count": 7, - "source": [ - "demos['25']['states'].shape" - ], - "outputs": [ - { - "output_type": "execute_result", - "data": { - "text/plain": [ - "(71, 151, 5)" - ] - }, - "metadata": {}, - "execution_count": 7 - } - ], - "metadata": {} - }, - { - "cell_type": "code", - "execution_count": 8, - "source": [ - "np.savez('../experts/intersim:intersim-v0/demos.npz', **demos)" - ], - "outputs": [], - "metadata": {} - }, - { - "cell_type": "code", - "execution_count": null, - "source": [], - "outputs": [], - "metadata": {} - } - ], - "metadata": { - "kernelspec": { - "name": "python3", - "display_name": "Python 3.7.5 64-bit ('.venv': venv)" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.7.5" - }, - "interpreter": { - "hash": "56465d2ea10f338edb3d30adb010c5849fd826fffc543ba31360f3db8b47a703" - } - }, - "nbformat": 4, - "nbformat_minor": 4 -} \ No newline at end of file diff --git a/scratch/etienne/pillbox/intersim_expert.ipynb b/scratch/etienne/pillbox/intersim_expert.ipynb deleted file mode 100644 index 199c1a5..0000000 --- a/scratch/etienne/pillbox/intersim_expert.ipynb +++ /dev/null @@ -1,168 +0,0 @@ -{ - "cells": [ - { - "cell_type": "code", - "execution_count": 2, - "source": [ - "%cd learners" - ], - "outputs": [ - { - "output_type": "stream", - "name": "stdout", - "text": [ - "[Errno 2] No such file or directory: 'learners'\n", - "/home/buehrle/dev/InteractionImitation/scratch/etienne/pillbox/learners\n" - ] - } - ], - "metadata": {} - }, - { - "cell_type": "code", - "execution_count": null, - "source": [ - "import gym\n", - "from tqdm import tqdm\n", - "\n", - "def rollout(pi, max_steps=1000):\n", - " env = gym.make('intersim:intersim-v0')\n", - " env.reset() # obs = env.reset()\n", - " obs, _, done, _ = env.step(0 * env.action_space.sample())\n", - " \n", - " _except = lambda o, i: torch.cat((o[:i], o[i+1:]))\n", - " \n", - " _relative_state_v = lambda obs: torch.stack((\n", - " obs[..., 0],\n", - " obs[..., 1],\n", - " (obs[..., 2]**2 + obs[..., 3]**2).sqrt(),\n", - " obs[..., 4],\n", - " obs[..., 5],\n", - " ), -1)\n", - " \n", - " for _ in tqdm(range(max_steps)):\n", - " pi_obs = [\n", - " torch.cat((e.unsqueeze(0), _relative_state_v(_except(o, i)))).unsqueeze(0)\n", - " for i, (e, o) in enumerate(zip(obs['state'], obs['relative_state']))\n", - " ]\n", - " \n", - " actions = [pi(o).squeeze() for o in pi_obs]\n", - " actions = torch.stack(actions).unsqueeze(1)\n", - " obs, _, done, _ = env.step(actions)\n", - " env.render(mode='post')\n", - " if done:\n", - " break\n", - " env.close()" - ], - "outputs": [], - "metadata": {} - }, - { - "cell_type": "code", - "execution_count": 4, - "source": [ - "import torch\n", - "import numpy as np\n", - "\n", - "def expert(obs):\n", - " ego = obs[:, 0]\n", - " rel = obs[:, 1:]\n", - " front = torch.stack((torch.cos(ego[:, 3]), torch.sin(ego[:, 3])), -1)\n", - " left = torch.stack((-torch.sin(ego[:, 3]), torch.cos(ego[:, 3])), -1)\n", - " df = (rel[:, :, :2] * front.unsqueeze(1)).sum(-1)\n", - " dl = (rel[:, :, :2] * left.unsqueeze(1)).sum(-1)\n", - "\n", - " df = torch.where(df.isnan(), np.inf * torch.ones_like(df), df)\n", - " dl = torch.where(dl.isnan(), np.inf * torch.ones_like(dl), dl)\n", - " rel = torch.where(rel.isnan(), np.inf * torch.ones_like(rel), rel)\n", - "\n", - " # relative speed in direction of position difference vector\n", - " vrel = rel[:, :, 2] * (rel[:, :, :2] * torch.stack((\n", - " torch.cos(ego[:, 3].unsqueeze(1) + rel[:, :, 3]),\n", - " torch.sin(ego[:, 3].unsqueeze(1) + rel[:, :, 3])),\n", - " -1)).sum(-1)\n", - " vrel = torch.where(vrel.isnan(), np.inf * torch.ones_like(vrel), vrel)\n", - " vrel = torch.maximum(vrel, torch.zeros_like(vrel))\n", - " \n", - " alpha = torch.atan2(dl, df)\n", - " d = (rel[:, :, :2] ** 2).sum(-1)\n", - " attn = torch.exp(-torch.where(alpha > 0, 0.8*alpha, 1*alpha)**2 - 0.01 * d - 0.1*vrel) \n", - " \n", - " act = 10 - ego[:, 2] - 20 * attn.sum(-1)\n", - " \n", - " return act" - ], - "outputs": [], - "metadata": {} - }, - { - "cell_type": "code", - "execution_count": 5, - "source": [ - "rollout(expert, max_steps=500)" - ], - "outputs": [ - { - "output_type": "stream", - "name": "stdout", - "text": [ - "Vehicle Trajectory Paths: /home/buehrle/dev/InteractionImitation/InteractionSimulator/datasets/trackfiles/DR_USA_Roundabout_FT/vehicle_tracks_000.csv\n", - "Map Path: /home/buehrle/dev/InteractionImitation/InteractionSimulator/datasets/maps/DR_USA_Roundabout_FT.osm\n", - "Environment Reset\n" - ] - }, - { - "output_type": "stream", - "name": "stderr", - "text": [ - " 0%| | 0/500 [00:00\u001b[0;34m\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0mrollout\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mexpert\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mmax_steps\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;36m500\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m", - "\u001b[0;32m/tmp/ipykernel_4266/1839273282.py\u001b[0m in \u001b[0;36mrollout\u001b[0;34m(pi, max_steps)\u001b[0m\n\u001b[1;32m 12\u001b[0m pi_obs = [\n\u001b[1;32m 13\u001b[0m \u001b[0mtorch\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mcat\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0me\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0munsqueeze\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;36m0\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0m_except_self\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mo\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mi\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0munsqueeze\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;36m0\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 14\u001b[0;31m \u001b[0;32mfor\u001b[0m \u001b[0mi\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m(\u001b[0m\u001b[0me\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mo\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;32min\u001b[0m \u001b[0menumerate\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mzip\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mobs\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m'state'\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mobs\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m'relative_state'\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 15\u001b[0m ]\n\u001b[1;32m 16\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;32m/tmp/ipykernel_4266/1839273282.py\u001b[0m in \u001b[0;36m\u001b[0;34m(.0)\u001b[0m\n\u001b[1;32m 12\u001b[0m pi_obs = [\n\u001b[1;32m 13\u001b[0m \u001b[0mtorch\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mcat\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0me\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0munsqueeze\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;36m0\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0m_except_self\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mo\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mi\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0munsqueeze\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;36m0\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 14\u001b[0;31m \u001b[0;32mfor\u001b[0m \u001b[0mi\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m(\u001b[0m\u001b[0me\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mo\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;32min\u001b[0m \u001b[0menumerate\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mzip\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mobs\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m'state'\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mobs\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m'relative_state'\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 15\u001b[0m ]\n\u001b[1;32m 16\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;31mRuntimeError\u001b[0m: torch.cat(): Sizes of tensors must match except in dimension 0. Got 5 and 6 in dimension 1 (The offending index is 1)" - ] - } - ], - "metadata": {} - }, - { - "cell_type": "code", - "execution_count": null, - "source": [], - "outputs": [], - "metadata": {} - } - ], - "metadata": { - "kernelspec": { - "name": "python3", - "display_name": "Python 3.7.5 64-bit ('.venv': venv)" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.7.5" - }, - "interpreter": { - "hash": "56465d2ea10f338edb3d30adb010c5849fd826fffc543ba31360f3db8b47a703" - } - }, - "nbformat": 4, - "nbformat_minor": 5 -} \ No newline at end of file diff --git a/scratch/etienne/pillbox/intersim_stats.ipynb b/scratch/etienne/pillbox/intersim_stats.ipynb deleted file mode 100644 index d6de466..0000000 --- a/scratch/etienne/pillbox/intersim_stats.ipynb +++ /dev/null @@ -1,2121 +0,0 @@ -{ - "cells": [ - { - "cell_type": "code", - "execution_count": 1, - "source": [ - "%cd learners" - ], - "outputs": [ - { - "output_type": "stream", - "name": "stdout", - "text": [ - "/home/buehrle/dev/InteractionImitation/scratch/etienne/pillbox/learners\n" - ] - } - ], - "metadata": {} - }, - { - "cell_type": "code", - "execution_count": 2, - "source": [ - "%load_ext autoreload\n", - "%autoreload 2" - ], - "outputs": [], - "metadata": {} - }, - { - "cell_type": "code", - "execution_count": 3, - "source": [ - "import matplotlib.pyplot as plt" - ], - "outputs": [], - "metadata": {} - }, - { - "cell_type": "code", - "execution_count": 6, - "source": [ - "import torch\n", - "import gym\n", - "from intersim.utils import get_map_path, get_svt, SVT_to_stateactions\n", - "\n", - "def data_sa(loc=0, track=0, actions=None):\n", - " \"\"\"Use given actions or compute using `SVT_to_stateactions`.\"\"\"\n", - " \n", - " svt, svt_path = get_svt(loc, track)\n", - " osm = get_map_path(loc)\n", - " \n", - " if actions is None:\n", - " _, actions = SVT_to_stateactions(svt)\n", - " \n", - " nna_observations = []\n", - " nna_actions = []\n", - " \n", - " env = gym.make('intersim:intersim-v0', svt=svt, map_path=osm)\n", - " obs, info = env.reset()\n", - " for action in tqdm(actions):\n", - " relative_state = torch.stack((\n", - " obs['relative_state'][..., 0],\n", - " obs['relative_state'][..., 1],\n", - " (obs['relative_state'][..., 2]**2 + obs['relative_state'][..., 3]**2).sqrt(),\n", - " obs['relative_state'][..., 4],\n", - " obs['relative_state'][..., 5],\n", - " ), -1)\n", - " observations = torch.cat((\n", - " obs['state'].unsqueeze(-2),\n", - " relative_state,\n", - " ), -2)\n", - " \n", - " nna = ~(observations.isnan().all(-1).all(-1))\n", - " nna_observations.append(observations[nna])\n", - " nna_actions.append(action[nna])\n", - " \n", - " obs, r, done, info = env.step(action)\n", - " assert not done, 'Episode terminated during expert demonstration.'\n", - " \n", - " observations = torch.cat(nna_observations)\n", - " actions = torch.cat(nna_actions)\n", - " return observations, actions" - ], - "outputs": [], - "metadata": {} - }, - { - "cell_type": "code", - "execution_count": 7, - "source": [ - "def simactions(loc, track, mu):\n", - " \"\"\"Compute simactions using `env.target_state`.\"\"\"\n", - " svt, svt_path = get_svt(loc, track)\n", - " osm = get_map_path(loc)\n", - " actions = []\n", - " \n", - " env = gym.make('intersim:intersim-v0', svt=svt, map_path=osm)\n", - " obs, info = env.reset()\n", - " for s in tqdm(svt.simstate[1:]):\n", - " obs, r, done, info = env.step(env.target_state(s, mu))\n", - " actions.append(info['action_taken'])\n", - " \n", - " return torch.stack(actions)" - ], - "outputs": [], - "metadata": {} - }, - { - "cell_type": "code", - "execution_count": 7, - "source": [ - "smooth_actions = simactions(loc=0, track=0, mu=.01)\n", - "smooth_actions.shape" - ], - "outputs": [ - { - "output_type": "stream", - "name": "stdout", - "text": [ - "Custom Vehicle Trajectory Paths\n", - "Map Path: datasets/maps/DR_USA_Roundabout_FT.osm\n", - "Environment Reset\n" - ] - }, - { - "output_type": "execute_result", - "data": { - "text/plain": [ - "torch.Size([3006, 151, 1])" - ] - }, - "metadata": {}, - "execution_count": 7 - } - ], - "metadata": {} - }, - { - "cell_type": "code", - "execution_count": 8, - "source": [ - "plt.plot(smooth_actions[:, 20, 0])" - ], - "outputs": [ - { - "output_type": "execute_result", - "data": { - "text/plain": [ - "[]" - ] - }, - "metadata": {}, - "execution_count": 8 - }, - { - "output_type": "display_data", - "data": { - "text/plain": [ - "
" - ], - "image/png": "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" - }, - "metadata": { - "needs_background": "light" - } - } - ], - "metadata": {} - }, - { - "cell_type": "code", - "execution_count": 9, - "source": [ - "for act in smooth_actions[:, :, 0].transpose(0, 1):\n", - " plt.plot(act)" - ], - "outputs": [ - { - "output_type": "display_data", - "data": { - "text/plain": [ - "
" - ], - "image/png": "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" - }, - "metadata": { - "needs_background": "light" - } - } - ], - "metadata": {} - }, - { - "cell_type": "code", - "execution_count": 10, - "source": [ - "smooth_observations2, smooth_actions2 = data_sa(loc=0, track=0, actions=smooth_actions)" - ], - "outputs": [ - { - "output_type": "stream", - "name": "stdout", - "text": [ - "Custom Vehicle Trajectory Paths\n", - "Map Path: datasets/maps/DR_USA_Roundabout_FT.osm\n", - "Environment Reset\n" - ] - } - ], - "metadata": {} - }, - { - "cell_type": "code", - "execution_count": 15, - "source": [ - "state_distribution(zip(smooth_observations2[:1000], smooth_actions2[:1000]))\n", - "plt.grid()" - ], - "outputs": [ - { - "output_type": "stream", - "name": "stderr", - "text": [ - "/tmp/ipykernel_25334/2885851852.py:4: UserWarning: To copy construct from a tensor, it is recommended to use sourceTensor.clone().detach() or sourceTensor.clone().detach().requires_grad_(True), rather than torch.tensor(sourceTensor).\n", - " obs = torch.tensor(obs)\n" - ] - }, - { - "output_type": "display_data", - "data": { - "text/plain": [ - "
" - ], - "image/png": "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" - }, - "metadata": { - "needs_background": "light" - } - } - ], - "metadata": {} - }, - { - "cell_type": "code", - "execution_count": 62, - "source": [ - "action_distribution(zip(smooth_observations2, smooth_actions2))" - ], - "outputs": [ - { - "output_type": "display_data", - "data": { - "text/plain": [ - "
" - ], - "image/png": "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" - }, - "metadata": { - "needs_background": "light" - } - } - ], - "metadata": {} - }, - { - "cell_type": "code", - "execution_count": null, - "source": [ - "from intersim.utils import get_svt, SVT_to_stateactions\n", - "svt, svt_path = get_svt(loc=0, track=0)\n", - "states, actions = SVT_to_stateactions(svt)\n", - "print(actions.shape)" - ], - "outputs": [], - "metadata": {} - }, - { - "cell_type": "code", - "execution_count": 20, - "source": [ - "plt.plot(actions[:, 20, 0])" - ], - "outputs": [ - { - "output_type": "execute_result", - "data": { - "text/plain": [ - "[]" - ] - }, - "metadata": {}, - "execution_count": 20 - }, - { - "output_type": "display_data", - "data": { - "text/plain": [ - "
" - ], - "image/png": "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" - }, - "metadata": { - "needs_background": "light" - } - } - ], - "metadata": {} - }, - { - "cell_type": "code", - "execution_count": null, - "source": [ - "for act in actions[:, :, 0].transpose(0, 1):\n", - " plt.plot(act)" - ], - "outputs": [], - "metadata": {} - }, - { - "cell_type": "code", - "execution_count": 41, - "source": [ - "data_observations, data_actions = data_sa()" - ], - "outputs": [ - { - "output_type": "stream", - "name": "stdout", - "text": [ - "Custom Vehicle Trajectory Paths\n", - "Map Path: datasets/maps/DR_USA_Roundabout_FT.osm\n", - "Environment Reset\n", - "Time: 13.6. Warning: requested action outside of bounds, being clamped\n", - "Time: 13.700000000000001. Warning: requested action outside of bounds, being clamped\n", - "Time: 13.8. Warning: requested action outside of bounds, being clamped\n", - "Time: 13.9. Warning: requested action outside of bounds, being clamped\n", - "Time: 14.0. Warning: requested action outside of bounds, being clamped\n", - "Time: 14.1. Warning: requested action outside of bounds, being clamped\n", - "Time: 14.200000000000001. Warning: requested action outside of bounds, being clamped\n", - "Time: 14.3. Warning: requested action outside of bounds, being clamped\n", - "Time: 14.4. Warning: requested action outside of bounds, being clamped\n", - "Time: 14.5. Warning: requested action outside of bounds, being clamped\n", - "Time: 14.6. Warning: requested action outside of bounds, being clamped\n", - "Time: 14.700000000000001. Warning: requested action outside of bounds, being clamped\n", - "Time: 14.8. Warning: requested action outside of bounds, being clamped\n", - "Time: 14.9. Warning: requested action outside of bounds, being clamped\n", - "Time: 15.0. Warning: requested action outside of bounds, being clamped\n", - "Time: 15.1. Warning: requested action outside of bounds, being clamped\n", - "Time: 15.200000000000001. Warning: requested action outside of bounds, being clamped\n", - "Time: 15.3. Warning: requested action outside of bounds, being clamped\n", - "Time: 15.4. Warning: requested action outside of bounds, being clamped\n", - "Time: 15.5. Warning: requested action outside of bounds, being clamped\n", - "Time: 15.6. Warning: requested action outside of bounds, being clamped\n", - "Time: 15.700000000000001. Warning: requested action outside of bounds, being clamped\n", - "Time: 15.8. Warning: requested action outside of bounds, being clamped\n", - "Time: 15.9. Warning: requested action outside of bounds, being clamped\n", - "Time: 16.0. Warning: requested action outside of bounds, being clamped\n", - "Time: 16.1. Warning: requested action outside of bounds, being clamped\n", - "Time: 16.200000000000003. Warning: requested action outside of bounds, being clamped\n", - "Time: 16.3. Warning: requested action outside of bounds, being clamped\n", - "Time: 16.400000000000002. Warning: requested action outside of bounds, being clamped\n", - "Time: 16.500000000000004. Warning: requested action outside of bounds, being clamped\n", - "Time: 16.6. Warning: requested action outside of bounds, being clamped\n", - "Time: 16.700000000000003. Warning: requested action outside of bounds, being clamped\n", - "Time: 16.8. Warning: requested action outside of bounds, being clamped\n", - "Time: 16.900000000000002. Warning: requested action outside of bounds, being clamped\n", - "Time: 17.000000000000004. Warning: requested action outside of bounds, being clamped\n", - "Time: 17.1. Warning: requested action outside of bounds, being clamped\n", - "Time: 17.200000000000003. Warning: requested action outside of bounds, being clamped\n", - "Time: 17.3. Warning: requested action outside of bounds, being clamped\n", - "Time: 17.400000000000002. Warning: requested action outside of bounds, being clamped\n", - "Time: 17.500000000000004. Warning: requested action outside of bounds, being clamped\n", - "Time: 17.6. Warning: requested action outside of bounds, being clamped\n", - "Time: 17.700000000000003. Warning: requested action outside of bounds, being clamped\n", - "Time: 17.8. Warning: requested action outside of bounds, being clamped\n", - "Time: 17.900000000000002. Warning: requested action outside of bounds, being clamped\n", - "Time: 18.000000000000004. Warning: requested action outside of bounds, being clamped\n", - "Time: 18.1. Warning: requested action outside of bounds, being clamped\n", - "Time: 18.200000000000003. Warning: requested action outside of bounds, being clamped\n", - "Time: 18.3. Warning: requested action outside of bounds, being clamped\n", - "Time: 18.400000000000002. Warning: requested action outside of bounds, being clamped\n", - "Time: 18.500000000000004. Warning: requested action outside of bounds, being clamped\n", - "Time: 18.6. Warning: requested action outside of bounds, being clamped\n", - "Time: 18.700000000000003. Warning: requested action outside of bounds, being clamped\n", - "Time: 18.8. Warning: requested action outside of bounds, being clamped\n", - "Time: 18.900000000000002. Warning: requested action outside of bounds, being clamped\n", - "Time: 19.000000000000004. Warning: requested action outside of bounds, being clamped\n", - "Time: 19.1. Warning: requested action outside of bounds, being clamped\n", - "Time: 19.200000000000003. Warning: requested action outside of bounds, being clamped\n", - "Time: 19.300000000000004. Warning: requested action outside of bounds, being clamped\n", - "Time: 19.400000000000002. Warning: requested action outside of bounds, being clamped\n", - "Time: 19.500000000000004. Warning: requested action outside of bounds, being clamped\n", - "Time: 19.6. Warning: requested action outside of bounds, being clamped\n", - "Time: 19.700000000000003. Warning: requested action outside of bounds, being clamped\n", - "Time: 19.800000000000004. Warning: requested action outside of bounds, being clamped\n", - "Time: 19.900000000000002. Warning: requested action outside of bounds, being clamped\n", - "Time: 20.000000000000004. Warning: requested action outside of bounds, being clamped\n", - "Time: 20.1. Warning: requested action outside of bounds, being clamped\n", - "Time: 20.200000000000003. Warning: requested action outside of bounds, being clamped\n", - "Time: 20.300000000000004. Warning: requested action outside of bounds, being clamped\n", - "Time: 20.400000000000002. Warning: requested action outside of bounds, being clamped\n", - "Time: 20.500000000000004. Warning: requested action outside of bounds, being clamped\n", - "Time: 20.6. Warning: requested action outside of bounds, being clamped\n", - "Time: 20.700000000000003. Warning: requested action outside of bounds, being clamped\n", - "Time: 20.800000000000004. Warning: requested action outside of bounds, being clamped\n", - "Time: 20.900000000000002. Warning: requested action outside of bounds, being clamped\n", - "Time: 21.000000000000004. Warning: requested action outside of bounds, being clamped\n", - "Time: 21.1. Warning: requested action outside of bounds, being clamped\n", - "Time: 21.200000000000003. Warning: requested action outside of bounds, being clamped\n", - "Time: 21.300000000000004. Warning: requested action outside of bounds, being clamped\n", - "Time: 21.400000000000002. Warning: requested action outside of bounds, being clamped\n", - "Time: 21.500000000000004. Warning: requested action outside of bounds, being clamped\n", - "Time: 21.6. Warning: requested action outside of bounds, being clamped\n", - "Time: 21.700000000000003. Warning: requested action outside of bounds, being clamped\n", - "Time: 21.800000000000004. Warning: requested action outside of bounds, being clamped\n", - "Time: 21.900000000000002. Warning: requested action outside of bounds, being clamped\n", - "Time: 22.000000000000004. Warning: requested action outside of bounds, being clamped\n", - "Time: 22.1. Warning: requested action outside of bounds, being clamped\n", - "Time: 22.200000000000003. Warning: requested action outside of bounds, being clamped\n", - "Time: 22.300000000000004. Warning: requested action outside of bounds, being clamped\n", - "Time: 22.400000000000002. Warning: requested action outside of bounds, being clamped\n", - "Time: 22.500000000000004. Warning: requested action outside of bounds, being clamped\n", - "Time: 22.6. Warning: requested action outside of bounds, being clamped\n", - "Time: 22.700000000000003. Warning: requested action outside of bounds, being clamped\n", - "Time: 22.800000000000004. Warning: requested action outside of bounds, being clamped\n", - "Time: 22.900000000000002. Warning: requested action outside of bounds, being clamped\n", - "Time: 23.000000000000004. Warning: requested action outside of bounds, being clamped\n", - "Time: 23.1. Warning: requested action outside of bounds, being clamped\n", - "Time: 23.200000000000003. Warning: requested action outside of bounds, being clamped\n", - "Time: 23.300000000000004. Warning: requested action outside of bounds, being clamped\n", - "Time: 23.400000000000002. Warning: requested action outside of bounds, being clamped\n", - "Time: 23.500000000000004. Warning: requested action outside of bounds, being clamped\n", - "Time: 23.6. Warning: requested action outside of bounds, being clamped\n", - "Time: 23.700000000000003. Warning: requested action outside of bounds, being clamped\n", - "Time: 23.800000000000004. Warning: requested action outside of bounds, being clamped\n", - "Time: 23.900000000000002. Warning: requested action outside of bounds, being clamped\n", - "Time: 24.000000000000004. Warning: requested action outside of bounds, being clamped\n", - "Time: 24.1. Warning: requested action outside of bounds, being clamped\n", - "Time: 24.200000000000003. Warning: requested action outside of bounds, being clamped\n", - "Time: 24.300000000000004. Warning: requested action outside of bounds, being clamped\n", - "Time: 24.400000000000002. Warning: requested action outside of bounds, being clamped\n", - "Time: 24.500000000000004. Warning: requested action outside of bounds, being clamped\n", - "Time: 24.6. Warning: requested action outside of bounds, being clamped\n", - "Time: 24.700000000000003. Warning: requested action outside of bounds, being clamped\n", - "Time: 24.800000000000004. Warning: requested action outside of bounds, being clamped\n", - "Time: 24.900000000000002. Warning: requested action outside of bounds, being clamped\n", - "Time: 25.000000000000004. Warning: requested action outside of bounds, being clamped\n", - "Time: 25.1. Warning: requested action outside of bounds, being clamped\n", - "Time: 25.200000000000003. Warning: requested action outside of bounds, being clamped\n", - "Time: 25.300000000000004. Warning: requested action outside of bounds, being clamped\n", - "Time: 25.400000000000002. Warning: requested action outside of bounds, being clamped\n", - "Time: 25.500000000000004. Warning: requested action outside of bounds, being clamped\n", - "Time: 25.6. Warning: requested action outside of bounds, being clamped\n", - "Time: 25.700000000000003. Warning: requested action outside of bounds, being clamped\n", - "Time: 25.800000000000004. Warning: requested action outside of bounds, being clamped\n", - "Time: 25.900000000000002. Warning: requested action outside of bounds, being clamped\n", - "Time: 26.000000000000004. Warning: requested action outside of bounds, being clamped\n", - "Time: 26.1. Warning: requested action outside of bounds, being clamped\n", - "Time: 26.200000000000003. Warning: requested action outside of bounds, being clamped\n", - "Time: 26.300000000000004. Warning: requested action outside of bounds, being clamped\n", - "Time: 26.400000000000002. Warning: requested action outside of bounds, being clamped\n", - "Time: 26.500000000000004. Warning: requested action outside of bounds, being clamped\n", - "Time: 26.6. Warning: requested action outside of bounds, being clamped\n", - "Time: 26.700000000000003. Warning: requested action outside of bounds, being clamped\n", - "Time: 26.800000000000004. Warning: requested action outside of bounds, being clamped\n", - "Time: 26.900000000000002. Warning: requested action outside of bounds, being clamped\n", - "Time: 27.000000000000004. Warning: requested action outside of bounds, being clamped\n", - "Time: 27.1. Warning: requested action outside of bounds, being clamped\n", - "Time: 27.200000000000003. Warning: requested action outside of bounds, being clamped\n", - "Time: 27.300000000000004. Warning: requested action outside of bounds, being clamped\n", - "Time: 27.400000000000002. Warning: requested action outside of bounds, being clamped\n", - "Time: 27.500000000000004. Warning: requested action outside of bounds, being clamped\n", - "Time: 27.6. Warning: requested action outside of bounds, being clamped\n", - "Time: 27.700000000000003. Warning: requested action outside of bounds, being clamped\n", - "Time: 27.800000000000004. Warning: requested action outside of bounds, being clamped\n", - "Time: 70.6. Warning: requested action outside of bounds, being clamped\n", - "Time: 70.7. Warning: requested action outside of bounds, being clamped\n", - "Time: 70.8. Warning: requested action outside of bounds, being clamped\n", - "Time: 70.89999999999999. Warning: requested action outside of bounds, being clamped\n", - "Time: 71.0. Warning: requested action outside of bounds, being clamped\n", - "Time: 71.1. Warning: requested action outside of bounds, being clamped\n", - "Time: 71.2. Warning: requested action outside of bounds, being clamped\n", - "Time: 71.3. Warning: requested action outside of bounds, being clamped\n", - "Time: 71.39999999999999. Warning: requested action outside of bounds, being clamped\n", - "Time: 71.5. Warning: requested action outside of bounds, being clamped\n", - "Time: 71.6. Warning: requested action outside of bounds, being clamped\n", - "Time: 71.7. Warning: requested action outside of bounds, being clamped\n", - "Time: 71.8. Warning: requested action outside of bounds, being clamped\n", - "Time: 71.89999999999999. Warning: requested action outside of bounds, being clamped\n", - "Time: 72.0. Warning: requested action outside of bounds, being clamped\n", - "Time: 72.1. Warning: requested action outside of bounds, being clamped\n", - "Time: 72.2. Warning: requested action outside of bounds, being clamped\n", - "Time: 72.3. Warning: requested action outside of bounds, being clamped\n", - "Time: 72.39999999999999. Warning: requested action outside of bounds, being clamped\n", - "Time: 72.5. Warning: requested action outside of bounds, being clamped\n", - "Time: 72.6. Warning: requested action outside of bounds, being clamped\n", - "Time: 72.7. Warning: requested action outside of bounds, being clamped\n", - "Time: 72.8. Warning: requested action outside of bounds, being clamped\n", - "Time: 72.89999999999999. Warning: requested action outside of bounds, being clamped\n", - "Time: 73.0. Warning: requested action outside of bounds, being clamped\n", - "Time: 73.1. Warning: requested action outside of bounds, being clamped\n", - "Time: 73.2. Warning: requested action outside of bounds, being clamped\n", - "Time: 73.3. Warning: requested action outside of bounds, being clamped\n", - "Time: 73.39999999999999. Warning: requested action outside of bounds, being clamped\n", - "Time: 73.5. Warning: requested action outside of bounds, being clamped\n", - "Time: 73.6. Warning: requested action outside of bounds, being clamped\n", - "Time: 73.7. Warning: requested action outside of bounds, being clamped\n", - "Time: 73.8. Warning: requested action outside of bounds, being clamped\n", - "Time: 73.89999999999999. Warning: requested action outside of bounds, being clamped\n", - "Time: 74.0. Warning: requested action outside of bounds, being clamped\n", - "Time: 74.1. Warning: requested action outside of bounds, being clamped\n", - "Time: 74.2. Warning: requested action outside of bounds, being clamped\n", - "Time: 74.3. Warning: requested action outside of bounds, being clamped\n", - "Time: 74.39999999999999. Warning: requested action outside of bounds, being clamped\n", - "Time: 74.5. Warning: requested action outside of bounds, being clamped\n", - "Time: 74.6. Warning: requested action outside of bounds, being clamped\n", - "Time: 74.7. Warning: requested action outside of bounds, being clamped\n", - "Time: 74.8. Warning: requested action outside of bounds, being clamped\n", - "Time: 74.89999999999999. Warning: requested action outside of bounds, being clamped\n", - "Time: 75.0. Warning: requested action outside of bounds, being clamped\n", - "Time: 75.1. Warning: requested action outside of bounds, being clamped\n", - "Time: 75.2. Warning: requested action outside of bounds, being clamped\n", - "Time: 75.3. Warning: requested action outside of bounds, being clamped\n", - "Time: 75.39999999999999. Warning: requested action outside of bounds, being clamped\n", - "Time: 75.5. Warning: requested action outside of bounds, being clamped\n", - "Time: 75.6. Warning: requested action outside of bounds, being clamped\n", - "Time: 75.7. Warning: requested action outside of bounds, being clamped\n", - "Time: 75.8. Warning: requested action outside of bounds, being clamped\n", - "Time: 75.89999999999999. Warning: requested action outside of bounds, being clamped\n", - "Time: 76.0. Warning: requested action outside of bounds, being clamped\n", - "Time: 76.1. Warning: requested action outside of bounds, being clamped\n", - "Time: 76.2. Warning: requested action outside of bounds, being clamped\n", - "Time: 76.3. Warning: requested action outside of bounds, being clamped\n", - "Time: 76.39999999999999. Warning: requested action outside of bounds, being clamped\n", - "Time: 76.5. Warning: requested action outside of bounds, being clamped\n", - "Time: 76.6. Warning: requested action outside of bounds, being clamped\n", - "Time: 76.7. Warning: requested action outside of bounds, being clamped\n", - "Time: 76.8. Warning: requested action outside of bounds, being clamped\n", - "Time: 76.9. Warning: requested action outside of bounds, being clamped\n", - "Time: 77.0. Warning: requested action outside of bounds, being clamped\n", - "Time: 77.1. Warning: requested action outside of bounds, being clamped\n", - "Time: 77.2. Warning: requested action outside of bounds, being clamped\n", - "Time: 77.3. Warning: requested action outside of bounds, being clamped\n", - "Time: 77.4. Warning: requested action outside of bounds, being clamped\n", - "Time: 77.5. Warning: requested action outside of bounds, being clamped\n", - "Time: 77.6. Warning: requested action outside of bounds, being clamped\n", - "Time: 77.7. Warning: requested action outside of bounds, being clamped\n", - "Time: 77.8. Warning: requested action outside of bounds, being clamped\n", - "Time: 77.9. Warning: requested action outside of bounds, being clamped\n", - "Time: 78.0. Warning: requested action outside of bounds, being clamped\n", - "Time: 78.1. Warning: requested action outside of bounds, being clamped\n", - "Time: 78.2. Warning: requested action outside of bounds, being clamped\n", - "Time: 78.3. Warning: requested action outside of bounds, being clamped\n", - "Time: 78.4. Warning: requested action outside of bounds, being clamped\n", - "Time: 78.5. Warning: requested action outside of bounds, being clamped\n", - "Time: 78.6. Warning: requested action outside of bounds, being clamped\n", - "Time: 78.7. Warning: requested action outside of bounds, being clamped\n", - "Time: 78.8. Warning: requested action outside of bounds, being clamped\n", - "Time: 78.9. Warning: requested action outside of bounds, being clamped\n", - "Time: 79.0. Warning: requested action outside of bounds, being clamped\n", - "Time: 79.1. Warning: requested action outside of bounds, being clamped\n", - "Time: 79.2. Warning: requested action outside of bounds, being clamped\n", - "Time: 79.3. Warning: requested action outside of bounds, being clamped\n", - "Time: 79.4. Warning: requested action outside of bounds, being clamped\n", - "Time: 79.5. Warning: requested action outside of bounds, being clamped\n", - "Time: 79.6. Warning: requested action outside of bounds, being clamped\n", - "Time: 79.7. Warning: requested action outside of bounds, being clamped\n", - "Time: 79.8. Warning: requested action outside of bounds, being clamped\n", - "Time: 79.9. Warning: requested action outside of bounds, being clamped\n", - "Time: 80.0. Warning: requested action outside of bounds, being clamped\n", - "Time: 80.1. Warning: requested action outside of bounds, being clamped\n", - "Time: 80.2. Warning: requested action outside of bounds, being clamped\n", - "Time: 80.3. Warning: requested action outside of bounds, being clamped\n", - "Time: 80.4. Warning: requested action outside of bounds, being clamped\n", - "Time: 80.5. Warning: requested action outside of bounds, being clamped\n", - "Time: 80.6. Warning: requested action outside of bounds, being clamped\n", - "Time: 80.7. Warning: requested action outside of bounds, being clamped\n", - "Time: 80.8. Warning: requested action outside of bounds, being clamped\n", - "Time: 80.9. Warning: requested action outside of bounds, being clamped\n", - "Time: 81.0. Warning: requested action outside of bounds, being clamped\n", - "Time: 81.1. Warning: requested action outside of bounds, being clamped\n", - "Time: 81.2. Warning: requested action outside of bounds, being clamped\n", - "Time: 81.3. Warning: requested action outside of bounds, being clamped\n", - "Time: 81.4. Warning: requested action outside of bounds, being clamped\n", - "Time: 81.5. Warning: requested action outside of bounds, being clamped\n", - "Time: 81.6. Warning: requested action outside of bounds, being clamped\n", - "Time: 81.7. Warning: requested action outside of bounds, being clamped\n", - "Time: 81.8. Warning: requested action outside of bounds, being clamped\n", - "Time: 81.9. Warning: requested action outside of bounds, being clamped\n", - "Time: 82.0. Warning: requested action outside of bounds, being clamped\n", - "Time: 82.1. Warning: requested action outside of bounds, being clamped\n", - "Time: 82.2. Warning: requested action outside of bounds, being clamped\n", - "Time: 82.3. Warning: requested action outside of bounds, being clamped\n", - "Time: 82.4. Warning: requested action outside of bounds, being clamped\n", - "Time: 82.5. Warning: requested action outside of bounds, being clamped\n", - "Time: 82.6. Warning: requested action outside of bounds, being clamped\n", - "Time: 82.7. Warning: requested action outside of bounds, being clamped\n", - "Time: 82.8. Warning: requested action outside of bounds, being clamped\n", - "Time: 82.9. Warning: requested action outside of bounds, being clamped\n", - "Time: 83.0. Warning: requested action outside of bounds, being clamped\n", - "Time: 83.1. Warning: requested action outside of bounds, being clamped\n", - "Time: 83.2. Warning: requested action outside of bounds, being clamped\n", - "Time: 83.3. Warning: requested action outside of bounds, being clamped\n", - "Time: 83.4. Warning: requested action outside of bounds, being clamped\n", - "Time: 83.5. Warning: requested action outside of bounds, being clamped\n", - "Time: 83.6. Warning: requested action outside of bounds, being clamped\n", - "Time: 83.7. Warning: requested action outside of bounds, being clamped\n", - "Time: 83.8. Warning: requested action outside of bounds, being clamped\n", - "Time: 83.9. Warning: requested action outside of bounds, being clamped\n", - "Time: 84.0. Warning: requested action outside of bounds, being clamped\n", - "Time: 84.1. Warning: requested action outside of bounds, being clamped\n", - "Time: 84.2. Warning: requested action outside of bounds, being clamped\n", - "Time: 84.3. Warning: requested action outside of bounds, being clamped\n", - "Time: 84.4. Warning: requested action outside of bounds, being clamped\n", - "Time: 84.5. Warning: requested action outside of bounds, being clamped\n", - "Time: 84.6. Warning: requested action outside of bounds, being clamped\n", - "Time: 84.7. Warning: requested action outside of bounds, being clamped\n", - "Time: 84.8. Warning: requested action outside of bounds, being clamped\n", - "Time: 84.9. Warning: requested action outside of bounds, being clamped\n", - "Time: 85.0. Warning: requested action outside of bounds, being clamped\n", - "Time: 85.1. Warning: requested action outside of bounds, being clamped\n", - "Time: 85.2. Warning: requested action outside of bounds, being clamped\n", - "Time: 85.3. Warning: requested action outside of bounds, being clamped\n", - "Time: 85.4. Warning: requested action outside of bounds, being clamped\n", - "Time: 85.5. Warning: requested action outside of bounds, being clamped\n", - "Time: 85.6. Warning: requested action outside of bounds, being clamped\n", - "Time: 85.7. Warning: requested action outside of bounds, being clamped\n", - "Time: 85.8. Warning: requested action outside of bounds, being clamped\n", - "Time: 85.9. Warning: requested action outside of bounds, being clamped\n", - "Time: 86.0. Warning: requested action outside of bounds, being clamped\n", - "Time: 86.1. Warning: requested action outside of bounds, being clamped\n", - "Time: 86.2. Warning: requested action outside of bounds, being clamped\n", - "Time: 86.3. Warning: requested action outside of bounds, being clamped\n", - "Time: 86.4. Warning: requested action outside of bounds, being clamped\n", - "Time: 86.5. Warning: requested action outside of bounds, being clamped\n", - "Time: 86.6. Warning: requested action outside of bounds, being clamped\n", - "Time: 86.7. Warning: requested action outside of bounds, being clamped\n", - "Time: 86.8. Warning: requested action outside of bounds, being clamped\n", - "Time: 86.9. Warning: requested action outside of bounds, being clamped\n", - "Time: 87.0. Warning: requested action outside of bounds, being clamped\n", - "Time: 87.1. Warning: requested action outside of bounds, being clamped\n", - "Time: 87.2. Warning: requested action outside of bounds, being clamped\n", - "Time: 87.3. Warning: requested action outside of bounds, being clamped\n", - "Time: 87.4. Warning: requested action outside of bounds, being clamped\n", - "Time: 87.5. Warning: requested action outside of bounds, being clamped\n", - "Time: 87.6. Warning: requested action outside of bounds, being clamped\n", - "Time: 87.7. Warning: requested action outside of bounds, being clamped\n", - "Time: 87.8. Warning: requested action outside of bounds, being clamped\n", - "Time: 87.9. Warning: requested action outside of bounds, being clamped\n", - "Time: 88.0. Warning: requested action outside of bounds, being clamped\n", - "Time: 88.1. Warning: requested action outside of bounds, being clamped\n", - "Time: 88.2. Warning: requested action outside of bounds, being clamped\n", - "Time: 88.3. Warning: requested action outside of bounds, being clamped\n", - "Time: 88.4. Warning: requested action outside of bounds, being clamped\n", - "Time: 88.5. Warning: requested action outside of bounds, being clamped\n", - "Time: 88.6. Warning: requested action outside of bounds, being clamped\n", - "Time: 88.7. Warning: requested action outside of bounds, being clamped\n", - "Time: 88.8. Warning: requested action outside of bounds, being clamped\n", - "Time: 88.9. Warning: requested action outside of bounds, being clamped\n", - "Time: 89.0. Warning: requested action outside of bounds, being clamped\n", - "Time: 89.1. Warning: requested action outside of bounds, being clamped\n", - "Time: 89.2. Warning: requested action outside of bounds, being clamped\n", - "Time: 89.3. Warning: requested action outside of bounds, being clamped\n", - "Time: 89.4. Warning: requested action outside of bounds, being clamped\n", - "Time: 89.5. Warning: requested action outside of bounds, being clamped\n", - "Time: 89.6. Warning: requested action outside of bounds, being clamped\n", - "Time: 89.7. Warning: requested action outside of bounds, being clamped\n", - "Time: 89.8. Warning: requested action outside of bounds, being clamped\n", - "Time: 89.9. Warning: requested action outside of bounds, being clamped\n", - "Time: 90.0. Warning: requested action outside of bounds, being clamped\n", - "Time: 90.1. Warning: requested action outside of bounds, being clamped\n", - "Time: 90.2. Warning: requested action outside of bounds, being clamped\n", - "Time: 90.3. Warning: requested action outside of bounds, being clamped\n", - "Time: 90.4. Warning: requested action outside of bounds, being clamped\n", - "Time: 90.5. Warning: requested action outside of bounds, being clamped\n", - "Time: 90.6. Warning: requested action outside of bounds, being clamped\n", - "Time: 90.7. Warning: requested action outside of bounds, being clamped\n", - "Time: 90.8. Warning: requested action outside of bounds, being clamped\n", - "Time: 90.9. Warning: requested action outside of bounds, being clamped\n", - "Time: 91.0. Warning: requested action outside of bounds, being clamped\n", - "Time: 91.1. Warning: requested action outside of bounds, being clamped\n", - "Time: 91.2. Warning: requested action outside of bounds, being clamped\n", - "Time: 91.3. Warning: requested action outside of bounds, being clamped\n", - "Time: 91.4. Warning: requested action outside of bounds, being clamped\n", - "Time: 91.5. Warning: requested action outside of bounds, being clamped\n", - "Time: 91.6. Warning: requested action outside of bounds, being clamped\n", - "Time: 91.7. Warning: requested action outside of bounds, being clamped\n", - "Time: 91.8. Warning: requested action outside of bounds, being clamped\n", - "Time: 91.9. Warning: requested action outside of bounds, being clamped\n", - "Time: 92.0. Warning: requested action outside of bounds, being clamped\n", - "Time: 92.1. Warning: requested action outside of bounds, being clamped\n", - "Time: 92.2. Warning: requested action outside of bounds, being clamped\n", - "Time: 92.3. Warning: requested action outside of bounds, being clamped\n", - "Time: 92.4. Warning: requested action outside of bounds, being clamped\n", - "Time: 92.5. Warning: requested action outside of bounds, being clamped\n", - "Time: 92.6. Warning: requested action outside of bounds, being clamped\n", - "Time: 92.7. Warning: requested action outside of bounds, being clamped\n", - "Time: 92.8. Warning: requested action outside of bounds, being clamped\n", - "Time: 92.9. Warning: requested action outside of bounds, being clamped\n", - "Time: 93.0. Warning: requested action outside of bounds, being clamped\n", - "Time: 93.1. Warning: requested action outside of bounds, being clamped\n", - "Time: 93.2. Warning: requested action outside of bounds, being clamped\n", - "Time: 93.3. Warning: requested action outside of bounds, being clamped\n", - "Time: 93.4. Warning: requested action outside of bounds, being clamped\n", - "Time: 93.5. Warning: requested action outside of bounds, being clamped\n", - "Time: 93.6. Warning: requested action outside of bounds, being clamped\n", - "Time: 93.7. Warning: requested action outside of bounds, being clamped\n", - "Time: 93.8. Warning: requested action outside of bounds, being clamped\n", - "Time: 93.9. Warning: requested action outside of bounds, being clamped\n", - "Time: 94.0. Warning: requested action outside of bounds, being clamped\n", - "Time: 94.1. Warning: requested action outside of bounds, being clamped\n", - "Time: 94.2. Warning: requested action outside of bounds, being clamped\n", - "Time: 94.3. Warning: requested action outside of bounds, being clamped\n", - "Time: 94.4. Warning: requested action outside of bounds, being clamped\n", - "Time: 94.5. Warning: requested action outside of bounds, being clamped\n", - "Time: 94.6. Warning: requested action outside of bounds, being clamped\n", - "Time: 94.7. Warning: requested action outside of bounds, being clamped\n", - "Time: 94.8. Warning: requested action outside of bounds, being clamped\n", - "Time: 94.9. Warning: requested action outside of bounds, being clamped\n", - "Time: 95.0. Warning: requested action outside of bounds, being clamped\n", - "Time: 95.1. Warning: requested action outside of bounds, being clamped\n", - "Time: 95.2. Warning: requested action outside of bounds, being clamped\n", - "Time: 95.3. Warning: requested action outside of bounds, being clamped\n", - "Time: 95.4. Warning: requested action outside of bounds, being clamped\n", - "Time: 95.5. Warning: requested action outside of bounds, being clamped\n", - "Time: 95.6. Warning: requested action outside of bounds, being clamped\n", - "Time: 95.7. Warning: requested action outside of bounds, being clamped\n", - "Time: 95.8. Warning: requested action outside of bounds, being clamped\n", - "Time: 95.9. Warning: requested action outside of bounds, being clamped\n", - "Time: 96.0. Warning: requested action outside of bounds, being clamped\n", - "Time: 96.1. Warning: requested action outside of bounds, being clamped\n", - "Time: 96.2. Warning: requested action outside of bounds, being clamped\n", - "Time: 96.3. Warning: requested action outside of bounds, being clamped\n", - "Time: 96.4. Warning: requested action outside of bounds, being clamped\n", - "Time: 96.5. Warning: requested action outside of bounds, being clamped\n", - "Time: 96.6. Warning: requested action outside of bounds, being clamped\n", - "Time: 96.7. Warning: requested action outside of bounds, being clamped\n", - "Time: 96.8. Warning: requested action outside of bounds, being clamped\n", - "Time: 96.9. Warning: requested action outside of bounds, being clamped\n", - "Time: 97.0. Warning: requested action outside of bounds, being clamped\n", - "Time: 97.1. Warning: requested action outside of bounds, being clamped\n", - "Time: 97.2. Warning: requested action outside of bounds, being clamped\n", - "Time: 97.3. Warning: requested action outside of bounds, being clamped\n", - "Time: 97.4. Warning: requested action outside of bounds, being clamped\n", - "Time: 97.5. Warning: requested action outside of bounds, being clamped\n", - "Time: 97.6. Warning: requested action outside of bounds, being clamped\n", - "Time: 97.7. Warning: requested action outside of bounds, being clamped\n", - "Time: 97.8. Warning: requested action outside of bounds, being clamped\n", - "Time: 97.9. Warning: requested action outside of bounds, being clamped\n", - "Time: 98.0. Warning: requested action outside of bounds, being clamped\n", - "Time: 98.1. Warning: requested action outside of bounds, being clamped\n", - "Time: 98.2. Warning: requested action outside of bounds, being clamped\n", - "Time: 98.3. Warning: requested action outside of bounds, being clamped\n", - "Time: 98.4. Warning: requested action outside of bounds, being clamped\n", - "Time: 98.5. Warning: requested action outside of bounds, being clamped\n", - "Time: 98.6. Warning: requested action outside of bounds, being clamped\n", - "Time: 98.7. Warning: requested action outside of bounds, being clamped\n", - "Time: 98.8. Warning: requested action outside of bounds, being clamped\n", - "Time: 98.9. Warning: requested action outside of bounds, being clamped\n", - "Time: 99.0. Warning: requested action outside of bounds, being clamped\n", - "Time: 99.1. Warning: requested action outside of bounds, being clamped\n", - "Time: 99.2. Warning: requested action outside of bounds, being clamped\n", - "Time: 99.3. Warning: requested action outside of bounds, being clamped\n", - "Time: 99.4. Warning: requested action outside of bounds, being clamped\n", - "Time: 99.5. Warning: requested action outside of bounds, being clamped\n", - "Time: 99.6. Warning: requested action outside of bounds, being clamped\n", - "Time: 99.7. Warning: requested action outside of bounds, being clamped\n", - "Time: 99.8. Warning: requested action outside of bounds, being clamped\n", - "Time: 99.9. Warning: requested action outside of bounds, being clamped\n", - "Time: 100.0. Warning: requested action outside of bounds, being clamped\n", - "Time: 100.1. Warning: requested action outside of bounds, being clamped\n", - "Time: 100.2. Warning: requested action outside of bounds, being clamped\n", - "Time: 100.3. Warning: requested action outside of bounds, being clamped\n", - "Time: 100.4. Warning: requested action outside of bounds, being clamped\n", - "Time: 100.5. Warning: requested action outside of bounds, being clamped\n", - "Time: 100.6. Warning: requested action outside of bounds, being clamped\n", - "Time: 100.7. Warning: requested action outside of bounds, being clamped\n", - "Time: 100.8. Warning: requested action outside of bounds, being clamped\n", - "Time: 100.9. Warning: requested action outside of bounds, being clamped\n", - "Time: 101.0. Warning: requested action outside of bounds, being clamped\n", - "Time: 104.1. Warning: requested action outside of bounds, being clamped\n", - "Time: 104.2. Warning: requested action outside of bounds, being clamped\n", - "Time: 104.3. Warning: requested action outside of bounds, being clamped\n", - "Time: 104.4. Warning: requested action outside of bounds, being clamped\n", - "Time: 104.5. Warning: requested action outside of bounds, being clamped\n", - "Time: 104.6. Warning: requested action outside of bounds, being clamped\n", - "Time: 104.7. Warning: requested action outside of bounds, being clamped\n", - "Time: 104.8. Warning: requested action outside of bounds, being clamped\n", - "Time: 104.9. Warning: requested action outside of bounds, being clamped\n", - "Time: 105.0. Warning: requested action outside of bounds, being clamped\n", - "Time: 105.1. Warning: requested action outside of bounds, being clamped\n", - "Time: 105.2. Warning: requested action outside of bounds, being clamped\n", - "Time: 105.3. Warning: requested action outside of bounds, being clamped\n", - "Time: 105.4. Warning: requested action outside of bounds, being clamped\n", - "Time: 105.5. Warning: requested action outside of bounds, being clamped\n", - "Time: 105.6. Warning: requested action outside of bounds, being clamped\n", - "Time: 105.7. Warning: requested action outside of bounds, being clamped\n", - "Time: 105.8. Warning: requested action outside of bounds, being clamped\n", - "Time: 105.9. Warning: requested action outside of bounds, being clamped\n", - "Time: 106.0. Warning: requested action outside of bounds, being clamped\n", - "Time: 106.1. Warning: requested action outside of bounds, being clamped\n", - "Time: 106.2. Warning: requested action outside of bounds, being clamped\n", - "Time: 106.3. Warning: requested action outside of bounds, being clamped\n", - "Time: 106.4. Warning: requested action outside of bounds, being clamped\n", - "Time: 106.5. Warning: requested action outside of bounds, being clamped\n", - "Time: 106.6. Warning: requested action outside of bounds, being clamped\n", - "Time: 106.7. Warning: requested action outside of bounds, being clamped\n", - "Time: 106.8. Warning: requested action outside of bounds, being clamped\n", - "Time: 106.9. Warning: requested action outside of bounds, being clamped\n", - "Time: 107.0. Warning: requested action outside of bounds, being clamped\n", - "Time: 107.1. Warning: requested action outside of bounds, being clamped\n", - "Time: 107.2. Warning: requested action outside of bounds, being clamped\n", - "Time: 107.3. Warning: requested action outside of bounds, being clamped\n", - "Time: 107.4. Warning: requested action outside of bounds, being clamped\n", - "Time: 107.5. Warning: requested action outside of bounds, being clamped\n", - "Time: 107.6. Warning: requested action outside of bounds, being clamped\n", - "Time: 107.7. Warning: requested action outside of bounds, being clamped\n", - "Time: 107.8. Warning: requested action outside of bounds, being clamped\n", - "Time: 107.9. Warning: requested action outside of bounds, being clamped\n", - "Time: 108.0. Warning: requested action outside of bounds, being clamped\n", - "Time: 108.1. Warning: requested action outside of bounds, being clamped\n", - "Time: 108.2. Warning: requested action outside of bounds, being clamped\n", - "Time: 108.3. Warning: requested action outside of bounds, being clamped\n", - "Time: 108.4. Warning: requested action outside of bounds, being clamped\n", - "Time: 108.5. Warning: requested action outside of bounds, being clamped\n", - "Time: 108.6. Warning: requested action outside of bounds, being clamped\n", - "Time: 108.7. Warning: requested action outside of bounds, being clamped\n", - "Time: 108.8. Warning: requested action outside of bounds, being clamped\n", - "Time: 108.9. Warning: requested action outside of bounds, being clamped\n", - "Time: 109.0. Warning: requested action outside of bounds, being clamped\n", - "Time: 109.1. Warning: requested action outside of bounds, being clamped\n", - "Time: 109.2. Warning: requested action outside of bounds, being clamped\n", - "Time: 109.3. Warning: requested action outside of bounds, being clamped\n", - "Time: 109.4. Warning: requested action outside of bounds, being clamped\n", - "Time: 109.5. Warning: requested action outside of bounds, being clamped\n", - "Time: 109.6. Warning: requested action outside of bounds, being clamped\n", - "Time: 109.7. Warning: requested action outside of bounds, being clamped\n", - "Time: 109.8. Warning: requested action outside of bounds, being clamped\n", - "Time: 109.9. Warning: requested action outside of bounds, being clamped\n", - "Time: 110.0. Warning: requested action outside of bounds, being clamped\n", - "Time: 110.1. Warning: requested action outside of bounds, being clamped\n", - "Time: 110.2. Warning: requested action outside of bounds, being clamped\n", - "Time: 110.3. Warning: requested action outside of bounds, being clamped\n", - "Time: 110.4. Warning: requested action outside of bounds, being clamped\n", - "Time: 110.5. Warning: requested action outside of bounds, being clamped\n", - "Time: 110.6. Warning: requested action outside of bounds, being clamped\n", - "Time: 110.7. Warning: requested action outside of bounds, being clamped\n", - "Time: 110.8. Warning: requested action outside of bounds, being clamped\n", - "Time: 110.9. Warning: requested action outside of bounds, being clamped\n", - "Time: 111.0. Warning: requested action outside of bounds, being clamped\n", - "Time: 111.1. Warning: requested action outside of bounds, being clamped\n", - "Time: 111.2. Warning: requested action outside of bounds, being clamped\n", - "Time: 111.3. Warning: requested action outside of bounds, being clamped\n", - "Time: 111.4. Warning: requested action outside of bounds, being clamped\n", - "Time: 111.5. Warning: requested action outside of bounds, being clamped\n", - "Time: 111.6. Warning: requested action outside of bounds, being clamped\n", - "Time: 111.7. Warning: requested action outside of bounds, being clamped\n", - "Time: 111.8. Warning: requested action outside of bounds, being clamped\n", - "Time: 111.9. Warning: requested action outside of bounds, being clamped\n", - "Time: 112.0. Warning: requested action outside of bounds, being clamped\n", - "Time: 112.1. Warning: requested action outside of bounds, being clamped\n", - "Time: 112.2. Warning: requested action outside of bounds, being clamped\n", - "Time: 112.3. Warning: requested action outside of bounds, being clamped\n", - "Time: 112.4. Warning: requested action outside of bounds, being clamped\n", - "Time: 112.5. Warning: requested action outside of bounds, being clamped\n", - "Time: 112.6. Warning: requested action outside of bounds, being clamped\n", - "Time: 112.7. Warning: requested action outside of bounds, being clamped\n", - "Time: 112.8. Warning: requested action outside of bounds, being clamped\n", - "Time: 112.9. Warning: requested action outside of bounds, being clamped\n", - "Time: 113.0. Warning: requested action outside of bounds, being clamped\n", - "Time: 113.1. Warning: requested action outside of bounds, being clamped\n", - "Time: 113.2. Warning: requested action outside of bounds, being clamped\n", - "Time: 113.3. Warning: requested action outside of bounds, being clamped\n", - "Time: 113.4. Warning: requested action outside of bounds, being clamped\n", - "Time: 113.5. Warning: requested action outside of bounds, being clamped\n", - "Time: 113.6. Warning: requested action outside of bounds, being clamped\n", - "Time: 113.7. Warning: requested action outside of bounds, being clamped\n", - "Time: 113.8. Warning: requested action outside of bounds, being clamped\n", - "Time: 113.9. Warning: requested action outside of bounds, being clamped\n", - "Time: 114.0. Warning: requested action outside of bounds, being clamped\n", - "Time: 114.1. Warning: requested action outside of bounds, being clamped\n", - "Time: 114.2. Warning: requested action outside of bounds, being clamped\n", - "Time: 114.3. Warning: requested action outside of bounds, being clamped\n", - "Time: 114.4. Warning: requested action outside of bounds, being clamped\n", - "Time: 114.5. Warning: requested action outside of bounds, being clamped\n", - "Time: 114.6. Warning: requested action outside of bounds, being clamped\n", - "Time: 114.7. Warning: requested action outside of bounds, being clamped\n", - "Time: 114.8. Warning: requested action outside of bounds, being clamped\n", - "Time: 114.9. Warning: requested action outside of bounds, being clamped\n", - "Time: 115.0. Warning: requested action outside of bounds, being clamped\n", - "Time: 115.1. Warning: requested action outside of bounds, being clamped\n", - "Time: 115.2. Warning: requested action outside of bounds, being clamped\n", - "Time: 115.3. Warning: requested action outside of bounds, being clamped\n", - "Time: 115.4. Warning: requested action outside of bounds, being clamped\n", - "Time: 115.5. Warning: requested action outside of bounds, being clamped\n", - "Time: 115.6. Warning: requested action outside of bounds, being clamped\n", - "Time: 115.7. Warning: requested action outside of bounds, being clamped\n", - "Time: 115.8. Warning: requested action outside of bounds, being clamped\n", - "Time: 115.9. Warning: requested action outside of bounds, being clamped\n", - "Time: 116.0. Warning: requested action outside of bounds, being clamped\n", - "Time: 116.1. Warning: requested action outside of bounds, being clamped\n", - "Time: 116.2. Warning: requested action outside of bounds, being clamped\n", - "Time: 116.3. Warning: requested action outside of bounds, being clamped\n", - "Time: 116.4. Warning: requested action outside of bounds, being clamped\n", - "Time: 116.5. Warning: requested action outside of bounds, being clamped\n", - "Time: 116.6. Warning: requested action outside of bounds, being clamped\n", - "Time: 116.7. Warning: requested action outside of bounds, being clamped\n", - "Time: 116.8. Warning: requested action outside of bounds, being clamped\n", - "Time: 116.9. Warning: requested action outside of bounds, being clamped\n", - "Time: 117.0. Warning: requested action outside of bounds, being clamped\n", - "Time: 117.1. Warning: requested action outside of bounds, being clamped\n", - "Time: 117.2. Warning: requested action outside of bounds, being clamped\n", - "Time: 117.3. Warning: requested action outside of bounds, being clamped\n", - "Time: 117.4. Warning: requested action outside of bounds, being clamped\n", - "Time: 117.5. Warning: requested action outside of bounds, being clamped\n", - "Time: 117.6. Warning: requested action outside of bounds, being clamped\n", - "Time: 117.7. Warning: requested action outside of bounds, being clamped\n", - "Time: 117.8. Warning: requested action outside of bounds, being clamped\n", - "Time: 117.9. Warning: requested action outside of bounds, being clamped\n", - "Time: 118.0. Warning: requested action outside of bounds, being clamped\n", - "Time: 118.1. Warning: requested action outside of bounds, being clamped\n", - "Time: 118.2. Warning: requested action outside of bounds, being clamped\n", - "Time: 118.3. Warning: requested action outside of bounds, being clamped\n", - "Time: 118.4. Warning: requested action outside of bounds, being clamped\n", - "Time: 118.5. Warning: requested action outside of bounds, being clamped\n", - "Time: 118.6. Warning: requested action outside of bounds, being clamped\n", - "Time: 118.7. Warning: requested action outside of bounds, being clamped\n", - "Time: 118.8. Warning: requested action outside of bounds, being clamped\n", - "Time: 118.9. Warning: requested action outside of bounds, being clamped\n", - "Time: 119.0. Warning: requested action outside of bounds, being clamped\n", - "Time: 119.1. Warning: requested action outside of bounds, being clamped\n", - "Time: 119.2. Warning: requested action outside of bounds, being clamped\n", - "Time: 119.3. Warning: requested action outside of bounds, being clamped\n", - "Time: 119.4. Warning: requested action outside of bounds, being clamped\n", - "Time: 119.5. Warning: requested action outside of bounds, being clamped\n", - "Time: 119.6. Warning: requested action outside of bounds, being clamped\n", - "Time: 119.7. Warning: requested action outside of bounds, being clamped\n", - "Time: 119.8. Warning: requested action outside of bounds, being clamped\n", - "Time: 119.9. Warning: requested action outside of bounds, being clamped\n", - "Time: 120.0. Warning: requested action outside of bounds, being clamped\n", - "Time: 120.1. Warning: requested action outside of bounds, being clamped\n", - "Time: 120.2. Warning: requested action outside of bounds, being clamped\n", - "Time: 120.3. Warning: requested action outside of bounds, being clamped\n", - "Time: 120.4. Warning: requested action outside of bounds, being clamped\n", - "Time: 120.5. Warning: requested action outside of bounds, being clamped\n", - "Time: 120.6. Warning: requested action outside of bounds, being clamped\n", - "Time: 120.7. Warning: requested action outside of bounds, being clamped\n", - "Time: 120.8. Warning: requested action outside of bounds, being clamped\n", - "Time: 120.9. Warning: requested action outside of bounds, being clamped\n", - "Time: 121.0. Warning: requested action outside of bounds, being clamped\n", - "Time: 121.1. Warning: requested action outside of bounds, being clamped\n", - "Time: 121.2. Warning: requested action outside of bounds, being clamped\n", - "Time: 121.3. Warning: requested action outside of bounds, being clamped\n", - "Time: 121.4. Warning: requested action outside of bounds, being clamped\n", - "Time: 121.5. Warning: requested action outside of bounds, being clamped\n", - "Time: 121.6. Warning: requested action outside of bounds, being clamped\n", - "Time: 121.7. Warning: requested action outside of bounds, being clamped\n", - "Time: 121.8. Warning: requested action outside of bounds, being clamped\n", - "Time: 121.9. Warning: requested action outside of bounds, being clamped\n", - "Time: 122.0. Warning: requested action outside of bounds, being clamped\n", - "Time: 122.1. Warning: requested action outside of bounds, being clamped\n", - "Time: 122.2. Warning: requested action outside of bounds, being clamped\n", - "Time: 122.3. Warning: requested action outside of bounds, being clamped\n", - "Time: 122.4. Warning: requested action outside of bounds, being clamped\n", - "Time: 122.5. Warning: requested action outside of bounds, being clamped\n", - "Time: 122.6. Warning: requested action outside of bounds, being clamped\n", - "Time: 122.7. Warning: requested action outside of bounds, being clamped\n", - "Time: 122.8. Warning: requested action outside of bounds, being clamped\n", - "Time: 122.9. Warning: requested action outside of bounds, being clamped\n", - "Time: 123.0. Warning: requested action outside of bounds, being clamped\n", - "Time: 123.1. Warning: requested action outside of bounds, being clamped\n", - "Time: 123.2. Warning: requested action outside of bounds, being clamped\n", - "Time: 123.3. Warning: requested action outside of bounds, being clamped\n", - "Time: 123.4. Warning: requested action outside of bounds, being clamped\n", - "Time: 123.5. Warning: requested action outside of bounds, being clamped\n", - "Time: 123.6. Warning: requested action outside of bounds, being clamped\n", - "Time: 123.7. Warning: requested action outside of bounds, being clamped\n", - "Time: 123.8. Warning: requested action outside of bounds, being clamped\n", - "Time: 123.9. Warning: requested action outside of bounds, being clamped\n", - "Time: 124.0. Warning: requested action outside of bounds, being clamped\n", - "Time: 124.1. Warning: requested action outside of bounds, being clamped\n", - "Time: 124.2. Warning: requested action outside of bounds, being clamped\n", - "Time: 124.3. Warning: requested action outside of bounds, being clamped\n", - "Time: 124.4. Warning: requested action outside of bounds, being clamped\n", - "Time: 124.5. Warning: requested action outside of bounds, being clamped\n", - "Time: 124.6. Warning: requested action outside of bounds, being clamped\n", - "Time: 124.7. Warning: requested action outside of bounds, being clamped\n", - "Time: 124.8. Warning: requested action outside of bounds, being clamped\n", - "Time: 124.9. Warning: requested action outside of bounds, being clamped\n", - "Time: 125.0. Warning: requested action outside of bounds, being clamped\n", - "Time: 125.1. Warning: requested action outside of bounds, being clamped\n", - "Time: 125.2. Warning: requested action outside of bounds, being clamped\n", - "Time: 125.3. Warning: requested action outside of bounds, being clamped\n", - "Time: 125.4. Warning: requested action outside of bounds, being clamped\n", - "Time: 125.5. Warning: requested action outside of bounds, being clamped\n", - "Time: 125.6. Warning: requested action outside of bounds, being clamped\n", - "Time: 125.7. Warning: requested action outside of bounds, being clamped\n", - "Time: 125.8. Warning: requested action outside of bounds, being clamped\n", - "Time: 125.9. Warning: requested action outside of bounds, being clamped\n", - "Time: 126.0. Warning: requested action outside of bounds, being clamped\n", - "Time: 126.1. Warning: requested action outside of bounds, being clamped\n", - "Time: 126.2. Warning: requested action outside of bounds, being clamped\n", - "Time: 126.3. Warning: requested action outside of bounds, being clamped\n", - "Time: 126.4. Warning: requested action outside of bounds, being clamped\n", - "Time: 126.5. Warning: requested action outside of bounds, being clamped\n", - "Time: 126.6. Warning: requested action outside of bounds, being clamped\n", - "Time: 126.7. Warning: requested action outside of bounds, being clamped\n", - "Time: 126.8. Warning: requested action outside of bounds, being clamped\n", - "Time: 126.9. Warning: requested action outside of bounds, being clamped\n", - "Time: 127.0. Warning: requested action outside of bounds, being clamped\n", - "Time: 127.1. Warning: requested action outside of bounds, being clamped\n", - "Time: 127.2. Warning: requested action outside of bounds, being clamped\n", - "Time: 127.3. Warning: requested action outside of bounds, being clamped\n", - "Time: 127.4. Warning: requested action outside of bounds, being clamped\n", - "Time: 127.5. Warning: requested action outside of bounds, being clamped\n", - "Time: 127.6. Warning: requested action outside of bounds, being clamped\n", - "Time: 127.7. Warning: requested action outside of bounds, being clamped\n", - "Time: 127.8. Warning: requested action outside of bounds, being clamped\n", - "Time: 127.9. Warning: requested action outside of bounds, being clamped\n", - "Time: 128.0. Warning: requested action outside of bounds, being clamped\n", - "Time: 128.1. Warning: requested action outside of bounds, being clamped\n", - "Time: 128.2. Warning: requested action outside of bounds, being clamped\n", - "Time: 128.3. Warning: requested action outside of bounds, being clamped\n", - "Time: 128.4. Warning: requested action outside of bounds, being clamped\n", - "Time: 128.5. Warning: requested action outside of bounds, being clamped\n", - "Time: 128.6. Warning: requested action outside of bounds, being clamped\n", - "Time: 128.7. Warning: requested action outside of bounds, being clamped\n", - "Time: 128.8. Warning: requested action outside of bounds, being clamped\n", - "Time: 128.9. Warning: requested action outside of bounds, being clamped\n", - "Time: 129.0. Warning: requested action outside of bounds, being clamped\n", - "Time: 129.1. Warning: requested action outside of bounds, being clamped\n", - "Time: 129.2. Warning: requested action outside of bounds, being clamped\n", - "Time: 129.3. Warning: requested action outside of bounds, being clamped\n", - "Time: 129.4. Warning: requested action outside of bounds, being clamped\n", - "Time: 129.5. Warning: requested action outside of bounds, being clamped\n", - "Time: 129.6. Warning: requested action outside of bounds, being clamped\n", - "Time: 129.7. Warning: requested action outside of bounds, being clamped\n", - "Time: 129.8. Warning: requested action outside of bounds, being clamped\n", - "Time: 129.9. Warning: requested action outside of bounds, being clamped\n", - "Time: 130.0. Warning: requested action outside of bounds, being clamped\n", - "Time: 130.1. Warning: requested action outside of bounds, being clamped\n", - "Time: 130.2. Warning: requested action outside of bounds, being clamped\n", - "Time: 130.3. Warning: requested action outside of bounds, being clamped\n", - "Time: 130.4. Warning: requested action outside of bounds, being clamped\n", - "Time: 130.5. Warning: requested action outside of bounds, being clamped\n", - "Time: 130.6. Warning: requested action outside of bounds, being clamped\n", - "Time: 130.7. Warning: requested action outside of bounds, being clamped\n", - "Time: 130.8. Warning: requested action outside of bounds, being clamped\n", - "Time: 130.9. Warning: requested action outside of bounds, being clamped\n", - "Time: 131.0. Warning: requested action outside of bounds, being clamped\n", - "Time: 131.1. Warning: requested action outside of bounds, being clamped\n", - "Time: 131.2. Warning: requested action outside of bounds, being clamped\n", - "Time: 131.3. Warning: requested action outside of bounds, being clamped\n", - "Time: 131.4. Warning: requested action outside of bounds, being clamped\n", - "Time: 131.5. Warning: requested action outside of bounds, being clamped\n", - "Time: 131.6. Warning: requested action outside of bounds, being clamped\n", - "Time: 131.7. Warning: requested action outside of bounds, being clamped\n", - "Time: 131.8. Warning: requested action outside of bounds, being clamped\n", - "Time: 131.9. Warning: requested action outside of bounds, being clamped\n", - "Time: 132.0. Warning: requested action outside of bounds, being clamped\n", - "Time: 132.1. Warning: requested action outside of bounds, being clamped\n", - "Time: 132.2. Warning: requested action outside of bounds, being clamped\n", - "Time: 132.3. Warning: requested action outside of bounds, being clamped\n", - "Time: 132.4. Warning: requested action outside of bounds, being clamped\n", - "Time: 132.5. Warning: requested action outside of bounds, being clamped\n", - "Time: 132.6. Warning: requested action outside of bounds, being clamped\n", - "Time: 132.7. Warning: requested action outside of bounds, being clamped\n", - "Time: 132.8. Warning: requested action outside of bounds, being clamped\n", - "Time: 132.9. Warning: requested action outside of bounds, being clamped\n", - "Time: 133.0. Warning: requested action outside of bounds, being clamped\n", - "Time: 133.1. Warning: requested action outside of bounds, being clamped\n", - "Time: 133.2. Warning: requested action outside of bounds, being clamped\n", - "Time: 133.3. Warning: requested action outside of bounds, being clamped\n", - "Time: 133.4. Warning: requested action outside of bounds, being clamped\n", - "Time: 133.5. Warning: requested action outside of bounds, being clamped\n", - "Time: 133.6. Warning: requested action outside of bounds, being clamped\n", - "Time: 133.7. Warning: requested action outside of bounds, being clamped\n", - "Time: 133.8. Warning: requested action outside of bounds, being clamped\n", - "Time: 133.9. Warning: requested action outside of bounds, being clamped\n", - "Time: 134.0. Warning: requested action outside of bounds, being clamped\n", - "Time: 134.1. Warning: requested action outside of bounds, being clamped\n", - "Time: 134.2. Warning: requested action outside of bounds, being clamped\n", - "Time: 134.3. Warning: requested action outside of bounds, being clamped\n", - "Time: 134.4. Warning: requested action outside of bounds, being clamped\n", - "Time: 134.5. Warning: requested action outside of bounds, being clamped\n", - "Time: 134.6. Warning: requested action outside of bounds, being clamped\n", - "Time: 134.7. Warning: requested action outside of bounds, being clamped\n", - "Time: 134.8. Warning: requested action outside of bounds, being clamped\n", - "Time: 134.9. Warning: requested action outside of bounds, being clamped\n", - "Time: 135.0. Warning: requested action outside of bounds, being clamped\n", - "Time: 135.1. Warning: requested action outside of bounds, being clamped\n", - "Time: 135.2. Warning: requested action outside of bounds, being clamped\n", - "Time: 135.3. Warning: requested action outside of bounds, being clamped\n", - "Time: 135.4. Warning: requested action outside of bounds, being clamped\n", - "Time: 135.5. Warning: requested action outside of bounds, being clamped\n", - "Time: 135.6. Warning: requested action outside of bounds, being clamped\n", - "Time: 135.7. Warning: requested action outside of bounds, being clamped\n", - "Time: 135.8. Warning: requested action outside of bounds, being clamped\n", - "Time: 135.9. Warning: requested action outside of bounds, being clamped\n", - "Time: 136.0. Warning: requested action outside of bounds, being clamped\n", - "Time: 136.1. Warning: requested action outside of bounds, being clamped\n", - "Time: 136.2. Warning: requested action outside of bounds, being clamped\n", - "Time: 136.3. Warning: requested action outside of bounds, being clamped\n", - "Time: 136.4. Warning: requested action outside of bounds, being clamped\n", - "Time: 136.5. Warning: requested action outside of bounds, being clamped\n", - "Time: 136.6. Warning: requested action outside of bounds, being clamped\n", - "Time: 136.7. Warning: requested action outside of bounds, being clamped\n", - "Time: 136.8. Warning: requested action outside of bounds, being clamped\n", - "Time: 136.9. Warning: requested action outside of bounds, being clamped\n", - "Time: 137.0. Warning: requested action outside of bounds, being clamped\n", - "Time: 137.1. Warning: requested action outside of bounds, being clamped\n", - "Time: 137.2. Warning: requested action outside of bounds, being clamped\n", - "Time: 137.3. Warning: requested action outside of bounds, being clamped\n", - "Time: 137.4. Warning: requested action outside of bounds, being clamped\n", - "Time: 137.5. Warning: requested action outside of bounds, being clamped\n", - "Time: 137.6. Warning: requested action outside of bounds, being clamped\n", - "Time: 137.7. Warning: requested action outside of bounds, being clamped\n", - "Time: 137.8. Warning: requested action outside of bounds, being clamped\n", - "Time: 137.9. Warning: requested action outside of bounds, being clamped\n", - "Time: 138.0. Warning: requested action outside of bounds, being clamped\n", - "Time: 138.1. Warning: requested action outside of bounds, being clamped\n", - "Time: 138.2. Warning: requested action outside of bounds, being clamped\n", - "Time: 138.3. Warning: requested action outside of bounds, being clamped\n", - "Time: 138.4. Warning: requested action outside of bounds, being clamped\n", - "Time: 138.5. Warning: requested action outside of bounds, being clamped\n", - "Time: 138.6. Warning: requested action outside of bounds, being clamped\n", - "Time: 138.7. Warning: requested action outside of bounds, being clamped\n", - "Time: 138.8. Warning: requested action outside of bounds, being clamped\n", - "Time: 138.9. Warning: requested action outside of bounds, being clamped\n", - "Time: 139.0. Warning: requested action outside of bounds, being clamped\n", - "Time: 139.1. Warning: requested action outside of bounds, being clamped\n", - "Time: 139.2. Warning: requested action outside of bounds, being clamped\n", - "Time: 139.3. Warning: requested action outside of bounds, being clamped\n", - "Time: 139.4. Warning: requested action outside of bounds, being clamped\n", - "Time: 139.5. Warning: requested action outside of bounds, being clamped\n", - "Time: 139.6. Warning: requested action outside of bounds, being clamped\n", - "Time: 139.7. Warning: requested action outside of bounds, being clamped\n", - "Time: 139.8. Warning: requested action outside of bounds, being clamped\n", - "Time: 139.9. Warning: requested action outside of bounds, being clamped\n", - "Time: 140.0. Warning: requested action outside of bounds, being clamped\n", - "Time: 140.1. Warning: requested action outside of bounds, being clamped\n", - "Time: 140.2. Warning: requested action outside of bounds, being clamped\n", - "Time: 140.3. Warning: requested action outside of bounds, being clamped\n", - "Time: 140.4. Warning: requested action outside of bounds, being clamped\n", - "Time: 140.5. Warning: requested action outside of bounds, being clamped\n", - "Time: 140.6. Warning: requested action outside of bounds, being clamped\n", - "Time: 140.7. Warning: requested action outside of bounds, being clamped\n", - "Time: 140.8. Warning: requested action outside of bounds, being clamped\n", - "Time: 140.9. Warning: requested action outside of bounds, being clamped\n", - "Time: 141.0. Warning: requested action outside of bounds, being clamped\n", - "Time: 141.1. Warning: requested action outside of bounds, being clamped\n", - "Time: 141.2. Warning: requested action outside of bounds, being clamped\n", - "Time: 141.3. Warning: requested action outside of bounds, being clamped\n", - "Time: 141.4. Warning: requested action outside of bounds, being clamped\n", - "Time: 141.5. Warning: requested action outside of bounds, being clamped\n", - "Time: 141.6. Warning: requested action outside of bounds, being clamped\n", - "Time: 141.7. Warning: requested action outside of bounds, being clamped\n", - "Time: 141.8. Warning: requested action outside of bounds, being clamped\n", - "Time: 141.9. Warning: requested action outside of bounds, being clamped\n", - "Time: 142.0. Warning: requested action outside of bounds, being clamped\n", - "Time: 142.1. Warning: requested action outside of bounds, being clamped\n", - "Time: 142.2. Warning: requested action outside of bounds, being clamped\n", - "Time: 142.3. Warning: requested action outside of bounds, being clamped\n", - "Time: 142.4. Warning: requested action outside of bounds, being clamped\n", - "Time: 142.5. Warning: requested action outside of bounds, being clamped\n", - "Time: 142.6. Warning: requested action outside of bounds, being clamped\n", - "Time: 142.7. Warning: requested action outside of bounds, being clamped\n", - "Time: 142.8. Warning: requested action outside of bounds, being clamped\n", - "Time: 142.9. Warning: requested action outside of bounds, being clamped\n", - "Time: 143.0. Warning: requested action outside of bounds, being clamped\n", - "Time: 143.1. Warning: requested action outside of bounds, being clamped\n", - "Time: 143.2. Warning: requested action outside of bounds, being clamped\n", - "Time: 143.3. Warning: requested action outside of bounds, being clamped\n", - "Time: 143.4. Warning: requested action outside of bounds, being clamped\n", - "Time: 143.5. Warning: requested action outside of bounds, being clamped\n", - "Time: 143.6. Warning: requested action outside of bounds, being clamped\n", - "Time: 143.7. Warning: requested action outside of bounds, being clamped\n", - "Time: 143.8. Warning: requested action outside of bounds, being clamped\n", - "Time: 143.9. Warning: requested action outside of bounds, being clamped\n", - "Time: 144.0. Warning: requested action outside of bounds, being clamped\n", - "Time: 144.1. Warning: requested action outside of bounds, being clamped\n", - "Time: 144.2. Warning: requested action outside of bounds, being clamped\n", - "Time: 144.3. Warning: requested action outside of bounds, being clamped\n", - "Time: 144.4. Warning: requested action outside of bounds, being clamped\n", - "Time: 144.5. Warning: requested action outside of bounds, being clamped\n", - "Time: 144.6. Warning: requested action outside of bounds, being clamped\n", - "Time: 144.7. Warning: requested action outside of bounds, being clamped\n", - "Time: 144.8. Warning: requested action outside of bounds, being clamped\n", - "Time: 144.9. Warning: requested action outside of bounds, being clamped\n", - "Time: 145.0. Warning: requested action outside of bounds, being clamped\n", - "Time: 145.1. Warning: requested action outside of bounds, being clamped\n", - "Time: 145.2. Warning: requested action outside of bounds, being clamped\n", - "Time: 145.3. Warning: requested action outside of bounds, being clamped\n", - "Time: 145.4. Warning: requested action outside of bounds, being clamped\n", - "Time: 145.5. Warning: requested action outside of bounds, being clamped\n", - "Time: 145.6. Warning: requested action outside of bounds, being clamped\n", - "Time: 145.7. Warning: requested action outside of bounds, being clamped\n", - "Time: 145.8. Warning: requested action outside of bounds, being clamped\n", - "Time: 145.9. Warning: requested action outside of bounds, being clamped\n", - "Time: 146.0. Warning: requested action outside of bounds, being clamped\n", - "Time: 146.1. Warning: requested action outside of bounds, being clamped\n", - "Time: 146.2. Warning: requested action outside of bounds, being clamped\n", - "Time: 146.3. Warning: requested action outside of bounds, being clamped\n", - "Time: 146.4. Warning: requested action outside of bounds, being clamped\n", - "Time: 146.5. Warning: requested action outside of bounds, being clamped\n", - "Time: 146.6. Warning: requested action outside of bounds, being clamped\n", - "Time: 146.7. Warning: requested action outside of bounds, being clamped\n", - "Time: 146.8. Warning: requested action outside of bounds, being clamped\n", - "Time: 146.9. Warning: requested action outside of bounds, being clamped\n", - "Time: 147.0. Warning: requested action outside of bounds, being clamped\n", - "Time: 147.1. Warning: requested action outside of bounds, being clamped\n", - "Time: 147.2. Warning: requested action outside of bounds, being clamped\n", - "Time: 147.3. Warning: requested action outside of bounds, being clamped\n", - "Time: 147.4. Warning: requested action outside of bounds, being clamped\n", - "Time: 147.5. Warning: requested action outside of bounds, being clamped\n", - "Time: 147.6. Warning: requested action outside of bounds, being clamped\n", - "Time: 147.7. Warning: requested action outside of bounds, being clamped\n", - "Time: 147.8. Warning: requested action outside of bounds, being clamped\n", - "Time: 147.9. Warning: requested action outside of bounds, being clamped\n", - "Time: 148.0. Warning: requested action outside of bounds, being clamped\n", - "Time: 148.1. Warning: requested action outside of bounds, being clamped\n", - "Time: 148.2. Warning: requested action outside of bounds, being clamped\n", - "Time: 148.3. Warning: requested action outside of bounds, being clamped\n", - "Time: 148.4. Warning: requested action outside of bounds, being clamped\n", - "Time: 148.5. Warning: requested action outside of bounds, being clamped\n", - "Time: 148.6. Warning: requested action outside of bounds, being clamped\n", - "Time: 148.7. Warning: requested action outside of bounds, being clamped\n", - "Time: 148.8. Warning: requested action outside of bounds, being clamped\n", - "Time: 148.9. Warning: requested action outside of bounds, being clamped\n", - "Time: 149.0. Warning: requested action outside of bounds, being clamped\n", - "Time: 149.1. Warning: requested action outside of bounds, being clamped\n", - "Time: 149.2. Warning: requested action outside of bounds, being clamped\n", - "Time: 149.3. Warning: requested action outside of bounds, being clamped\n", - "Time: 149.4. Warning: requested action outside of bounds, being clamped\n", - "Time: 149.5. Warning: requested action outside of bounds, being clamped\n", - "Time: 149.6. Warning: requested action outside of bounds, being clamped\n", - "Time: 149.7. Warning: requested action outside of bounds, being clamped\n", - "Time: 149.8. Warning: requested action outside of bounds, being clamped\n", - "Time: 149.9. Warning: requested action outside of bounds, being clamped\n", - "Time: 150.0. Warning: requested action outside of bounds, being clamped\n", - "Time: 150.1. Warning: requested action outside of bounds, being clamped\n", - "Time: 150.2. Warning: requested action outside of bounds, being clamped\n", - "Time: 150.3. Warning: requested action outside of bounds, being clamped\n", - "Time: 150.4. Warning: requested action outside of bounds, being clamped\n", - "Time: 150.5. Warning: requested action outside of bounds, being clamped\n", - "Time: 150.6. Warning: requested action outside of bounds, being clamped\n", - "Time: 150.7. Warning: requested action outside of bounds, being clamped\n", - "Time: 150.8. Warning: requested action outside of bounds, being clamped\n", - "Time: 150.9. Warning: requested action outside of bounds, being clamped\n", - "Time: 151.0. Warning: requested action outside of bounds, being clamped\n", - "Time: 151.1. Warning: requested action outside of bounds, being clamped\n", - "Time: 151.2. Warning: requested action outside of bounds, being clamped\n", - "Time: 151.3. Warning: requested action outside of bounds, being clamped\n", - "Time: 151.4. Warning: requested action outside of bounds, being clamped\n", - "Time: 151.5. Warning: requested action outside of bounds, being clamped\n", - "Time: 151.6. Warning: requested action outside of bounds, being clamped\n", - "Time: 151.7. Warning: requested action outside of bounds, being clamped\n", - "Time: 151.8. Warning: requested action outside of bounds, being clamped\n", - "Time: 151.9. Warning: requested action outside of bounds, being clamped\n", - "Time: 152.0. Warning: requested action outside of bounds, being clamped\n", - "Time: 152.1. Warning: requested action outside of bounds, being clamped\n", - "Time: 152.2. Warning: requested action outside of bounds, being clamped\n", - "Time: 152.3. Warning: requested action outside of bounds, being clamped\n", - "Time: 152.4. Warning: requested action outside of bounds, being clamped\n", - "Time: 152.5. Warning: requested action outside of bounds, being clamped\n", - "Time: 152.6. Warning: requested action outside of bounds, being clamped\n", - "Time: 152.7. Warning: requested action outside of bounds, being clamped\n", - "Time: 152.8. Warning: requested action outside of bounds, being clamped\n", - "Time: 152.9. Warning: requested action outside of bounds, being clamped\n", - "Time: 153.0. Warning: requested action outside of bounds, being clamped\n", - "Time: 153.1. Warning: requested action outside of bounds, being clamped\n", - "Time: 153.2. Warning: requested action outside of bounds, being clamped\n", - "Time: 153.3. Warning: requested action outside of bounds, being clamped\n", - "Time: 153.4. Warning: requested action outside of bounds, being clamped\n", - "Time: 153.5. Warning: requested action outside of bounds, being clamped\n", - "Time: 153.6. Warning: requested action outside of bounds, being clamped\n", - "Time: 153.70000000000002. Warning: requested action outside of bounds, being clamped\n", - "Time: 153.8. Warning: requested action outside of bounds, being clamped\n", - "Time: 153.9. Warning: requested action outside of bounds, being clamped\n", - "Time: 154.0. Warning: requested action outside of bounds, being clamped\n", - "Time: 154.1. Warning: requested action outside of bounds, being clamped\n", - "Time: 154.20000000000002. Warning: requested action outside of bounds, being clamped\n", - "Time: 154.3. Warning: requested action outside of bounds, being clamped\n", - "Time: 154.4. Warning: requested action outside of bounds, being clamped\n", - "Time: 154.5. Warning: requested action outside of bounds, being clamped\n", - "Time: 154.6. Warning: requested action outside of bounds, being clamped\n", - "Time: 154.70000000000002. Warning: requested action outside of bounds, being clamped\n", - "Time: 154.8. Warning: requested action outside of bounds, being clamped\n", - "Time: 154.9. Warning: requested action outside of bounds, being clamped\n", - "Time: 155.0. Warning: requested action outside of bounds, being clamped\n", - "Time: 155.1. Warning: requested action outside of bounds, being clamped\n", - "Time: 155.20000000000002. Warning: requested action outside of bounds, being clamped\n", - "Time: 155.3. Warning: requested action outside of bounds, being clamped\n", - "Time: 155.4. Warning: requested action outside of bounds, being clamped\n", - "Time: 155.5. Warning: requested action outside of bounds, being clamped\n", - "Time: 155.6. Warning: requested action outside of bounds, being clamped\n", - "Time: 155.70000000000002. Warning: requested action outside of bounds, being clamped\n", - "Time: 155.8. Warning: requested action outside of bounds, being clamped\n", - "Time: 155.9. Warning: requested action outside of bounds, being clamped\n", - "Time: 156.0. Warning: requested action outside of bounds, being clamped\n", - "Time: 156.1. Warning: requested action outside of bounds, being clamped\n", - "Time: 156.20000000000002. Warning: requested action outside of bounds, being clamped\n", - "Time: 156.3. Warning: requested action outside of bounds, being clamped\n", - "Time: 156.4. Warning: requested action outside of bounds, being clamped\n", - "Time: 156.5. Warning: requested action outside of bounds, being clamped\n", - "Time: 156.6. Warning: requested action outside of bounds, being clamped\n", - "Time: 156.70000000000002. Warning: requested action outside of bounds, being clamped\n", - "Time: 156.8. Warning: requested action outside of bounds, being clamped\n", - "Time: 156.9. Warning: requested action outside of bounds, being clamped\n", - "Time: 157.0. Warning: requested action outside of bounds, being clamped\n", - "Time: 157.1. Warning: requested action outside of bounds, being clamped\n", - "Time: 157.20000000000002. Warning: requested action outside of bounds, being clamped\n", - "Time: 157.3. Warning: requested action outside of bounds, being clamped\n", - "Time: 157.4. Warning: requested action outside of bounds, being clamped\n", - "Time: 157.5. Warning: requested action outside of bounds, being clamped\n", - "Time: 157.6. Warning: requested action outside of bounds, being clamped\n", - "Time: 157.70000000000002. Warning: requested action outside of bounds, being clamped\n", - "Time: 157.8. Warning: requested action outside of bounds, being clamped\n", - "Time: 157.9. Warning: requested action outside of bounds, being clamped\n", - "Time: 158.0. Warning: requested action outside of bounds, being clamped\n", - "Time: 158.1. Warning: requested action outside of bounds, being clamped\n", - "Time: 158.20000000000002. Warning: requested action outside of bounds, being clamped\n", - "Time: 158.3. Warning: requested action outside of bounds, being clamped\n", - "Time: 158.4. Warning: requested action outside of bounds, being clamped\n", - "Time: 158.5. Warning: requested action outside of bounds, being clamped\n", - "Time: 158.6. Warning: requested action outside of bounds, being clamped\n", - "Time: 158.70000000000002. Warning: requested action outside of bounds, being clamped\n", - "Time: 158.8. Warning: requested action outside of bounds, being clamped\n", - "Time: 158.9. Warning: requested action outside of bounds, being clamped\n", - "Time: 159.0. Warning: requested action outside of bounds, being clamped\n", - "Time: 159.1. Warning: requested action outside of bounds, being clamped\n", - "Time: 159.20000000000002. Warning: requested action outside of bounds, being clamped\n", - "Time: 159.3. Warning: requested action outside of bounds, being clamped\n", - "Time: 159.4. Warning: requested action outside of bounds, being clamped\n", - "Time: 159.5. Warning: requested action outside of bounds, being clamped\n", - "Time: 159.6. Warning: requested action outside of bounds, being clamped\n", - "Time: 159.70000000000002. Warning: requested action outside of bounds, being clamped\n", - "Time: 159.8. Warning: requested action outside of bounds, being clamped\n", - "Time: 159.9. Warning: requested action outside of bounds, being clamped\n", - "Time: 160.0. Warning: requested action outside of bounds, being clamped\n", - "Time: 160.1. Warning: requested action outside of bounds, being clamped\n", - "Time: 160.20000000000002. Warning: requested action outside of bounds, being clamped\n", - "Time: 160.3. Warning: requested action outside of bounds, being clamped\n", - "Time: 160.4. Warning: requested action outside of bounds, being clamped\n", - "Time: 160.5. Warning: requested action outside of bounds, being clamped\n", - "Time: 160.6. Warning: requested action outside of bounds, being clamped\n", - "Time: 160.70000000000002. Warning: requested action outside of bounds, being clamped\n", - "Time: 160.8. Warning: requested action outside of bounds, being clamped\n", - "Time: 160.9. Warning: requested action outside of bounds, being clamped\n", - "Time: 161.0. Warning: requested action outside of bounds, being clamped\n", - "Time: 161.1. Warning: requested action outside of bounds, being clamped\n", - "Time: 161.20000000000002. Warning: requested action outside of bounds, being clamped\n", - "Time: 161.3. Warning: requested action outside of bounds, being clamped\n", - "Time: 161.4. Warning: requested action outside of bounds, being clamped\n", - "Time: 161.5. Warning: requested action outside of bounds, being clamped\n", - "Time: 161.6. Warning: requested action outside of bounds, being clamped\n", - "Time: 161.70000000000002. Warning: requested action outside of bounds, being clamped\n", - "Time: 161.8. Warning: requested action outside of bounds, being clamped\n", - "Time: 161.9. Warning: requested action outside of bounds, being clamped\n", - "Time: 162.0. Warning: requested action outside of bounds, being clamped\n", - "Time: 162.1. Warning: requested action outside of bounds, being clamped\n", - "Time: 162.20000000000002. Warning: requested action outside of bounds, being clamped\n", - "Time: 162.3. Warning: requested action outside of bounds, being clamped\n", - "Time: 162.4. Warning: requested action outside of bounds, being clamped\n", - "Time: 162.5. Warning: requested action outside of bounds, being clamped\n", - "Time: 162.6. Warning: requested action outside of bounds, being clamped\n", - "Time: 162.70000000000002. Warning: requested action outside of bounds, being clamped\n", - "Time: 162.8. Warning: requested action outside of bounds, being clamped\n", - "Time: 162.9. Warning: requested action outside of bounds, being clamped\n", - "Time: 163.0. Warning: requested action outside of bounds, being clamped\n", - "Time: 163.1. Warning: requested action outside of bounds, being clamped\n", - "Time: 163.20000000000002. Warning: requested action outside of bounds, being clamped\n", - "Time: 163.3. Warning: requested action outside of bounds, being clamped\n", - "Time: 163.4. Warning: requested action outside of bounds, being clamped\n", - "Time: 163.5. Warning: requested action outside of bounds, being clamped\n", - "Time: 163.6. Warning: requested action outside of bounds, being clamped\n", - "Time: 163.70000000000002. Warning: requested action outside of bounds, being clamped\n", - "Time: 163.8. Warning: requested action outside of bounds, being clamped\n", - "Time: 163.9. Warning: requested action outside of bounds, being clamped\n", - "Time: 164.0. Warning: requested action outside of bounds, being clamped\n", - "Time: 164.1. Warning: requested action outside of bounds, being clamped\n", - "Time: 164.20000000000002. Warning: requested action outside of bounds, being clamped\n", - "Time: 164.3. Warning: requested action outside of bounds, being clamped\n", - "Time: 164.4. Warning: requested action outside of bounds, being clamped\n", - "Time: 164.5. Warning: requested action outside of bounds, being clamped\n", - "Time: 164.6. Warning: requested action outside of bounds, being clamped\n", - "Time: 164.70000000000002. Warning: requested action outside of bounds, being clamped\n", - "Time: 164.8. Warning: requested action outside of bounds, being clamped\n", - "Time: 164.9. Warning: requested action outside of bounds, being clamped\n", - "Time: 165.0. Warning: requested action outside of bounds, being clamped\n", - "Time: 165.1. Warning: requested action outside of bounds, being clamped\n", - "Time: 165.20000000000002. Warning: requested action outside of bounds, being clamped\n", - "Time: 165.3. Warning: requested action outside of bounds, being clamped\n", - "Time: 165.4. Warning: requested action outside of bounds, being clamped\n", - "Time: 165.5. Warning: requested action outside of bounds, being clamped\n", - "Time: 165.6. Warning: requested action outside of bounds, being clamped\n", - "Time: 165.70000000000002. Warning: requested action outside of bounds, being clamped\n", - "Time: 165.8. Warning: requested action outside of bounds, being clamped\n", - "Time: 165.9. Warning: requested action outside of bounds, being clamped\n", - "Time: 166.0. Warning: requested action outside of bounds, being clamped\n", - "Time: 166.1. Warning: requested action outside of bounds, being clamped\n", - "Time: 166.20000000000002. Warning: requested action outside of bounds, being clamped\n", - "Time: 166.3. Warning: requested action outside of bounds, being clamped\n", - "Time: 166.4. Warning: requested action outside of bounds, being clamped\n", - "Time: 166.5. Warning: requested action outside of bounds, being clamped\n", - "Time: 166.6. Warning: requested action outside of bounds, being clamped\n", - "Time: 166.70000000000002. Warning: requested action outside of bounds, being clamped\n", - "Time: 166.8. Warning: requested action outside of bounds, being clamped\n", - "Time: 166.9. Warning: requested action outside of bounds, being clamped\n", - "Time: 167.0. Warning: requested action outside of bounds, being clamped\n", - "Time: 167.1. Warning: requested action outside of bounds, being clamped\n", - "Time: 167.20000000000002. Warning: requested action outside of bounds, being clamped\n", - "Time: 167.3. Warning: requested action outside of bounds, being clamped\n", - "Time: 167.4. Warning: requested action outside of bounds, being clamped\n", - "Time: 167.5. Warning: requested action outside of bounds, being clamped\n", - "Time: 197.9. Warning: requested action outside of bounds, being clamped\n", - "Time: 198.0. Warning: requested action outside of bounds, being clamped\n", - "Time: 198.1. Warning: requested action outside of bounds, being clamped\n", - "Time: 198.20000000000002. Warning: requested action outside of bounds, being clamped\n", - "Time: 198.3. Warning: requested action outside of bounds, being clamped\n", - "Time: 198.4. Warning: requested action outside of bounds, being clamped\n", - "Time: 198.5. Warning: requested action outside of bounds, being clamped\n", - "Time: 198.6. Warning: requested action outside of bounds, being clamped\n", - "Time: 198.70000000000002. Warning: requested action outside of bounds, being clamped\n", - "Time: 198.8. Warning: requested action outside of bounds, being clamped\n", - "Time: 198.9. Warning: requested action outside of bounds, being clamped\n", - "Time: 199.0. Warning: requested action outside of bounds, being clamped\n", - "Time: 199.1. Warning: requested action outside of bounds, being clamped\n", - "Time: 199.20000000000002. Warning: requested action outside of bounds, being clamped\n", - "Time: 199.3. Warning: requested action outside of bounds, being clamped\n", - "Time: 199.4. Warning: requested action outside of bounds, being clamped\n", - "Time: 199.5. Warning: requested action outside of bounds, being clamped\n", - "Time: 199.6. Warning: requested action outside of bounds, being clamped\n", - "Time: 199.70000000000002. Warning: requested action outside of bounds, being clamped\n", - "Time: 199.8. Warning: requested action outside of bounds, being clamped\n", - "Time: 199.9. Warning: requested action outside of bounds, being clamped\n", - "Time: 200.0. Warning: requested action outside of bounds, being clamped\n", - "Time: 200.1. Warning: requested action outside of bounds, being clamped\n", - "Time: 200.20000000000002. Warning: requested action outside of bounds, being clamped\n", - "Time: 200.3. Warning: requested action outside of bounds, being clamped\n", - "Time: 200.4. Warning: requested action outside of bounds, being clamped\n", - "Time: 200.5. Warning: requested action outside of bounds, being clamped\n", - "Time: 200.6. Warning: requested action outside of bounds, being clamped\n", - "Time: 200.70000000000002. Warning: requested action outside of bounds, being clamped\n", - "Time: 200.8. Warning: requested action outside of bounds, being clamped\n", - "Time: 200.9. Warning: requested action outside of bounds, being clamped\n", - "Time: 201.0. Warning: requested action outside of bounds, being clamped\n", - "Time: 201.1. Warning: requested action outside of bounds, being clamped\n", - "Time: 201.20000000000002. Warning: requested action outside of bounds, being clamped\n", - "Time: 201.3. Warning: requested action outside of bounds, being clamped\n", - "Time: 201.4. Warning: requested action outside of bounds, being clamped\n", - "Time: 201.5. Warning: requested action outside of bounds, being clamped\n", - "Time: 201.6. Warning: requested action outside of bounds, being clamped\n", - "Time: 201.70000000000002. Warning: requested action outside of bounds, being clamped\n", - "Time: 201.8. Warning: requested action outside of bounds, being clamped\n", - "Time: 201.9. Warning: requested action outside of bounds, being clamped\n", - "Time: 202.0. Warning: requested action outside of bounds, being clamped\n", - "Time: 202.1. Warning: requested action outside of bounds, being clamped\n", - "Time: 202.20000000000002. Warning: requested action outside of bounds, being clamped\n", - "Time: 202.3. Warning: requested action outside of bounds, being clamped\n", - "Time: 202.4. Warning: requested action outside of bounds, being clamped\n", - "Time: 202.5. Warning: requested action outside of bounds, being clamped\n", - "Time: 202.6. Warning: requested action outside of bounds, being clamped\n", - "Time: 202.70000000000002. Warning: requested action outside of bounds, being clamped\n", - "Time: 202.8. Warning: requested action outside of bounds, being clamped\n", - "Time: 202.9. Warning: requested action outside of bounds, being clamped\n", - "Time: 203.0. Warning: requested action outside of bounds, being clamped\n", - "Time: 203.1. Warning: requested action outside of bounds, being clamped\n", - "Time: 203.20000000000002. Warning: requested action outside of bounds, being clamped\n", - "Time: 203.3. Warning: requested action outside of bounds, being clamped\n", - "Time: 203.4. Warning: requested action outside of bounds, being clamped\n", - "Time: 203.5. Warning: requested action outside of bounds, being clamped\n", - "Time: 203.6. Warning: requested action outside of bounds, being clamped\n", - "Time: 203.70000000000002. Warning: requested action outside of bounds, being clamped\n", - "Time: 203.8. Warning: requested action outside of bounds, being clamped\n", - "Time: 203.9. Warning: requested action outside of bounds, being clamped\n", - "Time: 204.0. Warning: requested action outside of bounds, being clamped\n", - "Time: 204.1. Warning: requested action outside of bounds, being clamped\n", - "Time: 204.20000000000002. Warning: requested action outside of bounds, being clamped\n", - "Time: 204.3. Warning: requested action outside of bounds, being clamped\n", - "Time: 204.4. Warning: requested action outside of bounds, being clamped\n", - "Time: 204.5. Warning: requested action outside of bounds, being clamped\n", - "Time: 204.6. Warning: requested action outside of bounds, being clamped\n", - "Time: 204.70000000000002. Warning: requested action outside of bounds, being clamped\n", - "Time: 204.8. Warning: requested action outside of bounds, being clamped\n", - "Time: 204.9. Warning: requested action outside of bounds, being clamped\n", - "Time: 205.0. Warning: requested action outside of bounds, being clamped\n", - "Time: 205.1. Warning: requested action outside of bounds, being clamped\n", - "Time: 205.20000000000002. Warning: requested action outside of bounds, being clamped\n", - "Time: 205.3. Warning: requested action outside of bounds, being clamped\n", - "Time: 205.4. Warning: requested action outside of bounds, being clamped\n", - "Time: 205.5. Warning: requested action outside of bounds, being clamped\n", - "Time: 205.6. Warning: requested action outside of bounds, being clamped\n", - "Time: 205.70000000000002. Warning: requested action outside of bounds, being clamped\n", - "Time: 205.8. Warning: requested action outside of bounds, being clamped\n", - "Time: 205.9. Warning: requested action outside of bounds, being clamped\n", - "Time: 206.0. Warning: requested action outside of bounds, being clamped\n", - "Time: 206.1. Warning: requested action outside of bounds, being clamped\n", - "Time: 206.20000000000002. Warning: requested action outside of bounds, being clamped\n", - "Time: 206.3. Warning: requested action outside of bounds, being clamped\n", - "Time: 206.4. Warning: requested action outside of bounds, being clamped\n", - "Time: 206.5. Warning: requested action outside of bounds, being clamped\n", - "Time: 206.6. Warning: requested action outside of bounds, being clamped\n", - "Time: 206.70000000000002. Warning: requested action outside of bounds, being clamped\n", - "Time: 206.8. Warning: requested action outside of bounds, being clamped\n", - "Time: 206.9. Warning: requested action outside of bounds, being clamped\n", - "Time: 207.0. Warning: requested action outside of bounds, being clamped\n", - "Time: 207.1. Warning: requested action outside of bounds, being clamped\n", - "Time: 207.20000000000002. Warning: requested action outside of bounds, being clamped\n", - "Time: 207.3. Warning: requested action outside of bounds, being clamped\n", - "Time: 207.4. Warning: requested action outside of bounds, being clamped\n", - "Time: 207.5. Warning: requested action outside of bounds, being clamped\n", - "Time: 207.6. Warning: requested action outside of bounds, being clamped\n", - "Time: 207.70000000000002. Warning: requested action outside of bounds, being clamped\n", - "Time: 207.8. Warning: requested action outside of bounds, being clamped\n", - "Time: 207.9. Warning: requested action outside of bounds, being clamped\n", - "Time: 208.0. Warning: requested action outside of bounds, being clamped\n", - "Time: 208.1. Warning: requested action outside of bounds, being clamped\n", - "Time: 208.20000000000002. Warning: requested action outside of bounds, being clamped\n", - "Time: 208.3. Warning: requested action outside of bounds, being clamped\n", - "Time: 208.4. Warning: requested action outside of bounds, being clamped\n", - "Time: 208.5. Warning: requested action outside of bounds, being clamped\n", - "Time: 208.6. Warning: requested action outside of bounds, being clamped\n", - "Time: 208.70000000000002. Warning: requested action outside of bounds, being clamped\n", - "Time: 208.8. Warning: requested action outside of bounds, being clamped\n", - "Time: 208.9. Warning: requested action outside of bounds, being clamped\n", - "Time: 209.0. Warning: requested action outside of bounds, being clamped\n", - "Time: 209.1. Warning: requested action outside of bounds, being clamped\n", - "Time: 209.20000000000002. Warning: requested action outside of bounds, being clamped\n", - "Time: 209.3. Warning: requested action outside of bounds, being clamped\n", - "Time: 209.4. Warning: requested action outside of bounds, being clamped\n", - "Time: 209.5. Warning: requested action outside of bounds, being clamped\n", - "Time: 209.6. Warning: requested action outside of bounds, being clamped\n", - "Time: 209.70000000000002. Warning: requested action outside of bounds, being clamped\n", - "Time: 209.8. Warning: requested action outside of bounds, being clamped\n", - "Time: 209.9. Warning: requested action outside of bounds, being clamped\n", - "Time: 210.0. Warning: requested action outside of bounds, being clamped\n", - "Time: 210.1. Warning: requested action outside of bounds, being clamped\n", - "Time: 210.20000000000002. Warning: requested action outside of bounds, being clamped\n", - "Time: 210.3. Warning: requested action outside of bounds, being clamped\n", - "Time: 210.4. Warning: requested action outside of bounds, being clamped\n", - "Time: 210.5. Warning: requested action outside of bounds, being clamped\n", - "Time: 210.6. Warning: requested action outside of bounds, being clamped\n", - "Time: 210.70000000000002. Warning: requested action outside of bounds, being clamped\n", - "Time: 210.8. Warning: requested action outside of bounds, being clamped\n", - "Time: 210.9. Warning: requested action outside of bounds, being clamped\n", - "Time: 211.0. Warning: requested action outside of bounds, being clamped\n", - "Time: 211.1. Warning: requested action outside of bounds, being clamped\n", - "Time: 211.20000000000002. Warning: requested action outside of bounds, being clamped\n", - "Time: 211.3. Warning: requested action outside of bounds, being clamped\n", - "Time: 211.4. Warning: requested action outside of bounds, being clamped\n", - "Time: 211.5. Warning: requested action outside of bounds, being clamped\n", - "Time: 211.6. Warning: requested action outside of bounds, being clamped\n", - "Time: 211.70000000000002. Warning: requested action outside of bounds, being clamped\n", - "Time: 211.8. Warning: requested action outside of bounds, being clamped\n", - "Time: 211.9. Warning: requested action outside of bounds, being clamped\n", - "Time: 212.0. Warning: requested action outside of bounds, being clamped\n", - "Time: 212.1. Warning: requested action outside of bounds, being clamped\n", - "Time: 212.20000000000002. Warning: requested action outside of bounds, being clamped\n", - "Time: 212.3. Warning: requested action outside of bounds, being clamped\n", - "Time: 212.4. Warning: requested action outside of bounds, being clamped\n", - "Time: 212.5. Warning: requested action outside of bounds, being clamped\n", - "Time: 212.6. Warning: requested action outside of bounds, being clamped\n", - "Time: 212.70000000000002. Warning: requested action outside of bounds, being clamped\n", - "Time: 212.8. Warning: requested action outside of bounds, being clamped\n", - "Time: 212.9. Warning: requested action outside of bounds, being clamped\n", - "Time: 213.0. Warning: requested action outside of bounds, being clamped\n", - "Time: 213.1. Warning: requested action outside of bounds, being clamped\n", - "Time: 213.20000000000002. Warning: requested action outside of bounds, being clamped\n", - "Time: 213.3. Warning: requested action outside of bounds, being clamped\n", - "Time: 213.4. Warning: requested action outside of bounds, being clamped\n", - "Time: 213.5. Warning: requested action outside of bounds, being clamped\n", - "Time: 213.6. Warning: requested action outside of bounds, being clamped\n", - "Time: 213.70000000000002. Warning: requested action outside of bounds, being clamped\n", - "Time: 213.8. Warning: requested action outside of bounds, being clamped\n", - "Time: 213.9. Warning: requested action outside of bounds, being clamped\n", - "Time: 214.0. Warning: requested action outside of bounds, being clamped\n", - "Time: 214.1. Warning: requested action outside of bounds, being clamped\n", - "Time: 214.20000000000002. Warning: requested action outside of bounds, being clamped\n", - "Time: 214.3. Warning: requested action outside of bounds, being clamped\n", - "Time: 214.4. Warning: requested action outside of bounds, being clamped\n", - "Time: 214.5. Warning: requested action outside of bounds, being clamped\n", - "Time: 214.6. Warning: requested action outside of bounds, being clamped\n", - "Time: 214.70000000000002. Warning: requested action outside of bounds, being clamped\n", - "Time: 214.8. Warning: requested action outside of bounds, being clamped\n", - "Time: 214.9. Warning: requested action outside of bounds, being clamped\n", - "Time: 264.3. Warning: requested action outside of bounds, being clamped\n", - "Time: 264.40000000000003. Warning: requested action outside of bounds, being clamped\n", - "Time: 264.50000000000006. Warning: requested action outside of bounds, being clamped\n", - "Time: 264.6. Warning: requested action outside of bounds, being clamped\n", - "Time: 264.70000000000005. Warning: requested action outside of bounds, being clamped\n", - "Time: 264.8. Warning: requested action outside of bounds, being clamped\n", - "Time: 264.90000000000003. Warning: requested action outside of bounds, being clamped\n", - "Time: 265.00000000000006. Warning: requested action outside of bounds, being clamped\n", - "Time: 265.1. Warning: requested action outside of bounds, being clamped\n", - "Time: 265.20000000000005. Warning: requested action outside of bounds, being clamped\n", - "Time: 265.3. Warning: requested action outside of bounds, being clamped\n", - "Time: 265.40000000000003. Warning: requested action outside of bounds, being clamped\n", - "Time: 265.50000000000006. Warning: requested action outside of bounds, being clamped\n", - "Time: 265.6. Warning: requested action outside of bounds, being clamped\n", - "Time: 265.70000000000005. Warning: requested action outside of bounds, being clamped\n", - "Time: 265.8. Warning: requested action outside of bounds, being clamped\n", - "Time: 265.90000000000003. Warning: requested action outside of bounds, being clamped\n", - "Time: 266.00000000000006. Warning: requested action outside of bounds, being clamped\n", - "Time: 266.1. Warning: requested action outside of bounds, being clamped\n", - "Time: 266.20000000000005. Warning: requested action outside of bounds, being clamped\n", - "Time: 266.3. Warning: requested action outside of bounds, being clamped\n", - "Time: 266.40000000000003. Warning: requested action outside of bounds, being clamped\n", - "Time: 266.50000000000006. Warning: requested action outside of bounds, being clamped\n", - "Time: 266.6. Warning: requested action outside of bounds, being clamped\n", - "Time: 266.70000000000005. Warning: requested action outside of bounds, being clamped\n", - "Time: 266.8. Warning: requested action outside of bounds, being clamped\n", - "Time: 266.90000000000003. Warning: requested action outside of bounds, being clamped\n", - "Time: 267.00000000000006. Warning: requested action outside of bounds, being clamped\n", - "Time: 267.1. Warning: requested action outside of bounds, being clamped\n", - "Time: 267.20000000000005. Warning: requested action outside of bounds, being clamped\n", - "Time: 267.3. Warning: requested action outside of bounds, being clamped\n", - "Time: 267.40000000000003. Warning: requested action outside of bounds, being clamped\n", - "Time: 267.50000000000006. Warning: requested action outside of bounds, being clamped\n", - "Time: 267.6. Warning: requested action outside of bounds, being clamped\n", - "Time: 267.70000000000005. Warning: requested action outside of bounds, being clamped\n", - "Time: 267.8. Warning: requested action outside of bounds, being clamped\n", - "Time: 267.90000000000003. Warning: requested action outside of bounds, being clamped\n", - "Time: 268.00000000000006. Warning: requested action outside of bounds, being clamped\n", - "Time: 268.1. Warning: requested action outside of bounds, being clamped\n", - "Time: 268.20000000000005. Warning: requested action outside of bounds, being clamped\n", - "Time: 268.3. Warning: requested action outside of bounds, being clamped\n", - "Time: 268.40000000000003. Warning: requested action outside of bounds, being clamped\n", - "Time: 268.50000000000006. Warning: requested action outside of bounds, being clamped\n", - "Time: 268.6. Warning: requested action outside of bounds, being clamped\n", - "Time: 268.70000000000005. Warning: requested action outside of bounds, being clamped\n", - "Time: 268.8. Warning: requested action outside of bounds, being clamped\n", - "Time: 268.90000000000003. Warning: requested action outside of bounds, being clamped\n", - "Time: 269.00000000000006. Warning: requested action outside of bounds, being clamped\n", - "Time: 269.1. Warning: requested action outside of bounds, being clamped\n", - "Time: 269.20000000000005. Warning: requested action outside of bounds, being clamped\n", - "Time: 269.3. Warning: requested action outside of bounds, being clamped\n", - "Time: 269.40000000000003. Warning: requested action outside of bounds, being clamped\n", - "Time: 269.50000000000006. Warning: requested action outside of bounds, being clamped\n", - "Time: 269.6. Warning: requested action outside of bounds, being clamped\n", - "Time: 269.70000000000005. Warning: requested action outside of bounds, being clamped\n", - "Time: 269.8. Warning: requested action outside of bounds, being clamped\n", - "Time: 269.90000000000003. Warning: requested action outside of bounds, being clamped\n", - "Time: 270.00000000000006. Warning: requested action outside of bounds, being clamped\n", - "Time: 270.1. Warning: requested action outside of bounds, being clamped\n", - "Time: 270.20000000000005. Warning: requested action outside of bounds, being clamped\n", - "Time: 270.3. Warning: requested action outside of bounds, being clamped\n", - "Time: 270.40000000000003. Warning: requested action outside of bounds, being clamped\n", - "Time: 270.50000000000006. Warning: requested action outside of bounds, being clamped\n", - "Time: 270.6. Warning: requested action outside of bounds, being clamped\n", - "Time: 270.70000000000005. Warning: requested action outside of bounds, being clamped\n", - "Time: 270.90000000000003. Warning: requested action outside of bounds, being clamped\n", - "Time: 271.1. Warning: requested action outside of bounds, being clamped\n", - "Time: 271.50000000000006. Warning: requested action outside of bounds, being clamped\n", - "Time: 271.70000000000005. Warning: requested action outside of bounds, being clamped\n", - "Time: 272.3. Warning: requested action outside of bounds, being clamped\n", - "Time: 272.50000000000006. Warning: requested action outside of bounds, being clamped\n", - "Time: 272.70000000000005. Warning: requested action outside of bounds, being clamped\n", - "Time: 272.90000000000003. Warning: requested action outside of bounds, being clamped\n", - "Time: 273.1. Warning: requested action outside of bounds, being clamped\n", - "Time: 273.3. Warning: requested action outside of bounds, being clamped\n", - "Time: 273.50000000000006. Warning: requested action outside of bounds, being clamped\n", - "Time: 273.70000000000005. Warning: requested action outside of bounds, being clamped\n", - "Time: 273.90000000000003. Warning: requested action outside of bounds, being clamped\n", - "Time: 274.1. Warning: requested action outside of bounds, being clamped\n", - "Time: 274.3. Warning: requested action outside of bounds, being clamped\n", - "Time: 274.50000000000006. Warning: requested action outside of bounds, being clamped\n", - "Time: 274.70000000000005. Warning: requested action outside of bounds, being clamped\n" - ] - } - ], - "metadata": { - "scrolled": true, - "tags": [] - } - }, - { - "cell_type": "code", - "execution_count": 61, - "source": [ - "ego_observations = obs_to_ego_frame(data_observations)" - ], - "outputs": [ - { - "output_type": "stream", - "name": "stderr", - "text": [ - "/tmp/ipykernel_31031/2885851852.py:4: UserWarning: To copy construct from a tensor, it is recommended to use sourceTensor.clone().detach() or sourceTensor.clone().detach().requires_grad_(True), rather than torch.tensor(sourceTensor).\n", - " obs = torch.tensor(obs)\n" - ] - } - ], - "metadata": {} - }, - { - "cell_type": "code", - "execution_count": 62, - "source": [ - "print(ego_observations.shape)\n", - "print(data_actions.shape)" - ], - "outputs": [ - { - "output_type": "stream", - "name": "stdout", - "text": [ - "torch.Size([38600, 151, 5])\n", - "torch.Size([38600, 1])\n" - ] - } - ], - "metadata": {} - }, - { - "cell_type": "code", - "execution_count": 63, - "source": [ - "ext_actions = data_actions.repeat(1, ego_observations.shape[-2])\n", - "print(ext_actions.shape)" - ], - "outputs": [ - { - "output_type": "stream", - "name": "stdout", - "text": [ - "torch.Size([38600, 151])\n" - ] - } - ], - "metadata": {} - }, - { - "cell_type": "code", - "execution_count": 64, - "source": [ - "flat_observations = ego_observations.reshape(-1, ego_observations.shape[-1])\n", - "flat_actions = ext_actions.reshape(-1)\n", - "print(flat_observations.shape)\n", - "print(flat_actions.shape)" - ], - "outputs": [ - { - "output_type": "stream", - "name": "stdout", - "text": [ - "torch.Size([5828600, 5])\n", - "torch.Size([5828600])\n" - ] - } - ], - "metadata": {} - }, - { - "cell_type": "code", - "execution_count": 66, - "source": [ - "plt.scatter(\n", - " flat_observations[:, 0],\n", - " flat_observations[:, 1],\n", - " c=flat_actions\n", - ")\n", - "plt.colorbar()\n", - "plt.grid()" - ], - "outputs": [ - { - "output_type": "execute_result", - "data": { - "text/plain": [ - "" - ] - }, - "metadata": {}, - "execution_count": 66 - }, - { - "output_type": "display_data", - "data": { - "text/plain": [ - "
" - ], - "image/png": "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" - }, - "metadata": { - "needs_background": "light" - } - } - ], - "metadata": {} - }, - { - "cell_type": "code", - "execution_count": 8, - "source": [ - "def demo_sa(demo):\n", - " num_trajs = demo['num_trajs']\n", - " for t in range(num_trajs):\n", - " traj = demo[str(t)].item()\n", - " for o, a in zip(traj['states'], traj['actions']):\n", - " yield o, a" - ], - "outputs": [], - "metadata": {} - }, - { - "cell_type": "code", - "execution_count": 9, - "source": [ - "import gym\n", - "from tqdm import tqdm\n", - "\n", - "def policy_sa(pi, max_steps=1000, mode=None):\n", - " env = gym.make('intersim:intersim-v0')\n", - " env.reset() # obs = env.reset()\n", - " obs, _, done, _ = env.step(0 * env.action_space.sample())\n", - " \n", - " _except = lambda o, i: torch.cat((o[:i], o[i+1:]))\n", - " \n", - " _relative_state_v = lambda obs: torch.stack((\n", - " obs[..., 0],\n", - " obs[..., 1],\n", - " (obs[..., 2]**2 + obs[..., 3]**2).sqrt(),\n", - " obs[..., 4],\n", - " obs[..., 5],\n", - " ), -1)\n", - " \n", - " for _ in tqdm(range(max_steps)):\n", - " pi_obs = torch.stack(tuple(\n", - " torch.cat((e.unsqueeze(0), _relative_state_v(_except(o, i))))\n", - " for i, (e, o) in enumerate(zip(obs['state'], obs['relative_state']))\n", - " ))\n", - " \n", - " actions = pi(pi_obs)\n", - " \n", - " yield from zip(pi_obs, actions)\n", - " \n", - " obs, _, done, _ = env.step(actions)\n", - " \n", - " env.render(mode=mode)\n", - " \n", - " if done:\n", - " break\n", - "\n", - " env.close()" - ], - "outputs": [], - "metadata": {} - }, - { - "cell_type": "code", - "execution_count": 10, - "source": [ - "import torch\n", - "\n", - "def obs_to_ego_frame(obs):\n", - " obs = torch.tensor(obs)\n", - " ego = obs[..., 0, :]\n", - " rel = obs[..., 1:, :]\n", - "\n", - " front = torch.stack((torch.cos(ego[..., 3]), torch.sin(ego[..., 3])), -1)\n", - " left = torch.stack((-torch.sin(ego[..., 3]), torch.cos(ego[..., 3])), -1)\n", - " df = (rel[..., :2] * front.unsqueeze(-2)).sum(-1)\n", - " dl = (rel[..., :2] * left.unsqueeze(-2)).sum(-1)\n", - " #d = (rel[..., :2] ** 2).sum(-1).sqrt()\n", - " #alpha = torch.atan2(dl, df)\n", - "\n", - " rel[..., 0] = df\n", - " rel[..., 1] = dl\n", - " \n", - " return rel" - ], - "outputs": [], - "metadata": {} - }, - { - "cell_type": "code", - "execution_count": 11, - "source": [ - "def state_distribution(sa):\n", - " front = []\n", - " left = []\n", - " action = []\n", - " \n", - " for o, a in sa:\n", - " o = obs_to_ego_frame(o)\n", - " nan = o.isnan().any(-1)\n", - " o = o[~nan]\n", - " \n", - " front.extend(map(float, o[:, 0]))\n", - " left.extend(map(float, o[:, 1]))\n", - " action.extend([float(a)] * len(o))\n", - " \n", - " plt.scatter(front, left, c=action)\n", - " plt.xlabel('front')\n", - " plt.ylabel('left')\n", - " plt.colorbar()\n", - " plt.grid()" - ], - "outputs": [], - "metadata": {} - }, - { - "cell_type": "code", - "execution_count": 12, - "source": [ - "def action_distribution(sa):\n", - " action = []\n", - " for _, a in sa:\n", - " action.append(float(a))\n", - " plt.hist(action)" - ], - "outputs": [], - "metadata": {} - }, - { - "cell_type": "code", - "execution_count": 13, - "source": [ - "import numpy as np" - ], - "outputs": [], - "metadata": {} - }, - { - "cell_type": "code", - "execution_count": 14, - "source": [ - "state_distribution(demo_sa(np.load('../experts/intersim:intersim-v0/demos.npz', allow_pickle=True)))" - ], - "outputs": [], - "metadata": {} - }, - { - "cell_type": "code", - "execution_count": 17, - "source": [ - "action_distribution(demo_sa(np.load('../experts/intersim:intersim-v0/demos.npz', allow_pickle=True)))" - ], - "outputs": [ - { - "output_type": "display_data", - "data": { - "text/plain": [ - "
" - ], - "image/png": "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" - }, - "metadata": { - "needs_background": "light" - } - } - ], - "metadata": {} - }, - { - "cell_type": "code", - "execution_count": 18, - "source": [ - "def trajectory_actions(demos):\n", - " for i in range(demos['num_trajs']):\n", - " actions = demos[str(i)].item()['actions'].squeeze()\n", - " plt.plot(actions)" - ], - "outputs": [], - "metadata": {} - }, - { - "cell_type": "code", - "execution_count": 20, - "source": [ - "trajectory_actions(np.load('../experts/intersim:intersim-v0/demos.npz', allow_pickle=True))" - ], - "outputs": [ - { - "output_type": "display_data", - "data": { - "text/plain": [ - "
" - ], - "image/png": "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" - }, - "metadata": { - "needs_background": "light" - } - } - ], - "metadata": {} - }, - { - "cell_type": "code", - "execution_count": 11, - "source": [ - "from intersim_advil import IntersimPolicy\n", - "pi = IntersimPolicy(env=None)\n", - "pi.load_state_dict(torch.load('intersim:intersim-v0/advil_policy.pt'))" - ], - "outputs": [ - { - "output_type": "execute_result", - "data": { - "text/plain": [ - "" - ] - }, - "metadata": {}, - "execution_count": 11 - } - ], - "metadata": {} - }, - { - "cell_type": "code", - "execution_count": 17, - "source": [ - "state_distribution(policy_sa(pi, max_steps=200))" - ], - "outputs": [ - { - "output_type": "stream", - "name": "stdout", - "text": [ - "Vehicle Trajectory Paths: datasets/trackfiles/DR_USA_Roundabout_FT/vehicle_tracks_000.csv\n", - "Map Path: datasets/maps/DR_USA_Roundabout_FT.osm\n", - "Environment Reset\n" - ] - }, - { - "output_type": "stream", - "name": "stderr", - "text": [ - " 0%| | 0/200 [00:00" - ], - "image/png": "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" - }, - "metadata": { - "needs_background": "light" - } - } - ], - "metadata": {} - }, - { - "cell_type": "code", - "execution_count": 18, - "source": [ - "action_distribution(policy_sa(pi, max_steps=100))" - ], - "outputs": [ - { - "output_type": "stream", - "name": "stdout", - "text": [ - "Vehicle Trajectory Paths: datasets/trackfiles/DR_USA_Roundabout_FT/vehicle_tracks_000.csv\n", - "Map Path: datasets/maps/DR_USA_Roundabout_FT.osm\n", - "Environment Reset\n" - ] - }, - { - "output_type": "stream", - "name": "stderr", - "text": [ - "100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████| 100/100 [00:02<00:00, 40.28it/s]\n" - ] - }, - { - "output_type": "display_data", - "data": { - "text/plain": [ - "
" - ], - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAXcAAAD4CAYAAAAXUaZHAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjQuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8rg+JYAAAACXBIWXMAAAsTAAALEwEAmpwYAAAREUlEQVR4nO3df4xldX3G8fcjq6ioBWUkCNoBi6ZqdbUj2laUQlXERqQ1CFoFNV2MktSotas21ZrYoAVpja12jQRoBFGQSgKKG2olNaAOuq78Un646K4rO7JWRY26y6d/3LPtdZh1fpw7e2e/vl/JzZz7Pefc82Tm7rNnvvfcO6kqJEltud+4A0iSRs9yl6QGWe6S1CDLXZIaZLlLUoNWjTsAwIEHHliTk5PjjiFJe5Xrr7/++1U1Mde6FVHuk5OTTE9PjzuGJO1Vkty5u3VOy0hSgyx3SWqQ5S5JDZq33JOcm2RbkhuGxi5OsqG7bUqyoRufTPKzoXUfWsbskqTdWMgLqucBHwAu2DVQVS/dtZzkbOCHQ9vfXlWrR5RPkrQE85Z7VV2TZHKudUkCnAQcM+JckqQe+s65HwXcVVW3Do0dluSrST6f5Kjd7ZhkTZLpJNMzMzM9Y0iShvUt91OAi4bubwUeU1VPBd4IXJjkYXPtWFXrqmqqqqYmJua8Bl+StERLLvckq4A/Ay7eNVZVP6+qu7vl64Hbgcf1DSlJWpw+71D9E+CWqtq8ayDJBLC9qnYmORw4ArijZ0bpN9Lk2ivGduxNZ75wbMfWaCzkUsiLgGuBxyfZnOQ13aqT+dUpGYBnAxu7SyMvAV5bVdtHmFeStAALuVrmlN2MnzbH2KXApf1jSZL68B2qktQgy12SGmS5S1KDLHdJapDlLkkNstwlqUGWuyQ1yHKXpAZZ7pLUIMtdkhpkuUtSgyx3SWqQ5S5JDbLcJalBlrskNchyl6QGWe6S1CDLXZIaZLlLUoMsd0lqkOUuSQ2at9yTnJtkW5IbhsbemWRLkg3d7fihdW9NcluSbyR5/nIFlyTt3kLO3M8Djptj/JyqWt3drgRI8gTgZOCJ3T7/mmSfUYWVJC3MvOVeVdcA2xf4eCcAH6uqn1fVt4DbgCN75JMkLUGfOfczkmzspm0O6MYOAb4ztM3mbuw+kqxJMp1kemZmpkcMSdJsSy33DwKPBVYDW4GzF/sAVbWuqqaqampiYmKJMSRJc1lSuVfVXVW1s6ruBT7M/0+9bAEePbTpod2YJGkPWlK5Jzl46O6JwK4raS4HTk6yb5LDgCOAL/WLKElarFXzbZDkIuBo4MAkm4F3AEcnWQ0UsAk4HaCqbkzyceAmYAfw+qrauSzJJUm7NW+5V9Upcwx/5Nds/27g3X1CSZL68R2qktQgy12SGmS5S1KDLHdJapDlLkkNstwlqUGWuyQ1yHKXpAZZ7pLUIMtdkhpkuUtSgyx3SWqQ5S5JDbLcJalBlrskNchyl6QGWe6S1CDLXZIaZLlLUoMsd0lqkOUuSQ2at9yTnJtkW5Ibhsb+McktSTYmuSzJ/t34ZJKfJdnQ3T60jNklSbuxkDP384DjZo2tB55UVU8Gvgm8dWjd7VW1uru9djQxJUmLMW+5V9U1wPZZY5+tqh3d3euAQ5chmyRpiUYx5/5q4NND9w9L8tUkn09y1O52SrImyXSS6ZmZmRHEkCTt0qvck7wd2AF8tBvaCjymqp4KvBG4MMnD5tq3qtZV1VRVTU1MTPSJIUmaZcnlnuQ04E+Bl1dVAVTVz6vq7m75euB24HEjyClJWoQllXuS44C3AC+qqp8OjU8k2adbPhw4ArhjFEElSQu3ar4NklwEHA0cmGQz8A4GV8fsC6xPAnBdd2XMs4F3JfklcC/w2qraPucDS5KWzbzlXlWnzDH8kd1seylwad9QkqR+fIeqJDXIcpekBlnuktQgy12SGmS5S1KDLHdJapDlLkkNstwlqUGWuyQ1yHKXpAZZ7pLUIMtdkhpkuUtSgyx3SWqQ5S5JDbLcJalBlrskNchyl6QGWe6S1CDLXZIaZLlLUoMWVO5Jzk2yLckNQ2MPT7I+ya3d1wO68SR5f5LbkmxM8rTlCi9JmttCz9zPA46bNbYWuLqqjgCu7u4DvAA4orutAT7YP6YkaTEWVO5VdQ2wfdbwCcD53fL5wIuHxi+ogeuA/ZMcPIKskqQF6jPnflBVbe2Wvwcc1C0fAnxnaLvN3divSLImyXSS6ZmZmR4xJEmzjeQF1aoqoBa5z7qqmqqqqYmJiVHEkCR1+pT7XbumW7qv27rxLcCjh7Y7tBuTJO0hfcr9cuDUbvlU4FND46/srpp5JvDDoekbSdIesGohGyW5CDgaODDJZuAdwJnAx5O8BrgTOKnb/ErgeOA24KfAq0acWZI0jwWVe1WdsptVx86xbQGv7xNKktSP71CVpAZZ7pLUIMtdkhpkuUtSgyx3SWqQ5S5JDVrQpZDSb7LJtVeMO4K0aJ65S1KDLHdJapDlLkkNstwlqUGWuyQ1yHKXpAZZ7pLUIMtdkhpkuUtSgyx3SWqQ5S5JDbLcJalBlrskNchyl6QGLfkjf5M8Hrh4aOhw4O+A/YG/BGa68bdV1ZVLPY4kafGWXO5V9Q1gNUCSfYAtwGXAq4BzquqsUQSUJC3eqKZljgVur6o7R/R4kqQeRlXuJwMXDd0/I8nGJOcmOWCuHZKsSTKdZHpmZmauTSRJS9S73JM8AHgR8Ilu6IPAYxlM2WwFzp5rv6paV1VTVTU1MTHRN4YkacgoztxfAHylqu4CqKq7qmpnVd0LfBg4cgTHkCQtwijK/RSGpmSSHDy07kTghhEcQ5K0CEu+WgYgyX7Ac4HTh4bfm2Q1UMCmWeskSXtAr3Kvqp8Aj5g19opeiSRJvfkOVUlqkOUuSQ3qNS0j7SmTa68YdwRpr+KZuyQ1yHKXpAZZ7pLUIMtdkhrkC6paFF/YlPYOnrlLUoMsd0lqkOUuSQ2y3CWpQZa7JDXIcpekBlnuktQgy12SGmS5S1KDLHdJapDlLkkNstwlqUGWuyQ1qPenQibZBPwY2AnsqKqpJA8HLgYmgU3ASVX1g77HkiQtzKjO3P+4qlZX1VR3fy1wdVUdAVzd3Zck7SHLNS1zAnB+t3w+8OJlOo4kaQ6jKPcCPpvk+iRrurGDqmprt/w94KDZOyVZk2Q6yfTMzMwIYkiSdhnFX2J6VlVtSfJIYH2SW4ZXVlUlqdk7VdU6YB3A1NTUfdZLkpau95l7VW3pvm4DLgOOBO5KcjBA93Vb3+NIkhauV7kn2S/JQ3ctA88DbgAuB07tNjsV+FSf40iSFqfvtMxBwGVJdj3WhVX1mSRfBj6e5DXAncBJPY8jSVqEXuVeVXcAT5lj/G7g2D6PLUlaOt+hKkkNstwlqUGWuyQ1yHKXpAaN4k1MYze59oqxHHfTmS8cy3ElaT5NlPu4+J+KpJXKaRlJapDlLkkNstwlqUGWuyQ1yHKXpAZZ7pLUIMtdkhpkuUtSgyx3SWqQ71DdC43rnbGS9h6euUtSgyx3SWqQ5S5JDbLcJalBlrskNWjJ5Z7k0Uk+l+SmJDcm+atu/J1JtiTZ0N2OH11cSdJC9LkUcgfwpqr6SpKHAtcnWd+tO6eqzuofT5K0FEsu96raCmztln+c5GbgkFEFkzQ+/pWxvd9I5tyTTAJPBb7YDZ2RZGOSc5McsJt91iSZTjI9MzMzihiSpE7vck/yEOBS4A1V9SPgg8BjgdUMzuzPnmu/qlpXVVNVNTUxMdE3hiRpSK9yT3J/BsX+0ar6JEBV3VVVO6vqXuDDwJH9Y0qSFqPP1TIBPgLcXFXvGxo/eGizE4Eblh5PkrQUfa6W+SPgFcDXk2zoxt4GnJJkNVDAJuD0HseQJC1Bn6tl/hvIHKuuXHocSdIo+A5VSWqQ5S5JDbLcJalBlrskNchyl6QGWe6S1CDLXZIaZLlLUoMsd0lqkOUuSQ2y3CWpQZa7JDXIcpekBlnuktQgy12SGmS5S1KDLHdJapDlLkkN6vM3VCVppCbXXjGW424684VjOe5y8sxdkhrkmbuk33jj+o0Blu+3hmU7c09yXJJvJLktydrlOo4k6b6WpdyT7AP8C/AC4AnAKUmesBzHkiTd13KduR8J3FZVd1TVL4CPAScs07EkSbMs15z7IcB3hu5vBp4xvEGSNcCa7u49Sb4x4gwHAt8f8WOOgrkWZyXmWomZwFyLtSJy5T33GVpMrt/e3YqxvaBaVeuAdcv1+Emmq2pquR5/qcy1OCsx10rMBOZarNZzLde0zBbg0UP3D+3GJEl7wHKV+5eBI5IcluQBwMnA5ct0LEnSLMsyLVNVO5KcAVwF7AOcW1U3Lsexfo1lm/LpyVyLsxJzrcRMYK7FajpXqmoUjyNJWkH8+AFJapDlLkkN2ivLfb6PNkiyb5KLu/VfTDLZjT83yfVJvt59PWYl5Bpa/5gk9yR580rJleTJSa5NcmP3fXvgODMluX+S87ssNyd56yjyLCLXs5N8JcmOJC+Zte7UJLd2t1NXQq4kq4d+fhuTvHQl5Bpa/7Akm5N8YCVk6v4NfrZ7bt00+9/oGHO9t/sZ3pzk/Uky7wGraq+6MXiB9nbgcOABwNeAJ8za5nXAh7rlk4GLu+WnAo/qlp8EbFkJuYbWXwJ8AnjzSsjF4AX3jcBTuvuPAPYZc6aXAR/rlh8MbAIm9+D3ahJ4MnAB8JKh8YcDd3RfD+iWD1gBuR4HHNEtPwrYCuw/7lxD6/8ZuBD4wErIBPwX8Nxu+SHAg8edC/hD4AvdY+wDXAscPd8x98Yz94V8tMEJwPnd8iXAsUlSVV+tqu924zcCD0qy77hzASR5MfCtLtco9cn1PGBjVX0NoKrurqqdY85UwH5JVgEPAn4B/GgEmRaUq6o2VdVG4N5Z+z4fWF9V26vqB8B64Lhx56qqb1bVrd3yd4FtwMS4cwEk+X3gIOCzI8rTK1MGn3+1qqrWd9vdU1U/HXcuBs/5BzL4T2Ff4P7AXfMdcG8s97k+2uCQ3W1TVTuAHzI46xz258BXqurn486V5CHA3wB/P6IsI8nF4KyvklzV/br4lhWQ6RLgJwzOQL8NnFVV2/dgruXYd488dpIjGRTE7ePOleR+wNnASKcg+2Ri8Hz/nySfTPLVJP+YwYcgjjVXVV0LfI7Bc34rcFVV3TzffntjufeW5InAe4DTx52l807gnKq6Z9xBZlkFPAt4eff1xCTHjjcSRwI7GUwxHAa8Kcnh44208iU5GPh34FVVdZ+z6DF4HXBlVW0ed5Ahq4CjGPyH83QGUyinjTMQQJLfAX6XwTv9DwGOSXLUfPvtjeW+kI82+L9tul/ffwu4u7t/KHAZ8MqqGtUZTN9czwDem2QT8AbgbRm8CWzcuTYD11TV97tfT68EnjbmTC8DPlNVv6yqbQzmIkf1+SB9PjZjOT9yo9djJ3kYcAXw9qq6bkSZ+ub6A+CM7jl/FvDKJGeOOdNmYEM3dbID+A9G83zvm+tE4Lpumuge4NMMvn+/1t5Y7gv5aIPLgV1XK7wE+M+qqiT7M3iSr62qL6yUXFV1VFVNVtUk8E/AP1TVqK4eWHIuBu8w/r0kD+4K9jnATWPO9G3gGIAk+wHPBG4ZQaaF5tqdq4DnJTkgyQEMXq+4aty5uu0vAy6oqktGlKd3rqp6eVU9pnvOv7nLN4o/6tPnZ/hlYP8ku16TOIbRPN/75vo28Jwkq5Lcn8G/w3mnZXq/CjyOG3A88E0Gc4dv78beBbyoW34gg6tObgO+BBzejf8tg/naDUO3R44716zHeCcjvFqmby7gLxi8yHsD8N5xZ2JwBcMnukw3AX+9h79XT2dwhvcTBr9J3Di076u7vLcxmP4Ye67u5/fLWc/51ePONesxTmNEV8uM4Gf4XAZXiH0dOA94wLhzMbhC5t8YFPpNwPsWcjw/fkCSGrQ3TstIkuZhuUtSgyx3SWqQ5S5JDbLcJalBlrskNchyl6QG/S8mz01ET6ZL0gAAAABJRU5ErkJggg==" - }, - "metadata": { - "needs_background": "light" - } - } - ], - "metadata": {} - }, - { - "cell_type": "code", - "execution_count": null, - "source": [], - "outputs": [], - "metadata": {} - } - ], - "metadata": { - "kernelspec": { - "name": "python3", - "display_name": "Python 3.7.5 64-bit ('.venv': venv)" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.7.5" - }, - "interpreter": { - "hash": "56465d2ea10f338edb3d30adb010c5849fd826fffc543ba31360f3db8b47a703" - } - }, - "nbformat": 4, - "nbformat_minor": 5 -} \ No newline at end of file diff --git a/scratch/etienne/pillbox/learners/adril.py b/scratch/etienne/pillbox/learners/adril.py deleted file mode 100644 index 5854ee3..0000000 --- a/scratch/etienne/pillbox/learners/adril.py +++ /dev/null @@ -1,140 +0,0 @@ -import gym -from gym import spaces -from sklearn.neighbors import KDTree -from scipy.stats import norm -import numpy as np -import warnings -from abc import ABC, abstractmethod -from typing import Dict, Generator, Optional, Union -import torch as th - -try: - # Check memory used by replay buffer when possible - import psutil -except ImportError: - psutil = None - -from stable_baselines3.common.preprocessing import get_action_dim, get_obs_shape -from stable_baselines3.common.type_aliases import ReplayBufferSamples, RolloutBufferSamples -from stable_baselines3.common.vec_env import VecNormalize -from stable_baselines3.common.buffers import ReplayBuffer - - -class AdRILWrapper(gym.Env): - metadata = {'render.modes': ['human']} - - def __init__(self, base_env): - super(AdRILWrapper, self).__init__() - self.base_env = base_env - self.iter = 0 - self.observation_space = self.base_env.observation_space - self.action_space = self.base_env.action_space - self.trajs = list() - self.num_trajs = 0 - self.curr_state = None - def step(self, action): - next_obs, _, done, info = self.base_env.step(action) - reward = self.iter # Transformed by replay buffer - self.trajs.append((self.curr_state, action, next_obs, done)) - if done: - self.num_trajs += 1 - self.curr_state = next_obs - return next_obs, reward, done, info - def reset(self): - obs = self.base_env.reset() - self.curr_state = obs - return obs - def render(self, mode='human'): - self.base_env.render(mode=mode) - def close (self): - self.base_env.close() - def get_learner_trajs(self): - return self.trajs - def set_iter(self, k): - self.iter = k - -class AdRILReplayBuffer(ReplayBuffer): - def __init__( - self, - buffer_size: int, - observation_space: spaces.Space, - action_space: spaces.Space, - device: Union[th.device, str] = "cpu", - n_envs: int = 1, - optimize_memory_usage: bool = False, - expert_data: dict = dict(), - N_expert: int = 0, - balanced: bool = True, - ): - super(AdRILReplayBuffer, self).__init__(buffer_size, observation_space, action_space, device, n_envs=n_envs, optimize_memory_usage=optimize_memory_usage) - - self.expert_states = expert_data['obs'] - self.expert_actions = expert_data['acts'] - self.expert_next_states = expert_data['next_obs'] - self.expert_dones = expert_data['dones'] - n_expert = len(expert_data["obs"]) - self.iter = 0 - self.N_expert = N_expert - self.N_learner = 0 - self.normalizer = 1 - self.balanced = balanced - - def set_iter(self, k): - self.iter = k - normalizer = 0 - for i in range(0, k): - normalizer += 1 ** (-i) # written to support decaying learning rate - self.normalizer = normalizer - - def set_n_learner(self, n): - self.N_learner = n - - def _get_samples(self, batch_inds: np.ndarray, env: Optional[VecNormalize] = None) -> ReplayBufferSamples: - num_samples = len(batch_inds) - if self.balanced: - num_expert_samples = int(num_samples / 2) - batch_inds = batch_inds[:num_expert_samples] - expert_inds = np.random.randint(0, len(self.expert_states), size=num_expert_samples) - # balanced sampling - if self.optimize_memory_usage: - next_obs = self._normalize_obs(self.observations[(batch_inds + 1) % self.buffer_size, 0, :], env) - else: - next_obs = self._normalize_obs(self.next_observations[batch_inds, 0, :], env) - next_obs = np.concatenate((next_obs, self._normalize_obs(self.expert_next_states[expert_inds], env)), axis=0) - obs = self._normalize_obs(self.observations[batch_inds, 0, :], env) - obs = np.concatenate((obs, self._normalize_obs(self.expert_states[expert_inds], env)), axis=0) - actions = self.actions[batch_inds, 0, :] - actions = np.concatenate((actions, self.expert_actions[expert_inds].reshape(num_expert_samples, -1)), axis=0) - dones = self.dones[batch_inds] - dones = np.concatenate((dones, self.expert_dones[expert_inds].reshape(num_expert_samples, -1)), axis=0) - # AdRIL Rewards (indicator kernel) - mask1 = (self.rewards[batch_inds] >= 0).astype(np.float32) - mask2 = (self.rewards[batch_inds] < self.iter).astype(np.float32) - r1 = - (1. ** (-self.rewards[batch_inds])) * mask1 * mask2 # Past iter - r2 = np.zeros_like(self.rewards[batch_inds]) * mask1 * (1 - mask2) # current iter - r3 = -self.rewards[batch_inds] * (1 - mask1) # Expert - if self.iter > 0: - rewards = (r1 / self.N_learner) + r2 + r3 - else: - rewards = r1 + r2 + r3 - rewards = np.concatenate((rewards, np.ones_like(rewards) / self.N_expert), axis=0) - else: - if self.optimize_memory_usage: - next_obs = self._normalize_obs(self.observations[(batch_inds + 1) % self.buffer_size, 0, :], env) - else: - next_obs = self._normalize_obs(self.next_observations[batch_inds, 0, :], env) - obs = self._normalize_obs(self.observations[batch_inds, 0, :], env) - actions = self.actions[batch_inds, 0, :] - dones = self.dones[batch_inds] - # AdRIL Rewards (indicator kernel) - mask1 = (self.rewards[batch_inds] >= 0).astype(np.float32) - mask2 = (self.rewards[batch_inds] < self.iter).astype(np.float32) - r1 = - (1. ** (-self.rewards[batch_inds])) * mask1 * mask2 # Past iter - r2 = np.zeros_like(self.rewards[batch_inds]) * mask1 * (1 - mask2) # current iter - r3 = -self.rewards[batch_inds] * (1 - mask1) / self.N_expert # Expert - if self.iter > 0: - rewards = (r1 * 1. / self.N_learner) + r2 + r3 - else: - rewards = r1 + r2 + r3 - data = (obs, actions, next_obs, dones, rewards) - return ReplayBufferSamples(*tuple(map(self.to_torch, data))) diff --git a/scratch/etienne/pillbox/learners/advil.py b/scratch/etienne/pillbox/learners/advil.py deleted file mode 100644 index 3ca38d6..0000000 --- a/scratch/etienne/pillbox/learners/advil.py +++ /dev/null @@ -1,222 +0,0 @@ -import numpy as np - -import torch -import torch.autograd as autograd -import torch.nn as nn -import torch.nn.functional as F -import torch.optim as optim -from gym.spaces import Discrete -import gym -from stable_baselines3.common.preprocessing import get_action_dim -from tqdm import tqdm -from torch.autograd import Variable -from itertools import repeat -from torch.autograd import grad as torch_grad -from typing import List, Type -import types - -# Infinite dataloader -def repeater(data_loader): - for loader in repeat(data_loader): - for data in loader: - yield data - -def create_mlp( - input_dim: int, output_dim: int, net_arch: List[int], activation_fn: Type[nn.Module] = nn.ReLU) -> List[nn.Module]: - - if len(net_arch) > 0: - modules = [nn.Linear(input_dim, net_arch[0]), activation_fn()] - else: - modules = [] - - for idx in range(len(net_arch) - 1): - modules.append(nn.Linear(net_arch[idx], net_arch[idx + 1])) - modules.append(activation_fn()) - - if output_dim > 0: - last_layer_dim = net_arch[-1] if len(net_arch) > 0 else input_dim - modules.append(nn.Linear(last_layer_dim, output_dim)) - return modules - -def init_ortho(layer): - if type(layer) == nn.Linear: - nn.init.orthogonal_(layer.weight) - - -class AdVILPolicy(nn.Module): - def __init__(self, env, mean=None, std=None): - super(AdVILPolicy, self).__init__() - if isinstance(env.action_space, Discrete): - self.net_arch = [64, 64] - self.action_dim = env.action_space.n - self.discrete = True - else: - self.net_arch = [256, 256] - self.action_dim = int(np.prod(env.action_space.shape)) - self.low = torch.as_tensor(env.action_space.low) - self.high = torch.as_tensor(env.action_space.high) - self.discrete = False - self.obs_dim = int(np.prod(env.observation_space.shape)) - self.observation_space = env.observation_space - net = create_mlp(self.obs_dim, self.action_dim, self.net_arch, nn.ReLU) - if self.discrete: - net.append(nn.Softmax(dim=1)) - self.net = nn.Sequential(*net) - self.net.apply(init_ortho) - if mean is not None and std is not None: - self.mean = mean - self.std = std - self.is_normalized = True - else: - self.is_normalized = False - def forward(self, obs): - action = self.net(obs) - return action - def predict(self, obs, state, mask, deterministic): - obs = obs.reshape((-1,) + (self.obs_dim,)) - if self.is_normalized: - obs = (obs - self.mean) / self.std - obs = torch.as_tensor(obs) - with torch.no_grad(): - actions = self.forward(obs) - if self.discrete: - actions = actions.argmax(dim=1).reshape(-1) - else: - actions = self.low + ((actions + 1.0) / 2.0) * (self.high - self.low) - actions = torch.max(torch.min(actions, self.high), self.low) - actions = actions.cpu().numpy() - return actions, state - - -class AdVILDiscriminator(nn.Module): - def __init__(self, env): - super(AdVILDiscriminator, self).__init__() - if isinstance(env.action_space, Discrete): - self.net_arch = [64, 64] - self.action_dim = env.action_space.n - else: - self.net_arch = [256, 256] - self.action_dim = int(np.prod(env.action_space.shape)) - self.obs_dim = int(np.prod(env.observation_space.shape)) - net = create_mlp(self.obs_dim + self.action_dim, 1, self.net_arch, nn.ReLU) - self.net = nn.Sequential(*net) - self.net.apply(init_ortho) - - def forward(self, inputs): - output = self.net(inputs) - return output.view(-1) - -def pi_update(obs, acts, pi, f, pi_opt, prog): - pi_opt.zero_grad() - obs_v = Variable(obs) - pi_acts = pi(obs_v) - #learner_sa = torch.cat((obs, pi_acts), axis=1) - f_learner = f(obs, acts) - pi_loss = f_learner.mean() + orthogonal_reg(pi) + 2e-1 * (pi_acts - acts).square().mean() - pi_loss.backward() - if prog > 0.1: - torch.nn.utils.clip_grad_norm(pi.parameters(), 40.0) - pi_opt.step() - return pi_loss.item(), (2e-1 * (pi_acts - acts).square().mean()).item() - -def orthogonal_reg(pi): - with torch.enable_grad(): - reg = 1e-4 - orth_loss = torch.zeros(1) - for name, param in pi.named_parameters(): - if 'bias' not in name: - x = torch.mm(torch.t(param), param) - x = x * (1. - torch.eye(param.shape[-1])) - orth_loss = orth_loss + reg * (x.square().sum()) - return orth_loss - -def f_update(obs, acts, pi, f, f_opt, prog): - obs_v = Variable(obs) - pi_acts = pi(obs_v) - #learner_sa = torch.cat((obs, pi_acts), axis=1) - #expert_sa = Variable(torch.cat((obs, acts), axis=1)) - f_learner = f(obs, pi_acts) - f_expert = f(obs, acts) - #gp = gradient_penalty((obs, pi_acts), (obs, acts), f) - f_opt.zero_grad() - f_loss = f_expert.mean() - f_learner.mean()# + 10 * gp - f_loss.backward() - if prog > 0.1: - torch.nn.utils.clip_grad_norm(f.parameters(), 40.0) - f_opt.step() - return f_loss.item() - -def gradient_penalty(learner_sa, expert_sa, f): - batch_size = expert_sa[0].size()[0] - - #alpha = torch.rand(batch_size, 1) - #alpha = alpha.expand_as(expert_sa) - - salpha = torch.rand(batch_size, 1, 1) - salpha = salpha.expand_as(expert_sa[0]) - - aalpha = torch.rand(batch_size, 1) - aalpha = aalpha.expand_as(expert_sa[1]) - - #interpolated = alpha * expert_sa.data + (1 - alpha) * learner_sa.data - #interpolated = Variable(interpolated, requires_grad=True) - #f_interpolated = f(interpolated.float()) - - sinterpolated = salpha * expert_sa[0].data + (1 - salpha) * learner_sa[0].data - sinterpolated = Variable(sinterpolated, requires_grad=True) - - ainterpolated = aalpha * expert_sa[1].data + (1 - aalpha) * learner_sa[1].data - ainterpolated = Variable(ainterpolated, requires_grad=True) - - f_interpolated = f(sinterpolated, ainterpolated) - - #gradients = torch_grad(outputs=f_interpolated, inputs=interpolated, - # grad_outputs=torch.ones(f_interpolated.size()), - # create_graph=True, retain_graph=True)[0] - - sgradients = torch_grad(outputs=f_interpolated, inputs=sinterpolated, - grad_outputs=torch.ones(f_interpolated.size()), - create_graph=True, retain_graph=True)[0] - - agradients = torch_grad(outputs=f_interpolated, inputs=ainterpolated, - grad_outputs=torch.ones(f_interpolated.size()), - create_graph=True, retain_graph=True)[0] - - #gradients = gradients.view(batch_size, -1) - sgradients = sgradients.view(batch_size, -1) - agradients = agradients.view(batch_size, -1) - #norm = gradients.norm(2, dim=1).mean().item() - #gradients_norm = torch.sqrt(torch.sum(gradients ** 2, dim=1) + 1e-12) - gradients_norm = torch.sqrt(torch.sum(sgradients ** 2, dim=1) + torch.sum(agradients ** 2, dim=1) + 1e-12) - # 2 * |f'(x_0)| - return ((gradients_norm - 0.4) ** 2).mean() - -def advil_training(data_loader, env, iters=int(1e5), policy_class=AdVILPolicy, discriminator_class=AdVILDiscriminator, lr_pi=8e-6, lr_f=8e-4): - if not isinstance(env.action_space, Discrete): - low = torch.as_tensor(env.action_space.low) - high = torch.as_tensor(env.action_space.high) - if data_loader.dataset.is_normalized: - pi = policy_class(env, data_loader.dataset.mean, data_loader.dataset.std) - else: - pi = policy_class(env) - f = discriminator_class(env) - pi_opt = optim.Adam(pi.parameters(), lr=lr_pi) - - last_loss = 0 - f_opt = optim.Adam(f.parameters(), lr=lr_f) - data_loader = repeater(data_loader) - for t in tqdm(range(iters)): - data = next(data_loader) - obs = data['obs'] - acts = data['acts'] - #if isinstance(env.action_space, Discrete): - # acts = nn.functional.one_hot(acts, env.action_space.n) - #else: - # acts = (((acts - low) / (high - low)) * 2.0) - 1.0 - pi_loss, mse_reg = pi_update(obs, acts, pi, f, pi_opt, t/iters) - f_loss = f_update(obs, acts, pi, f, f_opt, t/iters) - if t % 100 == 0: - print("pi loss:", pi_loss) - print("mse reg:", mse_reg) - print("f loss:", f_loss) - return pi diff --git a/scratch/etienne/pillbox/learners/intersim_advil.py b/scratch/etienne/pillbox/learners/intersim_advil.py deleted file mode 100644 index 2567819..0000000 --- a/scratch/etienne/pillbox/learners/intersim_advil.py +++ /dev/null @@ -1,155 +0,0 @@ -import torch -import torch.nn as nn - -def unnormalize(val, mean, std): - val *= std or 1 - val += mean or 0 - return val - -def normalize(val, mean, std): - val -= mean or 0 - val /= std or 1 - return val - -class IntersimPolicy(nn.Module): - def __init__(self, env, mean=None, std=None): - # assert "intersim" in env.unwrapped.spec.id - super().__init__() - - self._ego_encoder = nn.Sequential( - # in 5, out 5 - nn.Linear(5, 10), - nn.ReLU(), - nn.Linear(10, 10), - nn.ReLU(), - nn.Linear(10, 10), - nn.ReLU(), - nn.Linear(10, 5), - nn.ReLU(), - ) - self._state_encoder = nn.Sequential( - # in 5, out 5 - nn.Linear(5, 10), - nn.ReLU(), - nn.Linear(10, 10), - nn.ReLU(), - nn.Linear(10, 10), - nn.ReLU(), - nn.Linear(10, 5), - nn.ReLU(), - ) - self._deepset = lambda e: e.sum(-2) - self._action_decoder = nn.Sequential( - # in 5 + 5, out 1 - nn.Linear(5 + 5, 10), - nn.ReLU(), - nn.Linear(10, 10), - nn.ReLU(), - nn.Linear(10, 10), - nn.ReLU(), - nn.Linear(10, 10), - nn.ReLU(), - nn.Linear(10, 1), - ) - - def forward(self, obs): - # obs.shape = (batch=514, 1 + others=150, 5) - # act.shape = (batch=514, 1) - - ego = obs[:, 0]#.detach().clone() - rel = obs[:, 1:]#.detach().clone() - nan = rel.isnan().any(-1, keepdim=True) - rel = torch.where(nan, torch.zeros_like(rel), rel) # required because of https://github.com/pytorch/pytorch/issues/15506 - - d = (rel[:, :, :2] ** 2).sum(-1).sqrt() - front = torch.stack((torch.cos(ego[:, 3]), torch.sin(ego[:, 3])), -1) - left = torch.stack((-torch.sin(ego[:, 3]), torch.cos(ego[:, 3])), -1) - df = (rel[:, :, :2] * front.unsqueeze(1)).sum(-1) - dl = (rel[:, :, :2] * left.unsqueeze(1)).sum(-1) - alpha = torch.atan2(dl, df) - - rel[:, :, 0] = d - rel[:, :, 1] = alpha - - e = self._ego_encoder(ego) - x = self._state_encoder(rel) - x = torch.where(nan, torch.zeros_like(x), x) - x = self._deepset(x) - a = self._action_decoder(torch.cat((e, x), 1)) - - return 10 * a - - def predict(self, state, mask, deterministic): - #action_distribution = self.forward(obs) - #action = action_distribution.argmax() - #return action - return self.forward(obs) - -class IntersimDiscriminator(nn.Module): - def __init__(self, env): - # assert "intersim" in env.unwrapped.spec.id - super().__init__() - - self._ego_encoder = nn.Sequential( - # in 5, out 5 - nn.Linear(5, 10), - nn.ReLU(), - nn.Linear(10, 10), - nn.ReLU(), - nn.Linear(10, 10), - nn.ReLU(), - nn.Linear(10, 5), - nn.ReLU(), - ) - self._state_encoder = nn.Sequential( - # in 5, out 5 - nn.Linear(5, 10), - nn.ReLU(), - nn.Linear(10, 10), - nn.ReLU(), - nn.Linear(10, 10), - nn.ReLU(), - nn.Linear(10, 5), - nn.ReLU(), - ) - self._deepset = lambda e: e.sum(-2) - self._discriminator = nn.Sequential( - # in 5 + 5 + 1, out 1 - nn.Linear(5 + 5 + 1, 10), - nn.ReLU(), - nn.Linear(10, 10), - nn.ReLU(), - nn.Linear(10, 10), - nn.ReLU(), - nn.Linear(10, 10), - nn.ReLU(), - nn.Linear(10, 1), - ) - - def forward(self, obs, acts): - # obs.shape = (batch=514, 1 + others=150, 5) - # acts.shape = (batch=514, 1) - # val.shape = (batch=514,) - - ego = obs[:, 0] - rel = obs[:, 1:] - nan = rel.isnan().any(-1, keepdim=True) - rel = torch.where(nan, torch.zeros_like(rel), rel) # required because of https://github.com/pytorch/pytorch/issues/15506 - - d = (rel[:, :, :2] ** 2).sum(-1).sqrt() - front = torch.stack((torch.cos(ego[:, 3]), torch.sin(ego[:, 3])), -1) - left = torch.stack((-torch.sin(ego[:, 3]), torch.cos(ego[:, 3])), -1) - df = (rel[:, :, :2] * front.unsqueeze(1)).sum(-1) - dl = (rel[:, :, :2] * left.unsqueeze(1)).sum(-1) - alpha = torch.atan2(dl, df) - - rel[:, :, 0] = d - rel[:, :, 1] = alpha - - e = self._ego_encoder(ego) - x = self._state_encoder(rel) - x = torch.where(nan, torch.zeros_like(x), x) - x = self._deepset(x) - v = self._discriminator(torch.cat((e, x, acts), 1)) - - return v.squeeze(1) \ No newline at end of file diff --git a/scratch/etienne/pillbox/learners/soft_q.py b/scratch/etienne/pillbox/learners/soft_q.py deleted file mode 100644 index a7c7fad..0000000 --- a/scratch/etienne/pillbox/learners/soft_q.py +++ /dev/null @@ -1,31 +0,0 @@ -from typing import Any, Dict, List, Optional, Type - -import gym -import torch as th -from torch import nn - -from stable_baselines3.common.policies import BasePolicy, register_policy -from stable_baselines3.common.torch_layers import BaseFeaturesExtractor, FlattenExtractor, NatureCNN, create_mlp -from stable_baselines3.dqn.policies import DQNPolicy, QNetwork - - -class SoftQNetwork(QNetwork): - def _predict(self, observation: th.Tensor, deterministic: bool = True) -> th.Tensor: - q_values = self.forward(observation) - probs = nn.functional.softmax(q_values * 10, dim=1) - m = th.distributions.Categorical(probs) - action = m.sample().reshape(-1) - return action - - -class SQLPolicy(DQNPolicy): - def make_q_net(self) -> SoftQNetwork: - # Make sure we always have separate networks for features extractors etc - net_args = self._update_features_extractor( - self.net_args, features_extractor=None) - return SoftQNetwork(**net_args).to(self.device) - - -SoftMlpPolicy = SQLPolicy - -register_policy("SoftMlpPolicy", SoftMlpPolicy) diff --git a/scratch/etienne/pillbox/learners/sqil.py b/scratch/etienne/pillbox/learners/sqil.py deleted file mode 100644 index ede932a..0000000 --- a/scratch/etienne/pillbox/learners/sqil.py +++ /dev/null @@ -1,61 +0,0 @@ -import warnings -from abc import ABC, abstractmethod -from typing import Dict, Generator, Optional, Union - -import numpy as np -import torch as th -from gym import spaces - -try: - # Check memory used by replay buffer when possible - import psutil -except ImportError: - psutil = None - -from stable_baselines3.common.preprocessing import get_action_dim, get_obs_shape -from stable_baselines3.common.type_aliases import ReplayBufferSamples, RolloutBufferSamples -from stable_baselines3.common.vec_env import VecNormalize -from stable_baselines3.common.buffers import ReplayBuffer - - -class SQILReplayBuffer(ReplayBuffer): - def __init__( - self, - buffer_size: int, - observation_space: spaces.Space, - action_space: spaces.Space, - device: Union[th.device, str] = "cpu", - n_envs: int = 1, - optimize_memory_usage: bool = False, - expert_data: dict = dict(), - ): - super(SQILReplayBuffer, self).__init__(buffer_size, observation_space, action_space, device, n_envs=n_envs, optimize_memory_usage=optimize_memory_usage) - - self.expert_states = expert_data['obs'] - self.expert_actions = expert_data['acts'] - self.expert_next_states = expert_data['next_obs'] - self.expert_dones = expert_data['dones'] - - def _get_samples(self, batch_inds: np.ndarray, env: Optional[VecNormalize] = None) -> ReplayBufferSamples: - num_samples = len(batch_inds) - num_expert_samples = int(num_samples / 2) - batch_inds = batch_inds[:num_expert_samples] - expert_inds = np.random.randint(0, len(self.expert_states), size=num_expert_samples) - # Balanced sampling - if self.optimize_memory_usage: - next_obs = self._normalize_obs(self.observations[(batch_inds + 1) % self.buffer_size, 0, :], env) - else: - next_obs = self._normalize_obs(self.next_observations[batch_inds, 0, :], env) - next_obs = np.concatenate((next_obs, self._normalize_obs(self.expert_next_states[expert_inds], env)), axis=0) - obs = self._normalize_obs(self.observations[batch_inds, 0, :], env) - obs = np.concatenate((obs, self._normalize_obs(self.expert_states[expert_inds], env)), axis=0) - actions = self.actions[batch_inds, 0, :] - actions = np.concatenate((actions, self.expert_actions[expert_inds].reshape(num_expert_samples, -1)), axis=0) - dones = self.dones[batch_inds] - dones = np.concatenate((dones, self.expert_dones[expert_inds].reshape(num_expert_samples, -1)), axis=0) - # SQIL Rewards - rewards = self.rewards[batch_inds] * 0. - rewards = np.concatenate((rewards, np.ones_like(rewards)), axis=0) - - data = (obs, actions, next_obs, dones, rewards) - return ReplayBufferSamples(*tuple(map(self.to_torch, data))) \ No newline at end of file diff --git a/scratch/etienne/pillbox/learners/train.py b/scratch/etienne/pillbox/learners/train.py deleted file mode 100644 index 2ddebd3..0000000 --- a/scratch/etienne/pillbox/learners/train.py +++ /dev/null @@ -1,248 +0,0 @@ -from imitation.algorithms import adversarial, bc -from imitation.util import logger, util -from stable_baselines3 import PPO, DQN, SAC -from soft_q import SQLPolicy -from sqil import SQILReplayBuffer -from stable_baselines3.common import policies -from stable_baselines3.common.evaluation import evaluate_policy -from imitation.rewards import discrim_nets -import numpy as np -import argparse -from utils import make_sa_dataloader, make_sads_dataloader, make_sa_dataset, linear_schedule -from stable_baselines3.common.vec_env import DummyVecEnv, VecNormalize -from adril import AdRILWrapper, AdRILReplayBuffer -import os -from gym.spaces import Discrete -import gym -from advil import advil_training -from stable_baselines3.common.running_mean_std import RunningMeanStd - -from advil import AdVILPolicy, AdVILDiscriminator - -def train_bc(env, n=0): - venv = util.make_vec_env(env, n_envs=8) - if isinstance(venv.action_space, Discrete): - w = 64 - else: - w = 256 - for i in range(n): - mean_rewards = [] - std_rewards = [] - for num_trajs in range(0, 26, 5): - if num_trajs == 0: - expert_data = make_sa_dataloader(env, normalize=False) - else: - expert_data = make_sa_dataloader(env, max_trajs=num_trajs, normalize=False) - bc_trainer = bc.BC(venv.observation_space, venv.action_space, expert_data=expert_data, - policy_class=policies.ActorCriticPolicy, - ent_weight=0., l2_weight=0., policy_kwargs=dict(net_arch=[w, w])) - if num_trajs > 0: - bc_trainer.train(n_batches=int(5e5)) - - def get_policy(*args, **kwargs): - return bc_trainer.policy - model = PPO(get_policy, env, verbose=1) - model.save(os.path.join("learners", env, - "bc_{0}_{1}".format(i, num_trajs))) - mean_reward, std_reward = evaluate_policy( - model, model.get_env(), n_eval_episodes=10) - mean_rewards.append(mean_reward) - std_rewards.append(std_reward) - print("{0} Trajs: {1}".format(num_trajs, mean_reward)) - np.savez(os.path.join("learners", env, "bc_rewards_{0}".format( - i)), means=mean_rewards, stds=std_rewards) - - -def train_gail(env, n=0): - venv = util.make_vec_env(env, n_envs=8) - if isinstance(venv.action_space, Discrete): - w = 64 - else: - w = 256 - expert_data = make_sads_dataloader(env, max_trajs=5) - logger.configure(os.path.join("learners", "GAIL")) - - for i in range(n): - discrim_net = discrim_nets.ActObsMLP( - action_space=venv.action_space, - observation_space=venv.observation_space, - hid_sizes=(w, w), - ) - gail_trainer = adversarial.GAIL(venv, expert_data=expert_data, expert_batch_size=32, - gen_algo=PPO("MlpPolicy", venv, verbose=1, n_steps=1024, - policy_kwargs=dict(net_arch=[w, w])), - discrim_kwargs={'discrim_net': discrim_net}) - mean_rewards = [] - std_rewards = [] - for train_steps in range(20): - if train_steps > 0: - if 'Bullet' in env: - gail_trainer.train(total_timesteps=25000) - else: - gail_trainer.train(total_timesteps=16384) - - def get_policy(*args, **kwargs): - return gail_trainer.gen_algo.policy - model = PPO(get_policy, env, verbose=1) - mean_reward, std_reward = evaluate_policy( - model, model.env, n_eval_episodes=10) - mean_rewards.append(mean_reward) - std_rewards.append(std_reward) - print("{0} Steps: {1}".format(train_steps, mean_reward)) - np.savez(os.path.join("learners", env, "gail_rewards_{0}".format(i)), - means=mean_rewards, stds=std_rewards) - - -def train_sqil(env, n=0): - venv = gym.make(env) - expert_data = make_sa_dataset(env, max_trajs=5) - - for i in range(n): - if isinstance(venv.action_space, Discrete): - model = DQN(SQLPolicy, venv, verbose=1, policy_kwargs=dict(net_arch=[64, 64]), learning_starts=1) - else: - model = SAC('MlpPolicy', venv, verbose=1, policy_kwargs=dict(net_arch=[256, 256]), ent_coef='auto', - learning_rate=linear_schedule(7.3e-4), train_freq=64, gradient_steps=64, gamma=0.98, tau=0.02) - - model.replay_buffer = SQILReplayBuffer(model.buffer_size, model.observation_space, - model.action_space, model.device, 1, - model.optimize_memory_usage, expert_data=expert_data) - mean_rewards = [] - std_rewards = [] - for train_steps in range(20): - if train_steps > 0: - if 'Bullet' in env: - model.learn(total_timesteps=25000, log_interval=1) - else: - model.learn(total_timesteps=16384, log_interval=1) - mean_reward, std_reward = evaluate_policy( - model, model.env, n_eval_episodes=10) - mean_rewards.append(mean_reward) - std_rewards.append(std_reward) - print("{0} Steps: {1}".format(train_steps, mean_reward)) - np.savez(os.path.join("learners", env, "sqil_rewards_{0}".format(i)), - means=mean_rewards, stds=std_rewards) - - -def train_adril(env, n=0, balanced=False): - num_trajs = 20 - expert_data = make_sa_dataset(env, max_trajs=num_trajs) - n_expert = len(expert_data["obs"]) - expert_sa = np.concatenate((expert_data["obs"], np.reshape(expert_data["acts"], (n_expert, -1))), axis=1) - - for i in range(0, n): - venv = AdRILWrapper(gym.make(env)) - mean_rewards = [] - std_rewards = [] - # Create model - if isinstance(venv.action_space, Discrete): - model = DQN(SQLPolicy, venv, verbose=1, policy_kwargs=dict(net_arch=[64, 64]), learning_starts=1) - else: - model = SAC('MlpPolicy', venv, verbose=1, policy_kwargs=dict(net_arch=[256, 256]), ent_coef='auto', - learning_rate=linear_schedule(7.3e-4), train_freq=64, gradient_steps=64, gamma=0.98, tau=0.02) - model.replay_buffer = AdRILReplayBuffer(model.buffer_size, model.observation_space, - model.action_space, model.device, 1, - model.optimize_memory_usage, expert_data=expert_data, N_expert=num_trajs, - balanced=balanced) - if not balanced: - for j in range(len(expert_sa)): - obs = expert_data["obs"][j] - act = expert_data["acts"][j] - next_obs = expert_data["next_obs"][j] - done = expert_data["dones"][j] - model.replay_buffer.add(obs, next_obs, act, -1, done) - for train_steps in range(400): - # Train policy - if train_steps > 0: - if 'Bullet' in env: - model.learn(total_timesteps=1250, log_interval=1000) - else: - model.learn(total_timesteps=25000, log_interval=1000) - if train_steps % 1 == 0: # written to support more complex update schemes - model.replay_buffer.set_iter(train_steps) - model.replay_buffer.set_n_learner(venv.num_trajs) - - # Evaluate policy - if train_steps % 20 == 0: - model.set_env(gym.make(env)) - mean_reward, std_reward = evaluate_policy( - model, model.env, n_eval_episodes=10) - mean_rewards.append(mean_reward) - std_rewards.append(std_reward) - print("{0} Steps: {1}".format(int(train_steps * 1250), mean_reward)) - np.savez(os.path.join("learners", env, "adril_rewards_{0}".format(i)), - means=mean_rewards, stds=std_rewards) - # Update env - if train_steps > 0: - if train_steps % 1 == 0: - venv.set_iter(train_steps + 1) - model.set_env(venv) - - -def train_advil(env, policy_class=AdVILPolicy, discriminator_class=AdVILDiscriminator, - iters=int(1e5), lr_pi=8e-6, lr_f=8e-4): - venv = gym.make(env) - expert_data = make_sa_dataloader( - env, - normalize=False, - batch_size=1024, - ) - pi = advil_training( - expert_data, - venv, - iters=iters, - policy_class=policy_class, - discriminator_class=discriminator_class, - lr_pi=lr_pi, - lr_f=lr_f, - ) - return pi - -if __name__ == "__main__": - parser = argparse.ArgumentParser(description='Train expert policies.') - parser.add_argument( - '-a', '--algo', choices=['bc', 'gail', 'sqil', 'adril', 'advil', 'all'], required=True) - parser.add_argument('-e', '--env', choices=['cartpole', 'lunarlander', 'acrobot', 'pendulum', 'halfcheetah', 'walker', 'hopper', 'ant'], - required=True) - parser.add_argument('-n', '--num_runs', required=False) - args = parser.parse_args() - if args.env == "cartpole": - envname = 'CartPole-v1' - elif args.env == "lunarlander": - envname = 'LunarLander-v2' - elif args.env == "acrobot": - envname = 'Acrobot-v1' - elif args.env == "pendulum": - envname = 'Pendulum-v0' - elif args.env == "halfcheetah": - envname = 'HalfCheetahBulletEnv-v0' - elif args.env == "walker": - envname = 'Walker2DBulletEnv-v0' - elif args.env == "hopper": - envname = 'HopperBulletEnv-v0' - elif args.env == "ant": - envname = 'AntBulletEnv-v0' - else: - print("ERROR: unsupported env.") - if args.num_runs is not None and args.num_runs.isdigit(): - num_runs = int(args.num_runs) - else: - num_runs = 1 - if args.algo == 'bc': - train_bc(envname, num_runs) - elif args.algo == 'gail': - train_gail(envname, num_runs) - elif args.algo == 'sqil': - train_sqil(envname, num_runs) - elif args.algo == 'adril': - train_adril(envname, num_runs) - elif args.algo == 'advil': - train_advil(envname, num_runs) - elif args.algo == 'all': - train_bc(envname, num_runs) - train_gail(envname, num_runs) - train_sqil(envname, num_runs) - train_adril(envname, num_runs) - train_advil(envname, num_runs) - else: - print("ERROR: unsupported algorithm") diff --git a/scratch/etienne/pillbox/learners/utils.py b/scratch/etienne/pillbox/learners/utils.py deleted file mode 100644 index 61635a4..0000000 --- a/scratch/etienne/pillbox/learners/utils.py +++ /dev/null @@ -1,129 +0,0 @@ -import numpy as np -import torch -from torch.utils.data import Dataset, DataLoader -from itertools import chain -from typing import Callable, Union, Type, Optional, Dict, Any - -# From https://github.com/DLR-RM/rl-baselines3-zoo/blob/8ea4f4a87afa548832ca17e575b351ec5928c1b0/utils/utils.py -def linear_schedule(initial_value: Union[float, str]) -> Callable[[float], float]: - """ - Linear learning rate schedule. - :param initial_value: (float or str) - :return: (function) - """ - if isinstance(initial_value, str): - initial_value = float(initial_value) - - def func(progress_remaining: float) -> float: - """ - Progress will decrease from 1 (beginning) to 0 - :param progress_remaining: (float) - :return: (float) - """ - return progress_remaining * initial_value - - return func - -class SADataset(torch.utils.data.Dataset): - def __init__(self, obs, acts, normalize): - if normalize: - obs = np.array(obs) - self.mean = obs.mean(axis=0) - self.std = obs.std(axis=0) + 1e-3 - obs = (obs - self.mean) / (self.std) - self.is_normalized = True - else: - self.is_normalized = False - self.obs = torch.tensor(obs) - self.acts = torch.tensor(acts) - - def __len__(self): - return len(self.obs) - - def __getitem__(self, idx): - if torch.is_tensor(idx): - idx = idx.tolist() - obs = self.obs[idx] - acts = self.acts[idx] - sample = {'obs': obs, 'acts': acts} - return sample - -def make_sa_dataloader(envname, max_trajs=None, normalize=False, batch_size=32): - demos = np.load( - "../experts/{0}/demos.npz".format(envname), allow_pickle=True) - num_trajs = demos["num_trajs"] - if max_trajs is None: - max_trajs = num_trajs - obs = [] - acts = [] - for traj in range(min(max_trajs, num_trajs)): - obs.extend(demos[str(traj)].item()['states']) - acts.extend(demos[str(traj)].item()['actions']) - dataset = SADataset(obs, acts, normalize) - dataloader = DataLoader(dataset, batch_size=batch_size, - shuffle=True, num_workers=0) - return dataloader - -class SADSDataset(torch.utils.data.Dataset): - def __init__(self, obs, acts, next_obs, traj_lens): - self.obs = torch.tensor(obs) - self.acts = torch.tensor(acts) - self.next_obs = torch.tensor(next_obs) - dones = [[False for _ in range(l - 2)] + [True] for l in traj_lens] - self.dones = torch.tensor(list(chain.from_iterable(dones))) - - def __len__(self): - return len(self.obs) - - def __getitem__(self, idx): - if torch.is_tensor(idx): - idx = idx.tolist() - obs = self.obs[idx] - acts = self.acts[idx] - next_obs = self.next_obs[idx] - dones = self.dones[idx] - sample = {'obs': obs, 'acts': acts, - 'next_obs': next_obs, 'dones': dones} - return sample - -def make_sads_dataloader(envname, max_trajs=None): - demos = np.load( - "./experts/{0}/demos.npz".format(envname), allow_pickle=True) - num_trajs = demos["num_trajs"] - if max_trajs is None: - max_trajs = num_trajs - obs = [] - next_obs = [] - acts = [] - lens = [] - for traj in range(min(max_trajs, num_trajs)): - obs.extend(demos[str(traj)].item()['states'][:-1]) - next_obs.extend(demos[str(traj)].item()['states'][1:]) - acts.extend(demos[str(traj)].item()['actions'][:-1]) - lens.append(len(demos[str(traj)].item()['states'])) - dataset = SADSDataset(obs, acts, next_obs, lens) - dataloader = DataLoader(dataset, batch_size=32, - shuffle=False, num_workers=0, drop_last=True) - return dataloader - -def make_sa_dataset(envname, max_trajs=None): - demos = np.load("../pillbox/experts/{0}/demos.npz".format(envname), allow_pickle=True) - num_trajs = demos["num_trajs"] - if max_trajs is None: - max_trajs = num_trajs - expert_states = [] - expert_actions = [] - expert_next_states = [] - expert_dones = [] - for traj in range(min(max_trajs, num_trajs)): - expert_states.extend(demos[str(traj)].item()['states'][:-1]) - expert_next_states.extend(demos[str(traj)].item()['states'][1:]) - expert_actions.extend(demos[str(traj)].item()['actions'][:-1]) - l = len(demos[str(traj)].item()['states']) - expert_dones.extend([False for _ in range(l - 2)] + [True]) - expert_data = dict() - expert_data['obs'] = np.array(expert_states) - expert_data['acts'] = np.array(expert_actions) - expert_data['next_obs'] = np.array(expert_next_states) - expert_data['dones'] = np.array(expert_dones) - return expert_data diff --git a/scratch/etienne/pillbox/requirements.txt b/scratch/etienne/pillbox/requirements.txt deleted file mode 100644 index 0100f36..0000000 --- a/scratch/etienne/pillbox/requirements.txt +++ /dev/null @@ -1,9 +0,0 @@ -gym -numpy -psutil -scikit_learn -scipy -stable_baselines3 -torch -tqdm -imitation diff --git a/scratch/etienne/trpo/experiments/bc-intersimple-setobs2.py b/scratch/etienne/trpo/experiments/bc-intersimple-setobs2.py deleted file mode 100644 index 04d2b90..0000000 --- a/scratch/etienne/trpo/experiments/bc-intersimple-setobs2.py +++ /dev/null @@ -1,78 +0,0 @@ -# %% -import torch -from core.policy import SetPolicy -from tqdm import tqdm - -expert_data = torch.load('intersimple-expert-data-setobs2.pt') -states, actions, _, dones = expert_data - -policy = SetPolicy(actions.shape[-1]) - -policy = policy.cuda() -optim = torch.optim.Adam(policy.parameters(), lr=1e-4) -states = states[~dones].cuda() -actions = actions[~dones].cuda() - -for _ in tqdm(range(10000)): - optim.zero_grad() - loss = -policy.log_prob(policy(states), actions).mean() - loss.backward() - optim.step() - - print('Loss', loss) - -torch.save(policy.state_dict(), 'bc-intersimple-setobs2.pt') - -# %% -import numpy as np -from core.policy import SetPolicy -from util.wrappers import Setobs, TransformObservation, CollisionPenaltyWrapper -from intersim.envs import IntersimpleLidarFlatRandom -from intersim.envs.intersimple import speed_reward -import functools - -policy = SetPolicy(actions.shape[-1]) -policy.load_state_dict(torch.load('bc-intersimple-setobs2.pt')) - -obs_min = np.array([ - [-1000, -1000, 0, -np.pi, -1e-1, 0.], - [0, -np.pi, -20, -20, -np.pi, -1e-1], - [0, -np.pi, -20, -20, -np.pi, -1e-1], - [0, -np.pi, -20, -20, -np.pi, -1e-1], - [0, -np.pi, -20, -20, -np.pi, -1e-1], - [0, -np.pi, -20, -20, -np.pi, -1e-1], -]).reshape(-1) - -obs_max = np.array([ - [1000, 1000, 20, np.pi, 1e-1, 0.], - [50, np.pi, 20, 20, np.pi, 1e-1], - [50, np.pi, 20, 20, np.pi, 1e-1], - [50, np.pi, 20, 20, np.pi, 1e-1], - [50, np.pi, 20, 20, np.pi, 1e-1], - [50, np.pi, 20, 20, np.pi, 1e-1], -]).reshape(-1) - -env = Setobs( - TransformObservation(CollisionPenaltyWrapper(IntersimpleLidarFlatRandom( - n_rays=5, - reward=functools.partial( - speed_reward, - collision_penalty=0 - ), - stop_on_collision=False, - ), collision_distance=6, collision_penalty=100), lambda obs: (obs - obs_min) / (obs_max - obs_min + 1e-10)) -) - -obs = env.reset() -env.render(mode='post') -for i in range(300): - #action, _ = policy.predict(torch.tensor(obs)) - action = policy.sample(policy(torch.tensor(obs, dtype=torch.float32))) - obs, reward, done, _ = env.step(action) - env.render(mode='post') - print('step', i, 'reward', reward) - if done: - break -env.close() - -# %% diff --git a/scratch/etienne/trpo/experiments/gail-intersimple-minobs.py b/scratch/etienne/trpo/experiments/gail-intersimple-minobs.py deleted file mode 100644 index 62d4a2e..0000000 --- a/scratch/etienne/trpo/experiments/gail-intersimple-minobs.py +++ /dev/null @@ -1,74 +0,0 @@ -import gym -from core.gail import gail, Buffer -from core.value import Value -from core.policy import Policy -from core.discriminator import Discriminator -import torch.optim -from intersim.envs import IntersimpleLidarFlat -from intersim.envs.intersimple import speed_reward -import functools -from util.wrappers import CollisionPenaltyWrapper, Minobs -import numpy as np -from gym.wrappers import TransformObservation - -obs_min = np.array([ - [-1000, -1000, 0, -np.pi, -1e-1, 0.], - [0, -np.pi, -20, -20, -np.pi, -1e-1], - [0, -np.pi, -20, -20, -np.pi, -1e-1], - [0, -np.pi, -20, -20, -np.pi, -1e-1], - [0, -np.pi, -20, -20, -np.pi, -1e-1], - [0, -np.pi, -20, -20, -np.pi, -1e-1], -]).reshape(-1) - -obs_max = np.array([ - [1000, 1000, 20, np.pi, 1e-1, 0.], - [50, np.pi, 20, 20, np.pi, 1e-1], - [50, np.pi, 20, 20, np.pi, 1e-1], - [50, np.pi, 20, 20, np.pi, 1e-1], - [50, np.pi, 20, 20, np.pi, 1e-1], - [50, np.pi, 20, 20, np.pi, 1e-1], -]).reshape(-1) - -envs = [Minobs(TransformObservation(CollisionPenaltyWrapper(IntersimpleLidarFlat( - n_rays=5, - agent=51, - reward=functools.partial( - speed_reward, - collision_penalty=0 - ), - stop_on_collision=False, -), collision_distance=6, collision_penalty=100), lambda obs: (obs - obs_min) / (obs_max - obs_min + 1e-10))) for _ in range(30)] -env_fn = lambda i: envs[i] - -policy = Policy(env_fn(0).action_space.shape[0]) - -value = Value() -v_opt = torch.optim.Adam(value.parameters(), lr=1e-4) - -discriminator = Discriminator() -disc_opt = torch.optim.Adam(discriminator.parameters(), lr=1e-3) - -expert_data = torch.load('intersimple-expert-data-minobs.pt') -expert_data = Buffer(*expert_data) - -value, policy = gail( - env_fn=env_fn, - expert_data=expert_data, - discriminator=discriminator, - disc_opt=disc_opt, - disc_iters=100, - policy=policy, - value=value, - v_opt=v_opt, - v_iters=1000, - epochs=4000, - rollout_episodes=30, - rollout_steps=200, - gamma=0.99, - gae_lambda=0.9, - delta=0.01, - backtrack_coeff=0.8, - backtrack_iters=10, -) - -torch.save(policy.state_dict(), 'gail-intersimple-minobs.pt') diff --git a/scratch/etienne/trpo/experiments/gail-intersimple-minobs2.py b/scratch/etienne/trpo/experiments/gail-intersimple-minobs2.py deleted file mode 100644 index 008b8ca..0000000 --- a/scratch/etienne/trpo/experiments/gail-intersimple-minobs2.py +++ /dev/null @@ -1,100 +0,0 @@ -# %% -import gym -from core.gail import gail, Buffer -from core.value import Value -from core.policy import Policy -from core.discriminator import Discriminator -import torch.optim -from intersim.envs import IntersimpleLidarFlatRandom -from intersim.envs.intersimple import speed_reward -import functools -from util.wrappers import CollisionPenaltyWrapper, Minobs -import numpy as np -from gym.wrappers import TransformObservation -from core.reparam_module import ReparamPolicy -from torch.utils.tensorboard import SummaryWriter - -obs_min = np.array([ - [-1000, -1000, 0, -np.pi, -1e-1, 0.], - [0, -np.pi, -20, -20, -np.pi, -1e-1], - [0, -np.pi, -20, -20, -np.pi, -1e-1], - [0, -np.pi, -20, -20, -np.pi, -1e-1], - [0, -np.pi, -20, -20, -np.pi, -1e-1], - [0, -np.pi, -20, -20, -np.pi, -1e-1], -]).reshape(-1) - -obs_max = np.array([ - [1000, 1000, 20, np.pi, 1e-1, 0.], - [50, np.pi, 20, 20, np.pi, 1e-1], - [50, np.pi, 20, 20, np.pi, 1e-1], - [50, np.pi, 20, 20, np.pi, 1e-1], - [50, np.pi, 20, 20, np.pi, 1e-1], - [50, np.pi, 20, 20, np.pi, 1e-1], -]).reshape(-1) - -envs = [Minobs(TransformObservation(CollisionPenaltyWrapper(IntersimpleLidarFlatRandom( - n_rays=5, - reward=functools.partial( - speed_reward, - collision_penalty=0 - ), - stop_on_collision=False, -), collision_distance=6, collision_penalty=100), lambda obs: (obs - obs_min) / (obs_max - obs_min + 1e-10))) for _ in range(50)] -env_fn = lambda i: envs[i] - -policy = Policy(env_fn(0).action_space.shape[0]) - -value = Value() -v_opt = torch.optim.Adam(value.parameters(), lr=1e-4, weight_decay=1e-3) - -discriminator = Discriminator() -disc_opt = torch.optim.Adam(discriminator.parameters(), lr=1e-3, weight_decay=1e-5) - -expert_data = torch.load('intersimple-expert-data-minobs2.pt') -expert_data = Buffer(*expert_data) - -# %% -value, policy = gail( - env_fn=env_fn, - expert_data=expert_data, - discriminator=discriminator, - disc_opt=disc_opt, - disc_iters=500, - policy=policy, - value=value, - v_opt=v_opt, - v_iters=1000, - epochs=800, - rollout_episodes=50, - rollout_steps=200, - gamma=0.99, - gae_lambda=0.9, - delta=0.01, - backtrack_coeff=0.8, - backtrack_iters=10, - logger=SummaryWriter(comment='minobs2'), -) - -torch.save(policy.state_dict(), 'gail-intersimple-minobs2.pt') - -# %% -policy = Policy(env_fn(0).action_space.shape[0]) -policy(torch.zeros(env_fn(0).observation_space.shape)) -policy = ReparamPolicy(policy) -policy.load_state_dict(torch.load('gail-intersimple-minobs2.pt')) - -env = env_fn(0) -env.random_skip = False -obs = env.reset() -env.render(mode='post') -for i in range(300): - #action, _ = policy.predict(torch.tensor(obs)) - action = policy.sample(policy(torch.tensor(obs, dtype=torch.float32))) - obs, reward, done, _ = env.step(action) - env.render(mode='post') - print('step', i, 'reward', reward) - if done: - break -env.close() - -# %% diff --git a/scratch/etienne/trpo/experiments/gail-intersimple-normobs.py b/scratch/etienne/trpo/experiments/gail-intersimple-normobs.py deleted file mode 100644 index 881efa0..0000000 --- a/scratch/etienne/trpo/experiments/gail-intersimple-normobs.py +++ /dev/null @@ -1,74 +0,0 @@ -import gym -from core.gail import gail, Buffer -from core.value import Value -from core.policy import Policy -from core.discriminator import Discriminator -import torch.optim -from intersim.envs import IntersimpleLidarFlat -from intersim.envs.intersimple import speed_reward -import functools -from util.wrappers import CollisionPenaltyWrapper -import numpy as np -from gym.wrappers import TransformObservation - -obs_min = np.array([ - [-1000, -1000, 0, -np.pi, -1e-1, 0.], - [0, -np.pi, -20, -20, -np.pi, -1e-1], - [0, -np.pi, -20, -20, -np.pi, -1e-1], - [0, -np.pi, -20, -20, -np.pi, -1e-1], - [0, -np.pi, -20, -20, -np.pi, -1e-1], - [0, -np.pi, -20, -20, -np.pi, -1e-1], -]).reshape(-1) - -obs_max = np.array([ - [1000, 1000, 20, np.pi, 1e-1, 0.], - [50, np.pi, 20, 20, np.pi, 1e-1], - [50, np.pi, 20, 20, np.pi, 1e-1], - [50, np.pi, 20, 20, np.pi, 1e-1], - [50, np.pi, 20, 20, np.pi, 1e-1], - [50, np.pi, 20, 20, np.pi, 1e-1], -]).reshape(-1) - -envs = [TransformObservation(CollisionPenaltyWrapper(IntersimpleLidarFlat( - n_rays=5, - agent=51, - reward=functools.partial( - speed_reward, - collision_penalty=0 - ), - stop_on_collision=False, -), collision_distance=6, collision_penalty=100), lambda obs: (obs - obs_min) / (obs_max - obs_min + 1e-10)) for _ in range(30)] -env_fn = lambda i: envs[i] - -policy = Policy(env_fn(0).action_space.shape[0]) - -value = Value() -v_opt = torch.optim.Adam(value.parameters(), lr=1e-4) - -discriminator = Discriminator() -disc_opt = torch.optim.Adam(discriminator.parameters(), lr=1e-4) - -expert_data = torch.load('intersimple-expert-data-normobs.pt') -expert_data = Buffer(*expert_data) - -value, policy = gail( - env_fn=env_fn, - expert_data=expert_data, - discriminator=discriminator, - disc_opt=disc_opt, - disc_iters=10, - policy=policy, - value=value, - v_opt=v_opt, - v_iters=1000, - epochs=4000, - rollout_episodes=30, - rollout_steps=100, - gamma=0.99, - gae_lambda=0.9, - delta=0.01, - backtrack_coeff=0.8, - backtrack_iters=10, -) - -torch.save(policy.state_dict(), 'gail-intersimple-normobs.pt') diff --git a/scratch/etienne/trpo/experiments/gail-intersimple-setobs.py b/scratch/etienne/trpo/experiments/gail-intersimple-setobs.py deleted file mode 100644 index 7be8299..0000000 --- a/scratch/etienne/trpo/experiments/gail-intersimple-setobs.py +++ /dev/null @@ -1,74 +0,0 @@ -import gym -from core.gail import gail, Buffer -from core.value import SetValue -from core.policy import SetPolicy -from core.discriminator import DeepsetDiscriminator -import torch.optim -from intersim.envs import IntersimpleLidarFlat -from intersim.envs.intersimple import speed_reward -import functools -from util.wrappers import CollisionPenaltyWrapper, Setobs -import numpy as np -from gym.wrappers import TransformObservation - -obs_min = np.array([ - [-1000, -1000, 0, -np.pi, -1e-1, 0.], - [0, -np.pi, -20, -20, -np.pi, -1e-1], - [0, -np.pi, -20, -20, -np.pi, -1e-1], - [0, -np.pi, -20, -20, -np.pi, -1e-1], - [0, -np.pi, -20, -20, -np.pi, -1e-1], - [0, -np.pi, -20, -20, -np.pi, -1e-1], -]).reshape(-1) - -obs_max = np.array([ - [1000, 1000, 20, np.pi, 1e-1, 0.], - [50, np.pi, 20, 20, np.pi, 1e-1], - [50, np.pi, 20, 20, np.pi, 1e-1], - [50, np.pi, 20, 20, np.pi, 1e-1], - [50, np.pi, 20, 20, np.pi, 1e-1], - [50, np.pi, 20, 20, np.pi, 1e-1], -]).reshape(-1) - -envs = [Setobs(TransformObservation(CollisionPenaltyWrapper(IntersimpleLidarFlat( - n_rays=5, - agent=51, - reward=functools.partial( - speed_reward, - collision_penalty=0 - ), - stop_on_collision=False, -), collision_distance=6, collision_penalty=100), lambda obs: (obs - obs_min) / (obs_max - obs_min + 1e-10))) for _ in range(30)] -env_fn = lambda i: envs[i] - -policy = SetPolicy(env_fn(0).action_space.shape[0]) - -value = SetValue() -v_opt = torch.optim.Adam(value.parameters(), lr=1e-4) - -discriminator = DeepsetDiscriminator() -disc_opt = torch.optim.Adam(discriminator.parameters(), lr=1e-3) - -expert_data = torch.load('intersimple-expert-data-setobs.pt') -expert_data = Buffer(*expert_data) - -value, policy = gail( - env_fn=env_fn, - expert_data=expert_data, - discriminator=discriminator, - disc_opt=disc_opt, - disc_iters=500, - policy=policy, - value=value, - v_opt=v_opt, - v_iters=1000, - epochs=4000, - rollout_episodes=30, - rollout_steps=200, - gamma=0.99, - gae_lambda=0.9, - delta=0.01, - backtrack_coeff=0.8, - backtrack_iters=10, -) - -torch.save(policy.state_dict(), 'gail-intersimple-setobs.pt') diff --git a/scratch/etienne/trpo/experiments/gail-intersimple-setobs2-recurrent.py b/scratch/etienne/trpo/experiments/gail-intersimple-setobs2-recurrent.py deleted file mode 100644 index 2130b6f..0000000 --- a/scratch/etienne/trpo/experiments/gail-intersimple-setobs2-recurrent.py +++ /dev/null @@ -1,97 +0,0 @@ -# %% -import gym -from core.gail import gail, Buffer -from core.value import SetValue -from core.policy import SetPolicy -from core.discriminator import RecurrentDiscriminator -import torch.optim -from intersim.envs import IntersimpleLidarFlatRandom -from intersim.envs.intersimple import speed_reward -import functools -from util.wrappers import CollisionPenaltyWrapper, Setobs -import numpy as np -from gym.wrappers import TransformObservation -from core.reparam_module import ReparamPolicy - -obs_min = np.array([ - [-1000, -1000, 0, -np.pi, -1e-1, 0.], - [0, -np.pi, -20, -20, -np.pi, -1e-1], - [0, -np.pi, -20, -20, -np.pi, -1e-1], - [0, -np.pi, -20, -20, -np.pi, -1e-1], - [0, -np.pi, -20, -20, -np.pi, -1e-1], - [0, -np.pi, -20, -20, -np.pi, -1e-1], -]).reshape(-1) - -obs_max = np.array([ - [1000, 1000, 20, np.pi, 1e-1, 0.], - [50, np.pi, 20, 20, np.pi, 1e-1], - [50, np.pi, 20, 20, np.pi, 1e-1], - [50, np.pi, 20, 20, np.pi, 1e-1], - [50, np.pi, 20, 20, np.pi, 1e-1], - [50, np.pi, 20, 20, np.pi, 1e-1], -]).reshape(-1) - -envs = [Setobs(TransformObservation(CollisionPenaltyWrapper(IntersimpleLidarFlatRandom( - n_rays=5, - reward=functools.partial( - speed_reward, - collision_penalty=0 - ), - stop_on_collision=False, -), collision_distance=6, collision_penalty=100), lambda obs: (obs - obs_min) / (obs_max - obs_min + 1e-10))) for _ in range(50)] -env_fn = lambda i: envs[i] - -policy = SetPolicy(env_fn(0).action_space.shape[0]) - -value = SetValue() -v_opt = torch.optim.Adam(value.parameters(), lr=1e-4, weight_decay=1e-3) - -discriminator = RecurrentDiscriminator() -disc_opt = torch.optim.Adam(discriminator.parameters(), lr=1e-3, weight_decay=1e-5) - -expert_data = torch.load('intersimple-expert-data-setobs2.pt') -expert_data = Buffer(*expert_data) - -# %% -value, policy = gail( - env_fn=env_fn, - expert_data=expert_data, - discriminator=discriminator, - disc_opt=disc_opt, - disc_iters=500, - policy=policy, - value=value, - v_opt=v_opt, - v_iters=1000, - epochs=800, - rollout_episodes=50, - rollout_steps=200, - gamma=0.99, - gae_lambda=0.9, - delta=0.01, - backtrack_coeff=0.8, - backtrack_iters=10, -) - -torch.save(policy.state_dict(), 'gail-intersimple-setobs-recurrent.pt') - -# %% -policy = SetPolicy(env_fn(0).action_space.shape[0]) -policy(torch.zeros(env_fn(0).observation_space.shape)) -policy = ReparamPolicy(policy) -policy.load_state_dict(torch.load('gail-intersimple-setobs-recurrent.pt')) - -env = env_fn(0) -obs = env.reset() -env.render(mode='post') -for i in range(300): - #action, _ = policy.predict(torch.tensor(obs)) - action = policy.sample(policy(torch.tensor(obs, dtype=torch.float32))) - obs, reward, done, _ = env.step(action) - env.render(mode='post') - print('step', i, 'reward', reward) - if done: - break -env.close() - -# %% diff --git a/scratch/etienne/trpo/experiments/gail-intersimple-setobs2.py b/scratch/etienne/trpo/experiments/gail-intersimple-setobs2.py deleted file mode 100644 index e122ee6..0000000 --- a/scratch/etienne/trpo/experiments/gail-intersimple-setobs2.py +++ /dev/null @@ -1,101 +0,0 @@ -# %% -import gym -from core.gail import gail, Buffer -from core.value import SetValue -from core.policy import SetPolicy -from core.discriminator import DeepsetDiscriminator -import torch.optim -from intersim.envs import IntersimpleLidarFlatRandom -from intersim.envs.intersimple import speed_reward -import functools -from util.wrappers import CollisionPenaltyWrapper, Setobs -import numpy as np -from gym.wrappers import TransformObservation -from core.reparam_module import ReparamPolicy -from torch.utils.tensorboard import SummaryWriter - -obs_min = np.array([ - [-1000, -1000, 0, -np.pi, -1e-1, 0.], - [0, -np.pi, -20, -20, -np.pi, -1e-1], - [0, -np.pi, -20, -20, -np.pi, -1e-1], - [0, -np.pi, -20, -20, -np.pi, -1e-1], - [0, -np.pi, -20, -20, -np.pi, -1e-1], - [0, -np.pi, -20, -20, -np.pi, -1e-1], -]).reshape(-1) - -obs_max = np.array([ - [1000, 1000, 20, np.pi, 1e-1, 0.], - [50, np.pi, 20, 20, np.pi, 1e-1], - [50, np.pi, 20, 20, np.pi, 1e-1], - [50, np.pi, 20, 20, np.pi, 1e-1], - [50, np.pi, 20, 20, np.pi, 1e-1], - [50, np.pi, 20, 20, np.pi, 1e-1], -]).reshape(-1) - -envs = [Setobs(TransformObservation(CollisionPenaltyWrapper(IntersimpleLidarFlatRandom( - n_rays=5, - reward=functools.partial( - speed_reward, - collision_penalty=0 - ), - stop_on_collision=False, - random_skip=True, -), collision_distance=6, collision_penalty=100), lambda obs: (obs - obs_min) / (obs_max - obs_min + 1e-10))) for _ in range(50)] -env_fn = lambda i: envs[i] - -policy = SetPolicy(env_fn(0).action_space.shape[0]) - -value = SetValue() -v_opt = torch.optim.Adam(value.parameters(), lr=1e-4, weight_decay=1e-3) - -discriminator = DeepsetDiscriminator() -disc_opt = torch.optim.Adam(discriminator.parameters(), lr=1e-3, weight_decay=1e-5) - -expert_data = torch.load('intersimple-expert-data-setobs2.pt') -expert_data = Buffer(*expert_data) - -# %% -value, policy = gail( - env_fn=env_fn, - expert_data=expert_data, - discriminator=discriminator, - disc_opt=disc_opt, - disc_iters=500, - policy=policy, - value=value, - v_opt=v_opt, - v_iters=1000, - epochs=800, - rollout_episodes=50, - rollout_steps=200, - gamma=0.99, - gae_lambda=0.9, - delta=0.01, - backtrack_coeff=0.8, - backtrack_iters=10, - logger=SummaryWriter(comment='setobs2-batchaug'), -) - -torch.save(policy.state_dict(), 'gail-intersimple-setobs2.pt') - -# %% -policy = SetPolicy(env_fn(0).action_space.shape[0]) -policy(torch.zeros(env_fn(0).observation_space.shape)) -policy = ReparamPolicy(policy) -policy.load_state_dict(torch.load('gail-intersimple-setobs2.pt')) - -env = env_fn(0) -env.random_skip = False -obs = env.reset() -env.render(mode='post') -for i in range(300): - #action, _ = policy.predict(torch.tensor(obs)) - action = policy.sample(policy(torch.tensor(obs, dtype=torch.float32))) - obs, reward, done, _ = env.step(action) - env.render(mode='post') - print('step', i, 'reward', reward) - if done: - break -env.close() - -# %% diff --git a/scratch/etienne/trpo/experiments/gail-intersimple.py b/scratch/etienne/trpo/experiments/gail-intersimple.py deleted file mode 100644 index 11b050d..0000000 --- a/scratch/etienne/trpo/experiments/gail-intersimple.py +++ /dev/null @@ -1,54 +0,0 @@ -import gym -from core.gail import gail, Buffer -from core.value import Value -from core.policy import Policy -from core.discriminator import Discriminator -import torch.optim -from intersim.envs import IntersimpleLidarFlat -from intersim.envs.intersimple import speed_reward -import functools -from util.wrappers import CollisionPenaltyWrapper - -envs = [CollisionPenaltyWrapper(IntersimpleLidarFlat( - n_rays=5, - agent=51, - reward=functools.partial( - speed_reward, - collision_penalty=0 - ), - stop_on_collision=False, -), collision_distance=6, collision_penalty=100) for _ in range(30)] -env_fn = lambda i: envs[i] - -policy = Policy(env_fn(0).action_space.shape[0]) - -value = Value() -v_opt = torch.optim.Adam(value.parameters(), lr=1e-4) - -discriminator = Discriminator() -disc_opt = torch.optim.Adam(discriminator.parameters(), lr=1e-4) - -expert_data = torch.load('intersimple-expert-data.pt') -expert_data = Buffer(*expert_data) - -value, policy = gail( - env_fn=env_fn, - expert_data=expert_data, - discriminator=discriminator, - disc_opt=disc_opt, - disc_iters=10, - policy=policy, - value=value, - v_opt=v_opt, - v_iters=1000, - epochs=4000, - rollout_episodes=30, - rollout_steps=100, - gamma=0.99, - gae_lambda=0.9, - delta=0.01, - backtrack_coeff=0.8, - backtrack_iters=10, -) - -torch.save(policy.state_dict(), 'gail-intersimple.pt') diff --git a/scratch/etienne/trpo/experiments/gail-options-minobs.py b/scratch/etienne/trpo/experiments/gail-options-minobs.py deleted file mode 100644 index b738261..0000000 --- a/scratch/etienne/trpo/experiments/gail-options-minobs.py +++ /dev/null @@ -1,97 +0,0 @@ -import gym -from options.options import gail -from core.gail import Buffer -from core.value import Value -from core.policy import DiscretePolicy -from core.discriminator import Discriminator -import torch.optim -from intersim.envs import IntersimpleLidarFlat -from intersim.envs.intersimple import speed_reward -import functools -from util.wrappers import CollisionPenaltyWrapper, TransformObservation, Minobs -import numpy as np -from options.options import OptionsEnv -from torch.utils.tensorboard import SummaryWriter -from core.reparam_module import ReparamPolicy - -obs_min = np.array([ - [-1000, -1000, 0, -np.pi, -1e-1, 0.], - [0, -np.pi, -20, -20, -np.pi, -1e-1], - [0, -np.pi, -20, -20, -np.pi, -1e-1], - [0, -np.pi, -20, -20, -np.pi, -1e-1], - [0, -np.pi, -20, -20, -np.pi, -1e-1], - [0, -np.pi, -20, -20, -np.pi, -1e-1], -]).reshape(-1) - -obs_max = np.array([ - [1000, 1000, 20, np.pi, 1e-1, 0.], - [50, np.pi, 20, 20, np.pi, 1e-1], - [50, np.pi, 20, 20, np.pi, 1e-1], - [50, np.pi, 20, 20, np.pi, 1e-1], - [50, np.pi, 20, 20, np.pi, 1e-1], - [50, np.pi, 20, 20, np.pi, 1e-1], -]).reshape(-1) - -envs = [OptionsEnv(Minobs( - TransformObservation(CollisionPenaltyWrapper(IntersimpleLidarFlat( - n_rays=5, - agent=51, - reward=functools.partial( - speed_reward, - collision_penalty=0 - ), - stop_on_collision=False, - ), collision_distance=6, collision_penalty=100), lambda obs: (obs - obs_min) / (obs_max - obs_min + 1e-10)) -), options=[(0, 5), (1, 5), (2, 5), (4, 5), (8, 5)]) for _ in range(60)] - -env_fn = lambda i: envs[i] -policy = DiscretePolicy(env_fn(0).action_space.n) -value = Value() -v_opt = torch.optim.Adam(value.parameters(), lr=1e-4) - -discriminator = Discriminator() -disc_opt = torch.optim.Adam(discriminator.parameters(), lr=1e-3) - -expert_data = torch.load('intersimple-expert-data-minobs.pt') -expert_data = Buffer(*expert_data) - -value, policy = gail( - env_fn=env_fn, - expert_data=expert_data, - discriminator=discriminator, - disc_opt=disc_opt, - disc_iters=100, - policy=policy, - value=value, - v_opt=v_opt, - v_iters=1000, - epochs=50, - rollout_episodes=60, - rollout_steps=60, - gamma=0.99, - gae_lambda=0.9, - delta=0.01, - backtrack_coeff=0.8, - backtrack_iters=10, - logger=SummaryWriter(comment='-options-minobs'), -) - -torch.save(policy.state_dict(), 'gail-options-minobs.pt') - -# %% -policy = DiscretePolicy(env_fn(0).action_space.n) -policy(torch.zeros(env_fn(0).observation_space.shape)) -policy = ReparamPolicy(policy) -policy.load_state_dict(torch.load('gail-options-minobs.pt')) - -env = env_fn(0) -obs = env.reset() -env.render(mode='post') -for i in range(300): - #action, _ = policy.predict(torch.tensor(obs)) - action = policy.sample(policy(torch.tensor(obs, dtype=torch.float32))) - obs, reward, done, _ = env.step(action, render_mode='post') - print('step', i, 'reward', reward) - if done: - break -env.close() diff --git a/scratch/etienne/trpo/experiments/gail-options-setobs.py b/scratch/etienne/trpo/experiments/gail-options-setobs.py deleted file mode 100644 index 288647b..0000000 --- a/scratch/etienne/trpo/experiments/gail-options-setobs.py +++ /dev/null @@ -1,97 +0,0 @@ -import gym -from options.options import gail -from core.gail import Buffer -from core.value import SetValue -from core.policy import SetDiscretePolicy -from core.discriminator import DeepsetDiscriminator -import torch.optim -from intersim.envs import IntersimpleLidarFlat -from intersim.envs.intersimple import speed_reward -import functools -from util.wrappers import CollisionPenaltyWrapper, TransformObservation, Setobs -import numpy as np -from options.options import OptionsEnv -from torch.utils.tensorboard import SummaryWriter -from core.reparam_module import ReparamPolicy - -obs_min = np.array([ - [-1000, -1000, 0, -np.pi, -1e-1, 0.], - [0, -np.pi, -20, -20, -np.pi, -1e-1], - [0, -np.pi, -20, -20, -np.pi, -1e-1], - [0, -np.pi, -20, -20, -np.pi, -1e-1], - [0, -np.pi, -20, -20, -np.pi, -1e-1], - [0, -np.pi, -20, -20, -np.pi, -1e-1], -]).reshape(-1) - -obs_max = np.array([ - [1000, 1000, 20, np.pi, 1e-1, 0.], - [50, np.pi, 20, 20, np.pi, 1e-1], - [50, np.pi, 20, 20, np.pi, 1e-1], - [50, np.pi, 20, 20, np.pi, 1e-1], - [50, np.pi, 20, 20, np.pi, 1e-1], - [50, np.pi, 20, 20, np.pi, 1e-1], -]).reshape(-1) - -envs = [OptionsEnv(Setobs( - TransformObservation(CollisionPenaltyWrapper(IntersimpleLidarFlat( - n_rays=5, - agent=51, - reward=functools.partial( - speed_reward, - collision_penalty=0 - ), - stop_on_collision=False, - ), collision_distance=6, collision_penalty=100), lambda obs: (obs - obs_min) / (obs_max - obs_min + 1e-10)) -), options=[(0, 5), (1, 5), (2, 5), (4, 5), (8, 5)]) for _ in range(60)] - -env_fn = lambda i: envs[i] -policy = SetDiscretePolicy(env_fn(0).action_space.n) -value = SetValue() -v_opt = torch.optim.Adam(value.parameters(), lr=1e-4) - -discriminator = DeepsetDiscriminator() -disc_opt = torch.optim.Adam(discriminator.parameters(), lr=1e-3, weight_decay=1e-3) - -expert_data = torch.load('intersimple-expert-data-setobs.pt') -expert_data = Buffer(*expert_data) - -value, policy = gail( - env_fn=env_fn, - expert_data=expert_data, - discriminator=discriminator, - disc_opt=disc_opt, - disc_iters=100, - policy=policy, - value=value, - v_opt=v_opt, - v_iters=1000, - epochs=150, - rollout_episodes=60, - rollout_steps=60, - gamma=0.99, - gae_lambda=0.9, - delta=0.01, - backtrack_coeff=0.8, - backtrack_iters=10, - logger=SummaryWriter(comment='gail-options-setobs'), -) - -torch.save(policy.state_dict(), 'gail-options-setobs.pt') - -# %% -policy = SetDiscretePolicy(env_fn(0).action_space.n) -policy(torch.zeros(env_fn(0).observation_space.shape)) -policy = ReparamPolicy(policy) -policy.load_state_dict(torch.load('gail-options-setobs.pt')) - -env = env_fn(0) -obs = env.reset() -env.render(mode='post') -for i in range(300): - #action, _ = policy.predict(torch.tensor(obs)) - action = policy.sample(policy(torch.tensor(obs, dtype=torch.float32))) - obs, reward, done, _ = env.step(action, render_mode='post') - print('step', i, 'reward', reward) - if done: - break -env.close() diff --git a/scratch/etienne/trpo/experiments/gail-options-setobs2.py b/scratch/etienne/trpo/experiments/gail-options-setobs2.py deleted file mode 100644 index 953b347..0000000 --- a/scratch/etienne/trpo/experiments/gail-options-setobs2.py +++ /dev/null @@ -1,104 +0,0 @@ -# %% -import gym -from options.options import gail -from core.gail import Buffer -from core.value import SetValue -from core.policy import SetDiscretePolicy -from core.discriminator import DeepsetDiscriminator -import torch.optim -from intersim.envs import IntersimpleLidarFlatRandom -from intersim.envs.intersimple import speed_reward -import functools -from util.wrappers import CollisionPenaltyWrapper, TransformObservation, Setobs -import numpy as np -from options.options import OptionsEnv -from torch.utils.tensorboard import SummaryWriter -from core.reparam_module import ReparamPolicy - -obs_min = np.array([ - [-1000, -1000, 0, -np.pi, -1e-1, 0.], - [0, -np.pi, -20, -20, -np.pi, -1e-1], - [0, -np.pi, -20, -20, -np.pi, -1e-1], - [0, -np.pi, -20, -20, -np.pi, -1e-1], - [0, -np.pi, -20, -20, -np.pi, -1e-1], - [0, -np.pi, -20, -20, -np.pi, -1e-1], -]).reshape(-1) - -obs_max = np.array([ - [1000, 1000, 20, np.pi, 1e-1, 0.], - [50, np.pi, 20, 20, np.pi, 1e-1], - [50, np.pi, 20, 20, np.pi, 1e-1], - [50, np.pi, 20, 20, np.pi, 1e-1], - [50, np.pi, 20, 20, np.pi, 1e-1], - [50, np.pi, 20, 20, np.pi, 1e-1], -]).reshape(-1) - -envs = [OptionsEnv(Setobs( - TransformObservation(CollisionPenaltyWrapper(IntersimpleLidarFlatRandom( - n_rays=5, - reward=functools.partial( - speed_reward, - collision_penalty=0 - ), - stop_on_collision=False, - ), collision_distance=6, collision_penalty=100), lambda obs: (obs - obs_min) / (obs_max - obs_min + 1e-10)) -), options=[(0, 5), (1, 5), (2, 5), (4, 5), (6, 5), (8, 5)]) for _ in range(60)] - -env_fn = lambda i: envs[i] -policy = SetDiscretePolicy(env_fn(0).action_space.n) -value = SetValue() -v_opt = torch.optim.Adam(value.parameters(), lr=1e-4) - -discriminator = DeepsetDiscriminator() -disc_opt = torch.optim.Adam(discriminator.parameters(), lr=1e-3, weight_decay=1e-4) - -expert_data = torch.load('intersimple-expert-data-setobs2.pt') -expert_data = Buffer(*expert_data) - -# %% -def callback(epoch, value, policy): - if not epoch % 10: - torch.save(policy.state_dict(), f'gail-options-setobs2-{epoch}.pt') - torch.save(value.state_dict(), f'gail-options-setobs2-value-{epoch}.pt') - -value, policy = gail( - env_fn=env_fn, - expert_data=expert_data, - discriminator=discriminator, - disc_opt=disc_opt, - disc_iters=100, - policy=policy, - value=value, - v_opt=v_opt, - v_iters=1000, - epochs=300, - rollout_episodes=60, - rollout_steps=60, - gamma=0.99, - gae_lambda=0.9, - delta=0.01, - backtrack_coeff=0.8, - backtrack_iters=10, - logger=SummaryWriter(comment='gail-options-setobs2'), - callback=callback, -) - -torch.save(policy.state_dict(), 'gail-options-setobs2.pt') - -# %% -policy = SetDiscretePolicy(env_fn(0).action_space.n) -policy(torch.zeros(env_fn(0).observation_space.shape)) -policy = ReparamPolicy(policy) -policy.load_state_dict(torch.load('gail-options-setobs2.pt')) - -env = env_fn(0) -obs = env.reset() -env.render(mode='post') -for i in range(300): - #action, _ = policy.predict(torch.tensor(obs)) - action = policy.sample(policy(torch.tensor(obs, dtype=torch.float32))) - obs, reward, done, _ = env.step(action, render_mode='post') - print('step', i, 'reward', reward) - if done: - break -env.close() diff --git a/scratch/etienne/trpo/experiments/gail-pendulum.py b/scratch/etienne/trpo/experiments/gail-pendulum.py deleted file mode 100644 index 9e3a6ee..0000000 --- a/scratch/etienne/trpo/experiments/gail-pendulum.py +++ /dev/null @@ -1,39 +0,0 @@ -import gym -from core.gail import gail, Buffer -from core.value import Value -from core.policy import Policy -from core.discriminator import Discriminator -import torch.optim - -env_fn = lambda _: gym.make('Pendulum-v0') -policy = Policy(env_fn(0).action_space.shape[0]) -value = Value() -v_opt = torch.optim.Adam(value.parameters(), lr=1e-3) -discriminator = Discriminator() -disc_opt = torch.optim.Adam(discriminator.parameters(), lr=1e-3) - -expert_data = torch.load('trpo-pendulum-expert-data.pt') -expert_data = Buffer(*expert_data) - -gail( - env_fn=env_fn, - expert_data=expert_data, - discriminator=discriminator, - disc_opt=disc_opt, - disc_iters=10, - policy=policy, - value=value, - v_opt=v_opt, - v_iters=1000, - epochs=100, - rollout_episodes=20, - rollout_steps=250, - gamma=0.99, - gae_lambda=0.9, - delta=0.01, - backtrack_coeff=0.8, - backtrack_iters=10, -) - - -torch.save(policy.state_dict(), 'gail-pendulum.pt') diff --git a/scratch/etienne/trpo/experiments/gail-ppo-intersimple-minobs.py b/scratch/etienne/trpo/experiments/gail-ppo-intersimple-minobs.py deleted file mode 100644 index 21afb69..0000000 --- a/scratch/etienne/trpo/experiments/gail-ppo-intersimple-minobs.py +++ /dev/null @@ -1,75 +0,0 @@ -import gym -from core.gail import gail_ppo, Buffer -from core.value import Value -from core.policy import Policy -from core.discriminator import Discriminator -import torch.optim -from intersim.envs import IntersimpleLidarFlat -from intersim.envs.intersimple import speed_reward -import functools -from util.wrappers import CollisionPenaltyWrapper, Minobs -import numpy as np -from gym.wrappers import TransformObservation - -obs_min = np.array([ - [-1000, -1000, 0, -np.pi, -1e-1, 0.], - [0, -np.pi, -20, -20, -np.pi, -1e-1], - [0, -np.pi, -20, -20, -np.pi, -1e-1], - [0, -np.pi, -20, -20, -np.pi, -1e-1], - [0, -np.pi, -20, -20, -np.pi, -1e-1], - [0, -np.pi, -20, -20, -np.pi, -1e-1], -]).reshape(-1) - -obs_max = np.array([ - [1000, 1000, 20, np.pi, 1e-1, 0.], - [50, np.pi, 20, 20, np.pi, 1e-1], - [50, np.pi, 20, 20, np.pi, 1e-1], - [50, np.pi, 20, 20, np.pi, 1e-1], - [50, np.pi, 20, 20, np.pi, 1e-1], - [50, np.pi, 20, 20, np.pi, 1e-1], -]).reshape(-1) - -envs = [Minobs(TransformObservation(CollisionPenaltyWrapper(IntersimpleLidarFlat( - n_rays=5, - agent=51, - reward=functools.partial( - speed_reward, - collision_penalty=0 - ), - stop_on_collision=False, -), collision_distance=6, collision_penalty=100), lambda obs: (obs - obs_min) / (obs_max - obs_min + 1e-10))) for _ in range(30)] -env_fn = lambda i: envs[i] - -policy = Policy(env_fn(0).action_space.shape[0]) -pi_opt = torch.optim.Adam(policy.parameters(), lr=3e-4) - -value = Value() -v_opt = torch.optim.Adam(value.parameters(), lr=1e-3, weight_decay=1e-3) - -discriminator = Discriminator() -disc_opt = torch.optim.Adam(discriminator.parameters(), lr=1e-3) - -expert_data = torch.load('intersimple-expert-data-minobs.pt') -expert_data = Buffer(*expert_data) - -value, policy = gail_ppo( - env_fn=env_fn, - expert_data=expert_data, - discriminator=discriminator, - disc_opt=disc_opt, - disc_iters=100, - policy=policy, - value=value, - v_opt=v_opt, - v_iters=1000, - epochs=4000, - rollout_episodes=30, - rollout_steps=100, - gamma=0.99, - gae_lambda=0.9, - clip_ratio=0.2, - pi_opt=pi_opt, - pi_iters=100, -) - -torch.save(policy.state_dict(), 'gail-ppo-intersimple-minobs.pt') diff --git a/scratch/etienne/trpo/experiments/gail-ppo-intersimple-normobs.py b/scratch/etienne/trpo/experiments/gail-ppo-intersimple-normobs.py deleted file mode 100644 index 329fb46..0000000 --- a/scratch/etienne/trpo/experiments/gail-ppo-intersimple-normobs.py +++ /dev/null @@ -1,75 +0,0 @@ -import gym -from core.gail import gail_ppo, Buffer -from core.value import Value -from core.policy import Policy -from core.discriminator import Discriminator -import torch.optim -from intersim.envs import IntersimpleLidarFlat -from intersim.envs.intersimple import speed_reward -import functools -from util.wrappers import CollisionPenaltyWrapper -import numpy as np -from gym.wrappers import TransformObservation - -obs_min = np.array([ - [-1000, -1000, 0, -np.pi, -1e-1, 0.], - [0, -np.pi, -20, -20, -np.pi, -1e-1], - [0, -np.pi, -20, -20, -np.pi, -1e-1], - [0, -np.pi, -20, -20, -np.pi, -1e-1], - [0, -np.pi, -20, -20, -np.pi, -1e-1], - [0, -np.pi, -20, -20, -np.pi, -1e-1], -]).reshape(-1) - -obs_max = np.array([ - [1000, 1000, 20, np.pi, 1e-1, 0.], - [50, np.pi, 20, 20, np.pi, 1e-1], - [50, np.pi, 20, 20, np.pi, 1e-1], - [50, np.pi, 20, 20, np.pi, 1e-1], - [50, np.pi, 20, 20, np.pi, 1e-1], - [50, np.pi, 20, 20, np.pi, 1e-1], -]).reshape(-1) - -envs = [TransformObservation(CollisionPenaltyWrapper(IntersimpleLidarFlat( - n_rays=5, - agent=51, - reward=functools.partial( - speed_reward, - collision_penalty=0 - ), - stop_on_collision=False, -), collision_distance=6, collision_penalty=100), lambda obs: (obs - obs_min) / (obs_max - obs_min + 1e-10)) for _ in range(30)] -env_fn = lambda i: envs[i] - -policy = Policy(env_fn(0).action_space.shape[0]) -pi_opt = torch.optim.Adam(policy.parameters(), lr=3e-4) - -value = Value() -v_opt = torch.optim.Adam(value.parameters(), lr=1e-3) - -discriminator = Discriminator() -disc_opt = torch.optim.Adam(discriminator.parameters(), lr=1e-3) - -expert_data = torch.load('intersimple-expert-data-normobs.pt') -expert_data = Buffer(*expert_data) - -value, policy = gail_ppo( - env_fn=env_fn, - expert_data=expert_data, - discriminator=discriminator, - disc_opt=disc_opt, - disc_iters=100, - policy=policy, - value=value, - v_opt=v_opt, - v_iters=1000, - epochs=4000, - rollout_episodes=30, - rollout_steps=100, - gamma=0.99, - gae_lambda=0.9, - clip_ratio=0.2, - pi_opt=pi_opt, - pi_iters=100, -) - -torch.save(policy.state_dict(), 'gail-ppo-intersimple-normobs.pt') diff --git a/scratch/etienne/trpo/experiments/gail-ppo-intersimple-setobs2.py b/scratch/etienne/trpo/experiments/gail-ppo-intersimple-setobs2.py deleted file mode 100644 index 1de435d..0000000 --- a/scratch/etienne/trpo/experiments/gail-ppo-intersimple-setobs2.py +++ /dev/null @@ -1,102 +0,0 @@ -# %% -import gym -from core.gail import gail_ppo, Buffer -from core.value import SetValue -from core.policy import SetPolicy -from core.discriminator import DeepsetDiscriminator -import torch.optim -from intersim.envs import IntersimpleLidarFlatRandom -from intersim.envs.intersimple import speed_reward -import functools -from util.wrappers import CollisionPenaltyWrapper, Setobs -import numpy as np -from gym.wrappers import TransformObservation -from core.reparam_module import ReparamPolicy -from torch.utils.tensorboard import SummaryWriter - -obs_min = np.array([ - [-1000, -1000, 0, -np.pi, -1e-1, 0.], - [0, -np.pi, -20, -20, -np.pi, -1e-1], - [0, -np.pi, -20, -20, -np.pi, -1e-1], - [0, -np.pi, -20, -20, -np.pi, -1e-1], - [0, -np.pi, -20, -20, -np.pi, -1e-1], - [0, -np.pi, -20, -20, -np.pi, -1e-1], -]).reshape(-1) - -obs_max = np.array([ - [1000, 1000, 20, np.pi, 1e-1, 0.], - [50, np.pi, 20, 20, np.pi, 1e-1], - [50, np.pi, 20, 20, np.pi, 1e-1], - [50, np.pi, 20, 20, np.pi, 1e-1], - [50, np.pi, 20, 20, np.pi, 1e-1], - [50, np.pi, 20, 20, np.pi, 1e-1], -]).reshape(-1) - -envs = [Setobs(TransformObservation(CollisionPenaltyWrapper(IntersimpleLidarFlatRandom( - n_rays=5, - reward=functools.partial( - speed_reward, - collision_penalty=0 - ), - stop_on_collision=False, - random_skip=True, -), collision_distance=6, collision_penalty=100), lambda obs: (obs - obs_min) / (obs_max - obs_min + 1e-10))) for _ in range(50)] -env_fn = lambda i: envs[i] - -policy = SetPolicy(env_fn(0).action_space.shape[0]) -pi_opt = torch.optim.Adam(policy.parameters(), lr=3e-4) - -value = SetValue() -v_opt = torch.optim.Adam(value.parameters(), lr=1e-4, weight_decay=1e-3) - -discriminator = DeepsetDiscriminator() -disc_opt = torch.optim.Adam(discriminator.parameters(), lr=1e-3, weight_decay=1e-5) - -expert_data = torch.load('intersimple-expert-data-setobs2.pt') -expert_data = Buffer(*expert_data) - -# %% -value, policy = gail_ppo( - env_fn=env_fn, - expert_data=expert_data, - discriminator=discriminator, - disc_opt=disc_opt, - disc_iters=500, - policy=policy, - value=value, - v_opt=v_opt, - v_iters=1000, - epochs=800, - rollout_episodes=50, - rollout_steps=200, - gamma=0.99, - gae_lambda=0.9, - clip_ratio=0.2, - pi_opt=pi_opt, - pi_iters=100, - logger=SummaryWriter(comment='-ppo-setobs2'), -) - -torch.save(policy.state_dict(), 'gail-ppo-intersimple-setobs2.pt') - -# %% -policy = SetPolicy(env_fn(0).action_space.shape[0]) -policy(torch.zeros(env_fn(0).observation_space.shape)) -policy = ReparamPolicy(policy) -policy.load_state_dict(torch.load('gail-ppo-intersimple-setobs2.pt')) - -env = env_fn(0) -env.random_skip = False -obs = env.reset() -env.render(mode='post') -for i in range(300): - #action, _ = policy.predict(torch.tensor(obs)) - action = policy.sample(policy(torch.tensor(obs, dtype=torch.float32))) - obs, reward, done, _ = env.step(action) - env.render(mode='post') - print('step', i, 'reward', reward) - if done: - break -env.close() - -# %% diff --git a/scratch/etienne/trpo/experiments/gail-ppo-intersimple.py b/scratch/etienne/trpo/experiments/gail-ppo-intersimple.py deleted file mode 100644 index 7412b3f..0000000 --- a/scratch/etienne/trpo/experiments/gail-ppo-intersimple.py +++ /dev/null @@ -1,55 +0,0 @@ -import gym -from core.gail import gail_ppo, Buffer -from core.value import Value -from core.policy import Policy -from core.discriminator import Discriminator -import torch.optim -from intersim.envs import IntersimpleLidarFlat -from intersim.envs.intersimple import speed_reward -import functools -from util.wrappers import CollisionPenaltyWrapper - -envs = [CollisionPenaltyWrapper(IntersimpleLidarFlat( - n_rays=5, - agent=51, - reward=functools.partial( - speed_reward, - collision_penalty=0 - ), - stop_on_collision=False, -), collision_distance=6, collision_penalty=100) for _ in range(30)] -env_fn = lambda i: envs[i] - -policy = Policy(env_fn(0).action_space.shape[0]) -pi_opt = torch.optim.Adam(policy.parameters(), lr=3e-4) - -value = Value() -v_opt = torch.optim.Adam(value.parameters(), lr=1e-3) - -discriminator = Discriminator() -disc_opt = torch.optim.Adam(discriminator.parameters(), lr=3e-4) - -expert_data = torch.load('intersimple-expert-data.pt') -expert_data = Buffer(*expert_data) - -value, policy = gail_ppo( - env_fn=env_fn, - expert_data=expert_data, - discriminator=discriminator, - disc_opt=disc_opt, - disc_iters=10, - policy=policy, - value=value, - v_opt=v_opt, - v_iters=1000, - epochs=4000, - rollout_episodes=30, - rollout_steps=100, - gamma=0.99, - gae_lambda=0.9, - clip_ratio=0.2, - pi_opt=pi_opt, - pi_iters=100, -) - -torch.save(policy.state_dict(), 'gail-ppo-intersimple.pt') diff --git a/scratch/etienne/trpo/experiments/gail-ppo-options-minobs.py b/scratch/etienne/trpo/experiments/gail-ppo-options-minobs.py deleted file mode 100644 index f25a9ea..0000000 --- a/scratch/etienne/trpo/experiments/gail-ppo-options-minobs.py +++ /dev/null @@ -1,96 +0,0 @@ -import gym -from options.options import gail_ppo, Buffer -from core.value import Value -from core.policy import DiscretePolicy -from core.discriminator import Discriminator -import torch.optim -from intersim.envs import IntersimpleLidarFlat -from intersim.envs.intersimple import speed_reward -import functools -from util.wrappers import CollisionPenaltyWrapper, TransformObservation, Minobs -import numpy as np -from options.options import OptionsEnv -from torch.utils.tensorboard import SummaryWriter - -obs_min = np.array([ - [-1000, -1000, 0, -np.pi, -1e-1, 0.], - [0, -np.pi, -20, -20, -np.pi, -1e-1], - [0, -np.pi, -20, -20, -np.pi, -1e-1], - [0, -np.pi, -20, -20, -np.pi, -1e-1], - [0, -np.pi, -20, -20, -np.pi, -1e-1], - [0, -np.pi, -20, -20, -np.pi, -1e-1], -]).reshape(-1) - -obs_max = np.array([ - [1000, 1000, 20, np.pi, 1e-1, 0.], - [50, np.pi, 20, 20, np.pi, 1e-1], - [50, np.pi, 20, 20, np.pi, 1e-1], - [50, np.pi, 20, 20, np.pi, 1e-1], - [50, np.pi, 20, 20, np.pi, 1e-1], - [50, np.pi, 20, 20, np.pi, 1e-1], -]).reshape(-1) - -envs = [OptionsEnv(Minobs( - TransformObservation(CollisionPenaltyWrapper(IntersimpleLidarFlat( - n_rays=5, - agent=51, - reward=functools.partial( - speed_reward, - collision_penalty=0 - ), - stop_on_collision=False, - ), collision_distance=6, collision_penalty=100), lambda obs: (obs - obs_min) / (obs_max - obs_min + 1e-10)) -), options=[(0, 5), (1, 5), (2, 5), (4, 5), (8, 5)]) for _ in range(60)] - -env_fn = lambda i: envs[i] - -policy = DiscretePolicy(env_fn(0).action_space.n) -pi_opt = torch.optim.Adam(policy.parameters(), lr=3e-4) - -value = Value() -v_opt = torch.optim.Adam(value.parameters(), lr=1e-3) - -discriminator = Discriminator() -disc_opt = torch.optim.Adam(discriminator.parameters(), lr=1e-3) - -expert_data = torch.load('intersimple-expert-data-minobs.pt') -expert_data = Buffer(*expert_data) - -value, policy = gail_ppo( - env_fn=env_fn, - expert_data=expert_data, - discriminator=discriminator, - disc_opt=disc_opt, - disc_iters=100, - policy=policy, - value=value, - v_opt=v_opt, - v_iters=1000, - epochs=50, - rollout_episodes=60, - rollout_steps=60, - gamma=0.99, - gae_lambda=0.9, - clip_ratio=0.2, - pi_opt=pi_opt, - pi_iters=100, - logger=SummaryWriter(comment='gail-ppo-options-minobs'), -) - -torch.save(policy.state_dict(), 'gail-ppo-options-minobs.pt') - -# %% -policy = DiscretePolicy(env_fn(0).action_space.n) -policy(torch.zeros(env_fn(0).observation_space.shape)) -policy.load_state_dict(torch.load('gail-ppo-options-minobs.pt')) - -env = env_fn(0) -obs = env.reset() -env.render(mode='post') -for i in range(300): - action = policy.sample(policy(torch.tensor(obs, dtype=torch.float32))) - obs, reward, done, _ = env.step(action, render_mode='post') - print('step', i, 'reward', reward) - if done: - break -env.close() \ No newline at end of file diff --git a/scratch/etienne/trpo/experiments/gail-ppo-options-setobs.py b/scratch/etienne/trpo/experiments/gail-ppo-options-setobs.py deleted file mode 100644 index 8fa9339..0000000 --- a/scratch/etienne/trpo/experiments/gail-ppo-options-setobs.py +++ /dev/null @@ -1,96 +0,0 @@ -import gym -from options.options import gail_ppo, Buffer -from core.value import SetValue -from core.policy import SetDiscretePolicy -from core.discriminator import DeepsetDiscriminator -import torch.optim -from intersim.envs import IntersimpleLidarFlat -from intersim.envs.intersimple import speed_reward -import functools -from util.wrappers import CollisionPenaltyWrapper, TransformObservation, Setobs -import numpy as np -from options.options import OptionsEnv -from torch.utils.tensorboard import SummaryWriter - -obs_min = np.array([ - [-1000, -1000, 0, -np.pi, -1e-1, 0.], - [0, -np.pi, -20, -20, -np.pi, -1e-1], - [0, -np.pi, -20, -20, -np.pi, -1e-1], - [0, -np.pi, -20, -20, -np.pi, -1e-1], - [0, -np.pi, -20, -20, -np.pi, -1e-1], - [0, -np.pi, -20, -20, -np.pi, -1e-1], -]).reshape(-1) - -obs_max = np.array([ - [1000, 1000, 20, np.pi, 1e-1, 0.], - [50, np.pi, 20, 20, np.pi, 1e-1], - [50, np.pi, 20, 20, np.pi, 1e-1], - [50, np.pi, 20, 20, np.pi, 1e-1], - [50, np.pi, 20, 20, np.pi, 1e-1], - [50, np.pi, 20, 20, np.pi, 1e-1], -]).reshape(-1) - -envs = [OptionsEnv(Setobs( - TransformObservation(CollisionPenaltyWrapper(IntersimpleLidarFlat( - n_rays=5, - agent=51, - reward=functools.partial( - speed_reward, - collision_penalty=0 - ), - stop_on_collision=False, - ), collision_distance=6, collision_penalty=100), lambda obs: (obs - obs_min) / (obs_max - obs_min + 1e-10)) -), options=[(0, 5), (1, 5), (2, 5), (4, 5), (8, 5)]) for _ in range(60)] - -env_fn = lambda i: envs[i] - -policy = SetDiscretePolicy(env_fn(0).action_space.n) -pi_opt = torch.optim.Adam(policy.parameters(), lr=3e-4) - -value = SetValue() -v_opt = torch.optim.Adam(value.parameters(), lr=1e-3) - -discriminator = DeepsetDiscriminator() -disc_opt = torch.optim.Adam(discriminator.parameters(), lr=1e-3, weight_decay=1e-3) - -expert_data = torch.load('intersimple-expert-data-setobs.pt') -expert_data = Buffer(*expert_data) - -value, policy = gail_ppo( - env_fn=env_fn, - expert_data=expert_data, - discriminator=discriminator, - disc_opt=disc_opt, - disc_iters=100, - policy=policy, - value=value, - v_opt=v_opt, - v_iters=1000, - epochs=150, - rollout_episodes=60, - rollout_steps=60, - gamma=0.99, - gae_lambda=0.9, - clip_ratio=0.2, - pi_opt=pi_opt, - pi_iters=100, - logger=SummaryWriter(comment='gail-ppo-options-setobs'), -) - -torch.save(policy.state_dict(), 'gail-ppo-options-setobs.pt') - -# %% -policy = SetDiscretePolicy(env_fn(0).action_space.n) -policy(torch.zeros(env_fn(0).observation_space.shape)) -policy.load_state_dict(torch.load('gail-ppo-options-setobs.pt')) - -env = env_fn(0) -obs = env.reset() -env.render(mode='post') -for i in range(300): - action = policy.sample(policy(torch.tensor(obs, dtype=torch.float32))) - obs, reward, done, _ = env.step(action, render_mode='post') - print('step', i, 'reward', reward) - if done: - break -env.close() \ No newline at end of file diff --git a/scratch/etienne/trpo/experiments/gail-ppo-options-setobs2.py b/scratch/etienne/trpo/experiments/gail-ppo-options-setobs2.py deleted file mode 100644 index 2ad3a46..0000000 --- a/scratch/etienne/trpo/experiments/gail-ppo-options-setobs2.py +++ /dev/null @@ -1,103 +0,0 @@ -# %% -import gym -from options.options import gail_ppo, Buffer -from core.value import SetValue -from core.policy import SetDiscretePolicy -from core.discriminator import DeepsetDiscriminator -import torch.optim -from intersim.envs import IntersimpleLidarFlatRandom -from intersim.envs.intersimple import speed_reward -import functools -from util.wrappers import CollisionPenaltyWrapper, TransformObservation, Setobs -import numpy as np -from options.options import OptionsEnv -from torch.utils.tensorboard import SummaryWriter - -obs_min = np.array([ - [-1000, -1000, 0, -np.pi, -1e-1, 0.], - [0, -np.pi, -20, -20, -np.pi, -1e-1], - [0, -np.pi, -20, -20, -np.pi, -1e-1], - [0, -np.pi, -20, -20, -np.pi, -1e-1], - [0, -np.pi, -20, -20, -np.pi, -1e-1], - [0, -np.pi, -20, -20, -np.pi, -1e-1], -]).reshape(-1) - -obs_max = np.array([ - [1000, 1000, 20, np.pi, 1e-1, 0.], - [50, np.pi, 20, 20, np.pi, 1e-1], - [50, np.pi, 20, 20, np.pi, 1e-1], - [50, np.pi, 20, 20, np.pi, 1e-1], - [50, np.pi, 20, 20, np.pi, 1e-1], - [50, np.pi, 20, 20, np.pi, 1e-1], -]).reshape(-1) - -envs = [OptionsEnv(Setobs( - TransformObservation(CollisionPenaltyWrapper(IntersimpleLidarFlatRandom( - n_rays=5, - reward=functools.partial( - speed_reward, - collision_penalty=0 - ), - stop_on_collision=False, - ), collision_distance=6, collision_penalty=100), lambda obs: (obs - obs_min) / (obs_max - obs_min + 1e-10)) -), options=[(0, 5), (1, 5), (2, 5), (4, 5), (6, 5), (8, 5)]) for _ in range(60)] - -env_fn = lambda i: envs[i] - -policy = SetDiscretePolicy(env_fn(0).action_space.n) -pi_opt = torch.optim.Adam(policy.parameters(), lr=3e-4) - -value = SetValue() -v_opt = torch.optim.Adam(value.parameters(), lr=1e-3) - -discriminator = DeepsetDiscriminator() -disc_opt = torch.optim.Adam(discriminator.parameters(), lr=1e-3, weight_decay=1e-4) - -expert_data = torch.load('intersimple-expert-data-setobs2.pt') -expert_data = Buffer(*expert_data) - -# %% -def callback(epoch, value, policy): - if not epoch % 10: - torch.save(policy.state_dict(), f'gail-ppo-options-setobs2-{epoch}.pt') - torch.save(value.state_dict(), f'gail-ppo-options-setobs2-value-{epoch}.pt') - -value, policy = gail_ppo( - env_fn=env_fn, - expert_data=expert_data, - discriminator=discriminator, - disc_opt=disc_opt, - disc_iters=100, - policy=policy, - value=value, - v_opt=v_opt, - v_iters=1000, - epochs=200, - rollout_episodes=60, - rollout_steps=60, - gamma=0.99, - gae_lambda=0.9, - clip_ratio=0.2, - pi_opt=pi_opt, - pi_iters=100, - logger=SummaryWriter(comment='gail-ppo-options-setobs2'), - callback=callback, -) - -torch.save(policy.state_dict(), 'gail-ppo-options-setobs2.pt') - -# %% -policy = SetDiscretePolicy(env_fn(0).action_space.n) -policy(torch.zeros(env_fn(0).observation_space.shape)) -policy.load_state_dict(torch.load('gail-ppo-options-setobs2.pt')) - -env = env_fn(0) -obs = env.reset() -env.render(mode='post') -for i in range(300): - action = policy.sample(policy(torch.tensor(obs, dtype=torch.float32))) - obs, reward, done, _ = env.step(action, render_mode='post') - print('step', i, 'reward', reward) - if done: - break -env.close() \ No newline at end of file diff --git a/scratch/etienne/trpo/experiments/intersimple-expert-action-profiles.ipynb b/scratch/etienne/trpo/experiments/intersimple-expert-action-profiles.ipynb deleted file mode 100644 index 00255c8..0000000 --- a/scratch/etienne/trpo/experiments/intersimple-expert-action-profiles.ipynb +++ /dev/null @@ -1,175 +0,0 @@ -{ - "cells": [ - { - "cell_type": "code", - "execution_count": 1, - "metadata": {}, - "outputs": [], - "source": [ - "import torch\n", - "import matplotlib.pyplot as plt" - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "states torch.Size([2048, 200, 5, 6]) torch.float32\n", - "actions torch.Size([2048, 200, 1]) torch.float32\n", - "rewards torch.Size([2048, 200]) torch.float32\n", - "dones torch.Size([2048, 200]) torch.bool\n" - ] - } - ], - "source": [ - "states, actions, rewards, dones = torch.load('intersimple-expert-data-setobs2.pt')\n", - "#states, actions, rewards, dones = torch.load('intersimple-expert-data-minobs.pt')\n", - "print('states', states.shape, states.dtype)\n", - "print('actions', actions.shape, actions.dtype)\n", - "print('rewards', rewards.shape, rewards.dtype)\n", - "print('dones', dones.shape, dones.dtype)" - ] - }, - { - "cell_type": "code", - "execution_count": 3, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "[]" - ] - }, - "execution_count": 3, - "metadata": {}, - "output_type": "execute_result" - }, - { - "data": { - "image/png": "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", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - } - ], - "source": [ - "i = 52\n", - "plt.plot(actions[i, ~dones[i, :], 0])" - ] - }, - { - "cell_type": "code", - "execution_count": 4, - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - } - ], - "source": [ - "for a, d in zip(actions.squeeze(), dones):\n", - " plt.plot(a[~d])\n", - "\n", - "plt.show()" - ] - }, - { - "cell_type": "code", - "execution_count": 5, - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - } - ], - "source": [ - "plt.plot(states[:, :, 0, 0].T)\n", - "plt.show()" - ] - }, - { - "cell_type": "code", - "execution_count": 6, - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - } - ], - "source": [ - "plt.hist(states[~dones][:, 0, 0].numpy(), density=True, bins=100)\n", - "plt.show()" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [] - } - ], - "metadata": { - "interpreter": { - "hash": "6c7a4ac80dd345f83235e10baa3acc437d966916e1cc075a45b91bb9cc030938" - }, - "kernelspec": { - "display_name": "Python 3.9.7 64-bit ('.venv': venv)", - "language": "python", - "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.9.7" - }, - "orig_nbformat": 4 - }, - "nbformat": 4, - "nbformat_minor": 2 -} diff --git a/scratch/etienne/trpo/experiments/intersimple-expert-rollout-minobs.py b/scratch/etienne/trpo/experiments/intersimple-expert-rollout-minobs.py deleted file mode 100644 index 9cb3802..0000000 --- a/scratch/etienne/trpo/experiments/intersimple-expert-rollout-minobs.py +++ /dev/null @@ -1,54 +0,0 @@ -import torch -import functools -from core.sampling import rollout_sb3 -from intersim.envs import IntersimpleLidarFlat -from intersim.envs.intersimple import speed_reward -from intersim.expert import NormalizedIntersimpleExpert -from util.wrappers import CollisionPenaltyWrapper, Minobs -import numpy as np -from gym.wrappers import TransformObservation - -obs_min = np.array([ - [-1000, -1000, 0, -np.pi, -1e-1, 0.], - [0, -np.pi, -20, -20, -np.pi, -1e-1], - [0, -np.pi, -20, -20, -np.pi, -1e-1], - [0, -np.pi, -20, -20, -np.pi, -1e-1], - [0, -np.pi, -20, -20, -np.pi, -1e-1], - [0, -np.pi, -20, -20, -np.pi, -1e-1], -]).reshape(-1) - -obs_max = np.array([ - [1000, 1000, 20, np.pi, 1e-1, 0.], - [50, np.pi, 20, 20, np.pi, 1e-1], - [50, np.pi, 20, 20, np.pi, 1e-1], - [50, np.pi, 20, 20, np.pi, 1e-1], - [50, np.pi, 20, 20, np.pi, 1e-1], - [50, np.pi, 20, 20, np.pi, 1e-1], -]).reshape(-1) - -env = IntersimpleLidarFlat( - n_rays=5, - agent=51, - reward=functools.partial( - speed_reward, - collision_penalty=0 - ), -) - -policy = NormalizedIntersimpleExpert(env, mu=0.001) - -env = Minobs(TransformObservation( - CollisionPenaltyWrapper( - env, - collision_distance=6, collision_penalty=100 - ), lambda obs: (obs - obs_min) / (obs_max - obs_min + 1e-10) -)) -expert_data = rollout_sb3(env, policy, n_episodes=64, max_steps_per_episode=200) - -states, actions, rewards, dones = expert_data -print(f'Expert mean episode length {(~dones).sum() / states.shape[0]}') -print(f'Expert mean reward per episode {rewards[~dones].sum() / states.shape[0]}') -print(f'Observation mean', states[~dones].mean(0)) -print(f'Observation std', states[~dones].std(0)) - -torch.save(expert_data, 'intersimple-expert-data-minobs.pt') diff --git a/scratch/etienne/trpo/experiments/intersimple-expert-rollout-minobs2.py b/scratch/etienne/trpo/experiments/intersimple-expert-rollout-minobs2.py deleted file mode 100644 index e839f74..0000000 --- a/scratch/etienne/trpo/experiments/intersimple-expert-rollout-minobs2.py +++ /dev/null @@ -1,53 +0,0 @@ -import torch -import functools -from core.sampling import rollout_sb3 -from intersim.envs import IntersimpleLidarFlatRandom -from intersim.envs.intersimple import speed_reward -from intersim.expert import NormalizedIntersimpleExpert -from util.wrappers import CollisionPenaltyWrapper, Minobs -import numpy as np -from gym.wrappers import TransformObservation - -obs_min = np.array([ - [-1000, -1000, 0, -np.pi, -1e-1, 0.], - [0, -np.pi, -20, -20, -np.pi, -1e-1], - [0, -np.pi, -20, -20, -np.pi, -1e-1], - [0, -np.pi, -20, -20, -np.pi, -1e-1], - [0, -np.pi, -20, -20, -np.pi, -1e-1], - [0, -np.pi, -20, -20, -np.pi, -1e-1], -]).reshape(-1) - -obs_max = np.array([ - [1000, 1000, 20, np.pi, 1e-1, 0.], - [50, np.pi, 20, 20, np.pi, 1e-1], - [50, np.pi, 20, 20, np.pi, 1e-1], - [50, np.pi, 20, 20, np.pi, 1e-1], - [50, np.pi, 20, 20, np.pi, 1e-1], - [50, np.pi, 20, 20, np.pi, 1e-1], -]).reshape(-1) - -env = IntersimpleLidarFlatRandom( - n_rays=5, - reward=functools.partial( - speed_reward, - collision_penalty=0 - ), -) - -policy = NormalizedIntersimpleExpert(env, mu=0.001) - -env = Minobs(TransformObservation( - CollisionPenaltyWrapper( - env, - collision_distance=6, collision_penalty=100 - ), lambda obs: (obs - obs_min) / (obs_max - obs_min + 1e-10) -)) -expert_data = rollout_sb3(env, policy, n_episodes=2048, max_steps_per_episode=200) - -states, actions, rewards, dones = expert_data -print(f'Expert mean episode length {(~dones).sum() / states.shape[0]}') -print(f'Expert mean reward per episode {rewards[~dones].sum() / states.shape[0]}') -print(f'Observation mean', states[~dones].mean(0)) -print(f'Observation std', states[~dones].std(0)) - -torch.save(expert_data, 'intersimple-expert-data-minobs2.pt') diff --git a/scratch/etienne/trpo/experiments/intersimple-expert-rollout-normobs.py b/scratch/etienne/trpo/experiments/intersimple-expert-rollout-normobs.py deleted file mode 100644 index b839a3a..0000000 --- a/scratch/etienne/trpo/experiments/intersimple-expert-rollout-normobs.py +++ /dev/null @@ -1,54 +0,0 @@ -import torch -import functools -from core.sampling import rollout_sb3 -from intersim.envs import IntersimpleLidarFlat -from intersim.envs.intersimple import speed_reward -from intersim.expert import NormalizedIntersimpleExpert -from util.wrappers import CollisionPenaltyWrapper -import numpy as np -from gym.wrappers import TransformObservation - -obs_min = np.array([ - [-1000, -1000, 0, -np.pi, -1e-1, 0.], - [0, -np.pi, -20, -20, -np.pi, -1e-1], - [0, -np.pi, -20, -20, -np.pi, -1e-1], - [0, -np.pi, -20, -20, -np.pi, -1e-1], - [0, -np.pi, -20, -20, -np.pi, -1e-1], - [0, -np.pi, -20, -20, -np.pi, -1e-1], -]).reshape(-1) - -obs_max = np.array([ - [1000, 1000, 20, np.pi, 1e-1, 0.], - [50, np.pi, 20, 20, np.pi, 1e-1], - [50, np.pi, 20, 20, np.pi, 1e-1], - [50, np.pi, 20, 20, np.pi, 1e-1], - [50, np.pi, 20, 20, np.pi, 1e-1], - [50, np.pi, 20, 20, np.pi, 1e-1], -]).reshape(-1) - -env = IntersimpleLidarFlat( - n_rays=5, - agent=51, - reward=functools.partial( - speed_reward, - collision_penalty=0 - ), -) - -policy = NormalizedIntersimpleExpert(env, mu=0.001) - -env = TransformObservation( - CollisionPenaltyWrapper( - env, - collision_distance=6, collision_penalty=100 - ), lambda obs: (obs - obs_min) / (obs_max - obs_min + 1e-10) -) -expert_data = rollout_sb3(env, policy, n_episodes=64, max_steps_per_episode=200) - -states, actions, rewards, dones = expert_data -print(f'Expert mean episode length {(~dones).sum() / states.shape[0]}') -print(f'Expert mean reward per episode {rewards[~dones].sum() / states.shape[0]}') -print(f'Observation mean', states[~dones].mean(0)) -print(f'Observation std', states[~dones].std(0)) - -torch.save(expert_data, 'intersimple-expert-data-normobs.pt') diff --git a/scratch/etienne/trpo/experiments/intersimple-expert-rollout-setobs.py b/scratch/etienne/trpo/experiments/intersimple-expert-rollout-setobs.py deleted file mode 100644 index dcf5223..0000000 --- a/scratch/etienne/trpo/experiments/intersimple-expert-rollout-setobs.py +++ /dev/null @@ -1,54 +0,0 @@ -import torch -import functools -from core.sampling import rollout_sb3 -from intersim.envs import IntersimpleLidarFlat -from intersim.envs.intersimple import speed_reward -from intersim.expert import NormalizedIntersimpleExpert -from util.wrappers import CollisionPenaltyWrapper, Setobs -import numpy as np -from gym.wrappers import TransformObservation - -obs_min = np.array([ - [-1000, -1000, 0, -np.pi, -1e-1, 0.], - [0, -np.pi, -20, -20, -np.pi, -1e-1], - [0, -np.pi, -20, -20, -np.pi, -1e-1], - [0, -np.pi, -20, -20, -np.pi, -1e-1], - [0, -np.pi, -20, -20, -np.pi, -1e-1], - [0, -np.pi, -20, -20, -np.pi, -1e-1], -]).reshape(-1) - -obs_max = np.array([ - [1000, 1000, 20, np.pi, 1e-1, 0.], - [50, np.pi, 20, 20, np.pi, 1e-1], - [50, np.pi, 20, 20, np.pi, 1e-1], - [50, np.pi, 20, 20, np.pi, 1e-1], - [50, np.pi, 20, 20, np.pi, 1e-1], - [50, np.pi, 20, 20, np.pi, 1e-1], -]).reshape(-1) - -env = IntersimpleLidarFlat( - n_rays=5, - agent=51, - reward=functools.partial( - speed_reward, - collision_penalty=0 - ), -) - -policy = NormalizedIntersimpleExpert(env, mu=0.001) - -env = Setobs(TransformObservation( - CollisionPenaltyWrapper( - env, - collision_distance=6, collision_penalty=100 - ), lambda obs: (obs - obs_min) / (obs_max - obs_min + 1e-10) -)) -expert_data = rollout_sb3(env, policy, n_episodes=64, max_steps_per_episode=200) - -states, actions, rewards, dones = expert_data -print(f'Expert mean episode length {(~dones).sum() / states.shape[0]}') -print(f'Expert mean reward per episode {rewards[~dones].sum() / states.shape[0]}') -print(f'Observation mean', states[~dones].mean(0)) -print(f'Observation std', states[~dones].std(0)) - -torch.save(expert_data, 'intersimple-expert-data-setobs.pt') diff --git a/scratch/etienne/trpo/experiments/intersimple-expert-rollout-setobs2.py b/scratch/etienne/trpo/experiments/intersimple-expert-rollout-setobs2.py deleted file mode 100644 index 0b24e6e..0000000 --- a/scratch/etienne/trpo/experiments/intersimple-expert-rollout-setobs2.py +++ /dev/null @@ -1,59 +0,0 @@ -import sys -sys.path.append('../../../../') - -import torch -import functools -from src.core.sampling import rollout_sb3 -from intersim.envs import IntersimpleLidarFlatIncrementingAgent -from intersim.envs.intersimple import speed_reward -from intersim.expert import NormalizedIntersimpleExpert -from src.util.wrappers import CollisionPenaltyWrapper, Setobs -import numpy as np -from gym.wrappers import TransformObservation - -obs_min = np.array([ - [-1000, -1000, 0, -np.pi, -1e-1, 0.], - [0, -np.pi, -20, -20, -np.pi, -1e-1], - [0, -np.pi, -20, -20, -np.pi, -1e-1], - [0, -np.pi, -20, -20, -np.pi, -1e-1], - [0, -np.pi, -20, -20, -np.pi, -1e-1], - [0, -np.pi, -20, -20, -np.pi, -1e-1], -]).reshape(-1) - -obs_max = np.array([ - [1000, 1000, 20, np.pi, 1e-1, 0.], - [50, np.pi, 20, 20, np.pi, 1e-1], - [50, np.pi, 20, 20, np.pi, 1e-1], - [50, np.pi, 20, 20, np.pi, 1e-1], - [50, np.pi, 20, 20, np.pi, 1e-1], - [50, np.pi, 20, 20, np.pi, 1e-1], -]).reshape(-1) - -env = IntersimpleLidarFlatIncrementingAgent( - loc=0, - track=4, - n_rays=5, - reward=functools.partial( - speed_reward, - collision_penalty=0 - ), -) - -policy = NormalizedIntersimpleExpert(env, mu=0.001) - -env = Setobs(TransformObservation( - CollisionPenaltyWrapper( - env, - collision_distance=6, collision_penalty=100 - ), lambda obs: (obs - obs_min) / (obs_max - obs_min + 1e-10) -)) -print(env.nv, 'vehicles') -expert_data = rollout_sb3(env, policy, n_episodes=150, max_steps_per_episode=200) - -states, actions, rewards, dones = expert_data -print(f'Expert mean episode length {(~dones).sum() / states.shape[0]}') -print(f'Expert mean reward per episode {rewards[~dones].sum() / states.shape[0]}') -print(f'Observation mean', states[~dones].mean(0)) -print(f'Observation std', states[~dones].std(0)) - -torch.save(expert_data, 'intersimple-expert-data-setobs2-loc0-track4.pt') diff --git a/scratch/etienne/trpo/experiments/intersimple-expert-rollout.py b/scratch/etienne/trpo/experiments/intersimple-expert-rollout.py deleted file mode 100644 index d3a7deb..0000000 --- a/scratch/etienne/trpo/experiments/intersimple-expert-rollout.py +++ /dev/null @@ -1,25 +0,0 @@ -import torch -import functools -from core.sampling import rollout_sb3 -from intersim.envs import IntersimpleLidarFlat -from intersim.envs.intersimple import speed_reward -from intersim.expert import NormalizedIntersimpleExpert -from util.wrappers import CollisionPenaltyWrapper - -env = CollisionPenaltyWrapper(IntersimpleLidarFlat( - n_rays=5, - agent=51, - reward=functools.partial( - speed_reward, - collision_penalty=0 - ), -), collision_distance=6, collision_penalty=100) -policy = NormalizedIntersimpleExpert(env.env, mu=0.001) - -expert_data = rollout_sb3(env, policy, n_episodes=64, max_steps_per_episode=200) - -states, actions, rewards, dones = expert_data -print(f'Expert mean episode length {(~dones).sum() / states.shape[0]}') -print(f'Expert mean reward per episode {rewards[~dones].sum() / states.shape[0]}') - -torch.save(expert_data, 'intersimple-expert-data.pt') diff --git a/scratch/etienne/trpo/experiments/ppo-intersimple-minobs.py b/scratch/etienne/trpo/experiments/ppo-intersimple-minobs.py deleted file mode 100644 index 3c648ce..0000000 --- a/scratch/etienne/trpo/experiments/ppo-intersimple-minobs.py +++ /dev/null @@ -1,63 +0,0 @@ -from intersim.envs import IntersimpleLidarFlat -from intersim.envs.intersimple import speed_reward -import functools - -from core.ppo import ppo -from core.value import Value -from core.policy import Policy -import torch.optim -import numpy as np -from gym.wrappers import TransformObservation - -from util.wrappers import Minobs - -obs_min = np.array([ - [-1000, -1000, 0, -np.pi, -1e-1, 0.], - [0, -np.pi, -20, -20, -np.pi, -1e-1], - [0, -np.pi, -20, -20, -np.pi, -1e-1], - [0, -np.pi, -20, -20, -np.pi, -1e-1], - [0, -np.pi, -20, -20, -np.pi, -1e-1], - [0, -np.pi, -20, -20, -np.pi, -1e-1], -]).reshape(-1) - -obs_max = np.array([ - [1000, 1000, 20, np.pi, 1e-1, 0.], - [50, np.pi, 20, 20, np.pi, 1e-1], - [50, np.pi, 20, 20, np.pi, 1e-1], - [50, np.pi, 20, 20, np.pi, 1e-1], - [50, np.pi, 20, 20, np.pi, 1e-1], - [50, np.pi, 20, 20, np.pi, 1e-1], -]).reshape(-1) - -envs = [Minobs(TransformObservation(IntersimpleLidarFlat( - n_rays=5, - agent=51, - reward=functools.partial( - speed_reward, - collision_penalty=0 - ), -), lambda obs: (obs - obs_min) / (obs_max - obs_min + 1e-10))) for _ in range(30)] - -env_fn = lambda i: envs[i] -policy = Policy(env_fn(0).action_space.shape[0]) -value = Value() -pi_opt = torch.optim.Adam(policy.parameters(), lr=3e-4) -v_opt = torch.optim.Adam(value.parameters(), lr=1e-3) - -value, policy = ppo( - env_fn=env_fn, - value=value, - policy=policy, - epochs=50, - rollout_episodes=30, - rollout_steps=200, - gamma=0.99, - gae_lambda=0.9, - clip_ratio=0.2, - pi_opt=pi_opt, - pi_iters=100, - v_opt=v_opt, - v_iters=1000, -) - -torch.save(policy.state_dict(), 'ppo-intersimple.pt') diff --git a/scratch/etienne/trpo/experiments/ppo-intersimple-minobs2.py b/scratch/etienne/trpo/experiments/ppo-intersimple-minobs2.py deleted file mode 100644 index f119e74..0000000 --- a/scratch/etienne/trpo/experiments/ppo-intersimple-minobs2.py +++ /dev/null @@ -1,62 +0,0 @@ -from intersim.envs import IntersimpleLidarFlatRandom -from intersim.envs.intersimple import speed_reward -import functools - -from core.ppo import ppo -from core.value import Value -from core.policy import Policy -import torch.optim -import numpy as np -from gym.wrappers import TransformObservation - -from util.wrappers import Minobs - -obs_min = np.array([ - [-1000, -1000, 0, -np.pi, -1e-1, 0.], - [0, -np.pi, -20, -20, -np.pi, -1e-1], - [0, -np.pi, -20, -20, -np.pi, -1e-1], - [0, -np.pi, -20, -20, -np.pi, -1e-1], - [0, -np.pi, -20, -20, -np.pi, -1e-1], - [0, -np.pi, -20, -20, -np.pi, -1e-1], -]).reshape(-1) - -obs_max = np.array([ - [1000, 1000, 20, np.pi, 1e-1, 0.], - [50, np.pi, 20, 20, np.pi, 1e-1], - [50, np.pi, 20, 20, np.pi, 1e-1], - [50, np.pi, 20, 20, np.pi, 1e-1], - [50, np.pi, 20, 20, np.pi, 1e-1], - [50, np.pi, 20, 20, np.pi, 1e-1], -]).reshape(-1) - -envs = [Minobs(TransformObservation(IntersimpleLidarFlatRandom( - n_rays=5, - reward=functools.partial( - speed_reward, - collision_penalty=1000 - ), -), lambda obs: (obs - obs_min) / (obs_max - obs_min + 1e-10))) for _ in range(30)] - -env_fn = lambda i: envs[i] -policy = Policy(env_fn(0).action_space.shape[0]) -value = Value() -pi_opt = torch.optim.Adam(policy.parameters(), lr=3e-4) -v_opt = torch.optim.Adam(value.parameters(), lr=1e-3, weight_decay=1e-3) - -value, policy = ppo( - env_fn=env_fn, - value=value, - policy=policy, - epochs=50, - rollout_episodes=30, - rollout_steps=100, - gamma=0.99, - gae_lambda=0.9, - clip_ratio=0.2, - pi_opt=pi_opt, - pi_iters=100, - v_opt=v_opt, - v_iters=1000, -) - -torch.save(policy.state_dict(), 'ppo-intersimple.pt') diff --git a/scratch/etienne/trpo/experiments/ppo-intersimple-normobs.py b/scratch/etienne/trpo/experiments/ppo-intersimple-normobs.py deleted file mode 100644 index 2e623de..0000000 --- a/scratch/etienne/trpo/experiments/ppo-intersimple-normobs.py +++ /dev/null @@ -1,61 +0,0 @@ -from intersim.envs import IntersimpleLidarFlat -from intersim.envs.intersimple import speed_reward -import functools - -from core.ppo import ppo -from core.value import Value -from core.policy import Policy -import torch.optim -import numpy as np -from gym.wrappers import TransformObservation - -obs_min = np.array([ - [-1000, -1000, 0, -np.pi, -1e-1, 0.], - [0, -np.pi, -20, -20, -np.pi, -1e-1], - [0, -np.pi, -20, -20, -np.pi, -1e-1], - [0, -np.pi, -20, -20, -np.pi, -1e-1], - [0, -np.pi, -20, -20, -np.pi, -1e-1], - [0, -np.pi, -20, -20, -np.pi, -1e-1], -]).reshape(-1) - -obs_max = np.array([ - [1000, 1000, 20, np.pi, 1e-1, 0.], - [50, np.pi, 20, 20, np.pi, 1e-1], - [50, np.pi, 20, 20, np.pi, 1e-1], - [50, np.pi, 20, 20, np.pi, 1e-1], - [50, np.pi, 20, 20, np.pi, 1e-1], - [50, np.pi, 20, 20, np.pi, 1e-1], -]).reshape(-1) - -envs = [TransformObservation(IntersimpleLidarFlat( - n_rays=5, - agent=51, - reward=functools.partial( - speed_reward, - collision_penalty=10 - ), -), lambda obs: (obs - obs_min) / (obs_max - obs_min + 1e-10)) for _ in range(30)] - -env_fn = lambda i: envs[i] -policy = Policy(env_fn(0).action_space.shape[0]) -value = Value() -pi_opt = torch.optim.Adam(policy.parameters(), lr=3e-4) -v_opt = torch.optim.Adam(value.parameters(), lr=1e-3) - -value, policy = ppo( - env_fn=env_fn, - value=value, - policy=policy, - epochs=50, - rollout_episodes=30, - rollout_steps=100, - gamma=0.99, - gae_lambda=0.9, - clip_ratio=0.2, - pi_opt=pi_opt, - pi_iters=100, - v_opt=v_opt, - v_iters=1000, -) - -torch.save(policy.state_dict(), 'ppo-intersimple.pt') diff --git a/scratch/etienne/trpo/experiments/ppo-intersimple.py b/scratch/etienne/trpo/experiments/ppo-intersimple.py deleted file mode 100644 index d060c52..0000000 --- a/scratch/etienne/trpo/experiments/ppo-intersimple.py +++ /dev/null @@ -1,41 +0,0 @@ -from intersim.envs import IntersimpleLidarFlat -from intersim.envs.intersimple import speed_reward -import functools - -from core.ppo import ppo -from core.value import Value -from core.policy import Policy -import torch.optim - -envs = [IntersimpleLidarFlat( - n_rays=5, - agent=51, - reward=functools.partial( - speed_reward, - collision_penalty=10 - ), -) for _ in range(30)] - -env_fn = lambda i: envs[i] -policy = Policy(env_fn(0).action_space.shape[0]) -value = Value() -pi_opt = torch.optim.Adam(policy.parameters(), lr=3e-4) -v_opt = torch.optim.Adam(value.parameters(), lr=1e-3) - -value, policy = ppo( - env_fn=env_fn, - value=value, - policy=policy, - epochs=50, - rollout_episodes=30, - rollout_steps=100, - gamma=0.99, - gae_lambda=0.9, - clip_ratio=0.2, - pi_opt=pi_opt, - pi_iters=100, - v_opt=v_opt, - v_iters=1000, -) - -torch.save(policy.state_dict(), 'ppo-intersimple.pt') diff --git a/scratch/etienne/trpo/experiments/ppo-options-minobs.py b/scratch/etienne/trpo/experiments/ppo-options-minobs.py deleted file mode 100644 index 009f41d..0000000 --- a/scratch/etienne/trpo/experiments/ppo-options-minobs.py +++ /dev/null @@ -1,89 +0,0 @@ -# %% -import gym -from core.sampling import rollout -from core.ppo import ppo -from core.value import Value -from core.policy import DiscretePolicy -import torch.optim -from intersim.envs import IntersimpleLidarFlat -from intersim.envs.intersimple import speed_reward -import functools -import numpy as np -from util.wrappers import CollisionPenaltyWrapper, TransformObservation - -from util.wrappers import Minobs -from options.options import OptionsEnv - -obs_min = np.array([ - [-1000, -1000, 0, -np.pi, -1e-1, 0.], - [0, -np.pi, -20, -20, -np.pi, -1e-1], - [0, -np.pi, -20, -20, -np.pi, -1e-1], - [0, -np.pi, -20, -20, -np.pi, -1e-1], - [0, -np.pi, -20, -20, -np.pi, -1e-1], - [0, -np.pi, -20, -20, -np.pi, -1e-1], -]).reshape(-1) - -obs_max = np.array([ - [1000, 1000, 20, np.pi, 1e-1, 0.], - [50, np.pi, 20, 20, np.pi, 1e-1], - [50, np.pi, 20, 20, np.pi, 1e-1], - [50, np.pi, 20, 20, np.pi, 1e-1], - [50, np.pi, 20, 20, np.pi, 1e-1], - [50, np.pi, 20, 20, np.pi, 1e-1], -]).reshape(-1) - -envs = [OptionsEnv(Minobs( - TransformObservation(CollisionPenaltyWrapper(IntersimpleLidarFlat( - n_rays=5, - agent=51, - reward=functools.partial( - speed_reward, - collision_penalty=0 - ), - stop_on_collision=False, - ), collision_distance=6, collision_penalty=100), lambda obs: (obs - obs_min) / (obs_max - obs_min + 1e-10)) -), options=[(0, 5), (5, 5), (10, 5)]) for _ in range(50)] - -env_fn = lambda i: envs[i] -policy = DiscretePolicy(env_fn(0).action_space.n) -value = Value() -pi_opt = torch.optim.Adam(policy.parameters(), lr=3e-4) -v_opt = torch.optim.Adam(value.parameters(), lr=1e-3) - -# %% -value, policy = ppo( - env_fn=env_fn, - value=value, - policy=policy, - epochs=50, - rollout_episodes=30, - rollout_steps=20, - gamma=0.99, - gae_lambda=0.95, - clip_ratio=0.2, - pi_opt=pi_opt, - pi_iters=100, - v_opt=v_opt, - v_iters=1000, -) - -torch.save(policy.state_dict(), 'ppo-options-minobs.pt') - -# %% -policy = DiscretePolicy(env_fn(0).action_space.n) -policy(torch.zeros(env_fn(0).observation_space.shape)) -policy.load_state_dict(torch.load('ppo-options-minobs.pt')) - -env = env_fn(0) -obs = env.reset() -env.render(mode='post') -for i in range(300): - #action, _ = policy.predict(torch.tensor(obs)) - action = policy.sample(policy(torch.tensor(obs, dtype=torch.float32))) - obs, reward, done, _ = env.step(action, render_mode='post') - print('step', i, 'reward', reward) - if done: - break -env.close() - -# %% diff --git a/scratch/etienne/trpo/experiments/ppo-pendulum.py b/scratch/etienne/trpo/experiments/ppo-pendulum.py deleted file mode 100644 index 9af7973..0000000 --- a/scratch/etienne/trpo/experiments/ppo-pendulum.py +++ /dev/null @@ -1,27 +0,0 @@ -import gym -from core.ppo import ppo -from core.value import Value -from core.policy import Policy -import torch.optim - -env_fn = lambda _: gym.make('Pendulum-v0') -policy = Policy(env_fn(0).action_space.shape[0]) -value = Value() -pi_opt = torch.optim.Adam(policy.parameters(), lr=3e-4) -v_opt = torch.optim.Adam(value.parameters(), lr=1e-3) - -ppo( - env_fn=env_fn, - value=value, - policy=policy, - epochs=300, - rollout_episodes=100, - rollout_steps=200, - gamma=0.99, - gae_lambda=0.9, - clip_ratio=0.2, - pi_opt=pi_opt, - pi_iters=100, - v_opt=v_opt, - v_iters=1000, -) diff --git a/scratch/etienne/trpo/experiments/readme.md b/scratch/etienne/trpo/experiments/readme.md deleted file mode 100644 index 26ecbb0..0000000 --- a/scratch/etienne/trpo/experiments/readme.md +++ /dev/null @@ -1,7 +0,0 @@ -| | TRPO | PPO | GAIL | GAIL PPO | WGAIL | WGAIL PPO | -|---------------------|------|-------|-------|----------|-------|-----------| -| Pendulum | -120 | -1000 | -120 | -1000 | -120 | -1000 | -| intersimple-minobs | +1@30| | +6@26 | +1@20 | -7000@26, -2000@60 | -6000@30, -5000@60 | -| intersimple-setobs | | | -200@20 | | | | -| intersimple-minobs2 | | | -1500@800 | | | | -| intersimple-setobs2 | | | -500@800 | -750@800 | -1300@800 | -2500@600, unstable | diff --git a/scratch/etienne/trpo/experiments/requirements.txt b/scratch/etienne/trpo/experiments/requirements.txt deleted file mode 100644 index bd1ffb4..0000000 --- a/scratch/etienne/trpo/experiments/requirements.txt +++ /dev/null @@ -1,3 +0,0 @@ -torch -stable-baselines3 -gym diff --git a/scratch/etienne/trpo/experiments/sgail-options-setobs2.py b/scratch/etienne/trpo/experiments/sgail-options-setobs2.py deleted file mode 100644 index 3c43ed5..0000000 --- a/scratch/etienne/trpo/experiments/sgail-options-setobs2.py +++ /dev/null @@ -1,111 +0,0 @@ -# %% -import sys -sys.path.append('../../../../') - -import gym -from src.safe_options.options import gail -from src.core.gail import Buffer -from src.core.value import SetValue -from src.safe_options.policy import SetMaskedDiscretePolicy -from src.core.discriminator import DeepsetDiscriminator -import torch.optim -from intersim.envs import IntersimpleLidarFlatRandom -from intersim.envs.intersimple import speed_reward -import functools -from src.util.wrappers import CollisionPenaltyWrapper, TransformObservation, Setobs -import numpy as np -from src.safe_options.options import SafeOptionsEnv -from torch.utils.tensorboard import SummaryWriter -from src.core.reparam_module import ReparamPolicy - -obs_min = np.array([ - [-1000, -1000, 0, -np.pi, -1e-1, 0.], - [0, -np.pi, -20, -20, -np.pi, -1e-1], - [0, -np.pi, -20, -20, -np.pi, -1e-1], - [0, -np.pi, -20, -20, -np.pi, -1e-1], - [0, -np.pi, -20, -20, -np.pi, -1e-1], - [0, -np.pi, -20, -20, -np.pi, -1e-1], -]).reshape(-1) - -obs_max = np.array([ - [1000, 1000, 20, np.pi, 1e-1, 0.], - [50, np.pi, 20, 20, np.pi, 1e-1], - [50, np.pi, 20, 20, np.pi, 1e-1], - [50, np.pi, 20, 20, np.pi, 1e-1], - [50, np.pi, 20, 20, np.pi, 1e-1], - [50, np.pi, 20, 20, np.pi, 1e-1], -]).reshape(-1) - -envs = [SafeOptionsEnv(Setobs( - TransformObservation(CollisionPenaltyWrapper(IntersimpleLidarFlatRandom( - n_rays=5, - reward=functools.partial( - speed_reward, - collision_penalty=0 - ), - stop_on_collision=True, - ), collision_distance=6, collision_penalty=100), lambda obs: (obs - obs_min) / (obs_max - obs_min + 1e-10)) -), options=[(0, 5), (1, 5), (2, 5), (4, 5), (6, 5), (8, 5), (10, 5)], safe_actions_collision_method='circle', abort_unsafe_collision_method='circle') for _ in range(60)] - -env_fn = lambda i: envs[i] -policy = SetMaskedDiscretePolicy(env_fn(0).action_space.n) -value = SetValue() -v_opt = torch.optim.Adam(value.parameters(), lr=1e-4) - -discriminator = DeepsetDiscriminator() -disc_opt = torch.optim.Adam(discriminator.parameters(), lr=1e-3, weight_decay=1e-4) - -expert_data = torch.load('intersimple-expert-data-setobs2.pt') -expert_data = Buffer(*expert_data) - -# %% -def callback(epoch, value, policy): - if not epoch % 10: - torch.save(policy.state_dict(), f'sgail-options-setobs2-{epoch}.pt') - torch.save(value.state_dict(), f'sgail-options-setobs2-value-{epoch}.pt') - -value, policy = gail( - env_fn=env_fn, - expert_data=expert_data, - discriminator=discriminator, - disc_opt=disc_opt, - disc_iters=100, - policy=policy, - value=value, - v_opt=v_opt, - v_iters=1000, - epochs=300, - rollout_episodes=60, - rollout_steps=60, - gamma=0.99, - gae_lambda=0.9, - delta=0.01, - backtrack_coeff=0.8, - backtrack_iters=10, - logger=SummaryWriter(comment='sgail-options-setobs2'), - callback=callback, -) - -torch.save(policy.state_dict(), 'sgail-options-setobs2.pt') - -# %% -policy = SetMaskedDiscretePolicy(env_fn(0).action_space.n) -policy(torch.zeros(env_fn(0).observation_space['observation'].shape), torch.zeros(env_fn(0).observation_space['safe_actions'].shape)) -policy = ReparamPolicy(policy) -policy.load_state_dict(torch.load('sgail-options-setobs2.pt')) - -env = env_fn(0) -obs = env.reset() -env.render(mode='post') -for i in range(300): - action = policy.sample(policy( - torch.tensor(obs['observation'], dtype=torch.float32), - torch.tensor(obs['safe_actions'], dtype=torch.float32), - )) - obs, reward, done, _ = env.step(action, render_mode='post') - print('step', i, 'reward', reward) - if done: - break -env.close() - -# %% diff --git a/scratch/etienne/trpo/experiments/sgail-ppo-options-setobs2.py b/scratch/etienne/trpo/experiments/sgail-ppo-options-setobs2.py deleted file mode 100644 index efbe7dc..0000000 --- a/scratch/etienne/trpo/experiments/sgail-ppo-options-setobs2.py +++ /dev/null @@ -1,118 +0,0 @@ -# %% -import sys -sys.path.append('../../../../') - -import gym -from src.safe_options.options import gail_ppo, Buffer -from src.core.value import SetValue -from src.safe_options.policy import SetMaskedDiscretePolicy -from src.core.discriminator import DeepsetDiscriminator -import torch.optim -from intersim.envs import IntersimpleLidarFlatRandom -from intersim.envs.intersimple import speed_reward -import functools -from src.util.wrappers import CollisionPenaltyWrapper, TransformObservation, Setobs -import numpy as np -from src.safe_options.options import SafeOptionsEnv -from torch.utils.tensorboard import SummaryWriter -from ray import tune - -def training_function(config): - obs_min = np.array([ - [-1000, -1000, 0, -np.pi, -1e-1, 0.], - [0, -np.pi, -20, -20, -np.pi, -1e-1], - [0, -np.pi, -20, -20, -np.pi, -1e-1], - [0, -np.pi, -20, -20, -np.pi, -1e-1], - [0, -np.pi, -20, -20, -np.pi, -1e-1], - [0, -np.pi, -20, -20, -np.pi, -1e-1], - ]).reshape(-1) - - obs_max = np.array([ - [1000, 1000, 20, np.pi, 1e-1, 0.], - [50, np.pi, 20, 20, np.pi, 1e-1], - [50, np.pi, 20, 20, np.pi, 1e-1], - [50, np.pi, 20, 20, np.pi, 1e-1], - [50, np.pi, 20, 20, np.pi, 1e-1], - [50, np.pi, 20, 20, np.pi, 1e-1], - ]).reshape(-1) - - envs = [SafeOptionsEnv(Setobs( - TransformObservation(CollisionPenaltyWrapper(IntersimpleLidarFlatRandom( - n_rays=5, - reward=functools.partial( - speed_reward, - collision_penalty=0 - ), - stop_on_collision=True, - ), collision_distance=6, collision_penalty=100), lambda obs: (obs - obs_min) / (obs_max - obs_min + 1e-10)) - ), options=[(0, 5), (1, 5), (2, 5), (4, 5), (6, 5), (8, 5), (10, 5)], safe_actions_collision_method='circle', abort_unsafe_collision_method='circle') for _ in range(60)] - - env_fn = lambda i: envs[i] - - policy = SetMaskedDiscretePolicy(env_fn(0).action_space.n) # config net architecture - pi_opt = torch.optim.Adam(policy.parameters(), lr=3e-5) # config learning rate - pi_lr_scheduler = torch.optim.lr_scheduler.ExponentialLR(pi_opt, gamma=0.98) # config lr decay - - value = SetValue() # config net architecture - v_opt = torch.optim.Adam(value.parameters(), lr=1e-3) # config lr - - discriminator = DeepsetDiscriminator() # config net architecture - disc_opt = torch.optim.Adam(discriminator.parameters(), lr=1e-3, weight_decay=1e-3) # config lr, weight decay - - expert_data = torch.load('intersimple-expert-data-setobs2.pt') - expert_data = Buffer(*expert_data) - - def callback(info): - tune.report(gen_mean_reward_per_episode=info['gen/mean_reward_per_episode']) - - value, policy = gail_ppo( - env_fn=env_fn, - expert_data=expert_data, - discriminator=discriminator, - disc_opt=disc_opt, - disc_iters=100, # config - policy=policy, - value=value, - v_opt=v_opt, - v_iters=1000, # config - epochs=200, - rollout_episodes=60, - rollout_steps=60, - gamma=0.99, - gae_lambda=0.9, - clip_ratio=0.2, # config - pi_opt=pi_opt, - pi_iters=100, # config - logger=SummaryWriter(comment='sgail-ppo-options-setobs2'), - callback=callback, - lr_schedulers=[pi_lr_scheduler], - ) - -analysis = tune.run( - training_function, - config={ - 'dummy': tune.grid_search([0.001, 0.01, 0.1]), - } -) - -print('Best config: ', analysis.get_best_config(metric='gen_mean_reward_per_episode', mode='min')) - -# %% -policy = SetMaskedDiscretePolicy(env_fn(0).action_space.n) -policy(torch.zeros(env_fn(0).observation_space['observation'].shape), torch.zeros(env_fn(0).observation_space['safe_actions'].shape)) -policy.load_state_dict(torch.load('sgail-ppo-options-setobs2.pt')) - -env = env_fn(0) -obs = env.reset() -env.render(mode='post') -for i in range(300): - action = policy.sample(policy( - torch.tensor(obs['observation'], dtype=torch.float32), - torch.tensor(obs['safe_actions'], dtype=torch.float32), - )) - obs, reward, done, _ = env.step(action, render_mode='post') - print('step', i, 'reward', reward, 'safe actions', obs['safe_actions']) - if done: - break -env.close() -# %% diff --git a/scratch/etienne/trpo/experiments/trpo-intersimple-minobs.py b/scratch/etienne/trpo/experiments/trpo-intersimple-minobs.py deleted file mode 100644 index b3dc363..0000000 --- a/scratch/etienne/trpo/experiments/trpo-intersimple-minobs.py +++ /dev/null @@ -1,88 +0,0 @@ -# %% -import gym -from core.sampling import rollout -from core.trpo import trpo -from core.value import Value -from core.policy import Policy -import torch.optim -from intersim.envs import IntersimpleLidarFlat -from intersim.envs.intersimple import speed_reward -import functools -import numpy as np -from gym.wrappers import TransformObservation -from util.wrappers import CollisionPenaltyWrapper -from core.reparam_module import ReparamPolicy - -from util.wrappers import Minobs - -obs_min = np.array([ - [-1000, -1000, 0, -np.pi, -1e-1, 0.], - [0, -np.pi, -20, -20, -np.pi, -1e-1], - [0, -np.pi, -20, -20, -np.pi, -1e-1], - [0, -np.pi, -20, -20, -np.pi, -1e-1], - [0, -np.pi, -20, -20, -np.pi, -1e-1], - [0, -np.pi, -20, -20, -np.pi, -1e-1], -]).reshape(-1) - -obs_max = np.array([ - [1000, 1000, 20, np.pi, 1e-1, 0.], - [50, np.pi, 20, 20, np.pi, 1e-1], - [50, np.pi, 20, 20, np.pi, 1e-1], - [50, np.pi, 20, 20, np.pi, 1e-1], - [50, np.pi, 20, 20, np.pi, 1e-1], - [50, np.pi, 20, 20, np.pi, 1e-1], -]).reshape(-1) - -envs = [Minobs(TransformObservation(CollisionPenaltyWrapper(IntersimpleLidarFlat( - n_rays=5, - agent=51, - reward=functools.partial( - speed_reward, - collision_penalty=0 - ), - stop_on_collision=False, -), collision_distance=6, collision_penalty=100), lambda obs: (obs - obs_min) / (obs_max - obs_min + 1e-10))) for _ in range(50)] - -env_fn = lambda i: envs[i] -policy = Policy(env_fn(0).action_space.shape[0]) -value = Value() -v_opt = torch.optim.Adam(value.parameters(), lr=1e-4, weight_decay=1e-3) - -# %% -value, policy = trpo( - env_fn=env_fn, - value=value, - policy=policy, - epochs=50, - rollout_episodes=30, - rollout_steps=100, - gamma=0.99, - gae_lambda=0.95, - delta=0.01, - backtrack_coeff=0.9, - backtrack_iters=50, - v_opt=v_opt, - v_iters=1000, - cg_damping=0.1, -) - -torch.save(policy.state_dict(), 'trpo-intersimple-minobs.pt') - -# %% -policy = Policy(env_fn(0).action_space.shape[0]) -policy(torch.zeros(env_fn(0).observation_space.shape)) -policy = ReparamPolicy(policy) -policy.load_state_dict(torch.load('trpo-intersimple-minobs.pt')) - -env = env_fn(0) -obs = env.reset() -env.render(mode='post') -for i in range(300): - #action, _ = policy.predict(torch.tensor(obs)) - action = policy.sample(policy(torch.tensor(obs, dtype=torch.float32))) - obs, reward, done, _ = env.step(action) - env.render(mode='post') - print('step', i, 'reward', reward) - if done: - break -env.close() diff --git a/scratch/etienne/trpo/experiments/trpo-intersimple-minobs2.py b/scratch/etienne/trpo/experiments/trpo-intersimple-minobs2.py deleted file mode 100644 index 0321938..0000000 --- a/scratch/etienne/trpo/experiments/trpo-intersimple-minobs2.py +++ /dev/null @@ -1,87 +0,0 @@ -# %% -import gym -from core.sampling import rollout -from core.trpo import trpo -from core.value import Value -from core.policy import Policy -import torch.optim -from intersim.envs import IntersimpleLidarFlatRandom -from intersim.envs.intersimple import speed_reward -import functools -import numpy as np -from gym.wrappers import TransformObservation -from util.wrappers import CollisionPenaltyWrapper -from core.reparam_module import ReparamPolicy - -from util.wrappers import Minobs - -obs_min = np.array([ - [-1000, -1000, 0, -np.pi, -1e-1, 0.], - [0, -np.pi, -20, -20, -np.pi, -1e-1], - [0, -np.pi, -20, -20, -np.pi, -1e-1], - [0, -np.pi, -20, -20, -np.pi, -1e-1], - [0, -np.pi, -20, -20, -np.pi, -1e-1], - [0, -np.pi, -20, -20, -np.pi, -1e-1], -]).reshape(-1) - -obs_max = np.array([ - [1000, 1000, 20, np.pi, 1e-1, 0.], - [50, np.pi, 20, 20, np.pi, 1e-1], - [50, np.pi, 20, 20, np.pi, 1e-1], - [50, np.pi, 20, 20, np.pi, 1e-1], - [50, np.pi, 20, 20, np.pi, 1e-1], - [50, np.pi, 20, 20, np.pi, 1e-1], -]).reshape(-1) - -envs = [Minobs(TransformObservation(CollisionPenaltyWrapper(IntersimpleLidarFlatRandom( - n_rays=5, - reward=functools.partial( - speed_reward, - collision_penalty=0 - ), - stop_on_collision=False, -), collision_distance=6, collision_penalty=100), lambda obs: (obs - obs_min) / (obs_max - obs_min + 1e-10))) for _ in range(50)] - -env_fn = lambda i: envs[i] -policy = Policy(env_fn(0).action_space.shape[0]) -value = Value() -v_opt = torch.optim.Adam(value.parameters(), lr=1e-4, weight_decay=1e-3) - -# %% -value, policy = trpo( - env_fn=env_fn, - value=value, - policy=policy, - epochs=200, - rollout_episodes=30, - rollout_steps=100, - gamma=0.99, - gae_lambda=0.95, - delta=0.01, - backtrack_coeff=0.9, - backtrack_iters=50, - v_opt=v_opt, - v_iters=1000, - cg_damping=0.1, -) - -torch.save(policy.state_dict(), 'trpo-intersimple-minobs2.pt') - -# %% -policy = Policy(env_fn(0).action_space.shape[0]) -policy(torch.zeros(env_fn(0).observation_space.shape)) -policy = ReparamPolicy(policy) -policy.load_state_dict(torch.load('trpo-intersimple-minobs2.pt')) - -env = env_fn(0) -obs = env.reset() -env.render(mode='post') -for i in range(300): - #action, _ = policy.predict(torch.tensor(obs)) - action = policy.sample(policy(torch.tensor(obs, dtype=torch.float32))) - obs, reward, done, _ = env.step(action) - env.render(mode='post') - print('step', i, 'reward', reward) - if done: - break -env.close() diff --git a/scratch/etienne/trpo/experiments/trpo-intersimple-normobs.py b/scratch/etienne/trpo/experiments/trpo-intersimple-normobs.py deleted file mode 100644 index aeb527a..0000000 --- a/scratch/etienne/trpo/experiments/trpo-intersimple-normobs.py +++ /dev/null @@ -1,62 +0,0 @@ -import gym -from core.sampling import rollout -from core.trpo import trpo -from core.value import Value -from core.policy import Policy -import torch.optim -from intersim.envs import IntersimpleLidarFlat -from intersim.envs.intersimple import speed_reward -import functools -import numpy as np -from gym.wrappers import TransformObservation - -obs_min = np.array([ - [-1000, -1000, 0, -np.pi, -1e-1, 0.], - [0, -np.pi, -20, -20, -np.pi, -1e-1], - [0, -np.pi, -20, -20, -np.pi, -1e-1], - [0, -np.pi, -20, -20, -np.pi, -1e-1], - [0, -np.pi, -20, -20, -np.pi, -1e-1], - [0, -np.pi, -20, -20, -np.pi, -1e-1], -]).reshape(-1) - -obs_max = np.array([ - [1000, 1000, 20, np.pi, 1e-1, 0.], - [50, np.pi, 20, 20, np.pi, 1e-1], - [50, np.pi, 20, 20, np.pi, 1e-1], - [50, np.pi, 20, 20, np.pi, 1e-1], - [50, np.pi, 20, 20, np.pi, 1e-1], - [50, np.pi, 20, 20, np.pi, 1e-1], -]).reshape(-1) - -envs = [TransformObservation(IntersimpleLidarFlat( - n_rays=5, - agent=51, - reward=functools.partial( - speed_reward, - collision_penalty=10 - ), -), lambda obs: (obs - obs_min) / (obs_max - obs_min + 1e-10)) for _ in range(50)] - -env_fn = lambda i: envs[i] -policy = Policy(env_fn(0).action_space.shape[0]) -value = Value() -v_opt = torch.optim.Adam(value.parameters(), lr=1e-4, weight_decay=1e-3) - -value, policy = trpo( - env_fn=env_fn, - value=value, - policy=policy, - epochs=4000, - rollout_episodes=30, - rollout_steps=100, - gamma=0.99, - gae_lambda=0.95, - delta=0.01, - backtrack_coeff=0.9, - backtrack_iters=50, - v_opt=v_opt, - v_iters=1000, - cg_damping=0.1, -) - -#rollout(env_fn, policy, n_episodes=9, max_steps_per_episode=200, render=True) diff --git a/scratch/etienne/trpo/experiments/trpo-intersimple-setobs.py b/scratch/etienne/trpo/experiments/trpo-intersimple-setobs.py deleted file mode 100644 index 0dd77d9..0000000 --- a/scratch/etienne/trpo/experiments/trpo-intersimple-setobs.py +++ /dev/null @@ -1,90 +0,0 @@ -# %% -import gym -from core.sampling import rollout -from core.trpo import trpo -from core.value import SetValue -from core.policy import DeepSetPolicy -import torch.optim -from intersim.envs import IntersimpleLidarFlat -from intersim.envs.intersimple import speed_reward -import functools -import numpy as np -from gym.wrappers import TransformObservation -from util.wrappers import CollisionPenaltyWrapper -from core.reparam_module import ReparamPolicy - -from util.wrappers import Setobs - -obs_min = np.array([ - [-1000, -1000, 0, -np.pi, -1e-1, 0.], - [0, -np.pi, -20, -20, -np.pi, -1e-1], - [0, -np.pi, -20, -20, -np.pi, -1e-1], - [0, -np.pi, -20, -20, -np.pi, -1e-1], - [0, -np.pi, -20, -20, -np.pi, -1e-1], - [0, -np.pi, -20, -20, -np.pi, -1e-1], -]).reshape(-1) - -obs_max = np.array([ - [1000, 1000, 20, np.pi, 1e-1, 0.], - [50, np.pi, 20, 20, np.pi, 1e-1], - [50, np.pi, 20, 20, np.pi, 1e-1], - [50, np.pi, 20, 20, np.pi, 1e-1], - [50, np.pi, 20, 20, np.pi, 1e-1], - [50, np.pi, 20, 20, np.pi, 1e-1], -]).reshape(-1) - -envs = [Setobs(TransformObservation(CollisionPenaltyWrapper(IntersimpleLidarFlat( - n_rays=5, - agent=51, - reward=functools.partial( - speed_reward, - collision_penalty=0 - ), - stop_on_collision=False, -), collision_distance=6, collision_penalty=100), lambda obs: (obs - obs_min) / (obs_max - obs_min + 1e-10))) for _ in range(50)] - -env_fn = lambda i: envs[i] -policy = DeepSetPolicy(env_fn(0).action_space.shape[0]) -value = SetValue() -v_opt = torch.optim.Adam(value.parameters(), lr=1e-4, weight_decay=1e-3) - -# %% -value, policy = trpo( - env_fn=env_fn, - value=value, - policy=policy, - epochs=150, - rollout_episodes=30, - rollout_steps=100, - gamma=0.99, - gae_lambda=0.95, - delta=0.01, - backtrack_coeff=0.9, - backtrack_iters=50, - v_opt=v_opt, - v_iters=1000, - cg_damping=0.1, -) - -torch.save(policy.state_dict(), 'trpo-intersimple-setobs.pt') - -# %% -policy = DeepSetPolicy(env_fn(0).action_space.shape[0]) -policy(torch.zeros(env_fn(0).observation_space.shape)) -policy = ReparamPolicy(policy) -policy.load_state_dict(torch.load('trpo-intersimple-setobs.pt')) - -env = env_fn(0) -obs = env.reset() -env.render(mode='post') -for i in range(300): - #action, _ = policy.predict(torch.tensor(obs)) - action = policy.sample(policy(torch.tensor(obs, dtype=torch.float32))) - obs, reward, done, _ = env.step(action) - env.render(mode='post') - print('step', i, 'reward', reward) - if done: - break -env.close() - -# %% diff --git a/scratch/etienne/trpo/experiments/trpo-intersimple-setobs2.py b/scratch/etienne/trpo/experiments/trpo-intersimple-setobs2.py deleted file mode 100644 index a64e410..0000000 --- a/scratch/etienne/trpo/experiments/trpo-intersimple-setobs2.py +++ /dev/null @@ -1,87 +0,0 @@ -# %% -import gym -from core.sampling import rollout -from core.trpo import trpo -from core.value import DeepSetValue -from core.policy import DeepSetPolicy -import torch.optim -from intersim.envs import IntersimpleLidarFlatRandom -from intersim.envs.intersimple import speed_reward -import functools -import numpy as np -from gym.wrappers import TransformObservation -from util.wrappers import CollisionPenaltyWrapper -from core.reparam_module import ReparamPolicy - -from util.wrappers import Setobs - -obs_min = np.array([ - [-1000, -1000, 0, -np.pi, -1e-1, 0.], - [0, -np.pi, -20, -20, -np.pi, -1e-1], - [0, -np.pi, -20, -20, -np.pi, -1e-1], - [0, -np.pi, -20, -20, -np.pi, -1e-1], - [0, -np.pi, -20, -20, -np.pi, -1e-1], - [0, -np.pi, -20, -20, -np.pi, -1e-1], -]).reshape(-1) - -obs_max = np.array([ - [1000, 1000, 20, np.pi, 1e-1, 0.], - [50, np.pi, 20, 20, np.pi, 1e-1], - [50, np.pi, 20, 20, np.pi, 1e-1], - [50, np.pi, 20, 20, np.pi, 1e-1], - [50, np.pi, 20, 20, np.pi, 1e-1], - [50, np.pi, 20, 20, np.pi, 1e-1], -]).reshape(-1) - -envs = [Setobs(TransformObservation(CollisionPenaltyWrapper(IntersimpleLidarFlatRandom( - n_rays=5, - reward=functools.partial( - speed_reward, - collision_penalty=0 - ), - stop_on_collision=False, -), collision_distance=6, collision_penalty=100), lambda obs: (obs - obs_min) / (obs_max - obs_min + 1e-10))) for _ in range(50)] - -env_fn = lambda i: envs[i] -policy = DeepSetPolicy(env_fn(0).action_space.shape[0]) -value = DeepSetValue() -v_opt = torch.optim.Adam(value.parameters(), lr=1e-4, weight_decay=1e-3) - -# %% -value, policy = trpo( - env_fn=env_fn, - value=value, - policy=policy, - epochs=200, - rollout_episodes=30, - rollout_steps=100, - gamma=0.99, - gae_lambda=0.95, - delta=0.01, - backtrack_coeff=0.9, - backtrack_iters=50, - v_opt=v_opt, - v_iters=1000, - cg_damping=0.1, -) - -torch.save(policy.state_dict(), 'trpo-intersimple-setobs2.pt') - -# %% -policy = DeepSetPolicy(env_fn(0).action_space.shape[0]) -policy(torch.zeros(env_fn(0).observation_space.shape)) -policy = ReparamPolicy(policy) -policy.load_state_dict(torch.load('trpo-intersimple-setobs2.pt')) - -env = env_fn(0) -obs = env.reset() -env.render(mode='post') -for i in range(300): - #action, _ = policy.predict(torch.tensor(obs)) - action = policy.sample(policy(torch.tensor(obs, dtype=torch.float32))) - obs, reward, done, _ = env.step(action) - env.render(mode='post') - print('step', i, 'reward', reward) - if done: - break -env.close() diff --git a/scratch/etienne/trpo/experiments/trpo-intersimple.py b/scratch/etienne/trpo/experiments/trpo-intersimple.py deleted file mode 100644 index e242a98..0000000 --- a/scratch/etienne/trpo/experiments/trpo-intersimple.py +++ /dev/null @@ -1,42 +0,0 @@ -import gym -from core.sampling import rollout -from core.trpo import trpo -from core.value import Value -from core.policy import Policy -import torch.optim -from intersim.envs import IntersimpleLidarFlat -from intersim.envs.intersimple import speed_reward -import functools - -envs = [IntersimpleLidarFlat( - n_rays=5, - agent=51, - reward=functools.partial( - speed_reward, - collision_penalty=10 - ), -) for _ in range(50)] - -env_fn = lambda i: envs[i] -policy = Policy(env_fn(0).action_space.shape[0]) -value = Value() -v_opt = torch.optim.Adam(value.parameters(), lr=1e-4, weight_decay=1e-3) - -value, policy = trpo( - env_fn=env_fn, - value=value, - policy=policy, - epochs=4000, - rollout_episodes=30, - rollout_steps=100, - gamma=0.99, - gae_lambda=0.95, - delta=0.01, - backtrack_coeff=0.9, - backtrack_iters=50, - v_opt=v_opt, - v_iters=1000, - cg_damping=0.1, -) - -#rollout(env_fn, policy, n_episodes=9, max_steps_per_episode=200, render=True) diff --git a/scratch/etienne/trpo/experiments/trpo-options-minobs.py b/scratch/etienne/trpo/experiments/trpo-options-minobs.py deleted file mode 100644 index dbc5a09..0000000 --- a/scratch/etienne/trpo/experiments/trpo-options-minobs.py +++ /dev/null @@ -1,91 +0,0 @@ -# %% -import gym -from core.sampling import rollout -from core.trpo import trpo -from core.value import Value -from core.policy import DiscretePolicy -import torch.optim -from intersim.envs import IntersimpleLidarFlat -from intersim.envs.intersimple import speed_reward -import functools -import numpy as np -from util.wrappers import CollisionPenaltyWrapper, TransformObservation -from core.reparam_module import ReparamPolicy - -from util.wrappers import Minobs -from options.options import OptionsEnv - -obs_min = np.array([ - [-1000, -1000, 0, -np.pi, -1e-1, 0.], - [0, -np.pi, -20, -20, -np.pi, -1e-1], - [0, -np.pi, -20, -20, -np.pi, -1e-1], - [0, -np.pi, -20, -20, -np.pi, -1e-1], - [0, -np.pi, -20, -20, -np.pi, -1e-1], - [0, -np.pi, -20, -20, -np.pi, -1e-1], -]).reshape(-1) - -obs_max = np.array([ - [1000, 1000, 20, np.pi, 1e-1, 0.], - [50, np.pi, 20, 20, np.pi, 1e-1], - [50, np.pi, 20, 20, np.pi, 1e-1], - [50, np.pi, 20, 20, np.pi, 1e-1], - [50, np.pi, 20, 20, np.pi, 1e-1], - [50, np.pi, 20, 20, np.pi, 1e-1], -]).reshape(-1) - -envs = [OptionsEnv(Minobs( - TransformObservation(CollisionPenaltyWrapper(IntersimpleLidarFlat( - n_rays=5, - agent=51, - reward=functools.partial( - speed_reward, - collision_penalty=0 - ), - stop_on_collision=False, - ), collision_distance=6, collision_penalty=100), lambda obs: (obs - obs_min) / (obs_max - obs_min + 1e-10)) -), options=[(0, 5), (5, 5), (10, 5)]) for _ in range(50)] - -env_fn = lambda i: envs[i] -policy = DiscretePolicy(env_fn(0).action_space.n) -value = Value() -v_opt = torch.optim.Adam(value.parameters(), lr=1e-4, weight_decay=1e-3) - -# %% -value, policy = trpo( - env_fn=env_fn, - value=value, - policy=policy, - epochs=50, - rollout_episodes=30, - rollout_steps=20, - gamma=0.99, - gae_lambda=0.95, - delta=0.01, - backtrack_coeff=0.9, - backtrack_iters=50, - v_opt=v_opt, - v_iters=1000, - cg_damping=0.1, -) - -torch.save(policy.state_dict(), 'trpo-options-minobs.pt') - -# %% -policy = DiscretePolicy(env_fn(0).action_space.n) -policy(torch.zeros(env_fn(0).observation_space.shape)) -policy = ReparamPolicy(policy) -policy.load_state_dict(torch.load('trpo-options-minobs.pt')) - -env = env_fn(0) -obs = env.reset() -env.render(mode='post') -for i in range(300): - #action, _ = policy.predict(torch.tensor(obs)) - action = policy.sample(policy(torch.tensor(obs, dtype=torch.float32))) - obs, reward, done, _ = env.step(action, render_mode='post') - print('step', i, 'reward', reward) - if done: - break -env.close() - -# %% diff --git a/scratch/etienne/trpo/experiments/trpo-pendulum-rollout.py b/scratch/etienne/trpo/experiments/trpo-pendulum-rollout.py deleted file mode 100644 index f45640a..0000000 --- a/scratch/etienne/trpo/experiments/trpo-pendulum-rollout.py +++ /dev/null @@ -1,17 +0,0 @@ -import gym -from core.gail import gail -from core.reparam_module import ReparamPolicy -from core.value import Value -from core.policy import Policy -from core.discriminator import Discriminator -import torch.optim -from core.sampling import rollout - -env_fn = lambda _: gym.make('Pendulum-v0') -policy = Policy(env_fn(0).action_space.shape[0]) -policy(torch.zeros(env_fn(0).observation_space.shape)) -policy = ReparamPolicy(policy) -policy.load_state_dict(torch.load('trpo-pendulum.pt')) - -expert_data = rollout(env_fn, policy, n_episodes=20, max_steps_per_episode=200) -torch.save(expert_data, 'trpo-pendulum-expert-data.pt') diff --git a/scratch/etienne/trpo/experiments/trpo-pendulum.py b/scratch/etienne/trpo/experiments/trpo-pendulum.py deleted file mode 100644 index 8233c83..0000000 --- a/scratch/etienne/trpo/experiments/trpo-pendulum.py +++ /dev/null @@ -1,30 +0,0 @@ -import gym -from gym.wrappers import TransformObservation -from core.trpo import trpo -from core.value import Value -from core.policy import Policy -import torch.optim - -env_fn = lambda _: TransformObservation(gym.make('Pendulum-v0'), lambda obs: obs) -policy = Policy(env_fn(0).action_space.shape[0]) -value = Value() -v_opt = torch.optim.Adam(value.parameters(), lr=1e-3, weight_decay=1e-4) - -value, policy = trpo( - env_fn=env_fn, - value=value, - policy=policy, - epochs=100, - rollout_episodes=20, - rollout_steps=250, - gamma=0.99, - gae_lambda=0.9, - delta=0.01, - backtrack_coeff=0.8, - backtrack_iters=10, - v_opt=v_opt, - v_iters=1000, -) - - -torch.save(policy.state_dict(), 'trpo-pendulum.pt') diff --git a/scratch/etienne/trpo/experiments/trpo-walker.py b/scratch/etienne/trpo/experiments/trpo-walker.py deleted file mode 100644 index 59681d6..0000000 --- a/scratch/etienne/trpo/experiments/trpo-walker.py +++ /dev/null @@ -1,26 +0,0 @@ -import gym -from core.trpo import trpo -from core.value import Value -from core.policy import Policy -import torch.optim - -env_fn = lambda _: gym.make('BipedalWalker-v3') -policy = Policy(env_fn(0).action_space.shape[0]) -value = Value() -v_opt = torch.optim.Adam(value.parameters(), lr=1e-2) - -trpo( - env_fn=env_fn, - value=value, - policy=policy, - epochs=1000, - rollout_episodes=20, - rollout_steps=250, - gamma=0.99, - gae_lambda=0.9, - delta=0.01, - backtrack_coeff=0.8, - backtrack_iters=10, - v_opt=v_opt, - v_iters=1000, -) diff --git a/scratch/etienne/trpo/experiments/vec-env.ipynb b/scratch/etienne/trpo/experiments/vec-env.ipynb deleted file mode 100644 index 1569b69..0000000 --- a/scratch/etienne/trpo/experiments/vec-env.ipynb +++ /dev/null @@ -1,346 +0,0 @@ -{ - "cells": [ - { - "cell_type": "code", - "execution_count": 3, - "metadata": {}, - "outputs": [], - "source": [ - "from stable_baselines3.common.env_util import make_vec_env\n", - "import numpy as np" - ] - }, - { - "cell_type": "code", - "execution_count": 4, - "metadata": {}, - "outputs": [], - "source": [ - "env = make_vec_env('Pendulum-v0', n_envs=6)" - ] - }, - { - "cell_type": "code", - "execution_count": 5, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "(6, 3)" - ] - }, - "execution_count": 5, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "obs = env.reset()\n", - "obs.shape" - ] - }, - { - "cell_type": "code", - "execution_count": 6, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "1\n", - "2\n", - "3\n", - "4\n", - "5\n", - "6\n", - "7\n", - "8\n", - "9\n", - "10\n", - "11\n", - "12\n", - "13\n", - "14\n", - "15\n", - "16\n", - "17\n", - "18\n", - "19\n", - "20\n", - "21\n", - "22\n", - "23\n", - "24\n", - "25\n", - "26\n", - "27\n", - "28\n", - "29\n", - "30\n", - "31\n", - "32\n", - "33\n", - "34\n", - "35\n", - "36\n", - "37\n", - "38\n", - "39\n", - "40\n", - "41\n", - "42\n", - "43\n", - "44\n", - "45\n", - "46\n", - "47\n", - "48\n", - "49\n", - "50\n", - "51\n", - "52\n", - "53\n", - "54\n", - "55\n", - "56\n", - "57\n", - "58\n", - "59\n", - "60\n", - "61\n", - "62\n", - "63\n", - "64\n", - "65\n", - "66\n", - "67\n", - "68\n", - "69\n", - "70\n", - "71\n", - "72\n", - "73\n", - "74\n", - "75\n", - "76\n", - "77\n", - "78\n", - "79\n", - "80\n", - "81\n", - "82\n", - "83\n", - "84\n", - "85\n", - "86\n", - "87\n", - "88\n", - "89\n", - "90\n", - "91\n", - "92\n", - "93\n", - "94\n", - "95\n", - "96\n", - "97\n", - "98\n", - "99\n", - "100\n", - "101\n", - "102\n", - "103\n", - "104\n", - "105\n", - "106\n", - "107\n", - "108\n", - "109\n", - "110\n", - "111\n", - "112\n", - "113\n", - "114\n", - "115\n", - "116\n", - "117\n", - "118\n", - "119\n", - "120\n", - "121\n", - "122\n", - "123\n", - "124\n", - "125\n", - "126\n", - "127\n", - "128\n", - "129\n", - "130\n", - "131\n", - "132\n", - "133\n", - "134\n", - "135\n", - "136\n", - "137\n", - "138\n", - "139\n", - "140\n", - "141\n", - "142\n", - "143\n", - "144\n", - "145\n", - "146\n", - "147\n", - "148\n", - "149\n", - "150\n", - "151\n", - "152\n", - "153\n", - "154\n", - "155\n", - "156\n", - "157\n", - "158\n", - "159\n", - "160\n", - "161\n", - "162\n", - "163\n", - "164\n", - "165\n", - "166\n", - "167\n", - "168\n", - "169\n", - "170\n", - "171\n", - "172\n", - "173\n", - "174\n", - "175\n", - "176\n", - "177\n", - "178\n", - "179\n", - "180\n", - "181\n", - "182\n", - "183\n", - "184\n", - "185\n", - "186\n", - "187\n", - "188\n", - "189\n", - "190\n", - "191\n", - "192\n", - "193\n", - "194\n", - "195\n", - "196\n", - "197\n", - "198\n", - "199\n", - "200\n" - ] - } - ], - "source": [ - "dones = [False]\n", - "i = 0\n", - "while not any(dones):\n", - " i += 1\n", - " print(i)\n", - " _, _, dones, _ = env.step(np.zeros((6, 1)))" - ] - }, - { - "cell_type": "code", - "execution_count": 7, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "array([ True, True, True, True, True, True])" - ] - }, - "execution_count": 7, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "dones" - ] - }, - { - "cell_type": "code", - "execution_count": 8, - "metadata": {}, - "outputs": [], - "source": [ - "_, _, dones, _ = env.step(np.zeros((6, 1)))" - ] - }, - { - "cell_type": "code", - "execution_count": 9, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "array([False, False, False, False, False, False])" - ] - }, - "execution_count": 9, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "dones" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [] - } - ], - "metadata": { - "interpreter": { - "hash": "6c7a4ac80dd345f83235e10baa3acc437d966916e1cc075a45b91bb9cc030938" - }, - "kernelspec": { - "display_name": "Python 3.9.7 64-bit ('.venv': venv)", - "language": "python", - "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.9.7" - }, - "orig_nbformat": 4 - }, - "nbformat": 4, - "nbformat_minor": 2 -} diff --git a/scratch/etienne/trpo/experiments/wgail-intersimple-minobs.py b/scratch/etienne/trpo/experiments/wgail-intersimple-minobs.py deleted file mode 100644 index 677cfef..0000000 --- a/scratch/etienne/trpo/experiments/wgail-intersimple-minobs.py +++ /dev/null @@ -1,76 +0,0 @@ -import gym -from core.gail import gail, Buffer -from core.value import Value -from core.policy import Policy -from core.discriminator import Discriminator -import torch.optim -from intersim.envs import IntersimpleLidarFlat -from intersim.envs.intersimple import speed_reward -import functools -from util.wrappers import CollisionPenaltyWrapper, Minobs -import numpy as np -from gym.wrappers import TransformObservation - -obs_min = np.array([ - [-1000, -1000, 0, -np.pi, -1e-1, 0.], - [0, -np.pi, -20, -20, -np.pi, -1e-1], - [0, -np.pi, -20, -20, -np.pi, -1e-1], - [0, -np.pi, -20, -20, -np.pi, -1e-1], - [0, -np.pi, -20, -20, -np.pi, -1e-1], - [0, -np.pi, -20, -20, -np.pi, -1e-1], -]).reshape(-1) - -obs_max = np.array([ - [1000, 1000, 20, np.pi, 1e-1, 0.], - [50, np.pi, 20, 20, np.pi, 1e-1], - [50, np.pi, 20, 20, np.pi, 1e-1], - [50, np.pi, 20, 20, np.pi, 1e-1], - [50, np.pi, 20, 20, np.pi, 1e-1], - [50, np.pi, 20, 20, np.pi, 1e-1], -]).reshape(-1) - -envs = [Minobs(TransformObservation(CollisionPenaltyWrapper(IntersimpleLidarFlat( - n_rays=5, - agent=51, - reward=functools.partial( - speed_reward, - collision_penalty=0 - ), - stop_on_collision=False, -), collision_distance=6, collision_penalty=100), lambda obs: (obs - obs_min) / (obs_max - obs_min + 1e-10))) for _ in range(30)] -env_fn = lambda i: envs[i] - -policy = Policy(env_fn(0).action_space.shape[0]) - -value = Value() -v_opt = torch.optim.Adam(value.parameters(), lr=1e-4, weight_decay=1e-3) - -discriminator = Discriminator() -disc_opt = torch.optim.Adam(discriminator.parameters(), lr=1e-3, weight_decay=1e-2) - -expert_data = torch.load('intersimple-expert-data-minobs.pt') -expert_data = Buffer(*expert_data) - -value, policy = gail( - env_fn=env_fn, - expert_data=expert_data, - discriminator=discriminator, - disc_opt=disc_opt, - disc_iters=100, - policy=policy, - value=value, - v_opt=v_opt, - v_iters=1000, - epochs=4000, - rollout_episodes=30, - rollout_steps=200, - gamma=0.99, - gae_lambda=0.9, - delta=0.01, - backtrack_coeff=0.8, - backtrack_iters=10, - wasserstein=True, - wasserstein_c=1., -) - -torch.save(policy.state_dict(), 'wgail-intersimple-minobs.pt') diff --git a/scratch/etienne/trpo/experiments/wgail-intersimple-minobs2.py b/scratch/etienne/trpo/experiments/wgail-intersimple-minobs2.py deleted file mode 100644 index 1b97041..0000000 --- a/scratch/etienne/trpo/experiments/wgail-intersimple-minobs2.py +++ /dev/null @@ -1,75 +0,0 @@ -import gym -from core.gail import gail, Buffer -from core.value import Value -from core.policy import Policy -from core.discriminator import Discriminator -import torch.optim -from intersim.envs import IntersimpleLidarFlatRandom -from intersim.envs.intersimple import speed_reward -import functools -from util.wrappers import CollisionPenaltyWrapper, Minobs -import numpy as np -from gym.wrappers import TransformObservation - -obs_min = np.array([ - [-1000, -1000, 0, -np.pi, -1e-1, 0.], - [0, -np.pi, -20, -20, -np.pi, -1e-1], - [0, -np.pi, -20, -20, -np.pi, -1e-1], - [0, -np.pi, -20, -20, -np.pi, -1e-1], - [0, -np.pi, -20, -20, -np.pi, -1e-1], - [0, -np.pi, -20, -20, -np.pi, -1e-1], -]).reshape(-1) - -obs_max = np.array([ - [1000, 1000, 20, np.pi, 1e-1, 0.], - [50, np.pi, 20, 20, np.pi, 1e-1], - [50, np.pi, 20, 20, np.pi, 1e-1], - [50, np.pi, 20, 20, np.pi, 1e-1], - [50, np.pi, 20, 20, np.pi, 1e-1], - [50, np.pi, 20, 20, np.pi, 1e-1], -]).reshape(-1) - -envs = [Minobs(TransformObservation(CollisionPenaltyWrapper(IntersimpleLidarFlatRandom( - n_rays=5, - reward=functools.partial( - speed_reward, - collision_penalty=0 - ), - stop_on_collision=False, -), collision_distance=6, collision_penalty=100), lambda obs: (obs - obs_min) / (obs_max - obs_min + 1e-10))) for _ in range(50)] -env_fn = lambda i: envs[i] - -policy = Policy(env_fn(0).action_space.shape[0]) - -value = Value() -v_opt = torch.optim.Adam(value.parameters(), lr=1e-4, weight_decay=1e-3) - -discriminator = Discriminator() -disc_opt = torch.optim.RMSprop(discriminator.parameters(), lr=1e-3, weight_decay=1e-5) - -expert_data = torch.load('intersimple-expert-data-minobs2.pt') -expert_data = Buffer(*expert_data) - -value, policy = gail( - env_fn=env_fn, - expert_data=expert_data, - discriminator=discriminator, - disc_opt=disc_opt, - disc_iters=500, - policy=policy, - value=value, - v_opt=v_opt, - v_iters=1000, - epochs=4000, - rollout_episodes=50, - rollout_steps=200, - gamma=0.99, - gae_lambda=0.9, - delta=0.01, - backtrack_coeff=0.8, - backtrack_iters=10, - wasserstein=True, - wasserstein_c=0.1, -) - -torch.save(policy.state_dict(), 'wgail-intersimple-minobs2.pt') diff --git a/scratch/etienne/trpo/experiments/wgail-intersimple-setobs2.py b/scratch/etienne/trpo/experiments/wgail-intersimple-setobs2.py deleted file mode 100644 index 08e653c..0000000 --- a/scratch/etienne/trpo/experiments/wgail-intersimple-setobs2.py +++ /dev/null @@ -1,77 +0,0 @@ -import gym -from core.gail import gail, Buffer -from core.value import SetValue -from core.policy import SetPolicy -from core.discriminator import DeepsetDiscriminator -import torch.optim -from intersim.envs import IntersimpleLidarFlatRandom -from intersim.envs.intersimple import speed_reward -import functools -from util.wrappers import CollisionPenaltyWrapper, Setobs -import numpy as np -from gym.wrappers import TransformObservation -from torch.utils.tensorboard import SummaryWriter - -obs_min = np.array([ - [-1000, -1000, 0, -np.pi, -1e-1, 0.], - [0, -np.pi, -20, -20, -np.pi, -1e-1], - [0, -np.pi, -20, -20, -np.pi, -1e-1], - [0, -np.pi, -20, -20, -np.pi, -1e-1], - [0, -np.pi, -20, -20, -np.pi, -1e-1], - [0, -np.pi, -20, -20, -np.pi, -1e-1], -]).reshape(-1) - -obs_max = np.array([ - [1000, 1000, 20, np.pi, 1e-1, 0.], - [50, np.pi, 20, 20, np.pi, 1e-1], - [50, np.pi, 20, 20, np.pi, 1e-1], - [50, np.pi, 20, 20, np.pi, 1e-1], - [50, np.pi, 20, 20, np.pi, 1e-1], - [50, np.pi, 20, 20, np.pi, 1e-1], -]).reshape(-1) - -envs = [Setobs(TransformObservation(CollisionPenaltyWrapper(IntersimpleLidarFlatRandom( - n_rays=5, - reward=functools.partial( - speed_reward, - collision_penalty=0 - ), - stop_on_collision=False, -), collision_distance=6, collision_penalty=100), lambda obs: (obs - obs_min) / (obs_max - obs_min + 1e-10))) for _ in range(50)] -env_fn = lambda i: envs[i] - -policy = SetPolicy(env_fn(0).action_space.shape[0]) - -value = SetValue() -v_opt = torch.optim.Adam(value.parameters(), lr=1e-4, weight_decay=1e-3) - -discriminator = DeepsetDiscriminator() -disc_opt = torch.optim.RMSprop(discriminator.parameters(), lr=1e-3) - -expert_data = torch.load('intersimple-expert-data-setobs2.pt') -expert_data = Buffer(*expert_data) - -value, policy = gail( - env_fn=env_fn, - expert_data=expert_data, - discriminator=discriminator, - disc_opt=disc_opt, - disc_iters=500, - policy=policy, - value=value, - v_opt=v_opt, - v_iters=1000, - epochs=800, - rollout_episodes=50, - rollout_steps=200, - gamma=0.99, - gae_lambda=0.9, - delta=0.01, - backtrack_coeff=0.8, - backtrack_iters=10, - wasserstein=True, - wasserstein_c=100., - logger=SummaryWriter(comment='-wgail-setobs2'), -) - -torch.save(policy.state_dict(), 'wgail-intersimple-setobs2.pt') diff --git a/scratch/etienne/trpo/experiments/wgail-intersimple.py b/scratch/etienne/trpo/experiments/wgail-intersimple.py deleted file mode 100644 index 57d1f40..0000000 --- a/scratch/etienne/trpo/experiments/wgail-intersimple.py +++ /dev/null @@ -1,56 +0,0 @@ -import gym -from core.gail import gail, Buffer -from core.value import Value -from core.policy import Policy -from core.discriminator import Discriminator -import torch.optim -from intersim.envs import IntersimpleLidarFlat -from intersim.envs.intersimple import speed_reward -import functools -from util.wrappers import CollisionPenaltyWrapper - -envs = [CollisionPenaltyWrapper(IntersimpleLidarFlat( - n_rays=5, - agent=51, - reward=functools.partial( - speed_reward, - collision_penalty=0 - ), - stop_on_collision=False, -), collision_distance=6, collision_penalty=100) for _ in range(30)] -env_fn = lambda i: envs[i] - -policy = Policy(env_fn(0).action_space.shape[0]) - -value = Value() -v_opt = torch.optim.Adam(value.parameters(), lr=1e-4) - -discriminator = Discriminator() -disc_opt = torch.optim.RMSprop(discriminator.parameters(), lr=1e-4) - -expert_data = torch.load('intersimple-expert-data.pt') -expert_data = Buffer(*expert_data) - -value, policy = gail( - env_fn=env_fn, - expert_data=expert_data, - discriminator=discriminator, - disc_opt=disc_opt, - disc_iters=10, - policy=policy, - value=value, - v_opt=v_opt, - v_iters=1000, - epochs=4000, - rollout_episodes=30, - rollout_steps=100, - gamma=0.99, - gae_lambda=0.9, - delta=0.01, - backtrack_coeff=0.8, - backtrack_iters=10, - wasserstein=True, - wasserstein_c=1., -) - -torch.save(policy.state_dict(), 'wgail-intersimple.pt') diff --git a/scratch/etienne/trpo/experiments/wgail-options-setobs.py b/scratch/etienne/trpo/experiments/wgail-options-setobs.py deleted file mode 100644 index eaf2d5b..0000000 --- a/scratch/etienne/trpo/experiments/wgail-options-setobs.py +++ /dev/null @@ -1,101 +0,0 @@ -# %% -import gym -from options.options import gail -from core.gail import Buffer -from core.value import SetValue -from core.policy import SetDiscretePolicy -from core.discriminator import DeepsetDiscriminator -import torch.optim -from intersim.envs import IntersimpleLidarFlat -from intersim.envs.intersimple import speed_reward -import functools -from util.wrappers import CollisionPenaltyWrapper, TransformObservation, Setobs -import numpy as np -from options.options import OptionsEnv -from torch.utils.tensorboard import SummaryWriter -from core.reparam_module import ReparamPolicy - -obs_min = np.array([ - [-1000, -1000, 0, -np.pi, -1e-1, 0.], - [0, -np.pi, -20, -20, -np.pi, -1e-1], - [0, -np.pi, -20, -20, -np.pi, -1e-1], - [0, -np.pi, -20, -20, -np.pi, -1e-1], - [0, -np.pi, -20, -20, -np.pi, -1e-1], - [0, -np.pi, -20, -20, -np.pi, -1e-1], -]).reshape(-1) - -obs_max = np.array([ - [1000, 1000, 20, np.pi, 1e-1, 0.], - [50, np.pi, 20, 20, np.pi, 1e-1], - [50, np.pi, 20, 20, np.pi, 1e-1], - [50, np.pi, 20, 20, np.pi, 1e-1], - [50, np.pi, 20, 20, np.pi, 1e-1], - [50, np.pi, 20, 20, np.pi, 1e-1], -]).reshape(-1) - -envs = [OptionsEnv(Setobs( - TransformObservation(CollisionPenaltyWrapper(IntersimpleLidarFlat( - n_rays=5, - agent=51, - reward=functools.partial( - speed_reward, - collision_penalty=0 - ), - stop_on_collision=False, - ), collision_distance=6, collision_penalty=100), lambda obs: (obs - obs_min) / (obs_max - obs_min + 1e-10)) -), options=[(0, 5), (1, 5), (2, 5), (4, 5), (8, 5)]) for _ in range(60)] - -env_fn = lambda i: envs[i] -policy = SetDiscretePolicy(env_fn(0).action_space.n) -value = SetValue() -v_opt = torch.optim.Adam(value.parameters(), lr=1e-4) - -discriminator = DeepsetDiscriminator() -disc_opt = torch.optim.Adam(discriminator.parameters(), lr=1e-3, weight_decay=1e-3) - -expert_data = torch.load('intersimple-expert-data-setobs.pt') -expert_data = Buffer(*expert_data) - -# %% -value, policy = gail( - env_fn=env_fn, - expert_data=expert_data, - discriminator=discriminator, - disc_opt=disc_opt, - disc_iters=100, - policy=policy, - value=value, - v_opt=v_opt, - v_iters=1000, - epochs=150, - rollout_episodes=60, - rollout_steps=60, - gamma=0.99, - gae_lambda=0.9, - delta=0.01, - backtrack_coeff=0.8, - backtrack_iters=10, - wasserstein=True, - wasserstein_c=1., - logger=SummaryWriter(comment='wgail-options-setobs'), -) - -torch.save(policy.state_dict(), 'wgail-options-setobs.pt') - -# %% -policy = SetDiscretePolicy(env_fn(0).action_space.n) -policy(torch.zeros(env_fn(0).observation_space.shape)) -policy = ReparamPolicy(policy) -policy.load_state_dict(torch.load('wgail-options-setobs.pt')) - -env = env_fn(0) -obs = env.reset() -env.render(mode='post') -for i in range(300): - #action, _ = policy.predict(torch.tensor(obs)) - action = policy.sample(policy(torch.tensor(obs, dtype=torch.float32))) - obs, reward, done, _ = env.step(action, render_mode='post') - print('step', i, 'reward', reward) - if done: - break -env.close() diff --git a/scratch/etienne/trpo/experiments/wgail-options-setobs2.py b/scratch/etienne/trpo/experiments/wgail-options-setobs2.py deleted file mode 100644 index a851a46..0000000 --- a/scratch/etienne/trpo/experiments/wgail-options-setobs2.py +++ /dev/null @@ -1,100 +0,0 @@ -# %% -import gym -from options.options import gail -from core.gail import Buffer -from core.value import SetValue -from core.policy import SetDiscretePolicy -from core.discriminator import DeepsetDiscriminator -import torch.optim -from intersim.envs import IntersimpleLidarFlatRandom -from intersim.envs.intersimple import speed_reward -import functools -from util.wrappers import CollisionPenaltyWrapper, TransformObservation, Setobs -import numpy as np -from options.options import OptionsEnv -from torch.utils.tensorboard import SummaryWriter -from core.reparam_module import ReparamPolicy - -obs_min = np.array([ - [-1000, -1000, 0, -np.pi, -1e-1, 0.], - [0, -np.pi, -20, -20, -np.pi, -1e-1], - [0, -np.pi, -20, -20, -np.pi, -1e-1], - [0, -np.pi, -20, -20, -np.pi, -1e-1], - [0, -np.pi, -20, -20, -np.pi, -1e-1], - [0, -np.pi, -20, -20, -np.pi, -1e-1], -]).reshape(-1) - -obs_max = np.array([ - [1000, 1000, 20, np.pi, 1e-1, 0.], - [50, np.pi, 20, 20, np.pi, 1e-1], - [50, np.pi, 20, 20, np.pi, 1e-1], - [50, np.pi, 20, 20, np.pi, 1e-1], - [50, np.pi, 20, 20, np.pi, 1e-1], - [50, np.pi, 20, 20, np.pi, 1e-1], -]).reshape(-1) - -envs = [OptionsEnv(Setobs( - TransformObservation(CollisionPenaltyWrapper(IntersimpleLidarFlatRandom( - n_rays=5, - reward=functools.partial( - speed_reward, - collision_penalty=0 - ), - stop_on_collision=False, - ), collision_distance=6, collision_penalty=100), lambda obs: (obs - obs_min) / (obs_max - obs_min + 1e-10)) -), options=[(0, 5), (1, 5), (2, 5), (4, 5), (6, 5), (8, 5)]) for _ in range(60)] - -env_fn = lambda i: envs[i] -policy = SetDiscretePolicy(env_fn(0).action_space.n) -value = SetValue() -v_opt = torch.optim.Adam(value.parameters(), lr=1e-4) - -discriminator = DeepsetDiscriminator() -disc_opt = torch.optim.Adam(discriminator.parameters(), lr=1e-3, weight_decay=1e-4) - -expert_data = torch.load('intersimple-expert-data-setobs2.pt') -expert_data = Buffer(*expert_data) - -# %% -value, policy = gail( - env_fn=env_fn, - expert_data=expert_data, - discriminator=discriminator, - disc_opt=disc_opt, - disc_iters=100, - policy=policy, - value=value, - v_opt=v_opt, - v_iters=1000, - epochs=200, - rollout_episodes=60, - rollout_steps=60, - gamma=0.99, - gae_lambda=0.9, - delta=0.01, - backtrack_coeff=0.8, - backtrack_iters=10, - wasserstein=True, - wasserstein_c=1., - logger=SummaryWriter(comment='wgail-options-setobs2'), -) - -torch.save(policy.state_dict(), 'wgail-options-setobs2.pt') - -# %% -policy = SetDiscretePolicy(env_fn(0).action_space.n) -policy(torch.zeros(env_fn(0).observation_space.shape)) -policy = ReparamPolicy(policy) -policy.load_state_dict(torch.load('wgail-options-setobs2.pt')) - -env = env_fn(0) -obs = env.reset() -env.render(mode='post') -for i in range(300): - #action, _ = policy.predict(torch.tensor(obs)) - action = policy.sample(policy(torch.tensor(obs, dtype=torch.float32))) - obs, reward, done, _ = env.step(action, render_mode='post') - print('step', i, 'reward', reward) - if done: - break -env.close() diff --git a/scratch/etienne/trpo/experiments/wgail-pendulum.py b/scratch/etienne/trpo/experiments/wgail-pendulum.py deleted file mode 100644 index e79bd46..0000000 --- a/scratch/etienne/trpo/experiments/wgail-pendulum.py +++ /dev/null @@ -1,40 +0,0 @@ -import gym -from core.gail import gail, Buffer -from core.value import Value -from core.policy import Policy -from core.discriminator import Discriminator -import torch.optim - -env_fn = lambda _: gym.make('Pendulum-v0') -policy = Policy(env_fn(0).action_space.shape[0]) -value = Value() -v_opt = torch.optim.Adam(value.parameters(), lr=1e-3) -discriminator = Discriminator() -disc_opt = torch.optim.Adam(discriminator.parameters(), lr=1e-3, weight_decay=1e-3) - -expert_data = torch.load('trpo-pendulum-expert-data.pt') -expert_data = Buffer(*expert_data) - -gail( - env_fn=env_fn, - expert_data=expert_data, - discriminator=discriminator, - disc_opt=disc_opt, - disc_iters=10, - policy=policy, - value=value, - v_opt=v_opt, - v_iters=1000, - epochs=100, - rollout_episodes=20, - rollout_steps=200, - gamma=0.99, - gae_lambda=0.9, - delta=0.01, - backtrack_coeff=0.8, - backtrack_iters=10, - wasserstein=True, - wasserstein_c=100., -) - -torch.save(policy.state_dict(), 'gail-pendulum.pt') diff --git a/scratch/etienne/trpo/experiments/wgail-ppo-intersimple-minobs.py b/scratch/etienne/trpo/experiments/wgail-ppo-intersimple-minobs.py deleted file mode 100644 index ee9757d..0000000 --- a/scratch/etienne/trpo/experiments/wgail-ppo-intersimple-minobs.py +++ /dev/null @@ -1,77 +0,0 @@ -import gym -from core.gail import gail_ppo, Buffer -from core.value import Value -from core.policy import Policy -from core.discriminator import Discriminator -import torch.optim -from intersim.envs import IntersimpleLidarFlat -from intersim.envs.intersimple import speed_reward -import functools -from util.wrappers import CollisionPenaltyWrapper, Minobs -import numpy as np -from gym.wrappers import TransformObservation - -obs_min = np.array([ - [-1000, -1000, 0, -np.pi, -1e-1, 0.], - [0, -np.pi, -20, -20, -np.pi, -1e-1], - [0, -np.pi, -20, -20, -np.pi, -1e-1], - [0, -np.pi, -20, -20, -np.pi, -1e-1], - [0, -np.pi, -20, -20, -np.pi, -1e-1], - [0, -np.pi, -20, -20, -np.pi, -1e-1], -]).reshape(-1) - -obs_max = np.array([ - [1000, 1000, 20, np.pi, 1e-1, 0.], - [50, np.pi, 20, 20, np.pi, 1e-1], - [50, np.pi, 20, 20, np.pi, 1e-1], - [50, np.pi, 20, 20, np.pi, 1e-1], - [50, np.pi, 20, 20, np.pi, 1e-1], - [50, np.pi, 20, 20, np.pi, 1e-1], -]).reshape(-1) - -envs = [Minobs(TransformObservation(CollisionPenaltyWrapper(IntersimpleLidarFlat( - n_rays=5, - agent=51, - reward=functools.partial( - speed_reward, - collision_penalty=0 - ), - stop_on_collision=False, -), collision_distance=6, collision_penalty=100), lambda obs: (obs - obs_min) / (obs_max - obs_min + 1e-10))) for _ in range(30)] -env_fn = lambda i: envs[i] - -policy = Policy(env_fn(0).action_space.shape[0]) -pi_opt = torch.optim.RMSprop(policy.parameters(), lr=3e-4) - -value = Value() -v_opt = torch.optim.Adam(value.parameters(), lr=1e-3, weight_decay=1e-3) - -discriminator = Discriminator() -disc_opt = torch.optim.RMSprop(discriminator.parameters(), lr=1e-3, weight_decay=1e-5) - -expert_data = torch.load('intersimple-expert-data-minobs.pt') -expert_data = Buffer(*expert_data) - -value, policy = gail_ppo( - env_fn=env_fn, - expert_data=expert_data, - discriminator=discriminator, - disc_opt=disc_opt, - disc_iters=100, - policy=policy, - value=value, - v_opt=v_opt, - v_iters=1000, - epochs=4000, - rollout_episodes=30, - rollout_steps=100, - gamma=0.99, - gae_lambda=0.9, - clip_ratio=0.2, - pi_opt=pi_opt, - pi_iters=100, - wasserstein=True, - wasserstein_c=1., -) - -torch.save(policy.state_dict(), 'wgail-ppo-intersimple-minobs.pt') diff --git a/scratch/etienne/trpo/experiments/wgail-ppo-intersimple-setobs2.py b/scratch/etienne/trpo/experiments/wgail-ppo-intersimple-setobs2.py deleted file mode 100644 index fe7472e..0000000 --- a/scratch/etienne/trpo/experiments/wgail-ppo-intersimple-setobs2.py +++ /dev/null @@ -1,78 +0,0 @@ -import gym -from core.gail import gail_ppo, Buffer -from core.value import SetValue -from core.policy import SetPolicy -from core.discriminator import DeepsetDiscriminator -import torch.optim -from intersim.envs import IntersimpleLidarFlatRandom -from intersim.envs.intersimple import speed_reward -import functools -from util.wrappers import CollisionPenaltyWrapper, Setobs -import numpy as np -from gym.wrappers import TransformObservation -from torch.utils.tensorboard import SummaryWriter - -obs_min = np.array([ - [-1000, -1000, 0, -np.pi, -1e-1, 0.], - [0, -np.pi, -20, -20, -np.pi, -1e-1], - [0, -np.pi, -20, -20, -np.pi, -1e-1], - [0, -np.pi, -20, -20, -np.pi, -1e-1], - [0, -np.pi, -20, -20, -np.pi, -1e-1], - [0, -np.pi, -20, -20, -np.pi, -1e-1], -]).reshape(-1) - -obs_max = np.array([ - [1000, 1000, 20, np.pi, 1e-1, 0.], - [50, np.pi, 20, 20, np.pi, 1e-1], - [50, np.pi, 20, 20, np.pi, 1e-1], - [50, np.pi, 20, 20, np.pi, 1e-1], - [50, np.pi, 20, 20, np.pi, 1e-1], - [50, np.pi, 20, 20, np.pi, 1e-1], -]).reshape(-1) - -envs = [Setobs(TransformObservation(CollisionPenaltyWrapper(IntersimpleLidarFlatRandom( - n_rays=5, - reward=functools.partial( - speed_reward, - collision_penalty=0 - ), - stop_on_collision=False, -), collision_distance=6, collision_penalty=100), lambda obs: (obs - obs_min) / (obs_max - obs_min + 1e-10))) for _ in range(50)] -env_fn = lambda i: envs[i] - -policy = SetPolicy(env_fn(0).action_space.shape[0]) -pi_opt = torch.optim.Adam(policy.parameters(), lr=3e-4) - -value = SetValue() -v_opt = torch.optim.Adam(value.parameters(), lr=1e-4, weight_decay=1e-3) - -discriminator = DeepsetDiscriminator() -disc_opt = torch.optim.RMSprop(discriminator.parameters(), lr=1e-3) - -expert_data = torch.load('intersimple-expert-data-setobs2.pt') -expert_data = Buffer(*expert_data) - -value, policy = gail_ppo( - env_fn=env_fn, - expert_data=expert_data, - discriminator=discriminator, - disc_opt=disc_opt, - disc_iters=500, - policy=policy, - value=value, - v_opt=v_opt, - v_iters=1000, - epochs=800, - rollout_episodes=50, - rollout_steps=200, - gamma=0.99, - gae_lambda=0.9, - clip_ratio=0.2, - pi_opt=pi_opt, - pi_iters=100, - wasserstein=True, - wasserstein_c=100., - logger=SummaryWriter(comment='-wgail-ppo-setobs2'), -) - -torch.save(policy.state_dict(), 'wgail-ppo-intersimple-setobs2.pt') diff --git a/scratch/etienne/trpo/experiments/wgail-ppo-intersimple.py b/scratch/etienne/trpo/experiments/wgail-ppo-intersimple.py deleted file mode 100644 index 8b75715..0000000 --- a/scratch/etienne/trpo/experiments/wgail-ppo-intersimple.py +++ /dev/null @@ -1,57 +0,0 @@ -import gym -from core.gail import gail_ppo, Buffer -from core.value import Value -from core.policy import Policy -from core.discriminator import Discriminator -import torch.optim -from intersim.envs import IntersimpleLidarFlat -from intersim.envs.intersimple import speed_reward -import functools -from collision_penalty import CollisionPenaltyWrapper - -envs = [CollisionPenaltyWrapper(IntersimpleLidarFlat( - n_rays=5, - agent=51, - reward=functools.partial( - speed_reward, - collision_penalty=0 - ), - stop_on_collision=False, -), collision_distance=6, collision_penalty=100) for _ in range(30)] -env_fn = lambda i: envs[i] - -policy = Policy(env_fn(0).action_space.shape[0]) -pi_opt = torch.optim.RMSprop(policy.parameters(), lr=3e-4) - -value = Value() -v_opt = torch.optim.Adam(value.parameters(), lr=1e-3) - -discriminator = Discriminator() -disc_opt = torch.optim.RMSprop(discriminator.parameters(), lr=3e-4) - -expert_data = torch.load('intersimple-expert-data.pt') -expert_data = Buffer(*expert_data) - -value, policy = gail_ppo( - env_fn=env_fn, - expert_data=expert_data, - discriminator=discriminator, - disc_opt=disc_opt, - disc_iters=10, - policy=policy, - value=value, - v_opt=v_opt, - v_iters=1000, - epochs=4000, - rollout_episodes=30, - rollout_steps=100, - gamma=0.99, - gae_lambda=0.9, - clip_ratio=0.2, - pi_opt=pi_opt, - pi_iters=100, - wasserstein=True, - wasserstein_c=1., -) - -torch.save(policy.state_dict(), 'wgail-ppo-intersimple.pt') diff --git a/scratch/etienne/trpo/experiments/wgail-ppo-options-setobs.py b/scratch/etienne/trpo/experiments/wgail-ppo-options-setobs.py deleted file mode 100644 index 3f7ed6d..0000000 --- a/scratch/etienne/trpo/experiments/wgail-ppo-options-setobs.py +++ /dev/null @@ -1,98 +0,0 @@ -import gym -from options.options import gail_ppo, Buffer -from core.value import SetValue -from core.policy import SetDiscretePolicy -from core.discriminator import DeepsetDiscriminator -import torch.optim -from intersim.envs import IntersimpleLidarFlat -from intersim.envs.intersimple import speed_reward -import functools -from util.wrappers import CollisionPenaltyWrapper, TransformObservation, Setobs -import numpy as np -from options.options import OptionsEnv -from torch.utils.tensorboard import SummaryWriter - -obs_min = np.array([ - [-1000, -1000, 0, -np.pi, -1e-1, 0.], - [0, -np.pi, -20, -20, -np.pi, -1e-1], - [0, -np.pi, -20, -20, -np.pi, -1e-1], - [0, -np.pi, -20, -20, -np.pi, -1e-1], - [0, -np.pi, -20, -20, -np.pi, -1e-1], - [0, -np.pi, -20, -20, -np.pi, -1e-1], -]).reshape(-1) - -obs_max = np.array([ - [1000, 1000, 20, np.pi, 1e-1, 0.], - [50, np.pi, 20, 20, np.pi, 1e-1], - [50, np.pi, 20, 20, np.pi, 1e-1], - [50, np.pi, 20, 20, np.pi, 1e-1], - [50, np.pi, 20, 20, np.pi, 1e-1], - [50, np.pi, 20, 20, np.pi, 1e-1], -]).reshape(-1) - -envs = [OptionsEnv(Setobs( - TransformObservation(CollisionPenaltyWrapper(IntersimpleLidarFlat( - n_rays=5, - agent=51, - reward=functools.partial( - speed_reward, - collision_penalty=0 - ), - stop_on_collision=False, - ), collision_distance=6, collision_penalty=100), lambda obs: (obs - obs_min) / (obs_max - obs_min + 1e-10)) -), options=[(0, 5), (1, 5), (2, 5), (4, 5), (8, 5)]) for _ in range(60)] - -env_fn = lambda i: envs[i] - -policy = SetDiscretePolicy(env_fn(0).action_space.n) -pi_opt = torch.optim.Adam(policy.parameters(), lr=3e-4) - -value = SetValue() -v_opt = torch.optim.Adam(value.parameters(), lr=1e-3) - -discriminator = DeepsetDiscriminator() -disc_opt = torch.optim.Adam(discriminator.parameters(), lr=1e-3, weight_decay=1e-3) - -expert_data = torch.load('intersimple-expert-data-setobs.pt') -expert_data = Buffer(*expert_data) - -value, policy = gail_ppo( - env_fn=env_fn, - expert_data=expert_data, - discriminator=discriminator, - disc_opt=disc_opt, - disc_iters=100, - policy=policy, - value=value, - v_opt=v_opt, - v_iters=1000, - epochs=150, - rollout_episodes=60, - rollout_steps=60, - gamma=0.99, - gae_lambda=0.9, - clip_ratio=0.2, - pi_opt=pi_opt, - pi_iters=100, - wasserstein=True, - wasserstein_c=1., - logger=SummaryWriter(comment='wgail-ppo-options-setobs'), -) - -torch.save(policy.state_dict(), 'wgail-ppo-options-setobs.pt') - -# %% -policy = SetDiscretePolicy(env_fn(0).action_space.n) -policy(torch.zeros(env_fn(0).observation_space.shape)) -policy.load_state_dict(torch.load('wgail-ppo-options-setobs.pt')) - -env = env_fn(0) -obs = env.reset() -env.render(mode='post') -for i in range(300): - action = policy.sample(policy(torch.tensor(obs, dtype=torch.float32))) - obs, reward, done, _ = env.step(action, render_mode='post') - print('step', i, 'reward', reward) - if done: - break -env.close() \ No newline at end of file diff --git a/scratch/etienne/trpo/experiments/wgail-ppo-options-setobs2.py b/scratch/etienne/trpo/experiments/wgail-ppo-options-setobs2.py deleted file mode 100644 index d4394a2..0000000 --- a/scratch/etienne/trpo/experiments/wgail-ppo-options-setobs2.py +++ /dev/null @@ -1,97 +0,0 @@ -import gym -from options.options import gail_ppo, Buffer -from core.value import SetValue -from core.policy import SetDiscretePolicy -from core.discriminator import DeepsetDiscriminator -import torch.optim -from intersim.envs import IntersimpleLidarFlatRandom -from intersim.envs.intersimple import speed_reward -import functools -from util.wrappers import CollisionPenaltyWrapper, TransformObservation, Setobs -import numpy as np -from options.options import OptionsEnv -from torch.utils.tensorboard import SummaryWriter - -obs_min = np.array([ - [-1000, -1000, 0, -np.pi, -1e-1, 0.], - [0, -np.pi, -20, -20, -np.pi, -1e-1], - [0, -np.pi, -20, -20, -np.pi, -1e-1], - [0, -np.pi, -20, -20, -np.pi, -1e-1], - [0, -np.pi, -20, -20, -np.pi, -1e-1], - [0, -np.pi, -20, -20, -np.pi, -1e-1], -]).reshape(-1) - -obs_max = np.array([ - [1000, 1000, 20, np.pi, 1e-1, 0.], - [50, np.pi, 20, 20, np.pi, 1e-1], - [50, np.pi, 20, 20, np.pi, 1e-1], - [50, np.pi, 20, 20, np.pi, 1e-1], - [50, np.pi, 20, 20, np.pi, 1e-1], - [50, np.pi, 20, 20, np.pi, 1e-1], -]).reshape(-1) - -envs = [OptionsEnv(Setobs( - TransformObservation(CollisionPenaltyWrapper(IntersimpleLidarFlatRandom( - n_rays=5, - reward=functools.partial( - speed_reward, - collision_penalty=0 - ), - stop_on_collision=False, - ), collision_distance=6, collision_penalty=100), lambda obs: (obs - obs_min) / (obs_max - obs_min + 1e-10)) -), options=[(0, 5), (1, 5), (2, 5), (4, 5), (6, 5), (8, 5)]) for _ in range(60)] - -env_fn = lambda i: envs[i] - -policy = SetDiscretePolicy(env_fn(0).action_space.n) -pi_opt = torch.optim.Adam(policy.parameters(), lr=3e-4) - -value = SetValue() -v_opt = torch.optim.Adam(value.parameters(), lr=1e-3) - -discriminator = DeepsetDiscriminator() -disc_opt = torch.optim.Adam(discriminator.parameters(), lr=1e-3, weight_decay=1e-4) - -expert_data = torch.load('intersimple-expert-data-setobs2.pt') -expert_data = Buffer(*expert_data) - -value, policy = gail_ppo( - env_fn=env_fn, - expert_data=expert_data, - discriminator=discriminator, - disc_opt=disc_opt, - disc_iters=100, - policy=policy, - value=value, - v_opt=v_opt, - v_iters=1000, - epochs=200, - rollout_episodes=60, - rollout_steps=60, - gamma=0.99, - gae_lambda=0.9, - clip_ratio=0.2, - pi_opt=pi_opt, - pi_iters=100, - wasserstein=True, - wasserstein_c=1., - logger=SummaryWriter(comment='wgail-ppo-options-setobs2'), -) - -torch.save(policy.state_dict(), 'wgail-ppo-options-setobs2.pt') - -# %% -policy = SetDiscretePolicy(env_fn(0).action_space.n) -policy(torch.zeros(env_fn(0).observation_space.shape)) -policy.load_state_dict(torch.load('wgail-ppo-options-setobs2.pt')) - -env = env_fn(0) -obs = env.reset() -env.render(mode='post') -for i in range(300): - action = policy.sample(policy(torch.tensor(obs, dtype=torch.float32))) - obs, reward, done, _ = env.step(action, render_mode='post') - print('step', i, 'reward', reward) - if done: - break -env.close() \ No newline at end of file diff --git a/scratch/etienne/trpo/experiments/wgail-ppo-pendulum.py b/scratch/etienne/trpo/experiments/wgail-ppo-pendulum.py deleted file mode 100644 index 2b4e05c..0000000 --- a/scratch/etienne/trpo/experiments/wgail-ppo-pendulum.py +++ /dev/null @@ -1,44 +0,0 @@ -import gym -from core.gail import gail_ppo, Buffer -from core.value import Value -from core.policy import Policy -from core.discriminator import Discriminator -import torch.optim - -env_fn = lambda _: gym.make('Pendulum-v0') - -policy = Policy(env_fn(0).action_space.shape[0]) -pi_opt = torch.optim.RMSprop(policy.parameters(), lr=3e-4) - -value = Value() -v_opt = torch.optim.Adam(value.parameters(), lr=1e-3) - -discriminator = Discriminator() -disc_opt = torch.optim.Adam(discriminator.parameters(), lr=1e-3, weight_decay=1e-3) - -expert_data = torch.load('trpo-pendulum-expert-data.pt') -expert_data = Buffer(*expert_data) - -gail_ppo( - env_fn=env_fn, - expert_data=expert_data, - discriminator=discriminator, - disc_opt=disc_opt, - disc_iters=10, - policy=policy, - value=value, - v_opt=v_opt, - v_iters=1000, - epochs=100, - rollout_episodes=20, - rollout_steps=200, - gamma=0.99, - gae_lambda=0.9, - clip_ratio=0.2, - pi_opt=pi_opt, - pi_iters=100, - wasserstein=True, - wasserstein_c=100., -) - -torch.save(policy.state_dict(), 'gail-pendulum.pt') diff --git a/scratch/etienne/trpo/sb3/sb3-ppo-intersimple-nocollision.py b/scratch/etienne/trpo/sb3/sb3-ppo-intersimple-nocollision.py deleted file mode 100644 index 77f3424..0000000 --- a/scratch/etienne/trpo/sb3/sb3-ppo-intersimple-nocollision.py +++ /dev/null @@ -1,55 +0,0 @@ -from stable_baselines3 import PPO -from intersim.envs import IntersimpleLidarFlat -from intersim.envs.intersimple import speed_reward -import functools -from gym import Wrapper - -model_name = "ppo_speed_lidar_nocollision" - -env = IntersimpleLidarFlat( - n_rays=5, - agent=51, - reward=functools.partial( - speed_reward, - collision_penalty=0 - ), - stop_on_collision=False, -) - -class CollisionPenaltyWrapper(Wrapper): - - def __init__(self, env, collision_distance, collision_penalty, *args, **kwargs): - super().__init__(env, *args, **kwargs) - self.penalty = collision_penalty - self.distance = collision_distance - - def step(self, action): - obs, reward, done, info = super().step(action) - reward = -self.penalty if (obs.reshape(-1, 6)[1:, 0] < self.distance).any() else reward - - self.env._rewards.pop() - self.env._rewards.append(reward) - - return obs, reward, done, info - -env = CollisionPenaltyWrapper(env, collision_distance=6, collision_penalty=100) - -model = PPO( - "MlpPolicy", env, - learning_rate=1e-4, - verbose=1, -) -model.learn(total_timesteps=100000) -model.save(model_name) - -model = PPO.load(model_name) -obs = env.reset() -env.render(mode='post') -for i in range(200): - action, _ = model.predict(obs) - obs, reward, done, _ = env.step(action) - env.render(mode='post') - print('step', i, 'front distance', obs.reshape(-1, 6)[3, 0], 'reward', reward) - if done: - break -env.close() diff --git a/scratch/etienne/trpo/sb3/sb3-ppo-intersimple-nocollision2.py b/scratch/etienne/trpo/sb3/sb3-ppo-intersimple-nocollision2.py deleted file mode 100644 index 0e576bd..0000000 --- a/scratch/etienne/trpo/sb3/sb3-ppo-intersimple-nocollision2.py +++ /dev/null @@ -1,58 +0,0 @@ -from stable_baselines3 import PPO -from intersim.envs import IntersimpleLidarFlat -from intersim.envs.intersimple import speed_reward -import functools -from gym import Wrapper - -model_name = "ppo_speed_lidar_nocollision" - -env = IntersimpleLidarFlat( - n_rays=5, - agent=51, - reward=functools.partial( - speed_reward, - collision_penalty=0 - ), - stop_on_collision=False, -) - -class CollisionPenaltyWrapper(Wrapper): - - def __init__(self, env, collision_distance, collision_penalty, last_reward_weight, *args, **kwargs): - super().__init__(env, *args, **kwargs) - self.penalty = collision_penalty - self.distance = collision_distance - self.last_reward = -collision_penalty - self.last_reward_weight = last_reward_weight - - def step(self, action): - obs, reward, done, info = super().step(action) - reward = -self.penalty if (obs.reshape(-1, 6)[1:, 0] < self.distance).any() else reward - reward = self.last_reward_weight * self.last_reward + (1 - self.last_reward_weight) * self.last_reward - - self.env._rewards.pop() - self.env._rewards.append(reward) - - return obs, reward, done, info - -env = CollisionPenaltyWrapper(env, collision_distance=6, collision_penalty=10, last_reward_weight=0.9) - -model = PPO( - "MlpPolicy", env, - learning_rate=1e-4, - verbose=1, -) -model.learn(total_timesteps=100000) -model.save(model_name) - -model = PPO.load(model_name) -obs = env.reset() -env.render(mode='post') -for i in range(200): - action, _ = model.predict(obs) - obs, reward, done, _ = env.step(action) - env.render(mode='post') - print('step', i, 'front distance', obs.reshape(-1, 6)[3, 0], 'reward', reward) - if done: - break -env.close() diff --git a/scratch/etienne/trpo/sb3/sb3-ppo-intersimple-rollout.py b/scratch/etienne/trpo/sb3/sb3-ppo-intersimple-rollout.py deleted file mode 100644 index 2f9b6fd..0000000 --- a/scratch/etienne/trpo/sb3/sb3-ppo-intersimple-rollout.py +++ /dev/null @@ -1,28 +0,0 @@ -import sys -sys.path.append('..') - -from stable_baselines3 import PPO -from core.sampling import rollout_sb3 -from intersim.envs import IntersimpleLidarFlat -from intersim.envs.intersimple import speed_reward -import functools -import torch -from util.wrappers import CollisionPenaltyWrapper - -model = PPO.load('sb3-ppo-intersimple') -env = CollisionPenaltyWrapper(IntersimpleLidarFlat( - n_rays=5, - agent=51, - reward=functools.partial( - speed_reward, - collision_penalty=0 - ), -), collision_distance=6, collision_penalty=100) - -expert_data = rollout_sb3(env, model, n_episodes=200, max_steps_per_episode=200) - -states, actions, rewards, dones = expert_data -print(f'Expert mean episode length {(~dones).sum() / states.shape[0]}') -print(f'Expert mean reward per episode {rewards[~dones].sum() / states.shape[0]}') - -torch.save(expert_data, 'sb3-ppo-intersimple-expert-data.pt') diff --git a/scratch/etienne/trpo/sb3/sb3-ppo-intersimple.py b/scratch/etienne/trpo/sb3/sb3-ppo-intersimple.py deleted file mode 100644 index 76d91ae..0000000 --- a/scratch/etienne/trpo/sb3/sb3-ppo-intersimple.py +++ /dev/null @@ -1,23 +0,0 @@ -from stable_baselines3 import PPO -from intersim.envs import IntersimpleLidarFlat -from intersim.envs.intersimple import speed_reward -import functools - -env = IntersimpleLidarFlat( - n_rays=5, - agent=51, - reward=functools.partial( - speed_reward, - collision_penalty=0 - ), -) - -model = PPO( - "MlpPolicy", env, - learning_rate=1e-4, - verbose=1, - use_sde=False, - sde_sample_freq=4, -) -model.learn(total_timesteps=100000) -model.save('sb3-ppo-intersimple') diff --git a/scratch/etienne/trpo/sb3/sb3-ppo-pendulum.py b/scratch/etienne/trpo/sb3/sb3-ppo-pendulum.py deleted file mode 100644 index c57e359..0000000 --- a/scratch/etienne/trpo/sb3/sb3-ppo-pendulum.py +++ /dev/null @@ -1,6 +0,0 @@ -from stable_baselines3 import PPO -from stable_baselines3.common.env_util import make_vec_env - -env = make_vec_env("Pendulum-v0", n_envs=4) -model = PPO("MlpPolicy", env, verbose=1) -model.learn(total_timesteps=250000) diff --git a/scratch/etienne/trpo/sb3/sb3-trpo-intersimple.py b/scratch/etienne/trpo/sb3/sb3-trpo-intersimple.py deleted file mode 100644 index ef1266b..0000000 --- a/scratch/etienne/trpo/sb3/sb3-trpo-intersimple.py +++ /dev/null @@ -1,16 +0,0 @@ -from sb3_contrib import TRPO -from intersim.envs import IntersimpleLidarFlat -from intersim.envs.intersimple import speed_reward -import functools - -env = IntersimpleLidarFlat( - n_rays=5, - agent=51, - reward=functools.partial( - speed_reward, - collision_penalty=0 - ), -) - -model = TRPO("MlpPolicy", env, use_sde=False, sde_sample_freq=4, verbose=1) -model.learn(total_timesteps=250000) diff --git a/scratch/etienne/trpo/sb3/sb3-trpo-pendulum.py b/scratch/etienne/trpo/sb3/sb3-trpo-pendulum.py deleted file mode 100644 index 9f65f30..0000000 --- a/scratch/etienne/trpo/sb3/sb3-trpo-pendulum.py +++ /dev/null @@ -1,8 +0,0 @@ -from sb3_contrib import TRPO -import gym -from gym.wrappers import TransformObservation - -env = TransformObservation(gym.make('Pendulum-v0'), lambda obs: obs) - -model = TRPO("MlpPolicy", env, verbose=1) -model.learn(total_timesteps=250000) diff --git a/scratch/johannes/evaluation.py b/scratch/johannes/evaluation.py deleted file mode 100644 index 67fec87..0000000 --- a/scratch/johannes/evaluation.py +++ /dev/null @@ -1,90 +0,0 @@ - -def evaluate_policy_simple( - model, - env: gym.Env, - n_eval_episodes: int = 10, - deterministic: bool = True, - render: bool = False, - callback = None, - reward_threshold = None, - return_episode_rewards: bool = False, - warn: bool = True, -): - """ - Runs policy for ``n_eval_episodes`` episodes and returns average reward. - If a vector env is passed in, this divides the episodes to evaluate onto the - different elements of the vector env. This static division of work is done to - remove bias. See https://github.com/DLR-RM/stable-baselines3/issues/402 for more - details and discussion. - - .. note:: - If environment has not been wrapped with ``Monitor`` wrapper, reward and - episode lengths are counted as it appears with ``env.step`` calls. If - the environment contains wrappers that modify rewards or episode lengths - (e.g. reward scaling, early episode reset), these will affect the evaluation - results as well. You can avoid this by wrapping environment with ``Monitor`` - wrapper before anything else. - - :param model: The RL agent you want to evaluate. - :param env: The gym environment or ``VecEnv`` environment. - :param n_eval_episodes: Number of episode to evaluate the agent - :param deterministic: Whether to use deterministic or stochastic actions - :param render: Whether to render the environment or not - :param callback: callback function to do additional checks, - called after each step. Gets locals() and globals() passed as parameters. - :param reward_threshold: Minimum expected reward per episode, - this will raise an error if the performance is not met - :param return_episode_rewards: If True, a list of rewards and episode lengths - per episode will be returned instead of the mean. - :param warn: If True (default), warns user about lack of a Monitor wrapper in the - evaluation environment. - :return: Mean reward per episode, std of reward per episode. - Returns ([float], [int]) when ``return_episode_rewards`` is True, first - list containing per-episode rewards and second containing per-episode lengths - (in number of steps). - """ - episode_rewards = [] - episode_lengths = [] - - episode_counts = 0 - - current_rewards = 0 - current_lengths = 0 - observations = env.reset() - states = None - while (episode_counts < n_eval_episodes): - actions, states = model.predict(observations, state=states, deterministic=deterministic) - observations, rewards, dones, infos = env.step(actions) - print(env._env.t) - current_rewards += rewards - current_lengths += 1 - - # unpack values so that the callback can access the local variables - reward = rewards - done = dones - info = infos - if info['collision']: - print("COLLISION") - - if callback is not None: - callback(locals(), globals()) - - if dones: - episode_rewards.append(current_rewards) - episode_lengths.append(current_lengths) - episode_counts += 1 - current_rewards = 0 - current_lengths = 0 - if states is not None: - states *= 0 - - if render: - env.render() - - mean_reward = np.mean(episode_rewards) - std_reward = np.std(episode_rewards) - if reward_threshold is not None: - assert mean_reward > reward_threshold, "Mean reward below threshold: " f"{mean_reward:.2f} < {reward_threshold:.2f}" - if return_episode_rewards: - return episode_rewards, episode_lengths - return mean_reward, std_reward diff --git a/scratch/johannes/horner_scheme.py b/scratch/johannes/horner_scheme.py deleted file mode 100644 index c454dfe..0000000 --- a/scratch/johannes/horner_scheme.py +++ /dev/null @@ -1,90 +0,0 @@ -# %% - -import numpy as np -import torch -from timeit import default_timer as timer - -# %% - -def powerseries(x, deg): - return torch.stack([x**i for i in range(deg+1)],dim=-1) - -def improved_powerseries(x, deg): - r = torch.ones(*x.shape, deg+1, dtype=torch.float64) - for i in range(1,deg+1): - r[:, :, i] = r[:, :, i-1] * x - return r - -def horner_scheme(x, poly): - deg = poly.shape[-1] - nsteps = x.shape[-1] - r = poly[:, -1:].repeat(1, nsteps) - for i in range(2, deg+1): - r *= x - r += poly[:, -i:1-i] - return r - -# %% - -nv = 151 -delta = 10 -n = 20 - -state_s = torch.rand((nv, 1)) -nan_idx = np.random.choice([True, False], 151) -state_s[nan_idx] = np.nan - -# %% - -n_coef = 21 -xpoly = torch.rand((nv, n_coef),dtype=torch.float64) -ypoly = torch.rand((nv, n_coef),dtype=torch.float64) - -ds = delta * torch.arange(1,n+1).repeat(nv,1) - -s = ds + state_s -s = s.type(torch.float64) - -smax = s[:, 0] -smax = smax.unsqueeze(-1) - - -start = timer() -for _ in range(100): - deg = xpoly.shape[-1] - 1 - expand_sims = powerseries(s, deg) # (nv, n, deg+1) - # print(expand_sims.shape) - y = (ypoly.unsqueeze(1) * expand_sims).sum(dim=-1) - x = (xpoly.unsqueeze(1) * expand_sims).sum(dim=-1) -end = timer() -print("Powerseries: {}".format((end-start)*1)) - -start = timer() -for _ in range(100): - deg = xpoly.shape[-1] - 1 - expand_sims = improved_powerseries(s, deg) # (nv, n, deg+1) - # print(expand_sims.shape) - yp = (ypoly.unsqueeze(1) * expand_sims).sum(dim=-1) - xp = (xpoly.unsqueeze(1) * expand_sims).sum(dim=-1) -end = timer() -print("Improved Powerseries: {}".format((end-start)*1)) - -start = timer() -for _ in range(100): - x_horner = horner_scheme(s, xpoly) - y_horner = horner_scheme(s, ypoly) -end = timer() -print("Horner: {}".format((end-start)*1)) - -start = timer() -for _ in range(100): - x_max = horner_scheme(smax, xpoly) - y_max = horner_scheme(smax, ypoly) -end = timer() -# print("Horner smax: {}".format((end-start)*1)) - -assert np.all(np.isclose(xp,x)[~nan_idx]) -assert np.all(np.isclose(yp,y)[~nan_idx]) -assert np.all(np.isclose(x_horner,x)[~nan_idx]) -assert np.all(np.isclose(y_horner,y)[~nan_idx]) -# %% diff --git a/scratch/johannes/intersimple/gail_options_image.py b/scratch/johannes/intersimple/gail_options_image.py deleted file mode 100644 index e6b9faa..0000000 --- a/scratch/johannes/intersimple/gail_options_image.py +++ /dev/null @@ -1,101 +0,0 @@ -# %% -import sys -sys.path.append('../../../') - -from src.discriminator import CnnDiscriminator, CnnDiscriminatorFlatAction -from imitation.algorithms import adversarial -import stable_baselines3 -import torch.utils.data -import numpy as np -from intersim.envs.intersimple import NRasterized, speed_reward -import itertools -import functools -from torch.distributions import Categorical -import gym -import torch -import pickle -import imitation.data.rollout as rollout -import tempfile -import pathlib -from imitation.util import logger -from stable_baselines3.common.env_util import make_vec_env -from tqdm import tqdm -from src.policies.options import OptionsCnnPolicy -from src.gail.options import OptionsEnv, LLOptions, HLOptions, RenderOptions -from src.gail.train import train_discriminator, train_generator -from src.evaluation.evaluation import Evaluation -from torch.utils.tensorboard import SummaryWriter - - -model_name = 'gail_options_image' -env_settings = {'agent': 51, 'width': 36, 'height': 36, 'm_per_px': 2} - -ALL_OPTIONS = [(v,t) for v in [0,2,4,6,8] for t in [5, 10]] # option 0 is safe fallback - -def train(expert_data, epochs=20, expert_batch_size=32, generator_steps=1024, discount=0.99): - env = NRasterized(**env_settings) - env.discount = discount - - tempdir = tempfile.TemporaryDirectory(prefix="quickstart") - tempdir_path = pathlib.Path(tempdir.name) - logger.configure(tempdir_path / "GAIL/") - print(f"All Tensorboards and logging are being written inside {tempdir_path}/.") - - venv = make_vec_env(NRasterized, n_envs=1, env_kwargs=env_settings) - discriminator = adversarial.GAIL( - expert_data=expert_data, - expert_batch_size=expert_batch_size, - discrim_kwargs={'discrim_net': CnnDiscriminatorFlatAction(venv)}, - #discrim_kwargs={'discrim_net': CnnDiscriminator(venv)}, - venv=venv, # unused - gen_algo=stable_baselines3.PPO("CnnPolicy", venv), # unused - ) - - generator = stable_baselines3.PPO( - OptionsCnnPolicy, - OptionsEnv(env, options=ALL_OPTIONS), - verbose=1, - n_steps=generator_steps, - ) - - # PPO.train requires logger as set up in - # PPO._setup_learn (called by PPO.learn) - generator._logger = stable_baselines3.common.utils.configure_logger( - generator.verbose, - generator.tensorboard_log, - ) - - filestr = os.path.join('out', model_name) - writer = SummaryWriter(filestr) - ev = Evaluation(filestr, env, expert_data, n_eval_episodes=100) - for epoch in tqdm(range(epochs)): - train_discriminator(LLOptions(env, options=ALL_OPTIONS), generator, discriminator, num_samples=expert_batch_size) - train_generator(HLOptions(env, options=ALL_OPTIONS), generator, discriminator, num_samples=generator_steps) - - metrics = ev.evaluate(epoch, generator, discriminator) - for metric, value in metrics.items(): - writer.add_scalar(metric, value, epoch) - - return generator - -# %% -if __name__ == '__main__': - # %% - - with open("scratch/etienne/intersimple/data/NormalizedIntersimpleExpertMu.001_NRasterizedInfoAgent51w36h36mppx2.pkl", "rb") as f: - trajectories = pickle.load(f) - transitions = rollout.flatten_trajectories(trajectories) - generator = train(transitions) - - generator.save(model_name) - - # %% - model = stable_baselines3.PPO.load(model_name) - - env = RenderOptions(NRasterized(**env_settings), options=ALL_OPTIONS) - - for s in env.sample_ll(model): - if s['dones']: - break - - env.close(filestr='render/'+model_name) diff --git a/scratch/johannes/intersimple/gail_options_image_random.py b/scratch/johannes/intersimple/gail_options_image_random.py deleted file mode 100644 index 8031bb6..0000000 --- a/scratch/johannes/intersimple/gail_options_image_random.py +++ /dev/null @@ -1,101 +0,0 @@ -# %% -import sys -sys.path.append('../../../') - -from src.discriminator import CnnDiscriminatorFlatAction -from imitation.algorithms import adversarial -import stable_baselines3 -import torch.utils.data -import numpy as np -from intersim.envs.intersimple import NRasterizedRandomAgent -import itertools -from torch.distributions import Categorical -import gym -import torch -import pickle -import imitation.data.rollout as rollout -import tempfile -import pathlib -from imitation.util import logger -from stable_baselines3.common.env_util import make_vec_env -from tqdm import tqdm -from src.policies.options import OptionsCnnPolicy -from src.gail.options import OptionsEnv, LLOptions, HLOptions, RenderOptions -from src.gail.train import train_discriminator, train_generator -from src.evaluation.evaluation import Evaluation -from torch.utils.tensorboard import SummaryWriter -import os - -model_name = 'gail_options_image_random' -env_settings = {'width': 36, 'height': 36, 'm_per_px': 2} - -ALL_OPTIONS = [(v,t) for v in [0,2,4,6,8] for t in [5, 10, 20]] # option 0 is safe fallback - -def train(expert_data, epochs=100, expert_batch_size=16, generator_steps=16, discount=0.99): - env = NRasterizedRandomAgent(**env_settings) - env.discount = discount - - tempdir = tempfile.TemporaryDirectory(prefix="quickstart") - tempdir_path = pathlib.Path(tempdir.name) - logger.configure(tempdir_path / "GAIL/") - print(f"All Tensorboards and logging are being written inside {tempdir_path}/.") - - venv = make_vec_env(NRasterizedRandomAgent, n_envs=1, env_kwargs=env_settings) - discriminator = adversarial.GAIL( - expert_data=expert_data, - expert_batch_size=expert_batch_size, - discrim_kwargs={'discrim_net': CnnDiscriminatorFlatAction(venv)}, - #discrim_kwargs={'discrim_net': CnnDiscriminator(venv)}, - venv=venv, # unused - gen_algo=stable_baselines3.PPO("CnnPolicy", venv), # unused - ) - - generator = stable_baselines3.PPO( - OptionsCnnPolicy, - OptionsEnv(env, options=ALL_OPTIONS), - verbose=1, - n_steps=generator_steps, - ) - - # PPO.train requires logger as set up in - # PPO._setup_learn (called by PPO.learn) - generator._logger = stable_baselines3.common.utils.configure_logger( - generator.verbose, - generator.tensorboard_log, - ) - - filestr = os.path.join('out', model_name) - writer = SummaryWriter(filestr) - ev = Evaluation(filestr, env, expert_data, n_eval_episodes=100) - for epoch in tqdm(range(epochs)): - train_discriminator(LLOptions(env, options=ALL_OPTIONS), generator, discriminator, num_samples=expert_batch_size) - train_generator(HLOptions(env, options=ALL_OPTIONS), generator, discriminator, num_samples=generator_steps) - generator.save(model_name) - - metrics = ev.evaluate(epoch, generator, discriminator) - for metric, value in metrics.items(): - writer.add_scalar(metric, value, epoch) - - return generator - -def video(model_name, env): - model = stable_baselines3.PPO.load(model_name) - env = RenderOptions(env, options=ALL_OPTIONS) - for s in env.sample_ll(model): - if s['dones']: - break - env.close(filestr='render/'+model_name) - -def evaluate(): - video( - model_name=model_name, - env=NRasterizedRandomAgent(**env_settings) - ) - -# %% -if __name__ == '__main__': - - with open("scratch/etienne/intersimple/data/NormalizedIntersimpleExpertMu.001N10000_NRasterizedRandomAgentInfow36h36mppx2.pkl", "rb") as f: - trajectories = pickle.load(f) - transitions = rollout.flatten_trajectories(trajectories) - train(transitions) diff --git a/scratch/johannes/intersimple/idm.py b/scratch/johannes/intersimple/idm.py deleted file mode 100644 index 975649a..0000000 --- a/scratch/johannes/intersimple/idm.py +++ /dev/null @@ -1,44 +0,0 @@ -# %% -import torch -from src.baselines.rule_policies import IDMRulePolicy -from tqdm import tqdm - -from intersim.envs import NRasterizedIncrementingAgent, NRasterizedRandomAgent, NRasterized,IntersimpleLidarFlat -from intersim.envs.intersimple import speed_reward -import functools - - -env = IntersimpleLidarFlat( - agent = 51, - n_rays=5, - reward=functools.partial( - speed_reward, - collision_penalty=1000 - ), - stop_on_collision=True, -) -policy = IDMRulePolicy(env) - -colliding_agents = [] - -# for agent in range(151): -agent = env._agent -print("Start agent", agent) -obs = env.reset() -env.render(mode='post') -for i in range(300): - action, _ = policy.predict(torch.tensor(obs)) - # action = policy.sample(policy(torch.tensor(obs, dtype=torch.float32))) - obs, reward, done, _ = env.step(action) - env.render(mode='post') - # print('step', i, 'reward', reward) - if done: - if reward < -500: - colliding_agents.append(agent) - print(" Collision") - break -env.close(filestr='idm3/agent_{}'.format(agent)) - -print(len(colliding_agents), "colliding_agents") -print(colliding_agents) -# %% diff --git a/scratch/johannes/normalization.py b/scratch/johannes/normalization.py deleted file mode 100644 index 92dceb8..0000000 --- a/scratch/johannes/normalization.py +++ /dev/null @@ -1,73 +0,0 @@ -import torch -from torch import nn - -from sklearn import preprocessing - -class Normalization(nn.Module): - def __init__(self, X): - super(Normalization, self).__init__() - self.fit(X) - - def fit(self, X): - raise NotImplementedError('Please implement fit()') - - def transform(self, X): - raise NotImplementedError('Please implement transform()') - - def inverse_transform(self, X): - raise NotImplementedError('Please implement inverse_transform()') - - def forward(self, X): - return self.transform(X) - -class SciKitNormalization(Normalization): - def __init__(self, tf, X): - self.tf = tf - super(SciKitNormalization, self).__init__(X) - - def fit(self, X): - self.tf.fit(X) - - def transform(self, X): - return torch.tensor(self.tf.transform(X), dtype=torch.float) - - def inverse_transform(self, X): - return torch.tensor(self.tf.inverse_transform(X), dtype=torch.float) - -class SciKitStandardization(SciKitNormalization): - def __init__(self, X): - super(SciKitStandardization, self).__init__(preprocessing.StandardScaler(), X) - -class SciKitMinMaxScaler(SciKitNormalization): - def __init__(self, X): - super(SciKitMinMaxScaler, self).__init__(preprocessing.MinMaxScaler(), X) - - -ns = 5 -na = 1 -n_batch = 1000 - -state = torch.rand(n_batch, ns) -action = torch.rand(n_batch, na) - -s_tf = SciKitStandardization(state) -a_tf = SciKitMinMaxScaler(action) - -print(torch.linalg.norm(s_tf.inverse_transform(s_tf(state)) - state)) -print(torch.linalg.norm(a_tf.inverse_transform(a_tf(action)) - action)) - - - - -# class Foo: -# def __init__(self): -# return None -# def baz(self): -# print("Foo.baz()") - -# class Bar(Foo): -# def __init__(self): -# return None - -# bar = Bar() -# bar.baz() \ No newline at end of file diff --git a/scratch/johannes/raytune_simple.py b/scratch/johannes/raytune_simple.py deleted file mode 100644 index 5979c11..0000000 --- a/scratch/johannes/raytune_simple.py +++ /dev/null @@ -1,69 +0,0 @@ -"""This example demonstrates basic Ray Tune random search and grid search.""" -import time - -import ray -from ray import tune - - -def evaluation_fn(step, width, height): - time.sleep(0.1) - return (0.1 + width * step / 100)**(-1) + height * 0.1 - -def easy_objective(config): - # Hyperparameters - width, height = config["width"], config["height"] - - mydata = ray.get(ray_data) - print(mydata) - - for step in range(config["steps"]): - # Iterative training function - can be any arbitrary training procedure - intermediate_score = evaluation_fn(step, width, height) - # Feed the score back back to Tune. - tune.report(iterations=step, mean_loss=intermediate_score) - - -if __name__ == "__main__": - import argparse - - parser = argparse.ArgumentParser() - parser.add_argument( - "--smoke-test", action="store_true", help="Finish quickly for testing") - parser.add_argument( - "--server-address", - type=str, - default=None, - required=False, - help="The address of server to connect to if using " - "Ray Client.") - args, _ = parser.parse_known_args() - if args.server_address is not None: - ray.init(f"ray://{args.server_address}") - else: - ray.init(configure_logging=False) - - # This will do a grid search over the `activation` parameter. This means - # that each of the two values (`relu` and `tanh`) will be sampled once - # for each sample (`num_samples`). We end up with 2 * 50 = 100 samples. - # The `width` and `height` parameters are sampled randomly. - # `steps` is a constant parameter. - - import numpy as np - N = 3 - data = np.random.rand(N,N,N) - ray_data = ray.put(data) - - - analysis = tune.run( - easy_objective, - metric="mean_loss", - mode="min", - num_samples=5 if args.smoke_test else 50, - config={ - "steps": 5 if args.smoke_test else 100, - "width": tune.uniform(0, 20), - "height": tune.uniform(-100, 100), - "activation": tune.grid_search(["relu", "tanh"]) - }) - - print("Best hyperparameters found were: ", analysis.best_config) \ No newline at end of file