planning with certainty def test_regression_heuristic(thisproblem=problem )print("\ ****regression no heuristic"print(searchermpp(regression_strips(thisproblem)search() print("\ ****regression with heuristics and "print(searchermpp(regression_strips(thisproblem,maxh( , ))search() if __name__ ="__main__"test_regression_heuristic(exercise try the regression planner with heuristic function of just and with just (defined in section explain how each one prunes or doesn' prune the search space exercise create better heuristic than heuristic fun defined in section planning as csp to run the demoin folder "aipython"load "stripscspplanner py"and copy and paste the commented-out example queries at the bottom of that file this assumes python here we implement the csp planner assuming there is single action at each step this creates csp that can use any of the csp algorithms to solve ( stochastic local search or arc consistency with domain splittingthis assumes the same action representation as beforewe do not consider factored actions (action features)nor do we implement state constraints stripscspplanner py -csp planner where actions are represented using strips from cspproblem import variablecspconstraint class csp_from_strips(csp)""" csp wherecsp variables are constructed for each feature and timeand each action and time the dynamics are specified by the strips representation of actions "" def __init__(selfplanning_problemnumber_stages= )prob_domain planning_problem prob_domain initial_state planning_problem initial_state goal planning_problem goal self action_vars[tis the action variable for time self action_vars [variable( "action{ }"prob_domain actionsfor in range(number_stages)feat_time_var[ ][tis the variable for feature at time feat_time_var {feat[variable( "{feat} { }",domfor in range(number_stages+ )version june