code: def set_world(self, grd, start_y_x, y_x):
          
          self.grd = grd
          self.start_y = start_y_x[0]
          self.start_x = start_y_x[1]
          self.current_y = start_y_x[0]
          self.current_x = start_y_x[1]
          self.target_y = y_x[0]
          self.target_x = y_x[1]
          self.backtrack = [0,0]   # set only if blocked and agent needs to go back
          self.prefer_x = 0        # set only if backtracked as preferred direction x
          self.prefer_y = 0
docs: tell the agent to move to location y,x 
          Why is there another grd object in the agent? Because 
          this is NOT the main grid, rather a copy for the agent
          to overwrite with planning routes, etc.
          The real grid is initialised in World.__init__() class