planning with certainty for prop in self goal def start_node(self)"""returns start node""return self initial_state def neighbors(self,state)"""returns neighbors of state in this problem""return arc(stateself effect(act,state assignment)act costactfor act in self prob_domain actions if self possible(act,state assignment) def possible(self,act,state_asst)"""true if act is possible in state act is possible if all of its preconditions have the same value in the state""return all(state_asst[pre=act preconds[prefor pre in act preconds def effect(self,act,state_asst)"""returns the state that is the effect of doing act given state_asst python return state_asst act effects""new_state_asst state_asst copy(new_state_asst update(act effectsreturn state(new_state_asst def heuristic(self,state)"""in the forward planner node is state the heuristic is an (under)estimate of the cost of going from the state to the top-level goal ""return self heur(state assignmentself goalhere are some test cases to try stripsforwardplanner py -(continued from searchbranchandbound import df_branch_and_bound from searchmpp import searchermpp from stripsproblem import problem problem problem blocks blocks blocks searchermpp(forward_strips(problem )search(#awith mpp df_branch_and_bound(forward_strips(problem ), search(# & to find more than one plans searchermpp(forward_strips(problem )#as search(#find another plan version june