This project focuses on autonomous navigation in a Door & Key environment, shown in Fig. 1. The objective is to get our agent (red triangle) to the goal location (green square). The environment may contain a door which blocks the way to the goal. If the door is closed, the agent needs to pick up a key to unlock the door. The agent has three regular actions, move forward (MF), turn left (TL), and turn right (TR), and two special actions, pick up key (PK) and unlock door (UD). Taking any of these five actions costs energy (positive cost)
Designing and implementing a Dynamic Programming algorithm that minimizes the cost of reaching the goal in two scenarios: (a) ”Known Map”: you should compute a control policy on each of the 7 environments provided in the starter code and evaluate its performance on the same environment that it was computed for. Further description of the 7 environments and their functionality is provided in the accompanying starter code and README file. (b) ”Random Map”: you should compute a single control policy, whose performance may be evaluated on any of the 36 random 8 × 8 environments. The size of the grid in the random maps is 8 × 8 and the perimeter is surrounded by walls.
Orish Jindal, 'Autonomous navigation in a ‘Door & Key’ environment
For part A: The optimal control sequences that were obtained for some of the given environments of part A, were used to plot the gif showing movement of the robot based on the given environment.
For part B: Some examples of random environments for important cases (both door closed, both open, one open one closed) are shown below.
There are two '.py' files:
-
utils.py -- This needs to be run first as its functions are utilized in the main file This file includes the Label Correcting Algorithm for both parts (named: dp) along with some helper functions.
-
doorkey.py -- This is the main file and is executing part A and B The Label Correcting Algorithm of utils.py is used in this file's function "doorkey_problem"
Just uncomment the part which need to be run (A or B) and comment the other after "if __name__ == '__main__':"