From 587c0137e4d677d1fba5ac967024db6de491c60e Mon Sep 17 00:00:00 2001
From: "Egli Adrian (IT-SCI-API-PFI)" <adrian.egli@sbb.ch>
Date: Wed, 25 Sep 2019 13:24:15 +0200
Subject: [PATCH] bug fix distance map reset was broken if current agent and
 previous agent had same target!

---
 flatland/envs/distance_map.py | 9 ---------
 flatland/envs/rail_env.py     | 8 +++++---
 2 files changed, 5 insertions(+), 12 deletions(-)

diff --git a/flatland/envs/distance_map.py b/flatland/envs/distance_map.py
index 228d3992..22721407 100644
--- a/flatland/envs/distance_map.py
+++ b/flatland/envs/distance_map.py
@@ -24,8 +24,6 @@ class DistanceMap:
         """
         self.distance_map = distance_map
 
-
-
     def get(self) -> np.ndarray:
         """
         Get the distance map
@@ -35,11 +33,6 @@ class DistanceMap:
 
             nb_agents = len(self.agents)
             compute_distance_map = True
-            if self.agents_previous_computation is not None and nb_agents == len(self.agents_previous_computation):
-                compute_distance_map = False
-                for i in range(nb_agents):
-                    if self.agents[i].target != self.agents_previous_computation[i].target:
-                        compute_distance_map = True
             # Don't compute the distance map if it was loaded
             if self.agents_previous_computation is None and self.distance_map is not None:
                 compute_distance_map = False
@@ -52,8 +45,6 @@ class DistanceMap:
 
         return self.distance_map
 
-
-
     def reset(self, agents: List[EnvAgent], rail: GridTransitionMap):
         """
         Reset the distance map
diff --git a/flatland/envs/rail_env.py b/flatland/envs/rail_env.py
index f8c54f33..b518d2f8 100644
--- a/flatland/envs/rail_env.py
+++ b/flatland/envs/rail_env.py
@@ -240,9 +240,6 @@ class RailEnv(Environment):
         #  can we not put 'self.rail_generator(..)' into 'if regen_rail or self.rail is None' condition?
         rail, optionals = self.rail_generator(self.width, self.height, self.get_num_agents(), self.num_resets)
 
-        if optionals and 'distance_map' in optionals:
-            self.distance_map.set(optionals['distance_map'])
-
         if regen_rail or self.rail is None:
             self.rail = rail
             self.height, self.width = self.rail.grid.shape
@@ -252,6 +249,11 @@ class RailEnv(Environment):
                     check = self.rail.cell_neighbours_valid(rc_pos, True)
                     if not check:
                         warnings.warn("Invalid grid at {} -> {}".format(rc_pos, check))
+        # TODO https://gitlab.aicrowd.com/flatland/flatland/issues/172
+        #  hacky: we must re-compute the distance map and not use the initial distance_map loaded from file by
+        #  rail_from_file!!!
+        elif optionals and 'distance_map' in optionals:
+            self.distance_map.set(optionals['distance_map'])
 
         if replace_agents:
             agents_hints = None
-- 
GitLab