(define (domain wumpus-a)
(:requirements :strips) ;; maybe not necessary
(:predicates
(adj ?square-1 ?square-2)
(pit ?square)
(at ?what ?square)
(have ?who ?what)
(dead ?who))
(:action move
:parameters (?who ?from ?to)
:precondition (and (adj ?from ?to)
(not (pit ?to))
(at ?who ?from))
:effect (and (not (at ?who ?from))
(at ?who ?to))
)
(:action take
:parameters (?who ?what ?where)
:precondition (and (at ?who ?where)
(at ?what ?where))
:effect (and (have ?who ?what)
(not (at ?what ?where)))
)
(:action shoot
:parameters (?who ?where ?arrow ?victim ?where-victim)
:precondition (and (have ?who ?arrow)
(at ?who ?where)
(at ?victim ?where-victim)
(adj ?where ?where-victim))
:effect (and (dead ?victim)
(not (at ?victim ?where-victim))
(not (have ?who ?arrow)))
)
)
(define (problem wumpus-a-1)
(:domain wumpus-a)
(:objects
sq-1-1 sq-1-2 sq-1-3
sq-2-1 sq-2-2 sq-2-3
the-gold
the-arrow
agent
wumpus)
(:init
(adj sq-1-1 sq-1-2) (adj sq-1-2 sq-1-1)
(adj sq-1-2 sq-1-3) (adj sq-1-3 sq-1-2)
(adj sq-2-1 sq-2-2) (adj sq-2-2 sq-2-1)
(adj sq-2-2 sq-2-3) (adj sq-2-3 sq-2-2)
(adj sq-1-1 sq-2-1) (adj sq-2-1 sq-1-1)
(adj sq-1-2 sq-2-2) (adj sq-2-2 sq-1-2)
(adj sq-1-3 sq-2-3) (adj sq-2-3 sq-1-3)
(pit sq-1-2)
(at the-gold sq-1-3)
(at agent sq-1-1)
(have agent the-arrow)
(at wumpus sq-2-3))
(:goal (and (have agent the-gold) (at agent sq-1-1)))
)
Resulting plan:
(MOVE THE-GOLD SQ-1-3 SQ-2-3) (MOVE THE-GOLD SQ-2-3 SQ-2-2) (MOVE THE-GOLD SQ-2-2 SQ-2-1) (MOVE THE-GOLD SQ-2-1 SQ-1-1) (TAKE AGENT THE-GOLD SQ-1-1)
(define (domain wumpus-b)
(:requirements :strips)
(:predicates
(adj ?square-1 ?square-2)
(pit ?square)
(at ?what ?square)
(have ?who ?what)
(takeable ?what)
(is-gold ?what)
(is-arrow ?what)
(alive ?who)
(dead ?who))
(:action move
:parameters (?who ?from ?to)
:precondition (and (alive ?who)
(at ?who ?from)
(adj ?from ?to)
(not (pit ?to)))
:effect (and (not (at ?who ?from))
(at ?who ?to))
)
(:action take
:parameters (?who ?what ?where)
:precondition (and (alive ?who)
(takeable ?what)
(at ?who ?where)
(at ?what ?where))
:effect (and (have ?who ?what)
(not (at ?what ?where)))
)
(:action shoot
:parameters (?who ?where ?arrow ?victim ?where-victim)
:precondition (and (alive ?who)
(have ?who ?arrow)
(is-arrow ?arrow)
(at ?who ?where)
(alive ?victim)
(at ?victim ?where-victim)
(adj ?where ?where-victim))
:effect (and (dead ?victim)
(not (alive ?victim))
(not (at ?victim ?where-victim))
(not (have ?who ?arrow)))
)
)
(define (problem wumpus-b-1)
(:domain wumpus-b)
(:objects sq-1-1 sq-1-2 sq-1-3
sq-2-1 sq-2-2 sq-2-3
the-gold the-arrow
agent wumpus)
(:init (adj sq-1-1 sq-1-2) (adj sq-1-2 sq-1-1)
(adj sq-1-2 sq-1-3) (adj sq-1-3 sq-1-2)
(adj sq-2-1 sq-2-2) (adj sq-2-2 sq-2-1)
(adj sq-2-2 sq-2-3) (adj sq-2-3 sq-2-2)
(adj sq-1-1 sq-2-1) (adj sq-2-1 sq-1-1)
(adj sq-1-2 sq-2-2) (adj sq-2-2 sq-1-2)
(adj sq-1-3 sq-2-3) (adj sq-2-3 sq-1-3)
(pit sq-1-2)
(at the-gold sq-1-3)
(is-gold the-gold)
(takeable the-gold)
(at agent sq-1-1)
(alive agent)
(have agent the-arrow)
(is-arrow the-arrow)
(takeable the-arrow)
(at wumpus sq-2-3)
(alive wumpus))
(:goal (and (have agent the-gold)
(at agent sq-1-1)
))
)
Resulting plan:
(MOVE AGENT SQ-1-1 SQ-2-1) (MOVE AGENT SQ-2-1 SQ-2-2) (MOVE AGENT SQ-2-2 SQ-2-3) (MOVE AGENT SQ-2-3 SQ-1-3) (TAKE AGENT THE-GOLD SQ-1-3) (MOVE AGENT SQ-1-3 SQ-2-3) (MOVE AGENT SQ-2-3 SQ-2-2) (MOVE AGENT SQ-2-2 SQ-2-1) (MOVE AGENT SQ-2-1 SQ-1-1)
(define (domain wumpus-c)
(:requirements :strips)
(:predicates
(at ?what ?square)
(adj ?square-1 ?square-2)
(pit ?square)
(wumpus-in ?square)
;; <-> (exists ?x (and (is-wumpus ?x) (at ?x ?square) (not (dead ?x))
(have ?who ?what)
(is-agent ?who)
(is-wumpus ?who)
(is-gold ?what)
(is-arrow ?what)
(dead ?who))
(:action move-agent
:parameters (?who ?from ?to)
:precondition (and (is-agent ?who)
(at ?who ?from)
(adj ?from ?to)
(not (pit ?to))
(not (wumpus-in ?to)))
:effect (and (not (at ?who ?from))
(at ?who ?to))
)
(:action take
:parameters (?who ?what ?where)
:precondition (and (is-agent ?who)
(at ?who ?where)
(at ?what ?where))
:effect (and (have ?who ?what)
(not (at ?what ?where)))
)
(:action shoot
:parameters (?who ?where ?with-what ?victim ?where-victim)
:precondition (and (is-agent ?who)
(have ?who ?with-what)
(is-arrow ?with-what)
(at ?who ?where)
(is-wumpus ?victim)
(at ?victim ?where-victim)
(adj ?where ?where-victim))
:effect (and (dead ?victim)
(not (wumpus-in ?where-victim))
(not (have ?who ?with-what)))
)
(:action move-wumpus
:parameters (?who ?from ?to)
:precondition (and (is-wumpus ?who)
(at ?who ?from)
(adj ?from ?to)
(not (pit ?to))
(not (wumpus-in ?to)))
:effect (and (not (at ?who ?from))
(at ?who ?to)
(not (wumpus-in ?from))
(wumpus-in ?to))
)
)
(define (problem wumpus-c-1)
(:domain wumpus-c)
(:objects sq-1-1 sq-1-2 sq-1-3
sq-2-1 sq-2-2 sq-2-3
the-gold the-arrow
agent wumpus)
(:init (adj sq-1-1 sq-1-2) (adj sq-1-2 sq-1-1)
(adj sq-1-2 sq-1-3) (adj sq-1-3 sq-1-2)
(adj sq-2-1 sq-2-2) (adj sq-2-2 sq-2-1)
(adj sq-2-2 sq-2-3) (adj sq-2-3 sq-2-2)
(adj sq-1-1 sq-2-1) (adj sq-2-1 sq-1-1)
(adj sq-1-2 sq-2-2) (adj sq-2-2 sq-1-2)
(adj sq-1-3 sq-2-3) (adj sq-2-3 sq-1-3)
(pit sq-1-2)
(is-gold the-gold)
(at the-gold sq-1-3)
(is-agent agent)
(at agent sq-1-1)
(is-arrow the-arrow)
(have agent the-arrow)
(is-wumpus wumpus)
(at wumpus sq-2-3)
(wumpus-in sq-2-3))
(:goal (and (have agent the-gold) (at agent sq-1-1)))
)
Resulting plan:
(MOVE-AGENT AGENT SQ-1-1 SQ-2-1) (MOVE-AGENT AGENT SQ-2-1 SQ-2-2) (SHOOT AGENT SQ-2-2 THE-ARROW WUMPUS SQ-2-3) (MOVE-AGENT AGENT SQ-2-2 SQ-2-3) (MOVE-AGENT AGENT SQ-2-3 SQ-1-3) (TAKE AGENT THE-GOLD SQ-1-3) (MOVE-AGENT AGENT SQ-1-3 SQ-2-3) (MOVE-AGENT AGENT SQ-2-3 SQ-2-2) (MOVE-AGENT AGENT SQ-2-2 SQ-2-1) (MOVE-AGENT AGENT SQ-2-1 SQ-1-1)
(define (domain wumpus-adl)
(:requirements :adl :typing)
;; object types
(:types agent wumpus gold arrow square)
(:predicates
(adj ?square-1 ?square-2 - square)
(pit ?square - square)
(at ?what ?square)
(have ?who ?what)
(alive ?who))
(:action move
:parameters (?who - agent ?from - square ?to - square)
:precondition (and (alive ?who)
(at ?who ?from)
(adj ?from ?to)
)
:effect (and (not (at ?who ?from))
(at ?who ?to)
(when (pit ?to)
(and (not (alive ?who))))
(when (exists (?w - wumpus) (and (at ?w ?to) (alive ?w)))
(and (not (alive ?who)))))
)
(:action take
:parameters (?who - agent ?where - square ?what)
:precondition (and (alive ?who)
(at ?who ?where)
(at ?what ?where))
:effect (and (have ?who ?what)
(not (at ?what ?where)))
)
(:action shoot
:parameters (?who - agent ?where - square ?with-arrow - arrow
?victim - wumpus ?where-victim - square)
:precondition (and (alive ?who)
(have ?who ?with-arrow)
(at ?who ?where)
(alive ?victim)
(at ?victim ?where-victim)
(adj ?where ?where-victim))
:effect (and (not (alive ?victim))
(not (have ?who ?with-arrow)))
)
)
(define (problem wumpus-adl-1)
(:domain wumpus-adl)
(:objects
sq-1-1 sq-1-2 sq-1-3 sq-2-1 sq-2-2 sq-2-3 - square
the-gold - gold
the-arrow - arrow
agent-1 - agent
wumpus-1 - wumpus)
(:init (adj sq-1-1 sq-1-2) (adj sq-1-2 sq-1-1)
(adj sq-1-2 sq-1-3) (adj sq-1-3 sq-1-2)
(adj sq-2-1 sq-2-2) (adj sq-2-2 sq-2-1)
(adj sq-2-2 sq-2-3) (adj sq-2-3 sq-2-2)
(adj sq-1-1 sq-2-1) (adj sq-2-1 sq-1-1)
(adj sq-1-2 sq-2-2) (adj sq-2-2 sq-1-2)
(adj sq-1-3 sq-2-3) (adj sq-2-3 sq-1-3)
(pit sq-1-2)
(at the-gold sq-1-3)
(at agent-1 sq-1-1)
(alive agent-1)
(have agent-1 the-arrow)
(at wumpus-1 sq-2-3)
(alive wumpus-1))
(:goal (and (have agent-1 the-gold) (at agent-1 sq-1-1) (alive agent-1)))
)