def set_world(self, grd, start_y_x, y_x):
        """
        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
        """
        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