CS代考 % State of the robot’s world = state(RobotLocation, BasketLocation, Rubbish

% State of the robot’s world = state(RobotLocation, BasketLocation, RubbishLocation)
% action(Action, State, NewState): Action in State produces NewState
% We assume robot never drops rubbish on floor and never pushes rubbish around

Copyright By PowCoder代写 加微信 powcoder

action( pickup, % Pick up rubbish from floor
state(Pos1, Pos2, floor(Pos1)), % Before action, robot and rubbish both at Pos1
state(Pos1, Pos2, held)). % After action, rubbush held by robot

action( drop, % Drop rubbish into basket
state(Pos, Pos, held), % Before action, robot and basket both at Pos
state(Pos, Pos, in_basket)). % After action, rubbish in basket

action( push(Pos, NewPos), % Push basket from Pos to NewPos
state(Pos, Pos, Loc), % Before action, robot and basket both at Pos
state(NewPos, NewPos, Loc)). % After action, robot and basket at NewPos

action( go(Pos1, NewPos1), % Go from Pos1 to NewPos1
state(Pos1, Pos2, Loc), % Before action, robot at Pos1
state(NewPos1, Pos2, Loc)). % After action, robot at Pos2

% plan(StartState, FinalState, Plan)

plan(State, State, []). % To achieve State from State itself, do nothing

plan(State1, GoalState, [Action1 | RestofPlan]) :-
action(Action1, State1, State2), % Make first action resulting in State2
plan(State2, GoalState, RestofPlan). % Find rest of plan

% Iterative deepening planner
% Backtracking to “append” generates lists of increasing length
% Forces “plan” to ceate fixed length plans

id_plan(Start, Goal, Plan) :-
append(Plan, _, _),
plan(Start, Goal, Plan).

% This test should succeed without the neeed for iterative deepening
test1(Plan) :-
plan(state(door, corner, floor(middle)), state(_, _, in_basket), Plan).

% This test will hit Prolog’s stack size limit and cause an error
% The planer gets caught in infinite recursion
test2(Plan) :-
plan(state(door, corner, floor(middle)), state(door, corner1, in_basket), Plan).

% Iterative deeepning allows the planner to find a shortest length plan.
test3(Plan) :-
id_plan(state(door, corner, floor(middle)), state(door, corner1, in_basket), Plan).

程序代写 CS代考 加微信: powcoder QQ: 1823890830 Email: powcoder@163.com