From f1b634716fe152bfdd7809ec6935464700ffb7d5 Mon Sep 17 00:00:00 2001
From: Erik Nygren <erik.nygren@sbb.ch>
Date: Fri, 3 May 2019 11:46:43 +0200
Subject: [PATCH] updated orientation of initial tree branch in
 env_observation_builder.py

---
 flatland/core/env_observation_builder.py | 11 +++++++----
 1 file changed, 7 insertions(+), 4 deletions(-)

diff --git a/flatland/core/env_observation_builder.py b/flatland/core/env_observation_builder.py
index edd9cae7..a6fbae6d 100644
--- a/flatland/core/env_observation_builder.py
+++ b/flatland/core/env_observation_builder.py
@@ -82,8 +82,7 @@ class TreeObsForRailEnv(ObservationBuilder):
         """
         # Returns max distance to target, from the farthest away node, while filling in distance_map
 
-        for ori in range(4):
-            self.distance_map[target_nr, position[0], position[1], ori] = 0
+        self.distance_map[target_nr, position[0], position[1], :] = 0
 
         # Fill in the (up to) 4 neighboring nodes
         # nodes_queue = []  # list of tuples (row, col, direction, distance);
@@ -237,14 +236,18 @@ class TreeObsForRailEnv(ObservationBuilder):
         position = self.env.agents_position[handle]
         orientation = self.env.agents_direction[handle]
         possible_transitions = self.env.rail.get_transitions((position[0], position[1], orientation))
-
+        num_transitions = np.count_nonzero(possible_transitions)
         # Root node - current position
         observation = [0, 0, 0, 0, self.distance_map[handle, position[0], position[1], orientation]]
         root_observation = observation[:]
 
         # Start from the current orientation, and see which transitions are available;
         # organize them as [left, forward, right, back], relative to the current orientation
-        # TODO: Adjust this to the novel movement dynamics --> Only Forward present when one transition is possible.
+        # If only one transition is possible, the tree is oriented with this transition as the forward branch.
+        # TODO: Test if this works as desired!
+        if num_transitions == 1:
+            orientation == np.argmax(possible_transitions)
+
         for branch_direction in [(orientation + 4 + i) % 4 for i in range(-1, 3)]:
             if possible_transitions[branch_direction]:
                 new_cell = self._new_position(position, branch_direction)
-- 
GitLab