Różnice

Różnice między wybraną wersją a wersją aktualną.

Odnośnik do tego porównania

pl:prolog:pllib:means-ends_goal_protection [2019/06/27 15:50]
pl:prolog:pllib:means-ends_goal_protection [2019/06/27 15:50] (aktualna)
Linia 1: Linia 1:
 +====== Means-ends goal protection ======
 +{{tag>​planning}}
 +===== Description =====
 +A means-ends planner with goal protection. ​
 +
 +**Source**: ​ PROLOG programming for artificial intelligence,​ 3rd Edition, Harlow, 2001, ISBN 0-201-40375-7.
 +===== Download =====
 +Program source code: {{means-ends_goal_protection.pl}}
 +===== Listing =====
 +<code prolog>
 +%   ​Figure 17.6  A means-ends planner with goal protection. ​
 +%   ​Predicates satisfied, select, achieves and apply are as in Figure 17.5.
 +
 +:- op( 900, fy, not).
 +
 +% not Goal): negation as failure; ​
 +%   Note: This is often available as a built-in predicate,
 +%   often written as prefix operator "​\+",​ e.g. \+ likes(mary,​snakes)
 +
 +not Goal  :-
 +  Goal, !, fail
 +  ; 
 +  true.
 +
 +%   A means-ends planner with goal protection
 +
 +plan( InitialState,​ Goals, Plan, FinalState) ​ :-
 +  plan( InitialState,​ Goals, [], Plan, FinalState).
 +
 +%   plan( InitialState,​ Goals, ProtectedGoals,​ Plan, FinalState):​
 +%     Goals true in FinalState, ProtectedGoals never destroyed by Plan
 +
 +plan( State, Goals, _, [], State) ​ :-
 +  satisfied( State, Goals). ​                    % Goals true in State
 +
 +plan( State, Goals, Protected, Plan, FinalState) ​ :-
 +  conc( PrePlan, [Action | PostPlan], Plan), ​   % Divide plan
 +  select( State, Goals, Goal), ​                 % Select an unsatisfied goal
 +  achieves( Action, Goal),
 +  can( Action, Condition),
 +  preserves( Action, Protected), ​               % Do not destroy protected goals
 +  plan( State, Condition, Protected, PrePlan, MidState1),
 +  apply( MidState1, Action, MidState2),
 +  plan( MidState2, Goals, [Goal | Protected], PostPlan, FinalState).
 +
 +% preserves( Action, Goals): Action does not destroy any one of Goals
 +
 +preserves( Action, Goals) ​ :-       % Action does not destroy Goals
 +  deletes( Action, Relations),
 +  not (member( Goal, Relations),
 +       ​member( Goal, Goals) ).
 +
 +
 +</​code>​
 +===== Comments =====
  
pl/prolog/pllib/means-ends_goal_protection.txt · ostatnio zmienione: 2019/06/27 15:50 (edycja zewnętrzna)
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0