Esercizio di Formalizzazione


Robotic Farm

Ci sono K1 trattori per arare, K2 trattori per seminare, K3 contadini, N campi, un certo numero di aratri e seminatori. Un trattore per l'aratura potrebbe essere adatto anche per la semina e viceversa. Ogni campo deve essere prima arato, poi seminato ed infine innaffiato.
Per innaffiare e' sufficiente che una contadino si trovi sul campo, ad es: se vale  (at contadino1 campo5), allora il campo 5 puo' essere innaffiato (ammesso che prima sia stato seminato - condizione NECESSARIA).
NOTA: un trattore non si sposta da solo: il contadino deve essere a bordo del trattore. Ovviamente un contadino deve anche poter scendere da un trattore....
 

File problema di test:

(define (problem Dieci-Campi)
  (:domain CAMPI)
  (:objects traA1 traA2 traS1 traS2 aratro1 aratro2 seminatore1 seminatore2
     contadino1 contadino2
     cam1 cam2 cam3 cam4 cam5
     cam6 cam7 cam8 cam9 cam10)
  (:init
   (contadino contadino1)
   (contadino contadino2)
   (CAMPO cam1)
   (CAMPO cam2)
   (CAMPO cam3)
   (CAMPO cam4)
   (CAMPO cam5)
   (CAMPO cam6)
   (CAMPO cam7)
   (CAMPO cam8)
   (CAMPO cam9)
   (CAMPO cam10)
   (TRA traA1)
   (TRA traA2)
   (TRA traS1)
   (TRA traS2)
   (TRA-ARA traA1)
   (TRA-ARA traA2)
   (TRA-SEMINA traS1)
   (TRA-SEMINA traS2)
   (ARATRO aratro1)
   (ARATRO aratro2)
   (SEMINATORE seminatore1)
   (SEMINATORE seminatore2)
   (CONNESSO cam1 cam2)
   (CONNESSO cam2 cam1)
   (CONNESSO cam2 cam3)
   (CONNESSO cam3 cam2)
   (CONNESSO cam3 cam4)
   (CONNESSO cam4 cam3)
   (CONNESSO cam4 cam5)
   (CONNESSO cam5 cam4)
   (CONNESSO cam5 cam2)
   (CONNESSO cam2 cam5)
   (CONNESSO cam5 cam6)
   (CONNESSO cam6 cam5)
   (CONNESSO cam6 cam7)
   (CONNESSO cam7 cam6)
   (CONNESSO cam7 cam8)
   (CONNESSO cam8 cam7)
   (CONNESSO cam8 cam1)
   (CONNESSO cam1 cam8)
   (CONNESSO cam8 cam9)
   (CONNESSO cam9 cam8)
   (CONNESSO cam9 cam10)
   (CONNESSO cam10 cam9)
   (CONNESSO cam5 cam1)
   (CONNESSO cam1 cam5)
   (at traA1 cam1);; dynamic predicates
   (at traA2 cam5)
   (at traS1 cam1)
   (at traS2 cam4)
   (at aratro1 cam3)
   (at aratro2 cam8)
   (at seminatore1 cam2)
   (at seminatore2 cam6)
   (at contadino1 cam1)
   (at contadino2 cam5)
   )
 
  (:goal (and
   (innaffiato cam6)
   (innaffiato cam7)
   (innaffiato cam8)
   (innaffiato cam9)
   (innaffiato cam10)
   (seminato cam1)
   (seminato cam1)
   (seminato cam2)
   (seminato cam3)
   (seminato cam4)
   (seminato cam5)))
  )