planning with certainty stripsheuristic py -(continued def maxh(*heuristics)"""returns new heuristic function that is the maximum of the functions in heuristics heuristics is the list of arguments which must be heuristic functions ""return lambda state,goalmax( (state,goalfor in heuristicsdef newh(state,goal)return max( (state,goalfor in heuristicsreturn newh the following runs the example with and without the heuristic stripsheuristic py -(continued ####forward planner ####from searchmpp import searchermpp from stripsforwardplanner import forward_strips from stripsproblem import problem problem problem blocks blocks blocks def test_forward_heuristic(thisproblem=problem )print("\ ****forward no heuristic"print(searchermpp(forward_strips(thisproblem)search() print("\ ****forward with heuristic "print(searchermpp(forward_strips(thisproblem, )search() print("\ ****forward with heuristic "print(searchermpp(forward_strips(thisproblem, )search() print("\ ****forward with heuristics and "print(searchermpp(forward_strips(thisproblem,maxh( , ))search() if __name__ ="__main__"test_forward_heuristic(exercise try the forward planner with heuristic function of just with just and with both explain how each one prunes or doesn' prune the search space exercise create better heuristic than maxh( try it for number of different problems in particulartry and include the following costsih is like but also takes into account the case when rloc is in goal iih uses the distance to the mail room plus getting mail and delivering it if the robot needs to get need to deliver mail iiih is for getting mail when goal is for the robot to have mailand then getting to the goal destination (if there is oneexercise create an admissible heuristic for the blocks world version june