From 800f847f2b17e3d2fac6d116a2baea21295a9c83 Mon Sep 17 00:00:00 2001 From: Adrian Egli <adrian.egli@sbb.ch> Date: Mon, 19 Oct 2020 15:48:23 +0200 Subject: [PATCH] . --- run.py | 16 +- .../dueling_double_dqn.cpython-36.pyc | Bin 16301 -> 0 bytes src/agent/__pycache__/model.cpython-36.pyc | Bin 2216 -> 0 bytes src/agent/dueling_double_dqn.py | 512 ------------ src/agent/model.py | 61 -- src/dead_lock_avoidance_agent.py | 116 --- src/extra.py | 404 ---------- src/images/adrian_egli_decisions.png | Bin 50335 -> 0 bytes src/images/adrian_egli_info.png | Bin 48981 -> 0 bytes src/images/adrian_egli_ppo_training_done.png | Bin 56845 -> 0 bytes src/images/adrian_egli_start.png | Bin 28024 -> 0 bytes src/images/adrian_egli_target.png | Bin 31268 -> 0 bytes src/observations.py | 736 ------------------ src/ppo/agent.py | 106 --- src/ppo/model.py | 20 - src/ppo/replay_memory.py | 53 -- src/shortest_Distance_walker.py | 69 -- utils/dead_lock_avoidance_agent.py | 51 +- utils/shortest_Distance_walker.py | 6 +- 19 files changed, 44 insertions(+), 2106 deletions(-) delete mode 100644 src/agent/__pycache__/dueling_double_dqn.cpython-36.pyc delete mode 100644 src/agent/__pycache__/model.cpython-36.pyc delete mode 100644 src/agent/dueling_double_dqn.py delete mode 100644 src/agent/model.py delete mode 100644 src/dead_lock_avoidance_agent.py delete mode 100644 src/extra.py delete mode 100644 src/images/adrian_egli_decisions.png delete mode 100644 src/images/adrian_egli_info.png delete mode 100644 src/images/adrian_egli_ppo_training_done.png delete mode 100644 src/images/adrian_egli_start.png delete mode 100644 src/images/adrian_egli_target.png delete mode 100644 src/observations.py delete mode 100644 src/ppo/agent.py delete mode 100644 src/ppo/model.py delete mode 100644 src/ppo/replay_memory.py delete mode 100644 src/shortest_Distance_walker.py diff --git a/run.py b/run.py index d920c06..674ae41 100644 --- a/run.py +++ b/run.py @@ -3,13 +3,14 @@ import time import numpy as np from flatland.core.env_observation_builder import DummyObservationBuilder from flatland.envs.agent_utils import RailAgentStatus +from flatland.envs.rail_env import RailEnvActions from flatland.evaluators.client import FlatlandRemoteClient +from utils.dead_lock_avoidance_agent import DeadLockAvoidanceAgent + ##################################################################### # Instantiate a Remote Client ##################################################################### -from src.dead_lock_avoidance_agent import DeadLockAvoidanceAgent -from src.extra import Extra remote_client = FlatlandRemoteClient() @@ -24,11 +25,16 @@ remote_client = FlatlandRemoteClient() # def my_controller_RL(extra: Extra, observation, info): # return extra.rl_agent_act(observation, info) -def my_controller(policy): +def my_controller(policy, info): policy.start_step() actions = {} + # print("-------- act ------------") for handle in range(policy.env.get_num_agents()): - a = policy.act(handle, None, 0) + if info['action_required'][handle] and handle < policy.env._elapsed_steps: + a = policy.act(handle, None, 0) + else: + a = RailEnvActions.DO_NOTHING + agent = policy.env.agents[handle] actions.update({handle: a}) policy.end_step() return actions @@ -136,7 +142,7 @@ while True: # Compute the action for this step by using the previously # defined controller time_start = time.time() - action = my_controller(policy) + action = my_controller(policy, info) time_taken = time.time() - time_start time_taken_by_controller.append(time_taken) diff --git a/src/agent/__pycache__/dueling_double_dqn.cpython-36.pyc b/src/agent/__pycache__/dueling_double_dqn.cpython-36.pyc deleted file mode 100644 index 41afc8cad7a82889d0118d5fd836cf1f15af34de..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 16301 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 diff --git a/src/agent/__pycache__/model.cpython-36.pyc b/src/agent/__pycache__/model.cpython-36.pyc deleted file mode 100644 index a13378b2cbe5716b1bf04b774b5fce12ccef39e7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2216 zcmb7F-HPNy6s}4o>GbdXt?u}@uDc=xq@}w-SdnFMKoPV-WN(_rBBrW$(wnIsE9sea z$b!%Vd*y?8A@~$NMBRGTkDxbtP9^E-URJ?s^7T16CzYyG=le41c3Xe${rcTBAmk6S zHC(VC!IeD(5Jb?F%;|($%bC+To48*P;Rtq31e0{`t=PneJFf8Hj#u4j2>LAv{WZ)% z#xY_&aDE)w2LO`b%o9g6UXU3TOt{z02@{_1ugS!HL0mHNV4lDP-;8B`xzJD7kKnQO zPXMtGfCK+ob!9U!a+1@6tem;CB9!E8?iRFgS585=XFa#@tmj+L6V!T*oy=e-vsq>q zj?HWd0;_VyYYJ}*+s4b5=Td72JQHx9s3hmyI7%7+t3=62o5n02@QWx#V^|xb+8FRi zT$G{87~!4JH*O}=nQ3KtluMo^SJJejI8PR;bRaB+2~HD%vBAa~hSW4UkJBj2IRAzG z_4wqI>Elf5Y`Po{K7R0EH2qSk#YKcuO=oG8r;!p|%S6o<I+kZr<vfLjt3*BF@)_(d z!F$u_3F6s8$h3d{qi(>CvHV#NfY6@PqwuqMbx<E!zphA(1;T+nfG2hWS0(^*=&^## zor135_uQ#`2KBZ+#9XvD5wFT*Ri<Aso5>)vf%bEFwqUnO!REn=9OHS>ao9BUbK`26 zE_DlDtJ?@2gf0T^Lhk_>_e@4AboD+u^qFCJb_~u$-^LsZ#~5osy)Gjy4#26Zuuu1C zi&>;s`<p6MiJ_x$>l$kS2Mq0^qB9BY(&8NIx=hjTaQ?$GO3R3?vVIre)~(JomTAiQ z&00dLU&l#tNwy6=Ffx2aKznU_CkAITFoNU%k+50sWoTD#_Yq?Y;HX;xH<$em@Cp{X zf}(N=_h+}_q7U4IljoLu5C!H#Mj1y2`ognu%Rh)Vw&E=tZ`gPn?2ZU3UU$(eyu!C^ z?OD$k%zAq}nfp7L2W4i(@<Yq==6H=wu(pSWWepwEek!$+X~{u9%XK2;`YvW+f~`wJ z-hk92jqK3xBVd6vs4X%6$wFNWh4EteADH%MQ68U;7y4`{ChU7PC<8;ZhowD2d!(B< z#eX(#*sv|Du^sgx!V$i)m#Fh)&g0Wa!MZbj3nQ-q)Qz)gXuHfi5Xs&I07}zav{PT( z^gi4)!>jp?l{mq9egk-k-*m(8lJB(-I&E28`@r(K4;Oq*R`7LLRccT@9c-yXb4MLo zJI{ggm)cN0*WS{K&P!U+t+c`$Yt(j)yIB7XLl3|Tdm2uaXe^EX5TTFo5dt2IaW4{i z38D>R{IA-g--66aTJ+oa=sO5l^BY2!Oh(S*<Qbk90a<|`yJO|WBE1pWVgE*7klnTk zLto!T`#pqv2(}4vT74g3BW86USOLLy#WmFea$p-6zrs0u98UX6m3@3vyZzZx*{>3a nWb4MZ#WMcaR@JNsl}y;YbxTKsPfPK8h-J@^H7(j<hsXZ_eB|P5 diff --git a/src/agent/dueling_double_dqn.py b/src/agent/dueling_double_dqn.py deleted file mode 100644 index f08e176..0000000 --- a/src/agent/dueling_double_dqn.py +++ /dev/null @@ -1,512 +0,0 @@ -import torch -import torch.optim as optim - -BUFFER_SIZE = int(1e5) # replay buffer size -BATCH_SIZE = 512 # minibatch size -GAMMA = 0.99 # discount factor 0.99 -TAU = 0.5e-3 # for soft update of target parameters -LR = 0.5e-4 # learning rate 0.5e-4 works - -# how often to update the network -UPDATE_EVERY = 20 -UPDATE_EVERY_FINAL = 10 -UPDATE_EVERY_AGENT_CANT_CHOOSE = 200 - - -double_dqn = True # If using double dqn algorithm -input_channels = 5 # Number of Input channels - -device = torch.device("cuda:0" if torch.cuda.is_available() else "cpu") -device = torch.device("cpu") -print(device) - -USE_OPTIMIZER = optim.Adam -# USE_OPTIMIZER = optim.RMSprop -print(USE_OPTIMIZER) - - -class Agent: - """Interacts with and learns from the environment.""" - - def __init__(self, state_size, action_size, net_type, seed, double_dqn=True, input_channels=5): - """Initialize an Agent object. - - Params - ====== - state_size (int): dimension of each state - action_size (int): dimension of each action - seed (int): random seed - """ - self.state_size = state_size - self.action_size = action_size - self.seed = random.seed(seed) - self.version = net_type - self.double_dqn = double_dqn - # Q-Network - if self.version == "Conv": - self.qnetwork_local = QNetwork2(state_size, action_size, seed, input_channels).to(device) - self.qnetwork_target = copy.deepcopy(self.qnetwork_local) - else: - self.qnetwork_local = QNetwork(state_size, action_size, seed).to(device) - self.qnetwork_target = copy.deepcopy(self.qnetwork_local) - - self.optimizer = USE_OPTIMIZER(self.qnetwork_local.parameters(), lr=LR) - - # Replay memory - self.memory = ReplayBuffer(action_size, BUFFER_SIZE, BATCH_SIZE, seed) - self.memory_final = ReplayBuffer(action_size, BUFFER_SIZE, BATCH_SIZE, seed) - self.memory_agent_can_not_choose = ReplayBuffer(action_size, BUFFER_SIZE, BATCH_SIZE, seed) - - self.final_step = {} - - # Initialize time step (for updating every UPDATE_EVERY steps) - self.t_step = 0 - self.t_step_final = 0 - self.t_step_agent_can_not_choose = 0 - - def save(self, filename): - torch.save(self.qnetwork_local.state_dict(), filename + ".local") - torch.save(self.qnetwork_target.state_dict(), filename + ".target") - - def load(self, filename): - if os.path.exists(filename + ".local"): - self.qnetwork_local.load_state_dict(torch.load(filename + ".local")) - print(filename + ".local -> ok") - if os.path.exists(filename + ".target"): - self.qnetwork_target.load_state_dict(torch.load(filename + ".target")) - print(filename + ".target -> ok") - self.optimizer = USE_OPTIMIZER(self.qnetwork_local.parameters(), lr=LR) - - def _update_model(self, switch=0): - # Learn every UPDATE_EVERY time steps. - # If enough samples are available in memory, get random subset and learn - if switch == 0: - self.t_step = (self.t_step + 1) % UPDATE_EVERY - if self.t_step == 0: - if len(self.memory) > BATCH_SIZE: - experiences = self.memory.sample() - self.learn(experiences, GAMMA) - elif switch == 1: - self.t_step_final = (self.t_step_final + 1) % UPDATE_EVERY_FINAL - if self.t_step_final == 0: - if len(self.memory_final) > BATCH_SIZE: - experiences = self.memory_final.sample() - self.learn(experiences, GAMMA) - else: - # If enough samples are available in memory_agent_can_not_choose, get random subset and learn - self.t_step_agent_can_not_choose = (self.t_step_agent_can_not_choose + 1) % UPDATE_EVERY_AGENT_CANT_CHOOSE - if self.t_step_agent_can_not_choose == 0: - if len(self.memory_agent_can_not_choose) > BATCH_SIZE: - experiences = self.memory_agent_can_not_choose.sample() - self.learn(experiences, GAMMA) - - def step(self, state, action, reward, next_state, done): - # Save experience in replay memory - self.memory.add(state, action, reward, next_state, done) - self._update_model(0) - - def step_agent_can_not_choose(self, state, action, reward, next_state, done): - # Save experience in replay memory_agent_can_not_choose - self.memory_agent_can_not_choose.add(state, action, reward, next_state, done) - self._update_model(2) - - def add_final_step(self, agent_handle, state, action, reward, next_state, done): - if self.final_step.get(agent_handle) is None: - self.final_step.update({agent_handle: [state, action, reward, next_state, done]}) - - def make_final_step(self, additional_reward=0): - for _, item in self.final_step.items(): - state = item[0] - action = item[1] - reward = item[2] + additional_reward - next_state = item[3] - done = item[4] - self.memory_final.add(state, action, reward, next_state, done) - self._update_model(1) - self._reset_final_step() - - def _reset_final_step(self): - self.final_step = {} - - def act(self, state, eps=0.): - """Returns actions for given state as per current policy. - - Params - ====== - state (array_like): current state - eps (float): epsilon, for epsilon-greedy action selection - """ - state = torch.from_numpy(state).float().unsqueeze(0).to(device) - self.qnetwork_local.eval() - with torch.no_grad(): - action_values = self.qnetwork_local(state) - self.qnetwork_local.train() - - # Epsilon-greedy action selection - if random.random() > eps: - return np.argmax(action_values.cpu().data.numpy()) - else: - return random.choice(np.arange(self.action_size)) - - def learn(self, experiences, gamma): - - """Update value parameters using given batch of experience tuples. - - Params - ====== - experiences (Tuple[torch.Tensor]): tuple of (s, a, r, s', done) tuples - gamma (float): discount factor - """ - states, actions, rewards, next_states, dones = experiences - - # Get expected Q values from local model - Q_expected = self.qnetwork_local(states).gather(1, actions) - - if self.double_dqn: - # Double DQN - q_best_action = self.qnetwork_local(next_states).max(1)[1] - Q_targets_next = self.qnetwork_target(next_states).gather(1, q_best_action.unsqueeze(-1)) - else: - # DQN - Q_targets_next = self.qnetwork_target(next_states).detach().max(1)[0].unsqueeze(-1) - - # Compute Q targets for current states - - Q_targets = rewards + (gamma * Q_targets_next * (1 - dones)) - - # Compute loss - loss = F.mse_loss(Q_expected, Q_targets) - # Minimize the loss - self.optimizer.zero_grad() - loss.backward() - self.optimizer.step() - - # ------------------- update target network ------------------- # - self.soft_update(self.qnetwork_local, self.qnetwork_target, TAU) - - def soft_update(self, local_model, target_model, tau): - """Soft update model parameters. - θ_target = τ*θ_local + (1 - τ)*θ_target - - Params - ====== - local_model (PyTorch model): weights will be copied from - target_model (PyTorch model): weights will be copied to - tau (float): interpolation parameter - """ - for target_param, local_param in zip(target_model.parameters(), local_model.parameters()): - target_param.data.copy_(tau * local_param.data + (1.0 - tau) * target_param.data) - - -class ReplayBuffer: - """Fixed-size buffer to store experience tuples.""" - - def __init__(self, action_size, buffer_size, batch_size, seed): - """Initialize a ReplayBuffer object. - - Params - ====== - action_size (int): dimension of each action - buffer_size (int): maximum size of buffer - batch_size (int): size of each training batch - seed (int): random seed - """ - self.action_size = action_size - self.memory = deque(maxlen=buffer_size) - self.batch_size = batch_size - self.experience = namedtuple("Experience", field_names=["state", "action", "reward", "next_state", "done"]) - self.seed = random.seed(seed) - - def add(self, state, action, reward, next_state, done): - """Add a new experience to memory.""" - e = self.experience(np.expand_dims(state, 0), action, reward, np.expand_dims(next_state, 0), done) - self.memory.append(e) - - def sample(self): - """Randomly sample a batch of experiences from memory.""" - experiences = random.sample(self.memory, k=self.batch_size) - - states = torch.from_numpy(self.__v_stack_impr([e.state for e in experiences if e is not None])) \ - .float().to(device) - actions = torch.from_numpy(self.__v_stack_impr([e.action for e in experiences if e is not None])) \ - .long().to(device) - rewards = torch.from_numpy(self.__v_stack_impr([e.reward for e in experiences if e is not None])) \ - .float().to(device) - next_states = torch.from_numpy(self.__v_stack_impr([e.next_state for e in experiences if e is not None])) \ - .float().to(device) - dones = torch.from_numpy(self.__v_stack_impr([e.done for e in experiences if e is not None]).astype(np.uint8)) \ - .float().to(device) - - return (states, actions, rewards, next_states, dones) - - def __len__(self): - """Return the current size of internal memory.""" - return len(self.memory) - - def __v_stack_impr(self, states): - sub_dim = len(states[0][0]) if isinstance(states[0], Iterable) else 1 - np_states = np.reshape(np.array(states), (len(states), sub_dim)) - return np_states - - -import copy -import os -import random -from collections import namedtuple, deque, Iterable - -import numpy as np -import torch -import torch.nn.functional as F -import torch.optim as optim - -from src.agent.model import QNetwork2, QNetwork - -BUFFER_SIZE = int(1e5) # replay buffer size -BATCH_SIZE = 512 # minibatch size -GAMMA = 0.95 # discount factor 0.99 -TAU = 0.5e-4 # for soft update of target parameters -LR = 0.5e-3 # learning rate 0.5e-4 works - -# how often to update the network -UPDATE_EVERY = 40 -UPDATE_EVERY_FINAL = 1000 -UPDATE_EVERY_AGENT_CANT_CHOOSE = 200 - -double_dqn = True # If using double dqn algorithm -input_channels = 5 # Number of Input channels - -device = torch.device("cuda:0" if torch.cuda.is_available() else "cpu") -device = torch.device("cpu") -print(device) - -USE_OPTIMIZER = optim.Adam -# USE_OPTIMIZER = optim.RMSprop -print(USE_OPTIMIZER) - - -class Agent: - """Interacts with and learns from the environment.""" - - def __init__(self, state_size, action_size, net_type, seed, double_dqn=True, input_channels=5): - """Initialize an Agent object. - - Params - ====== - state_size (int): dimension of each state - action_size (int): dimension of each action - seed (int): random seed - """ - self.state_size = state_size - self.action_size = action_size - self.seed = random.seed(seed) - self.version = net_type - self.double_dqn = double_dqn - # Q-Network - if self.version == "Conv": - self.qnetwork_local = QNetwork2(state_size, action_size, seed, input_channels).to(device) - self.qnetwork_target = copy.deepcopy(self.qnetwork_local) - else: - self.qnetwork_local = QNetwork(state_size, action_size, seed).to(device) - self.qnetwork_target = copy.deepcopy(self.qnetwork_local) - - self.optimizer = USE_OPTIMIZER(self.qnetwork_local.parameters(), lr=LR) - - # Replay memory - self.memory = ReplayBuffer(action_size, BUFFER_SIZE, BATCH_SIZE, seed) - self.memory_final = ReplayBuffer(action_size, BUFFER_SIZE, BATCH_SIZE, seed) - self.memory_agent_can_not_choose = ReplayBuffer(action_size, BUFFER_SIZE, BATCH_SIZE, seed) - - self.final_step = {} - - # Initialize time step (for updating every UPDATE_EVERY steps) - self.t_step = 0 - self.t_step_final = 0 - self.t_step_agent_can_not_choose = 0 - - def save(self, filename): - torch.save(self.qnetwork_local.state_dict(), filename + ".local") - torch.save(self.qnetwork_target.state_dict(), filename + ".target") - - def load(self, filename): - print("try to load: " + filename) - if os.path.exists(filename + ".local"): - self.qnetwork_local.load_state_dict(torch.load(filename + ".local")) - print(filename + ".local -> ok") - if os.path.exists(filename + ".target"): - self.qnetwork_target.load_state_dict(torch.load(filename + ".target")) - print(filename + ".target -> ok") - self.optimizer = USE_OPTIMIZER(self.qnetwork_local.parameters(), lr=LR) - - def _update_model(self, switch=0): - # Learn every UPDATE_EVERY time steps. - # If enough samples are available in memory, get random subset and learn - if switch == 0: - self.t_step = (self.t_step + 1) % UPDATE_EVERY - if self.t_step == 0: - if len(self.memory) > BATCH_SIZE: - experiences = self.memory.sample() - self.learn(experiences, GAMMA) - elif switch == 1: - self.t_step_final = (self.t_step_final + 1) % UPDATE_EVERY_FINAL - if self.t_step_final == 0: - if len(self.memory_final) > BATCH_SIZE: - experiences = self.memory_final.sample() - self.learn(experiences, GAMMA) - else: - # If enough samples are available in memory_agent_can_not_choose, get random subset and learn - self.t_step_agent_can_not_choose = (self.t_step_agent_can_not_choose + 1) % UPDATE_EVERY_AGENT_CANT_CHOOSE - if self.t_step_agent_can_not_choose == 0: - if len(self.memory_agent_can_not_choose) > BATCH_SIZE: - experiences = self.memory_agent_can_not_choose.sample() - self.learn(experiences, GAMMA) - - def step(self, state, action, reward, next_state, done): - # Save experience in replay memory - self.memory.add(state, action, reward, next_state, done) - self._update_model(0) - - def step_agent_can_not_choose(self, state, action, reward, next_state, done): - # Save experience in replay memory_agent_can_not_choose - self.memory_agent_can_not_choose.add(state, action, reward, next_state, done) - self._update_model(2) - - def add_final_step(self, agent_handle, state, action, reward, next_state, done): - if self.final_step.get(agent_handle) is None: - self.final_step.update({agent_handle: [state, action, reward, next_state, done]}) - return True - else: - return False - - def make_final_step(self, additional_reward=0): - for _, item in self.final_step.items(): - state = item[0] - action = item[1] - reward = item[2] + additional_reward - next_state = item[3] - done = item[4] - self.memory_final.add(state, action, reward, next_state, done) - self._update_model(1) - self._reset_final_step() - - def _reset_final_step(self): - self.final_step = {} - - def act(self, state, eps=0.): - """Returns actions for given state as per current policy. - - Params - ====== - state (array_like): current state - eps (float): epsilon, for epsilon-greedy action selection - """ - state = torch.from_numpy(state).float().unsqueeze(0).to(device) - self.qnetwork_local.eval() - with torch.no_grad(): - action_values = self.qnetwork_local(state) - self.qnetwork_local.train() - - # Epsilon-greedy action selection - if random.random() > eps: - return np.argmax(action_values.cpu().data.numpy()), False - else: - return random.choice(np.arange(self.action_size)), True - - def learn(self, experiences, gamma): - - """Update value parameters using given batch of experience tuples. - - Params - ====== - experiences (Tuple[torch.Tensor]): tuple of (s, a, r, s', done) tuples - gamma (float): discount factor - """ - states, actions, rewards, next_states, dones = experiences - - # Get expected Q values from local model - Q_expected = self.qnetwork_local(states).gather(1, actions) - - if self.double_dqn: - # Double DQN - q_best_action = self.qnetwork_local(next_states).max(1)[1] - Q_targets_next = self.qnetwork_target(next_states).gather(1, q_best_action.unsqueeze(-1)) - else: - # DQN - Q_targets_next = self.qnetwork_target(next_states).detach().max(1)[0].unsqueeze(-1) - - # Compute Q targets for current states - - Q_targets = rewards + (gamma * Q_targets_next * (1 - dones)) - - # Compute loss - loss = F.mse_loss(Q_expected, Q_targets) - # Minimize the loss - self.optimizer.zero_grad() - loss.backward() - self.optimizer.step() - - # ------------------- update target network ------------------- # - self.soft_update(self.qnetwork_local, self.qnetwork_target, TAU) - - def soft_update(self, local_model, target_model, tau): - """Soft update model parameters. - θ_target = τ*θ_local + (1 - τ)*θ_target - - Params - ====== - local_model (PyTorch model): weights will be copied from - target_model (PyTorch model): weights will be copied to - tau (float): interpolation parameter - """ - for target_param, local_param in zip(target_model.parameters(), local_model.parameters()): - target_param.data.copy_(tau * local_param.data + (1.0 - tau) * target_param.data) - - -class ReplayBuffer: - """Fixed-size buffer to store experience tuples.""" - - def __init__(self, action_size, buffer_size, batch_size, seed): - """Initialize a ReplayBuffer object. - - Params - ====== - action_size (int): dimension of each action - buffer_size (int): maximum size of buffer - batch_size (int): size of each training batch - seed (int): random seed - """ - self.action_size = action_size - self.memory = deque(maxlen=buffer_size) - self.batch_size = batch_size - self.experience = namedtuple("Experience", field_names=["state", "action", "reward", "next_state", "done"]) - self.seed = random.seed(seed) - - def add(self, state, action, reward, next_state, done): - """Add a new experience to memory.""" - e = self.experience(np.expand_dims(state, 0), action, reward, np.expand_dims(next_state, 0), done) - self.memory.append(e) - - def sample(self): - """Randomly sample a batch of experiences from memory.""" - experiences = random.sample(self.memory, k=self.batch_size) - - states = torch.from_numpy(self.__v_stack_impr([e.state for e in experiences if e is not None])) \ - .float().to(device) - actions = torch.from_numpy(self.__v_stack_impr([e.action for e in experiences if e is not None])) \ - .long().to(device) - rewards = torch.from_numpy(self.__v_stack_impr([e.reward for e in experiences if e is not None])) \ - .float().to(device) - next_states = torch.from_numpy(self.__v_stack_impr([e.next_state for e in experiences if e is not None])) \ - .float().to(device) - dones = torch.from_numpy(self.__v_stack_impr([e.done for e in experiences if e is not None]).astype(np.uint8)) \ - .float().to(device) - - return (states, actions, rewards, next_states, dones) - - def __len__(self): - """Return the current size of internal memory.""" - return len(self.memory) - - def __v_stack_impr(self, states): - sub_dim = len(states[0][0]) if isinstance(states[0], Iterable) else 1 - np_states = np.reshape(np.array(states), (len(states), sub_dim)) - return np_states diff --git a/src/agent/model.py b/src/agent/model.py deleted file mode 100644 index 70952e0..0000000 --- a/src/agent/model.py +++ /dev/null @@ -1,61 +0,0 @@ -import torch.nn as nn -import torch.nn.functional as F - - -class QNetwork(nn.Module): - def __init__(self, state_size, action_size, seed, hidsize1=64, hidsize2=128): - super(QNetwork, self).__init__() - - self.fc1_val = nn.Linear(state_size, hidsize1) - self.fc2_val = nn.Linear(hidsize1, hidsize2) - self.fc3_val = nn.Linear(hidsize2, 1) - - self.fc1_adv = nn.Linear(state_size, hidsize1) - self.fc2_adv = nn.Linear(hidsize1, hidsize2) - self.fc3_adv = nn.Linear(hidsize2, action_size) - - def forward(self, x): - val = F.relu(self.fc1_val(x)) - val = F.relu(self.fc2_val(val)) - val = self.fc3_val(val) - - # advantage calculation - adv = F.relu(self.fc1_adv(x)) - adv = F.relu(self.fc2_adv(adv)) - adv = self.fc3_adv(adv) - return val + adv - adv.mean() - - -class QNetwork2(nn.Module): - def __init__(self, state_size, action_size, seed, input_channels, hidsize1=128, hidsize2=64): - super(QNetwork2, self).__init__() - self.conv1 = nn.Conv2d(input_channels, 16, kernel_size=3, stride=1) - self.bn1 = nn.BatchNorm2d(16) - self.conv2 = nn.Conv2d(16, 32, kernel_size=5, stride=3) - self.bn2 = nn.BatchNorm2d(32) - self.conv3 = nn.Conv2d(32, 64, kernel_size=5, stride=3) - self.bn3 = nn.BatchNorm2d(64) - - self.fc1_val = nn.Linear(6400, hidsize1) - self.fc2_val = nn.Linear(hidsize1, hidsize2) - self.fc3_val = nn.Linear(hidsize2, 1) - - self.fc1_adv = nn.Linear(6400, hidsize1) - self.fc2_adv = nn.Linear(hidsize1, hidsize2) - self.fc3_adv = nn.Linear(hidsize2, action_size) - - def forward(self, x): - x = F.relu(self.conv1(x)) - x = F.relu(self.conv2(x)) - x = F.relu(self.conv3(x)) - - # value function approximation - val = F.relu(self.fc1_val(x.view(x.size(0), -1))) - val = F.relu(self.fc2_val(val)) - val = self.fc3_val(val) - - # advantage calculation - adv = F.relu(self.fc1_adv(x.view(x.size(0), -1))) - adv = F.relu(self.fc2_adv(adv)) - adv = self.fc3_adv(adv) - return val + adv - adv.mean() diff --git a/src/dead_lock_avoidance_agent.py b/src/dead_lock_avoidance_agent.py deleted file mode 100644 index 43f1b4a..0000000 --- a/src/dead_lock_avoidance_agent.py +++ /dev/null @@ -1,116 +0,0 @@ -import matplotlib.pyplot as plt -import numpy as np -from flatland.envs.agent_utils import RailAgentStatus -from flatland.envs.rail_env import RailEnv, RailEnvActions - -from reinforcement_learning.policy import Policy -from utils.shortest_Distance_walker import ShortestDistanceWalker - - -class MyWalker(ShortestDistanceWalker): - def __init__(self, env: RailEnv, agent_positions): - super().__init__(env) - self.shortest_distance_agent_map = np.zeros((self.env.get_num_agents(), - self.env.height, - self.env.width), - dtype=int) - 1 - - self.agent_positions = agent_positions - - self.agent_map = {} - - def getData(self): - return self.shortest_distance_agent_map - - def callback(self, handle, agent, position, direction, action): - opp_a = self.agent_positions[position] - if opp_a != -1 and opp_a != handle: - d = self.agent_map.get(handle, []) - d.append(opp_a) - if self.env.agents[opp_a].direction != direction: - self.agent_map.update({handle: d}) - self.shortest_distance_agent_map[(handle, position[0], position[1])] = direction - - -class DeadLockAvoidanceAgent(Policy): - def __init__(self, env: RailEnv, state_size, action_size): - self.env = env - self.action_size = action_size - self.state_size = state_size - self.memory = [] - self.loss = 0 - self.agent_can_move = {} - - def step(self, handle, state, action, reward, next_state, done): - pass - - def act(self, handle, state, eps=0.): - agent = self.env.agents[handle] - #if handle > self.env._elapsed_steps: - # return RailEnvActions.STOP_MOVING - if agent.status == RailAgentStatus.ACTIVE: - self.active_agent_cnt += 1 - #if agent.status > 20: - # return RailEnvActions.STOP_MOVING - check = self.agent_can_move.get(handle, None) - if check is None: - # print(handle, RailEnvActions.STOP_MOVING) - return RailEnvActions.STOP_MOVING - - return check[3] - - def reset(self): - pass - - def start_step(self): - self.active_agent_cnt = 0 - self.shortest_distance_mapper() - - def end_step(self): - # print("#A:", self.active_agent_cnt, "/", self.env.get_num_agents(),self.env._elapsed_steps) - pass - - def get_actions(self): - pass - - def shortest_distance_mapper(self): - - # build map with agent positions (only active agents) - agent_positions = np.zeros((self.env.height, self.env.width), dtype=int) - 1 - for handle in range(self.env.get_num_agents()): - agent = self.env.agents[handle] - if agent.status <= RailAgentStatus.ACTIVE: - if agent.position is not None: - agent_positions[agent.position] = handle - - my_walker = MyWalker(self.env, agent_positions) - for handle in range(self.env.get_num_agents()): - agent = self.env.agents[handle] - if agent.status <= RailAgentStatus.ACTIVE: - my_walker.walk_to_target(handle) - self.shortest_distance_agent_map = my_walker.getData() - - self.agent_can_move = {} - agent_positions_map = np.clip(agent_positions + 1, 0, 1) - for handle in range(self.env.get_num_agents()): - opp_agents = my_walker.agent_map.get(handle, []) - me = np.clip(self.shortest_distance_agent_map[handle] + 1, 0, 1) - next_step_ok = True - next_position, next_direction, action = my_walker.walk_one_step(handle) - for opp_a in opp_agents: - opp = np.clip(self.shortest_distance_agent_map[opp_a] + 1, 0, 1) - delta = np.clip(me - opp - agent_positions_map, 0, 1) - if (np.sum(delta) > 1): - next_step_ok = False - if next_step_ok: - self.agent_can_move.update({handle: [next_position[0], next_position[1], next_direction, action]}) - - if False: - a = np.floor(np.sqrt(self.env.get_num_agents())) - b = np.ceil(self.env.get_num_agents() / a) - for handle in range(self.env.get_num_agents()): - plt.subplot(a, b, handle + 1) - plt.imshow(self.shortest_distance_agent_map[handle]) - # plt.colorbar() - plt.show(block=False) - plt.pause(0.001) diff --git a/src/extra.py b/src/extra.py deleted file mode 100644 index b70830f..0000000 --- a/src/extra.py +++ /dev/null @@ -1,404 +0,0 @@ -# -# Author Adrian Egli -# -# This observation solves the FLATland challenge ROUND 1 - with agent's done 19.3% -# -# Training: -# For the training of the PPO RL agent I showed 10k episodes - The episodes used for the training -# consists of 1..20 agents on a 50x50 grid. Thus the RL agent has to learn to handle 1 upto 20 agents. -# -# - https://github.com/mitchellgoffpc/flatland-training -# ./adrian_egli_ppo_training_done.png -# -# The key idea behind this observation is that agent's can not freely choose where they want. -# -# ./images/adrian_egli_decisions.png -# ./images/adrian_egli_info.png -# ./images/adrian_egli_start.png -# ./images/adrian_egli_target.png -# -# Private submission -# http://gitlab.aicrowd.com/adrian_egli/neurips2020-flatland-starter-kit/issues/8 - -import numpy as np -from flatland.core.env_observation_builder import ObservationBuilder -from flatland.core.grid.grid4_utils import get_new_position -from flatland.envs.agent_utils import RailAgentStatus -from flatland.envs.rail_env import RailEnvActions - -from src.ppo.agent import Agent - - -# ------------------------------------- USE FAST_METHOD from FLATland master ------------------------------------------ -# Adrian Egli performance fix (the fast methods brings more than 50%) - -def fast_isclose(a, b, rtol): - return (a < (b + rtol)) or (a < (b - rtol)) - - -def fast_clip(position: (int, int), min_value: (int, int), max_value: (int, int)) -> bool: - return ( - max(min_value[0], min(position[0], max_value[0])), - max(min_value[1], min(position[1], max_value[1])) - ) - - -def fast_argmax(possible_transitions: (int, int, int, int)) -> bool: - if possible_transitions[0] == 1: - return 0 - if possible_transitions[1] == 1: - return 1 - if possible_transitions[2] == 1: - return 2 - return 3 - - -def fast_position_equal(pos_1: (int, int), pos_2: (int, int)) -> bool: - return pos_1[0] == pos_2[0] and pos_1[1] == pos_2[1] - - -def fast_count_nonzero(possible_transitions: (int, int, int, int)): - return possible_transitions[0] + possible_transitions[1] + possible_transitions[2] + possible_transitions[3] - - -# ------------------------------- END - USE FAST_METHOD from FLATland master ------------------------------------------ - -class Extra(ObservationBuilder): - - def __init__(self, max_depth): - self.max_depth = max_depth - self.observation_dim = 26 - self.agent = None - self.random_agent_starter = [] - - def build_data(self): - if self.env is not None: - self.env.dev_obs_dict = {} - self.switches = {} - self.switches_neighbours = {} - self.debug_render_list = [] - self.debug_render_path_list = [] - if self.env is not None: - self.find_all_cell_where_agent_can_choose() - - def find_all_cell_where_agent_can_choose(self): - - switches = {} - for h in range(self.env.height): - for w in range(self.env.width): - pos = (h, w) - for dir in range(4): - possible_transitions = self.env.rail.get_transitions(*pos, dir) - num_transitions = fast_count_nonzero(possible_transitions) - if num_transitions > 1: - if pos not in switches.keys(): - switches.update({pos: [dir]}) - else: - switches[pos].append(dir) - - switches_neighbours = {} - for h in range(self.env.height): - for w in range(self.env.width): - # look one step forward - for dir in range(4): - pos = (h, w) - possible_transitions = self.env.rail.get_transitions(*pos, dir) - for d in range(4): - if possible_transitions[d] == 1: - new_cell = get_new_position(pos, d) - if new_cell in switches.keys() and pos not in switches.keys(): - if pos not in switches_neighbours.keys(): - switches_neighbours.update({pos: [dir]}) - else: - switches_neighbours[pos].append(dir) - - self.switches = switches - self.switches_neighbours = switches_neighbours - - def check_agent_descision(self, position, direction): - switches = self.switches - switches_neighbours = self.switches_neighbours - agents_on_switch = False - agents_near_to_switch = False - agents_near_to_switch_all = False - if position in switches.keys(): - agents_on_switch = direction in switches[position] - - if position in switches_neighbours.keys(): - new_cell = get_new_position(position, direction) - if new_cell in switches.keys(): - if not direction in switches[new_cell]: - agents_near_to_switch = direction in switches_neighbours[position] - else: - agents_near_to_switch = direction in switches_neighbours[position] - - agents_near_to_switch_all = direction in switches_neighbours[position] - - return agents_on_switch, agents_near_to_switch, agents_near_to_switch_all - - def required_agent_descision(self): - agents_can_choose = {} - agents_on_switch = {} - agents_near_to_switch = {} - agents_near_to_switch_all = {} - for a in range(self.env.get_num_agents()): - ret_agents_on_switch, ret_agents_near_to_switch, ret_agents_near_to_switch_all = \ - self.check_agent_descision( - self.env.agents[a].position, - self.env.agents[a].direction) - agents_on_switch.update({a: ret_agents_on_switch}) - ready_to_depart = self.env.agents[a].status == RailAgentStatus.READY_TO_DEPART - agents_near_to_switch.update({a: (ret_agents_near_to_switch and not ready_to_depart)}) - - agents_can_choose.update({a: agents_on_switch[a] or agents_near_to_switch[a]}) - - agents_near_to_switch_all.update({a: (ret_agents_near_to_switch_all and not ready_to_depart)}) - - return agents_can_choose, agents_on_switch, agents_near_to_switch, agents_near_to_switch_all - - def debug_render(self, env_renderer): - agents_can_choose, agents_on_switch, agents_near_to_switch, agents_near_to_switch_all = \ - self.required_agent_descision() - self.env.dev_obs_dict = {} - for a in range(max(3, self.env.get_num_agents())): - self.env.dev_obs_dict.update({a: []}) - - selected_agent = None - if agents_can_choose[0]: - if self.env.agents[0].position is not None: - self.debug_render_list.append(self.env.agents[0].position) - else: - self.debug_render_list.append(self.env.agents[0].initial_position) - - if self.env.agents[0].position is not None: - self.debug_render_path_list.append(self.env.agents[0].position) - else: - self.debug_render_path_list.append(self.env.agents[0].initial_position) - - env_renderer.gl.agent_colors[0] = env_renderer.gl.rgb_s2i("FF0000") - env_renderer.gl.agent_colors[1] = env_renderer.gl.rgb_s2i("666600") - env_renderer.gl.agent_colors[2] = env_renderer.gl.rgb_s2i("006666") - env_renderer.gl.agent_colors[3] = env_renderer.gl.rgb_s2i("550000") - - self.env.dev_obs_dict[0] = self.debug_render_list - self.env.dev_obs_dict[1] = self.switches.keys() - self.env.dev_obs_dict[2] = self.switches_neighbours.keys() - self.env.dev_obs_dict[3] = self.debug_render_path_list - - def normalize_observation(self, obsData): - return obsData - - def is_collision(self, obsData): - return False - - def reset(self): - self.build_data() - return - - def fast_argmax(self, array): - if array[0] == 1: - return 0 - if array[1] == 1: - return 1 - if array[2] == 1: - return 2 - return 3 - - def _explore(self, handle, new_position, new_direction, depth=0): - has_opp_agent = 0 - has_same_agent = 0 - visited = [] - - # stop exploring (max_depth reached) - if depth >= self.max_depth: - return has_opp_agent, has_same_agent, visited - - # max_explore_steps = 100 - cnt = 0 - while cnt < 100: - cnt += 1 - - visited.append(new_position) - opp_a = self.env.agent_positions[new_position] - if opp_a != -1 and opp_a != handle: - if self.env.agents[opp_a].direction != new_direction: - # opp agent found - has_opp_agent = 1 - return has_opp_agent, has_same_agent, visited - else: - has_same_agent = 1 - return has_opp_agent, has_same_agent, visited - - # convert one-hot encoding to 0,1,2,3 - possible_transitions = self.env.rail.get_transitions(*new_position, new_direction) - agents_on_switch, \ - agents_near_to_switch, \ - agents_near_to_switch_all = \ - self.check_agent_descision(new_position, new_direction) - if agents_near_to_switch: - return has_opp_agent, has_same_agent, visited - - if agents_on_switch: - for dir_loop in range(4): - if possible_transitions[dir_loop] == 1: - hoa, hsa, v = self._explore(handle, - get_new_position(new_position, dir_loop), - dir_loop, - depth + 1) - visited.append(v) - has_opp_agent = 0.5 * (has_opp_agent + hoa) - has_same_agent = 0.5 * (has_same_agent + hsa) - return has_opp_agent, has_same_agent, visited - else: - new_direction = fast_argmax(possible_transitions) - new_position = get_new_position(new_position, new_direction) - return has_opp_agent, has_same_agent, visited - - def get(self, handle): - # all values are [0,1] - # observation[0] : 1 path towards target (direction 0) / otherwise 0 -> path is longer or there is no path - # observation[1] : 1 path towards target (direction 1) / otherwise 0 -> path is longer or there is no path - # observation[2] : 1 path towards target (direction 2) / otherwise 0 -> path is longer or there is no path - # observation[3] : 1 path towards target (direction 3) / otherwise 0 -> path is longer or there is no path - # observation[4] : int(agent.status == RailAgentStatus.READY_TO_DEPART) - # observation[5] : int(agent.status == RailAgentStatus.ACTIVE) - # observation[6] : int(agent.status == RailAgentStatus.DONE or agent.status == RailAgentStatus.DONE_REMOVED) - # observation[7] : current agent is located at a switch, where it can take a routing decision - # observation[8] : current agent is located at a cell, where it has to take a stop-or-go decision - # observation[9] : current agent is located one step before/after a switch - # observation[10] : 1 if there is a path (track/branch) otherwise 0 (direction 0) - # observation[11] : 1 if there is a path (track/branch) otherwise 0 (direction 1) - # observation[12] : 1 if there is a path (track/branch) otherwise 0 (direction 2) - # observation[13] : 1 if there is a path (track/branch) otherwise 0 (direction 3) - # observation[14] : If there is a path with step (direction 0) and there is a agent with opposite direction -> 1 - # observation[15] : If there is a path with step (direction 1) and there is a agent with opposite direction -> 1 - # observation[16] : If there is a path with step (direction 2) and there is a agent with opposite direction -> 1 - # observation[17] : If there is a path with step (direction 3) and there is a agent with opposite direction -> 1 - # observation[18] : If there is a path with step (direction 0) and there is a agent with same direction -> 1 - # observation[19] : If there is a path with step (direction 1) and there is a agent with same direction -> 1 - # observation[20] : If there is a path with step (direction 2) and there is a agent with same direction -> 1 - # observation[21] : If there is a path with step (direction 3) and there is a agent with same direction -> 1 - - observation = np.zeros(self.observation_dim) - visited = [] - agent = self.env.agents[handle] - - agent_done = False - if agent.status == RailAgentStatus.READY_TO_DEPART: - agent_virtual_position = agent.initial_position - observation[4] = 1 - elif agent.status == RailAgentStatus.ACTIVE: - agent_virtual_position = agent.position - observation[5] = 1 - else: - observation[6] = 1 - agent_virtual_position = (-1, -1) - agent_done = True - - if not agent_done: - visited.append(agent_virtual_position) - distance_map = self.env.distance_map.get() - current_cell_dist = distance_map[handle, - agent_virtual_position[0], agent_virtual_position[1], - agent.direction] - possible_transitions = self.env.rail.get_transitions(*agent_virtual_position, agent.direction) - orientation = agent.direction - if fast_count_nonzero(possible_transitions) == 1: - orientation = np.argmax(possible_transitions) - - for dir_loop, branch_direction in enumerate([(orientation + i) % 4 for i in range(-1, 3)]): - if possible_transitions[branch_direction]: - new_position = get_new_position(agent_virtual_position, branch_direction) - - new_cell_dist = distance_map[handle, - new_position[0], new_position[1], - branch_direction] - if not (np.math.isinf(new_cell_dist) and np.math.isinf(current_cell_dist)): - observation[dir_loop] = int(new_cell_dist < current_cell_dist) - - has_opp_agent, has_same_agent, v = self._explore(handle, new_position, branch_direction) - visited.append(v) - - observation[10 + dir_loop] = 1 - observation[14 + dir_loop] = has_opp_agent - observation[18 + dir_loop] = has_same_agent - - opp_a = self.env.agent_positions[new_position] - if opp_a != -1 and opp_a != handle: - observation[22 + dir_loop] = 1 - - agents_on_switch, \ - agents_near_to_switch, \ - agents_near_to_switch_all = \ - self.check_agent_descision(agent_virtual_position, agent.direction) - observation[7] = int(agents_on_switch) - observation[8] = int(agents_near_to_switch) - observation[9] = int(agents_near_to_switch_all) - - self.env.dev_obs_dict.update({handle: visited}) - - return observation - - def rl_agent_act_ADRIAN(self, observation, info, eps=0.0): - self.loadAgent() - action_dict = {} - for a in range(self.env.get_num_agents()): - if info['action_required'][a]: - action_dict[a] = self.agent.act(observation[a], eps=eps) - # action_dict[a] = np.random.randint(5) - else: - action_dict[a] = RailEnvActions.DO_NOTHING - - return action_dict - - def rl_agent_act(self, observation, info, eps=0.0): - if len(self.random_agent_starter) != self.env.get_num_agents(): - self.random_agent_starter = np.random.random(self.env.get_num_agents()) * 1000.0 - self.loadAgent() - - action_dict = {} - for a in range(self.env.get_num_agents()): - if self.random_agent_starter[a] > self.env._elapsed_steps: - action_dict[a] = RailEnvActions.STOP_MOVING - elif info['action_required'][a]: - action_dict[a] = self.agent.act(observation[a], eps=eps) - # action_dict[a] = np.random.randint(5) - else: - action_dict[a] = RailEnvActions.DO_NOTHING - - return action_dict - - def rl_agent_act_ADRIAN_01(self, observation, info, eps=0.0): - self.loadAgent() - action_dict = {} - active_cnt = 0 - for a in range(self.env.get_num_agents()): - if active_cnt < 10 or self.env.agents[a].status == RailAgentStatus.ACTIVE: - if observation[a][6] == 1: - active_cnt += int(self.env.agents[a].status == RailAgentStatus.ACTIVE) - action_dict[a] = RailEnvActions.STOP_MOVING - else: - active_cnt += int(self.env.agents[a].status < RailAgentStatus.DONE) - if (observation[a][7] + observation[a][8] + observation[a][9] > 0) or \ - (self.env.agents[a].status < RailAgentStatus.ACTIVE): - if info['action_required'][a]: - action_dict[a] = self.agent.act(observation[a], eps=eps) - # action_dict[a] = np.random.randint(5) - else: - action_dict[a] = RailEnvActions.MOVE_FORWARD - else: - action_dict[a] = RailEnvActions.MOVE_FORWARD - else: - action_dict[a] = RailEnvActions.STOP_MOVING - - return action_dict - - def loadAgent(self): - if self.agent is not None: - return - self.state_size = self.env.obs_builder.observation_dim - self.action_size = 5 - print("action_size: ", self.action_size) - print("state_size: ", self.state_size) - self.agent = Agent(self.state_size, self.action_size, 0) - self.agent.load('./checkpoints/', 0, 1.0) diff --git a/src/images/adrian_egli_decisions.png b/src/images/adrian_egli_decisions.png deleted file mode 100644 index f5bd276eb753a71f21aaa62fcec8a88cf460b409..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 50335 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 diff --git a/src/images/adrian_egli_info.png b/src/images/adrian_egli_info.png deleted file mode 100644 index afe228be94acecd4c6d596e53c7faf5fab47cb06..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 48981 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 YJ>(EJHM<h`JK#@RLSDQ?RNwpm0q!Ky&;S4c diff --git a/src/images/adrian_egli_ppo_training_done.png b/src/images/adrian_egli_ppo_training_done.png deleted file mode 100644 index d163a110b8d09713a99a1accdd0ea2191d151bbd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 56845 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 bJw!)wT3n#-Oc2EsI6an>m&ksg_wIiI#QygY diff --git a/src/images/adrian_egli_start.png b/src/images/adrian_egli_start.png deleted file mode 100644 index 977fead60d7dd11d1e0f1e32635b555df64b1a0a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 28024 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 ZB*L$4whjJvu%jAEQ%y@XTiN3J{{T29YxV#D diff --git a/src/images/adrian_egli_target.png b/src/images/adrian_egli_target.png deleted file mode 100644 index ab357c59d3cf5adbc74b559ffb3cd87400e0cb8d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 31268 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 diff --git a/src/observations.py b/src/observations.py deleted file mode 100644 index ce47e50..0000000 --- a/src/observations.py +++ /dev/null @@ -1,736 +0,0 @@ -""" -Collection of environment-specific ObservationBuilder. -""" -import collections -from typing import Optional, List, Dict, Tuple - -import numpy as np -from flatland.core.env import Environment -from flatland.core.env_observation_builder import ObservationBuilder -from flatland.core.env_prediction_builder import PredictionBuilder -from flatland.core.grid.grid4_utils import get_new_position -from flatland.core.grid.grid_utils import coordinate_to_position -from flatland.envs.agent_utils import RailAgentStatus, EnvAgent -from flatland.utils.ordered_set import OrderedSet - - -class MyTreeObsForRailEnv(ObservationBuilder): - """ - TreeObsForRailEnv object. - - This object returns observation vectors for agents in the RailEnv environment. - The information is local to each agent and exploits the graph structure of the rail - network to simplify the representation of the state of the environment for each agent. - - For details about the features in the tree observation see the get() function. - """ - Node = collections.namedtuple('Node', 'dist_min_to_target ' - 'target_encountered ' - 'num_agents_same_direction ' - 'num_agents_opposite_direction ' - 'childs') - - tree_explored_actions_char = ['L', 'F', 'R', 'B'] - - def __init__(self, max_depth: int, predictor: PredictionBuilder = None): - super().__init__() - self.max_depth = max_depth - self.observation_dim = 2 - self.location_has_agent = {} - self.predictor = predictor - self.location_has_target = None - - self.switches_list = {} - self.switches_neighbours_list = [] - self.check_agent_descision = None - - def reset(self): - self.location_has_target = {tuple(agent.target): 1 for agent in self.env.agents} - - def set_switch_and_pre_switch(self, switch_list, pre_switch_list, check_agent_descision): - self.switches_list = switch_list - self.switches_neighbours_list = pre_switch_list - self.check_agent_descision = check_agent_descision - - def get_many(self, handles: Optional[List[int]] = None) -> Dict[int, Node]: - """ - Called whenever an observation has to be computed for the `env` environment, for each agent with handle - in the `handles` list. - """ - - if handles is None: - handles = [] - if self.predictor: - self.max_prediction_depth = 0 - self.predicted_pos = {} - self.predicted_dir = {} - self.predictions = self.predictor.get() - if self.predictions: - for t in range(self.predictor.max_depth + 1): - pos_list = [] - dir_list = [] - for a in handles: - if self.predictions[a] is None: - continue - pos_list.append(self.predictions[a][t][1:3]) - dir_list.append(self.predictions[a][t][3]) - self.predicted_pos.update({t: coordinate_to_position(self.env.width, pos_list)}) - self.predicted_dir.update({t: dir_list}) - self.max_prediction_depth = len(self.predicted_pos) - # Update local lookup table for all agents' positions - # ignore other agents not in the grid (only status active and done) - - self.location_has_agent = {} - self.location_has_agent_direction = {} - self.location_has_agent_speed = {} - self.location_has_agent_malfunction = {} - self.location_has_agent_ready_to_depart = {} - - for _agent in self.env.agents: - if _agent.status in [RailAgentStatus.ACTIVE, RailAgentStatus.DONE] and \ - _agent.position: - self.location_has_agent[tuple(_agent.position)] = 1 - self.location_has_agent_direction[tuple(_agent.position)] = _agent.direction - self.location_has_agent_speed[tuple(_agent.position)] = _agent.speed_data['speed'] - self.location_has_agent_malfunction[tuple(_agent.position)] = _agent.malfunction_data[ - 'malfunction'] - - if _agent.status in [RailAgentStatus.READY_TO_DEPART] and \ - _agent.initial_position: - self.location_has_agent_ready_to_depart[tuple(_agent.initial_position)] = \ - self.location_has_agent_ready_to_depart.get(tuple(_agent.initial_position), 0) + 1 - - observations = super().get_many(handles) - - return observations - - def get(self, handle: int = 0) -> Node: - """ - Computes the current observation for agent `handle` in env - - The observation vector is composed of 4 sequential parts, corresponding to data from the up to 4 possible - movements in a RailEnv (up to because only a subset of possible transitions are allowed in RailEnv). - The possible movements are sorted relative to the current orientation of the agent, rather than NESW as for - the transitions. The order is:: - - [data from 'left'] + [data from 'forward'] + [data from 'right'] + [data from 'back'] - - Each branch data is organized as:: - - [root node information] + - [recursive branch data from 'left'] + - [... from 'forward'] + - [... from 'right] + - [... from 'back'] - - Each node information is composed of 9 features: - - #1: - if own target lies on the explored branch the current distance from the agent in number of cells is stored. - - #2: - if another agents target is detected the distance in number of cells from the agents current location\ - is stored - - #3: - if another agent is detected the distance in number of cells from current agent position is stored. - - #4: - possible conflict detected - tot_dist = Other agent predicts to pass along this cell at the same time as the agent, we store the \ - distance in number of cells from current agent position - - 0 = No other agent reserve the same cell at similar time - - #5: - if an not usable switch (for agent) is detected we store the distance. - - #6: - This feature stores the distance in number of cells to the next branching (current node) - - #7: - minimum distance from node to the agent's target given the direction of the agent if this path is chosen - - #8: - agent in the same direction - n = number of agents present same direction \ - (possible future use: number of other agents in the same direction in this branch) - 0 = no agent present same direction - - #9: - agent in the opposite direction - n = number of agents present other direction than myself (so conflict) \ - (possible future use: number of other agents in other direction in this branch, ie. number of conflicts) - 0 = no agent present other direction than myself - - #10: - malfunctioning/blokcing agents - n = number of time steps the oberved agent remains blocked - - #11: - slowest observed speed of an agent in same direction - 1 if no agent is observed - - min_fractional speed otherwise - #12: - number of agents ready to depart but no yet active - - Missing/padding nodes are filled in with -inf (truncated). - Missing values in present node are filled in with +inf (truncated). - - - In case of the root node, the values are [0, 0, 0, 0, distance from agent to target, own malfunction, own speed] - In case the target node is reached, the values are [0, 0, 0, 0, 0]. - """ - - if handle > len(self.env.agents): - print("ERROR: obs _get - handle ", handle, " len(agents)", len(self.env.agents)) - agent = self.env.agents[handle] # TODO: handle being treated as index - - if agent.status == RailAgentStatus.READY_TO_DEPART: - agent_virtual_position = agent.initial_position - elif agent.status == RailAgentStatus.ACTIVE: - agent_virtual_position = agent.position - elif agent.status == RailAgentStatus.DONE: - agent_virtual_position = agent.target - else: - return None - - possible_transitions = self.env.rail.get_transitions(*agent_virtual_position, agent.direction) - num_transitions = np.count_nonzero(possible_transitions) - - # Here information about the agent itself is stored - distance_map = self.env.distance_map.get() - - root_node_observation = MyTreeObsForRailEnv.Node(dist_min_to_target=distance_map[ - (handle, *agent_virtual_position, - agent.direction)], - target_encountered=0, - num_agents_same_direction=0, - num_agents_opposite_direction=0, - childs={}) - - visited = OrderedSet() - - # Start from the current orientation, and see which transitions are available; - # organize them as [left, forward, right, back], relative to the current orientation - # If only one transition is possible, the tree is oriented with this transition as the forward branch. - orientation = agent.direction - - if num_transitions == 1: - orientation = np.argmax(possible_transitions) - - for i, branch_direction in enumerate([(orientation + i) % 4 for i in range(-1, 3)]): - if possible_transitions[branch_direction]: - new_cell = get_new_position(agent_virtual_position, branch_direction) - - branch_observation, branch_visited = \ - self._explore_branch(handle, new_cell, branch_direction, 1, 1) - root_node_observation.childs[self.tree_explored_actions_char[i]] = branch_observation - - visited |= branch_visited - else: - # add cells filled with infinity if no transition is possible - root_node_observation.childs[self.tree_explored_actions_char[i]] = -np.inf - self.env.dev_obs_dict[handle] = visited - - return root_node_observation - - def _explore_branch(self, handle, position, direction, tot_dist, depth): - """ - Utility function to compute tree-based observations. - We walk along the branch and collect the information documented in the get() function. - If there is a branching point a new node is created and each possible branch is explored. - """ - - # [Recursive branch opened] - if depth >= self.max_depth + 1: - return [], [] - - # Continue along direction until next switch or - # until no transitions are possible along the current direction (i.e., dead-ends) - # We treat dead-ends as nodes, instead of going back, to avoid loops - exploring = True - - visited = OrderedSet() - agent = self.env.agents[handle] - - other_agent_opposite_direction = 0 - other_agent_same_direction = 0 - - dist_min_to_target = self.env.distance_map.get()[handle, position[0], position[1], direction] - - last_is_dead_end = False - last_is_a_decision_cell = False - target_encountered = 0 - - cnt = 0 - while exploring: - - dist_min_to_target = min(dist_min_to_target, self.env.distance_map.get()[handle, position[0], position[1], - direction]) - - if agent.target == position: - target_encountered = 1 - - new_direction_me = direction - new_cell_me = position - a = self.env.agent_positions[new_cell_me] - if a != -1 and a != handle: - opp_agent = self.env.agents[a] - # look one step forward - # opp_possible_transitions = self.env.rail.get_transitions(*opp_agent.position, opp_agent.direction) - if opp_agent.direction != new_direction_me: # opp_possible_transitions[new_direction_me] == 0: - other_agent_opposite_direction += 1 - else: - other_agent_same_direction += 1 - - # ############################# - # ############################# - if (position[0], position[1], direction) in visited: - break - visited.add((position[0], position[1], direction)) - - # If the target node is encountered, pick that as node. Also, no further branching is possible. - if np.array_equal(position, self.env.agents[handle].target): - last_is_target = True - break - - exploring = False - - # Check number of possible transitions for agent and total number of transitions in cell (type) - possible_transitions = self.env.rail.get_transitions(*position, direction) - num_transitions = np.count_nonzero(possible_transitions) - # cell_transitions = self.env.rail.get_transitions(*position, direction) - transition_bit = bin(self.env.rail.get_full_transitions(*position)) - total_transitions = transition_bit.count("1") - - if num_transitions == 1: - # Check if dead-end, or if we can go forward along direction - nbits = total_transitions - if nbits == 1: - # Dead-end! - last_is_dead_end = True - - if self.check_agent_descision is not None: - ret_agents_on_switch, ret_agents_near_to_switch, agents_near_to_switch_all = \ - self.check_agent_descision(position, - direction, - self.switches_list, - self.switches_neighbours_list) - if ret_agents_on_switch: - last_is_a_decision_cell = True - break - - exploring = True - # convert one-hot encoding to 0,1,2,3 - cell_transitions = self.env.rail.get_transitions(*position, direction) - direction = np.argmax(cell_transitions) - position = get_new_position(position, direction) - - cnt += 1 - if cnt > 1000: - exploring = False - - # ############################# - # ############################# - # Modify here to append new / different features for each visited cell! - - node = MyTreeObsForRailEnv.Node(dist_min_to_target=dist_min_to_target, - target_encountered=target_encountered, - num_agents_opposite_direction=other_agent_opposite_direction, - num_agents_same_direction=other_agent_same_direction, - childs={}) - - # ############################# - # ############################# - # Start from the current orientation, and see which transitions are available; - # organize them as [left, forward, right, back], relative to the current orientation - # Get the possible transitions - possible_transitions = self.env.rail.get_transitions(*position, direction) - - for i, branch_direction in enumerate([(direction + 4 + i) % 4 for i in range(-1, 3)]): - if last_is_dead_end and self.env.rail.get_transition((*position, direction), - (branch_direction + 2) % 4): - # Swap forward and back in case of dead-end, so that an agent can learn that going forward takes - # it back - new_cell = get_new_position(position, (branch_direction + 2) % 4) - branch_observation, branch_visited = self._explore_branch(handle, - new_cell, - (branch_direction + 2) % 4, - tot_dist + 1, - depth + 1) - node.childs[self.tree_explored_actions_char[i]] = branch_observation - if len(branch_visited) != 0: - visited |= branch_visited - elif last_is_a_decision_cell and possible_transitions[branch_direction]: - new_cell = get_new_position(position, branch_direction) - branch_observation, branch_visited = self._explore_branch(handle, - new_cell, - branch_direction, - tot_dist + 1, - depth + 1) - node.childs[self.tree_explored_actions_char[i]] = branch_observation - if len(branch_visited) != 0: - visited |= branch_visited - else: - # no exploring possible, add just cells with infinity - node.childs[self.tree_explored_actions_char[i]] = -np.inf - - if depth == self.max_depth: - node.childs.clear() - return node, visited - - def util_print_obs_subtree(self, tree: Node): - """ - Utility function to print tree observations returned by this object. - """ - self.print_node_features(tree, "root", "") - for direction in self.tree_explored_actions_char: - self.print_subtree(tree.childs[direction], direction, "\t") - - @staticmethod - def print_node_features(node: Node, label, indent): - print(indent, "Direction ", label, ": ", node.num_agents_same_direction, - ", ", node.num_agents_opposite_direction) - - def print_subtree(self, node, label, indent): - if node == -np.inf or not node: - print(indent, "Direction ", label, ": -np.inf") - return - - self.print_node_features(node, label, indent) - - if not node.childs: - return - - for direction in self.tree_explored_actions_char: - self.print_subtree(node.childs[direction], direction, indent + "\t") - - def set_env(self, env: Environment): - super().set_env(env) - if self.predictor: - self.predictor.set_env(self.env) - - def _reverse_dir(self, direction): - return int((direction + 2) % 4) - - -class GlobalObsForRailEnv(ObservationBuilder): - """ - Gives a global observation of the entire rail environment. - The observation is composed of the following elements: - - - transition map array with dimensions (env.height, env.width, 16),\ - assuming 16 bits encoding of transitions. - - - obs_agents_state: A 3D array (map_height, map_width, 5) with - - first channel containing the agents position and direction - - second channel containing the other agents positions and direction - - third channel containing agent/other agent malfunctions - - fourth channel containing agent/other agent fractional speeds - - fifth channel containing number of other agents ready to depart - - - obs_targets: Two 2D arrays (map_height, map_width, 2) containing respectively the position of the given agent\ - target and the positions of the other agents targets (flag only, no counter!). - """ - - def __init__(self): - super(GlobalObsForRailEnv, self).__init__() - - def set_env(self, env: Environment): - super().set_env(env) - - def reset(self): - self.rail_obs = np.zeros((self.env.height, self.env.width, 16)) - for i in range(self.rail_obs.shape[0]): - for j in range(self.rail_obs.shape[1]): - bitlist = [int(digit) for digit in bin(self.env.rail.get_full_transitions(i, j))[2:]] - bitlist = [0] * (16 - len(bitlist)) + bitlist - self.rail_obs[i, j] = np.array(bitlist) - - def get(self, handle: int = 0) -> (np.ndarray, np.ndarray, np.ndarray): - - agent = self.env.agents[handle] - if agent.status == RailAgentStatus.READY_TO_DEPART: - agent_virtual_position = agent.initial_position - elif agent.status == RailAgentStatus.ACTIVE: - agent_virtual_position = agent.position - elif agent.status == RailAgentStatus.DONE: - agent_virtual_position = agent.target - else: - return None - - obs_targets = np.zeros((self.env.height, self.env.width, 2)) - obs_agents_state = np.zeros((self.env.height, self.env.width, 5)) - 1 - - # TODO can we do this more elegantly? - # for r in range(self.env.height): - # for c in range(self.env.width): - # obs_agents_state[(r, c)][4] = 0 - obs_agents_state[:, :, 4] = 0 - - obs_agents_state[agent_virtual_position][0] = agent.direction - obs_targets[agent.target][0] = 1 - - for i in range(len(self.env.agents)): - other_agent: EnvAgent = self.env.agents[i] - - # ignore other agents not in the grid any more - if other_agent.status == RailAgentStatus.DONE_REMOVED: - continue - - obs_targets[other_agent.target][1] = 1 - - # second to fourth channel only if in the grid - if other_agent.position is not None: - # second channel only for other agents - if i != handle: - obs_agents_state[other_agent.position][1] = other_agent.direction - obs_agents_state[other_agent.position][2] = other_agent.malfunction_data['malfunction'] - obs_agents_state[other_agent.position][3] = other_agent.speed_data['speed'] - # fifth channel: all ready to depart on this position - if other_agent.status == RailAgentStatus.READY_TO_DEPART: - obs_agents_state[other_agent.initial_position][4] += 1 - return self.rail_obs, obs_agents_state, obs_targets - - -class LocalObsForRailEnv(ObservationBuilder): - """ - !!!!!!WARNING!!! THIS IS DEPRACTED AND NOT UPDATED TO FLATLAND 2.0!!!!! - Gives a local observation of the rail environment around the agent. - The observation is composed of the following elements: - - - transition map array of the local environment around the given agent, \ - with dimensions (view_height,2*view_width+1, 16), \ - assuming 16 bits encoding of transitions. - - - Two 2D arrays (view_height,2*view_width+1, 2) containing respectively, \ - if they are in the agent's vision range, its target position, the positions of the other targets. - - - A 2D array (view_height,2*view_width+1, 4) containing the one hot encoding of directions \ - of the other agents at their position coordinates, if they are in the agent's vision range. - - - A 4 elements array with one hot encoding of the direction. - - Use the parameters view_width and view_height to define the rectangular view of the agent. - The center parameters moves the agent along the height axis of this rectangle. If it is 0 the agent only has - observation in front of it. - - .. deprecated:: 2.0.0 - """ - - def __init__(self, view_width, view_height, center): - - super(LocalObsForRailEnv, self).__init__() - self.view_width = view_width - self.view_height = view_height - self.center = center - self.max_padding = max(self.view_width, self.view_height - self.center) - - def reset(self): - # We build the transition map with a view_radius empty cells expansion on each side. - # This helps to collect the local transition map view when the agent is close to a border. - self.max_padding = max(self.view_width, self.view_height) - self.rail_obs = np.zeros((self.env.height, - self.env.width, 16)) - for i in range(self.env.height): - for j in range(self.env.width): - bitlist = [int(digit) for digit in bin(self.env.rail.get_full_transitions(i, j))[2:]] - bitlist = [0] * (16 - len(bitlist)) + bitlist - self.rail_obs[i, j] = np.array(bitlist) - - def get(self, handle: int = 0) -> (np.ndarray, np.ndarray, np.ndarray, np.ndarray): - agents = self.env.agents - agent = agents[handle] - - # Correct agents position for padding - # agent_rel_pos[0] = agent.position[0] + self.max_padding - # agent_rel_pos[1] = agent.position[1] + self.max_padding - - # Collect visible cells as set to be plotted - visited, rel_coords = self.field_of_view(agent.position, agent.direction, ) - local_rail_obs = None - - # Add the visible cells to the observed cells - self.env.dev_obs_dict[handle] = set(visited) - - # Locate observed agents and their coresponding targets - local_rail_obs = np.zeros((self.view_height, 2 * self.view_width + 1, 16)) - obs_map_state = np.zeros((self.view_height, 2 * self.view_width + 1, 2)) - obs_other_agents_state = np.zeros((self.view_height, 2 * self.view_width + 1, 4)) - _idx = 0 - for pos in visited: - curr_rel_coord = rel_coords[_idx] - local_rail_obs[curr_rel_coord[0], curr_rel_coord[1], :] = self.rail_obs[pos[0], pos[1], :] - if pos == agent.target: - obs_map_state[curr_rel_coord[0], curr_rel_coord[1], 0] = 1 - else: - for tmp_agent in agents: - if pos == tmp_agent.target: - obs_map_state[curr_rel_coord[0], curr_rel_coord[1], 1] = 1 - if pos != agent.position: - for tmp_agent in agents: - if pos == tmp_agent.position: - obs_other_agents_state[curr_rel_coord[0], curr_rel_coord[1], :] = np.identity(4)[ - tmp_agent.direction] - - _idx += 1 - - direction = np.identity(4)[agent.direction] - return local_rail_obs, obs_map_state, obs_other_agents_state, direction - - def get_many(self, handles: Optional[List[int]] = None) -> Dict[ - int, Tuple[np.ndarray, np.ndarray, np.ndarray, np.ndarray]]: - """ - Called whenever an observation has to be computed for the `env` environment, for each agent with handle - in the `handles` list. - """ - - return super().get_many(handles) - - def field_of_view(self, position, direction, state=None): - # Compute the local field of view for an agent in the environment - data_collection = False - if state is not None: - temp_visible_data = np.zeros(shape=(self.view_height, 2 * self.view_width + 1, 16)) - data_collection = True - if direction == 0: - origin = (position[0] + self.center, position[1] - self.view_width) - elif direction == 1: - origin = (position[0] - self.view_width, position[1] - self.center) - elif direction == 2: - origin = (position[0] - self.center, position[1] + self.view_width) - else: - origin = (position[0] + self.view_width, position[1] + self.center) - visible = list() - rel_coords = list() - for h in range(self.view_height): - for w in range(2 * self.view_width + 1): - if direction == 0: - if 0 <= origin[0] - h < self.env.height and 0 <= origin[1] + w < self.env.width: - visible.append((origin[0] - h, origin[1] + w)) - rel_coords.append((h, w)) - # if data_collection: - # temp_visible_data[h, w, :] = state[origin[0] - h, origin[1] + w, :] - elif direction == 1: - if 0 <= origin[0] + w < self.env.height and 0 <= origin[1] + h < self.env.width: - visible.append((origin[0] + w, origin[1] + h)) - rel_coords.append((h, w)) - # if data_collection: - # temp_visible_data[h, w, :] = state[origin[0] + w, origin[1] + h, :] - elif direction == 2: - if 0 <= origin[0] + h < self.env.height and 0 <= origin[1] - w < self.env.width: - visible.append((origin[0] + h, origin[1] - w)) - rel_coords.append((h, w)) - # if data_collection: - # temp_visible_data[h, w, :] = state[origin[0] + h, origin[1] - w, :] - else: - if 0 <= origin[0] - w < self.env.height and 0 <= origin[1] - h < self.env.width: - visible.append((origin[0] - w, origin[1] - h)) - rel_coords.append((h, w)) - # if data_collection: - # temp_visible_data[h, w, :] = state[origin[0] - w, origin[1] - h, :] - if data_collection: - return temp_visible_data - else: - return visible, rel_coords - - -def _split_node_into_feature_groups(node: MyTreeObsForRailEnv.Node, dist_min_to_target: int) -> (np.ndarray, np.ndarray, - np.ndarray): - data = np.zeros(2) - - data[0] = 2.0 * int(node.num_agents_opposite_direction > 0) - 1.0 - # data[1] = 2.0 * int(node.num_agents_same_direction > 0) - 1.0 - data[1] = 2.0 * int(node.target_encountered > 0) - 1.0 - - return data - - -def _split_subtree_into_feature_groups(node: MyTreeObsForRailEnv.Node, dist_min_to_target: int, - current_tree_depth: int, - max_tree_depth: int) -> ( - np.ndarray, np.ndarray, np.ndarray): - if node == -np.inf: - remaining_depth = max_tree_depth - current_tree_depth - # reference: https://stackoverflow.com/questions/515214/total-number-of-nodes-in-a-tree-data-structure - num_remaining_nodes = int((4 ** (remaining_depth + 1) - 1) / (4 - 1)) - return [0] * num_remaining_nodes * 2 - - data = _split_node_into_feature_groups(node, dist_min_to_target) - - if not node.childs: - return data - - for direction in MyTreeObsForRailEnv.tree_explored_actions_char: - sub_data = _split_subtree_into_feature_groups(node.childs[direction], - node.dist_min_to_target, - current_tree_depth + 1, - max_tree_depth) - data = np.concatenate((data, sub_data)) - return data - - -def split_tree_into_feature_groups(tree: MyTreeObsForRailEnv.Node, max_tree_depth: int) -> ( - np.ndarray, np.ndarray, np.ndarray): - """ - This function splits the tree into three difference arrays of values - """ - data = _split_node_into_feature_groups(tree, 1000000.0) - - for direction in MyTreeObsForRailEnv.tree_explored_actions_char: - sub_data = _split_subtree_into_feature_groups(tree.childs[direction], - 1000000.0, - 1, - max_tree_depth) - data = np.concatenate((data, sub_data)) - - return data - - -def normalize_observation(observation: MyTreeObsForRailEnv.Node, tree_depth: int): - """ - This function normalizes the observation used by the RL algorithm - """ - data = split_tree_into_feature_groups(observation, tree_depth) - normalized_obs = data - - # navigate_info - navigate_info = np.zeros(4) - action_info = np.zeros(4) - np.seterr(all='raise') - try: - dm = observation.dist_min_to_target - if observation.childs['L'] != -np.inf: - navigate_info[0] = dm - observation.childs['L'].dist_min_to_target - action_info[0] = 1 - if observation.childs['F'] != -np.inf: - navigate_info[1] = dm - observation.childs['F'].dist_min_to_target - action_info[1] = 1 - if observation.childs['R'] != -np.inf: - navigate_info[2] = dm - observation.childs['R'].dist_min_to_target - action_info[2] = 1 - if observation.childs['B'] != -np.inf: - navigate_info[3] = dm - observation.childs['B'].dist_min_to_target - action_info[3] = 1 - except: - navigate_info = np.ones(4) - normalized_obs = np.zeros(len(normalized_obs)) - - # navigate_info_2 = np.copy(navigate_info) - # max_v = np.max(navigate_info_2) - # navigate_info_2 = navigate_info_2 / max_v - # navigate_info_2[navigate_info_2 < 1] = -1 - - max_v = np.max(navigate_info) - navigate_info = navigate_info / max_v - navigate_info[navigate_info < 0] = -1 - # navigate_info[abs(navigate_info) < 1] = 0 - # normalized_obs = navigate_info - - # navigate_info = np.concatenate((navigate_info, action_info)) - normalized_obs = np.concatenate((navigate_info, normalized_obs)) - # normalized_obs = np.concatenate((navigate_info, navigate_info_2)) - # print(normalized_obs) - return normalized_obs diff --git a/src/ppo/agent.py b/src/ppo/agent.py deleted file mode 100644 index 86b210a..0000000 --- a/src/ppo/agent.py +++ /dev/null @@ -1,106 +0,0 @@ -import pickle - -import torch -# from model import PolicyNetwork -# from replay_memory import Episode, ReplayBuffer -from torch.distributions.categorical import Categorical - -from src.ppo.model import PolicyNetwork -from src.ppo.replay_memory import Episode, ReplayBuffer - -BUFFER_SIZE = 32_000 -BATCH_SIZE = 4096 -GAMMA = 0.98 -LR = 0.5e-4 -CLIP_FACTOR = .005 -UPDATE_EVERY = 30 - -device = torch.device("cuda:0" if torch.cuda.is_available() else "cpu") -print("device:", device) - - -class Agent: - def __init__(self, state_size, action_size, num_agents): - self.policy = PolicyNetwork(state_size, action_size).to(device) - self.old_policy = PolicyNetwork(state_size, action_size).to(device) - self.optimizer = torch.optim.Adam(self.policy.parameters(), lr=LR) - - self.episodes = [Episode() for _ in range(num_agents)] - self.memory = ReplayBuffer(BUFFER_SIZE) - self.t_step = 0 - - def reset(self): - self.finished = [False] * len(self.episodes) - - # Decide on an action to take in the environment - - def act(self, state, eps=None): - self.policy.eval() - with torch.no_grad(): - output = self.policy(torch.from_numpy(state).float().unsqueeze(0).to(device)) - return Categorical(output).sample().item() - - # Record the results of the agent's action and update the model - - def step(self, handle, state, action, next_state, agent_done, episode_done, collision): - if not self.finished[handle]: - if agent_done: - reward = 1 - elif collision: - reward = -.5 - else: - reward = 0 - - # Push experience into Episode memory - self.episodes[handle].push(state, action, reward, next_state, agent_done or episode_done) - - # When we finish the episode, discount rewards and push the experience into replay memory - if agent_done or episode_done: - self.episodes[handle].discount_rewards(GAMMA) - self.memory.push_episode(self.episodes[handle]) - self.episodes[handle].reset() - self.finished[handle] = True - - # Perform a gradient update every UPDATE_EVERY time steps - self.t_step = (self.t_step + 1) % UPDATE_EVERY - if self.t_step == 0 and len(self.memory) > BATCH_SIZE * 4: - self.learn(*self.memory.sample(BATCH_SIZE, device)) - - def learn(self, states, actions, rewards, next_state, done): - self.policy.train() - - responsible_outputs = torch.gather(self.policy(states), 1, actions) - old_responsible_outputs = torch.gather(self.old_policy(states), 1, actions).detach() - - # rewards = rewards - rewards.mean() - ratio = responsible_outputs / (old_responsible_outputs + 1e-5) - clamped_ratio = torch.clamp(ratio, 1. - CLIP_FACTOR, 1. + CLIP_FACTOR) - loss = -torch.min(ratio * rewards, clamped_ratio * rewards).mean() - - # Compute loss and perform a gradient step - self.old_policy.load_state_dict(self.policy.state_dict()) - self.optimizer.zero_grad() - loss.backward() - self.optimizer.step() - - # Checkpointing methods - - def save(self, path, *data): - torch.save(self.policy.state_dict(), path / 'ppo/model_checkpoint.policy') - torch.save(self.optimizer.state_dict(), path / 'ppo/model_checkpoint.optimizer') - with open(path / 'ppo/model_checkpoint.meta', 'wb') as file: - pickle.dump(data, file) - - def load(self, path, *defaults): - try: - print("Loading model from checkpoint...") - print(path + 'ppo/model_checkpoint.policy') - self.policy.load_state_dict( - torch.load(path + 'ppo/model_checkpoint.policy', map_location=torch.device('cpu'))) - self.optimizer.load_state_dict( - torch.load(path + 'ppo/model_checkpoint.optimizer', map_location=torch.device('cpu'))) - with open(path + 'ppo/model_checkpoint.meta', 'rb') as file: - return pickle.load(file) - except: - print("No checkpoint file was found") - return defaults diff --git a/src/ppo/model.py b/src/ppo/model.py deleted file mode 100644 index 51b86ff..0000000 --- a/src/ppo/model.py +++ /dev/null @@ -1,20 +0,0 @@ -import torch.nn as nn -import torch.nn.functional as F - - -class PolicyNetwork(nn.Module): - def __init__(self, state_size, action_size, hidsize1=128, hidsize2=128, hidsize3=32): - super().__init__() - self.fc1 = nn.Linear(state_size, hidsize1) - self.fc2 = nn.Linear(hidsize1, hidsize2) - # self.fc3 = nn.Linear(hidsize2, hidsize3) - self.output = nn.Linear(hidsize2, action_size) - self.softmax = nn.Softmax(dim=1) - self.bn0 = nn.BatchNorm1d(state_size, affine=False) - - def forward(self, inputs): - x = self.bn0(inputs.float()) - x = F.relu(self.fc1(x)) - x = F.relu(self.fc2(x)) - # x = F.relu(self.fc3(x)) - return self.softmax(self.output(x)) diff --git a/src/ppo/replay_memory.py b/src/ppo/replay_memory.py deleted file mode 100644 index 3e6619b..0000000 --- a/src/ppo/replay_memory.py +++ /dev/null @@ -1,53 +0,0 @@ -import torch -import random -import numpy as np -from collections import namedtuple, deque, Iterable - - -Transition = namedtuple("Experience", ("state", "action", "reward", "next_state", "done")) - - -class Episode: - memory = [] - - def reset(self): - self.memory = [] - - def push(self, *args): - self.memory.append(tuple(args)) - - def discount_rewards(self, gamma): - running_add = 0. - for i, (state, action, reward, *rest) in list(enumerate(self.memory))[::-1]: - running_add = running_add * gamma + reward - self.memory[i] = (state, action, running_add, *rest) - - -class ReplayBuffer: - def __init__(self, buffer_size): - self.memory = deque(maxlen=buffer_size) - - def push(self, state, action, reward, next_state, done): - self.memory.append(Transition(np.expand_dims(state, 0), action, reward, np.expand_dims(next_state, 0), done)) - - def push_episode(self, episode): - for step in episode.memory: - self.push(*step) - - def sample(self, batch_size, device): - experiences = random.sample(self.memory, k=batch_size) - - states = torch.from_numpy(self.stack([e.state for e in experiences])).float().to(device) - actions = torch.from_numpy(self.stack([e.action for e in experiences])).long().to(device) - rewards = torch.from_numpy(self.stack([e.reward for e in experiences])).float().to(device) - next_states = torch.from_numpy(self.stack([e.next_state for e in experiences])).float().to(device) - dones = torch.from_numpy(self.stack([e.done for e in experiences]).astype(np.uint8)).float().to(device) - - return states, actions, rewards, next_states, dones - - def stack(self, states): - sub_dims = states[0].shape[1:] if isinstance(states[0], Iterable) else [1] - return np.reshape(np.array(states), (len(states), *sub_dims)) - - def __len__(self): - return len(self.memory) diff --git a/src/shortest_Distance_walker.py b/src/shortest_Distance_walker.py deleted file mode 100644 index d69ebcb..0000000 --- a/src/shortest_Distance_walker.py +++ /dev/null @@ -1,69 +0,0 @@ -import numpy as np -from flatland.core.grid.grid4_utils import get_new_position -from flatland.envs.rail_env import RailEnv, RailEnvActions -from flatland.envs.rail_env import fast_count_nonzero, fast_argmax - - -class ShortestDistanceWalker: - def __init__(self, env: RailEnv): - self.env = env - - def walk(self, handle, position, direction): - possible_transitions = self.env.rail.get_transitions(*position, direction) - num_transitions = fast_count_nonzero(possible_transitions) - if num_transitions == 1: - new_direction = fast_argmax(possible_transitions) - new_position = get_new_position(position, new_direction) - dist = self.env.distance_map.get()[handle, new_position[0], new_position[1], new_direction] - return new_position, new_direction, dist, RailEnvActions.MOVE_FORWARD - else: - min_distances = [] - positions = [] - directions = [] - for new_direction in [(direction + i) % 4 for i in range(-1, 2)]: - if possible_transitions[new_direction]: - new_position = get_new_position(position, new_direction) - min_distances.append( - self.env.distance_map.get()[handle, new_position[0], new_position[1], new_direction]) - positions.append(new_position) - directions.append(new_direction) - else: - min_distances.append(np.inf) - positions.append(None) - directions.append(None) - - a = np.argmin(min_distances) - return positions[a], directions[a], min_distances[a], a + 1 - - def callback(self, handle, agent, position, direction, action): - pass - - def walk_to_target(self, handle): - agent = self.env.agents[handle] - if agent.position is not None: - position = agent.position - else: - position = agent.initial_position - direction = agent.direction - while (position != agent.target): - position, direction, dist, action = self.walk(handle, position, direction) - if position is None: - break - self.callback(handle, agent, position, direction, action) - - def callback_one_step(self, handle, agent, position, direction, action): - pass - - def walk_one_step(self, handle): - agent = self.env.agents[handle] - if agent.position is not None: - position = agent.position - else: - position = agent.initial_position - direction = agent.direction - if (position != agent.target): - new_position, new_direction, dist, action = self.walk(handle, position, direction) - if new_position is None: - return position, direction, RailEnvActions.STOP_MOVING - self.callback_one_step(handle, agent, new_position, new_direction, action) - return new_position, new_direction, action diff --git a/utils/dead_lock_avoidance_agent.py b/utils/dead_lock_avoidance_agent.py index 43f1b4a..382959a 100644 --- a/utils/dead_lock_avoidance_agent.py +++ b/utils/dead_lock_avoidance_agent.py @@ -15,21 +15,33 @@ class MyWalker(ShortestDistanceWalker): self.env.width), dtype=int) - 1 + self.full_shortest_distance_agent_map = np.zeros((self.env.get_num_agents(), + self.env.height, + self.env.width), + dtype=int) - 1 + self.agent_positions = agent_positions self.agent_map = {} + def get_action(self, handle, min_distances): + return np.argmin(min_distances) + def getData(self): - return self.shortest_distance_agent_map + return self.shortest_distance_agent_map, self.full_shortest_distance_agent_map def callback(self, handle, agent, position, direction, action): opp_a = self.agent_positions[position] if opp_a != -1 and opp_a != handle: - d = self.agent_map.get(handle, []) - d.append(opp_a) if self.env.agents[opp_a].direction != direction: + d = self.agent_map.get(handle, []) + if opp_a not in d: + d.append(opp_a) self.agent_map.update({handle: d}) - self.shortest_distance_agent_map[(handle, position[0], position[1])] = direction + d = self.agent_map.get(handle, []) + if len(d) == 0: + self.shortest_distance_agent_map[(handle, position[0], position[1])] = 1 + self.full_shortest_distance_agent_map[(handle, position[0], position[1])] = 1 class DeadLockAvoidanceAgent(Policy): @@ -45,16 +57,9 @@ class DeadLockAvoidanceAgent(Policy): pass def act(self, handle, state, eps=0.): - agent = self.env.agents[handle] - #if handle > self.env._elapsed_steps: - # return RailEnvActions.STOP_MOVING - if agent.status == RailAgentStatus.ACTIVE: - self.active_agent_cnt += 1 - #if agent.status > 20: - # return RailEnvActions.STOP_MOVING + # agent = self.env.agents[handle] check = self.agent_can_move.get(handle, None) if check is None: - # print(handle, RailEnvActions.STOP_MOVING) return RailEnvActions.STOP_MOVING return check[3] @@ -63,11 +68,9 @@ class DeadLockAvoidanceAgent(Policy): pass def start_step(self): - self.active_agent_cnt = 0 self.shortest_distance_mapper() def end_step(self): - # print("#A:", self.active_agent_cnt, "/", self.env.get_num_agents(),self.env._elapsed_steps) pass def get_actions(self): @@ -79,7 +82,7 @@ class DeadLockAvoidanceAgent(Policy): agent_positions = np.zeros((self.env.height, self.env.width), dtype=int) - 1 for handle in range(self.env.get_num_agents()): agent = self.env.agents[handle] - if agent.status <= RailAgentStatus.ACTIVE: + if agent.status == RailAgentStatus.ACTIVE: if agent.position is not None: agent_positions[agent.position] = handle @@ -88,20 +91,22 @@ class DeadLockAvoidanceAgent(Policy): agent = self.env.agents[handle] if agent.status <= RailAgentStatus.ACTIVE: my_walker.walk_to_target(handle) - self.shortest_distance_agent_map = my_walker.getData() + shortest_distance_agent_map, full_shortest_distance_agent_map = my_walker.getData() self.agent_can_move = {} - agent_positions_map = np.clip(agent_positions + 1, 0, 1) + agent_positions_map = (agent_positions > -1).astype(int) for handle in range(self.env.get_num_agents()): opp_agents = my_walker.agent_map.get(handle, []) - me = np.clip(self.shortest_distance_agent_map[handle] + 1, 0, 1) + me = shortest_distance_agent_map[handle] + delta = me next_step_ok = True next_position, next_direction, action = my_walker.walk_one_step(handle) for opp_a in opp_agents: - opp = np.clip(self.shortest_distance_agent_map[opp_a] + 1, 0, 1) - delta = np.clip(me - opp - agent_positions_map, 0, 1) - if (np.sum(delta) > 1): + opp = full_shortest_distance_agent_map[opp_a] + delta = (delta - opp - agent_positions_map > 0).astype(int) + if (np.sum(delta) < 3): next_step_ok = False + if next_step_ok: self.agent_can_move.update({handle: [next_position[0], next_position[1], next_direction, action]}) @@ -110,7 +115,7 @@ class DeadLockAvoidanceAgent(Policy): b = np.ceil(self.env.get_num_agents() / a) for handle in range(self.env.get_num_agents()): plt.subplot(a, b, handle + 1) - plt.imshow(self.shortest_distance_agent_map[handle]) + plt.imshow(shortest_distance_agent_map[handle]) # plt.colorbar() plt.show(block=False) - plt.pause(0.001) + plt.pause(0.01) diff --git a/utils/shortest_Distance_walker.py b/utils/shortest_Distance_walker.py index d69ebcb..bd1d5b3 100644 --- a/utils/shortest_Distance_walker.py +++ b/utils/shortest_Distance_walker.py @@ -14,6 +14,7 @@ class ShortestDistanceWalker: if num_transitions == 1: new_direction = fast_argmax(possible_transitions) new_position = get_new_position(position, new_direction) + dist = self.env.distance_map.get()[handle, new_position[0], new_position[1], new_direction] return new_position, new_direction, dist, RailEnvActions.MOVE_FORWARD else: @@ -32,9 +33,12 @@ class ShortestDistanceWalker: positions.append(None) directions.append(None) - a = np.argmin(min_distances) + a = self.get_action(handle, min_distances) return positions[a], directions[a], min_distances[a], a + 1 + def get_action(self, handle, min_distances): + return np.argmin(min_distances) + def callback(self, handle, agent, position, direction, action): pass -- GitLab