International Conference on Automated Planning and
Scheduling.
McCluskey, T. L. and Porteous, J. M. (1996). Engineering
and Compiling Planning Domain Models to Promote
Validity and Efficiency. Technical Report RR9606,
School of Computing and Maths, University of Hud-
dersfield.
McCluskey, T. L., Richardson, N. E., and Simpson, R. M.
(2002). An Interactive Method for Inducing Operator
Descriptions. In The Sixth International Conference
on Artificial Intelligence Planning Systems.
Richardson, N. E. (2008). An Operator Induction Tool Sup-
porting Knowledge Engineering in Planning. PhD
thesis, School of Computing and Engineering, Uni-
versity of Huddersfield, UK.
Russell, S. J. (1989). Execution architectures and compila-
tion. In Proc. IJCAI.
S. A. Chien (editor) (1997). 1st NASA Workshop on Plan-
ning and Scheduling in Space Applications. NASA,
Oxnard, CA.
Simpson, R. M., Kitchin, D. E., and McCluskey, T. L.
(2007). Planning domain definition using gipo. Jour-
nal of Knowledge Engineering, 1.
S.S.Benson (1996). Learning Action Models for Reactive
Autonomous Agents. PhD thesis, Dept of Computer
Science, Stanford University.
Wu, K., Yang, Q., and Jiang, Y. (2005). Arms: Action-
relation modelling system for learning acquisition
models. In Proceedings of the First International
Competition on Knowledge Engineering for AI Plan-
ning, Monterey, California, USA.
Yang, Q., Pan, R., and Pan, S. J. (2007). Learning recursive
htn-method structures for planning. In Proceedings
of the ICAPS’07 Workshop on Artificial Intelligence
Planning and Learning.
APPENDIX
% Sorts
sorts(primitive_sorts,[container,nuts,hub,
pump,wheel, wrench,jack,wheel_trim,tyre]).
% Objects
objects(container,[boot]).
objects(nuts,[nuts1,nuts2,nuts3,nuts4]).
objects(hub,[hub1,hub2,hub3,hub4]).
objects(pump,[pump0]).
objects(wheel,[wheel1,wheel2,
wheel3,wheel4,wheel5]).
objects(wrench,[wrench0]).
objects(jack,[jack0]).
objects(wheel_trim,[trim1,trim2,trim3,trim4]).
objects(tyre,[tyre1,tyre2,tyre3,tyre4,tyre5]).
% Predicates
predicates([ closed(container),open(container),
tight(nuts,hub),loose(nuts,hub),have_nuts(nuts),
on_ground(hub),fastened(hub),jacked_up(hub,jack),
free(hub),unfastened(hub),have_pump(pump),
pump_in(pump,container),have_wheel(wheel),
wheel_in(wheel,container),wheel_on(wheel,hub),
have_wrench(wrench),wrench_in(wrench,container),
have_jack(jack),jack_in_use(jack,hub),
jack_in(jack,container),trim_on(wheel_trim,wheel),
trim_off(wheel_trim),fits_on(tyre,wheel),
full(tyre),flat(tyre),punctured(tyre)]).
% Object Class Definitions
substate_classes([
container(C,[[closed(C)], [open(C)] ]),
nuts(N,[[tight(N,H)],[loose(N,H)],
[have_nuts(N)]]),
hub(H, [[on_ground(H),fastened(H)],
[jacked_up(H,J),fastened(H)],
[free(H),jacked_up(H,J),unfastened(H)],
[unfastened(H),jacked_up(H,J)] ]),
pump(Pu, [[have_pump(Pu)],[pump_in(Pu,C)] ]),
wheel(Wh, [[have_wheel(Wh)],[wheel_in(Wh,C)],
[wheel_on(Wh,H)]]),
wrench(Wr,[[have_wrench(Wr)],[wrench_in(Wr,C)]]),
jack(J,[[have_jack(J)],[jack_in_use(J,H)],
[jack_in(J,C)] ]),
wheel_trim(WT,[[trim_on(WT,Wh)],[trim_off(WT)]]),
tyre(Ty, [[full(Ty)], [flat(Ty)],
[punctured(Ty)], [fits_on(Ty,Wh)] ]) ]).
% Invariants
atomic_invariants([ fits_on(tyre1,wheel1),
fits_on(tyre2,wheel2), fits_on(tyre3,wheel3),
fits_on(tyre4,wheel4), fits_on(tyre5,wheel5)]).
invariant( all(H:hub,fastened(H)<==>
ex(N:nuts,tight(N,H)\/loose(N,H))) ).
invariant( all(H:hub,all(J:jack,jack_in_use(J,H)
<==>jacked_up(H,J))) ).
invariant( all(H:hub,˜free(H)<==>
ex(W:wheel,wheel_on(W,H))) ).
invariant(
all(T:wheel_trim,all(W:wheel,trim_on_wheel(T,W)
<==>trim_on(W,T))) ).
%Hub may only have one set of nuts attached
invariant(all(H:hub,all(N1:nuts,all(N2:nuts,
(tight(N1,H)\/loose(N1,H)) /\
(tight(N2,H)\/loose(N2,H))==>(N1=N2) ))) ).
%Hub may only have one wheel attached.
invariant( all(H:hub,all(W1:wheel,all(W2:wheel,
wheel_on(W1,H)/\wheel_on(W2,H)==>(W1=W2) ))) ).
%If nuts are tight then hub must be on the ground.
invariant(
all(H:hub, ex(N:nuts,tight(N,H))==>on_ground(H))).
%If a trim is on a wheel, then the wheel is on
% a hub and the nuts are tight.
invariant(
all(W:wheel,ex(T:wheel_trim,trim_on_wheel(T,W))
==>
ex(H:hub,wheel_on(W,H)/\ex(N:nuts,tight(N,H))))).
ICAART 2009 - International Conference on Agents and Artificial Intelligence
100