diff --git a/encodings/strips/redundancy.lp b/encodings/strips/redundancy.lp index 3a9cf91..ad8b891 100644 --- a/encodings/strips/redundancy.lp +++ b/encodings/strips/redundancy.lp @@ -1,6 +1,12 @@ % Additional rules for enforcing the inclusion of parallel actions in plans, % whenever such 'redundant' actions are compatible with states and other actions +compatible(A,A1) :- active(A), active(A1), A != A1, _parallel = 2, + not diverge(A,A1), not diverge(A1,A). +disable(A,A1,A2) :- disable(A1,A2), compatible(A,A1), compatible(A,A2). +disabled(A,A2) :- disable(A,A1,A2). +disabled(A,A2) :- disable(A,A2), _parallel = 2. + #program step(t). defeated(A,t) :- active(A), postcondition(A,X,V), fluent(X), not holds(X,V,t), @@ -12,12 +18,14 @@ defeated(A,t) :- _parallel = 1, active(A), postcondition(A,X,V), not preconditio single(X,t). proceed(A,X,V,t) :- active(A), holds(X,V,t-1), scope(X,V). -proceed(A,X,V,t) :- active(A), occurs(A1,t), perform(A,A1,t), A != A1, +proceed(A,X,V,t) :- compatible(A,A1), occurs(A1,t), perform(A,A1,t), postcondition(A1,X,V), scope(X,V), not precondition(A1,X,V). -perform(A,A1,t) :- active(A), active(A1), A != A1, _parallel = 2, not occurs(A1,t). -perform(A,A1,t) :- active(A), active(A1), _parallel = 2, - proceed(A,X,V,t) : precondition(A1,X,V); perform(A,A2,t) : disable(A1,A2). +perform(A,A1,t) :- disabled(A,A1), not occurs(A1,t). +perform(A,A1,t) :- compatible(A,A1), + proceed(A,X,V,t) : precondition(A1,X,V); perform(A,A2,t) : disable(A,A1,A2). +perform(A,A,t) :- active(A), _parallel = 2, + proceed(A,X,V,t) : precondition(A,X,V); perform(A,A2,t) : disable(A,A2). defeated(A,t) :- _parallel = 2, active(A), not perform(A,A,t).