1- use_module(library(oset)).
8listModesForAction(Parsed,Action,Modes) :-
9
10 listSuccessModeForAction(Parsed,Action,SuccessModes),
11 listInferrableFailureModesForAction(Parsed,Action,FailureModes1),
12 listExplicitFailureModesForAction(Parsed,Action,FailureModes2),
13 listWOPRFailureModesForAction(Parsed,Action,FailureModes3),
14
15 append(FailureModes1,FailureModes2,FailureModes1And2),
16 append(FailureModes1And2,FailureModes3,FailureModes123),
17 append(SuccessModes,FailureModes123,Modes).
20requiresFormalization(Atom) :-
21 hasSubstring(Atom,' ').
22
23listSuccessModeForAction(_,_,[success]).
24
25listInferrableFailureModesForAction(Parsed,Action,FailureModes) :-
26 Action =.. [P|B],
27 argt(Parsed,[domainFile(DomainFile),domain(Domain),problemFile(ProblemFile),problem(Problem),solutionFile(SolutionFile),solution(Solution),verbFile(VerbFile),verb(Verb)]),
28 actions(Domain,DurativeAction),
29 DurativeAction = durativeAction(P,Parameters,Duration,Preconditions,Postconditions),
30 view([durativeAction(P,parameters(Parameters),duration(Duration),preconditions(Preconditions),postconditions(Postconditions))]),
31 oset_power(Preconditions,PowerSetOfPreconditions),
32 oset_power(Postconditions,PowerSetOfPostconditions),
33 findall(FailureMode,
34 (
35 member(PreconditionsUnsatisfied,PowerSetOfPreconditions),
36 member(PostconditionsUnsatisfied,PowerSetOfPostconditions),
37 (
38 FailureMode = failureEffects(attemptedAction(Action,preconditionsViolated(PreconditionsUnsatisfied)),Effects) ;
39 FailureMode = failureEffects(neg(attemptedAction(Action,preconditionsViolated(PreconditionsUnsatisfied))),Effects) ;
40 FailureMode = failureEffects(attemptedAction(Action,postconditionsViolated(PostconditionsUnsatisfied)),Effects) ;
41 FailureMode = failureEffects(neg(attemptedAction(Action,postconditionsViolated(PostconditionsUnsatisfied))),Effects) ;
42 FailureMode = failureEffects(attemptedAction(Action,incorrectlyDesignedPreconditions(PreconditionsUnsatisfied)),Effects) ;
43 FailureMode = failureEffects(neg(attemptedAction(Action,incorrectlyDesignedPreconditions(PreconditionsUnsatisfied))),Effects) ;
44 FailureMode = failureEffects(attemptedAction(Action,incorrectlyDesignedPostconditions(PostconditionsUnsatisfied)),Effects) ;
45 FailureMode = failureEffects(neg(attemptedAction(Action,incorrectlyDesignedPostconditions(PostconditionsUnsatisfied))),Effects)
46 )
47 ),
48 FailureModes).
49
50listExplicitFailureModesForAction(_,_,FailureModes) :-
51 FailureModes = [].
52
53listWOPRFailureModesForAction(_,_,FailureModes) :-
54 FailureModes = [].
58generateContingencyPlansForPlan(WorldState0,PlanSteps,ContingencyPlans) :-
59 [at(StartTime,Action,Duration)|RemainingPlanSteps] = PlanSteps,
60 listModesForAction(Action,Modes),
61 findall(ContingencyPlan,
62 (member(Mode,Modes),
63 updateWorldStateWithMode(WorldState0,Mode,WorldState1),
64 generateContingencyPlansForPlan(WorldState1,RemainingPlanSteps,ContingencyPlans),
65 member(ContingencyPlan,ContingencyPlans)),
66 ContingencyPlans).
67
68updateWorldStateWithMode(WorldState0,Mode,WorldState1) :-
69 WorldState1 = WorldState0.
72
73
79generateContingencyPlans(Domain,ContingencyPlans) :-
80 planSteps(Domain,PlanSteps),
81 seer(PlanSteps),
82 generateContingencyPlansForPlan([],PlanSteps,ContingencyPlans).
92displayModes(Parsed,Action) :-
93 listModesForAction(Parsed,Action,Modes),
94 view(Modes)