Università degli Studi di L’Aquila
WOA 2003 dagli Oggetti agli Agenti
Sistemi Intelligenti e Computazione Pervasiva
Strips-like Planning in the DALI
Logic Programming Language
Stefania Costantini
Arianna Tocchio
Gli argomenti trattati:
• Il
linguaggio DALI
• La pianificazione
• STRIPS
• DALI
• Qualche esempio
• Conclusioni
Dali: un linguaggio logico per Agenti
e Sistemi Multiagente
“Un agente e’ una entita’ situata in un
ambiente,capace di azioni autonome allo scopo
di raggiungere i propri obiettivi”
Caratteristiche di DALI:
• Classi di eventi e loro interazione:
• Eventi esterni
• Eventi interni
• Eventi del presente
DALI
• Eventi del passato
• Azioni
• Interfogliamento delle attivita’
• Priorita’ nelle azioni
• Priorita’ negli eventi
• Gestione dei goals nel planning
• Memoria
Dali: gli eventi esterni e del presente
“Un sistema reattivo mantiene una continua interazione con l’ambiente e
risponde ai cambiamenti che avvengono in esso”
Eventi esterni:
Eventi del presente:
Stage 1: reazione all’evento esterno
Funzione: si innesca la reazione
all’evento
Un evento del presente fa’ in modo che il
processo di reazione ad un evento interno venga
‘anticipato’ da un processo di ragionamento
suona_la_svegliaE:>mi_alzoA
mi_alzo:< sono_riposato.
Stage 2: dopo la reazione, l’ agente e’ capace
di ricordare l’evento esterno.
arriva_qualcuno:-suona_il_campanelloN.
arriva_qualcunoI:>mi_vestoA.
mi_vesto:< sono_svestito.
suona_il_campanelloE:>apro_la_portaA
Funzione: ragionamento su cosa e’ accaduto
nel passato.
sono_pigro:-suona_la_svegliaP
not(mi_alzoP)
sono_pigroI:> prendo_un_giorno_di_ferieA
Gli eventi esterni vengono elaborati sulla base
della loro priorita’ (alta o normale).
Dali: gli eventi interni
“Un evento interno e’ una conclusione raggiunta dall’agente alla quale
l’agente reagisce similarmente ad un evento esterno”
Le conclusioni interne scatenano la proattivita’
dell’agente!
Stage1: le condizioni di innesco (eventi interni o
esterni a cui l’agente ha reagito,azioni
compiute,conoscenza,…) sono tutte vere: si
scatena la reazione
Stage2: dopo la reazione, l’agente e’
capace di ricordare l’evento interno
cucino:-acceso_gasP,
metto_pentola_sul_gasP,
minuti_cottura(25),
passati_minuti(25).
cucinoI:>tolgo_pentola_dal_gasA,spengo_gasA.
Il “comportamento” di un evento interno e’
determinato dalle direttive dell’utente che
indicano :
• ogni quanto tempo tentare l’evento;
• quante volte ad un evento si deve
reagire:
• forever
• una volta, due volte,...
e quando:
• in assoluto
• quando “cambia” una determinata
condizione di innesco
• fino a quando (forever, fino ad un certo
tempo, fino ad una certa condizione)
Piu’ eventi interni possono essere correlati
scatenando inferenze successive!
Dali: i goals
“Un goal è un obiettivo parziale o finale che l’agente tenta di
raggiungere utilizzando conoscenza e ricordi ”
Dali possiede due tipi di goals:
• goals che l’agente tenta di perseguire
autonomamente:
Sono legati agli eventi interni. Quando un
agente invoca un goal, attiva un evento
interno corrispondente che tenta le
precondizioni. Quando diventano vere, si
attiva il piano.
• goals
che
“invocati”
l’agente
verifica
vaiE:-assert(sono_in_corridoio),
trovare_oroG(_).
trovare_oro(X):entrare_stanzaG(X),prendere_oroG(X),uscireG(X),
entrato_stanzaP(X),preso_oroP(X).
entrare_stanza(X):-sono_in_corridoio.
entrare_stanzaI(X):>entrato_stanzaA(X),
retractall(sono_in_corridoio).
se
Quando un agente trova un goal, verifica se è
stato già ottenuto
I goals da ottenere sono trattati
come eventi interni. Se raggiunti,
vengono ricordati dall’ agente
come eventi del passato.
prendere_oro(X):-entrato_stanzaP(X).
prendere_oroI(X):-preso_oroA(X).
preso_oro(X):<isa(oro_in(X)).
prendere_oroI(X):-non_trovo_oroA(X).
uscire(X):-entrato_stanzaP(X).
uscireI(X):>esco_daA(X),assert(sono_in_corridoio).
Dali: la comunicazione e le azioni
“Il mondo reale è un ambiente multiagente:non ci si può guardare
intorno per ottenere un goal senza tenere in conto gli altri ”
Comunicazione:
un evento esterno puo’ essere un messaggio da un altro agente, e, simmetricamente, una
azione puo’ consistere nell’inviare un messaggio.
message(To/all, From/Environment, Evento_esterno)
Le azioni hanno:
Sempre successo se non hanno precondizioni
Hanno successo solo quando la condizione e’ true, se hanno precondizioni.
suona_il_campanelloE(gino)):>apro_la_portaA,
messageA(gino,ciao)
Dali: gli eventi del passato
“Risolvere un problema equivale a "comprenderlo"; e "comprendere"
significa, in ultima analisi, ricondurre la situazione presente a una
situazione gia' nota del passato ”
Eventi esterni e del presente
Eventi interni
Azioni
Goals
Il periodo di tempo in cui un evento del
passato viene “ricordato” e’ anch’esso definito
dalle direttive dell’utente:
• forever
• fino ad un certo tempo
• fino a quando si verifica una
condizione
data
Reazione
sunny_weatherE :> open_the_windowA.
EVENTI
DEL
PASSATO
rainy_weatherE:>close_the_windowA
open_the_windowA:<close_the_windowP
close_the_windowA:< open_the_windowP
Dali: pianificare STRIPS-like
Pianificare STRIPS-like : affrontare problemi di pianificazione
con un approccio similare a quello di STRIPS senza emulare
STRIPS:
STRIPS pianifica
utilizzando un
interprete ad hoc
(STRIPS planner)
DALI pianifica attraverso
una metodologia che
utilizza operatori già
presenti nel linguaggio
STRIPS : operatori e rappresentazione
“STRIPS (STanford Research Institute Problem Solver) e’ il
problem solver usato da Shakey, uno dei primi robots costruiti
usando la tecnologia AI”
STRIPS PLANNER
La rappresentazione STRIPS per una azione e’
data da:
• precondizioni: una lista di formule
atomiche che devono essere true perche’
l’azione accada.
• delete list: una lista di relazioni primitive
non piu’ vere dopo che l’azione ha avuto
luogo.
• add list: una lista di relazioni primitive vere
dopo il compimento dell’azione.
achieve_all([],W0,W0).
achieve_all(Goals,W0,W2) ←
remove(G,Goals,Rem_Gs) ∧
achieve(G,W0,W1) ∧
achieve_all(Rem_Gs,W1,W2).
achieve(G,W,W) ← holds(G,W)
achieve(G,W0,W1) ← clause(G,B) ∧
achieve_all(B,W0,W1).
achieve(G,W0,do(Action,W1)) ←
achieves(Action,G) ∧
preconditions(Action,Pre) ∧
achieve_all(Pre,W0,W1)
Pianificare con DALI
“Un pianificatore è un modulo che riceve in ingresso dal sistema
percettivo una descrizione dello stato attuale ed una dello stato da
raggiungere e, basandosi su un insieme di conoscenze, genera un piano ”
Come funziona:
Stato ambiente
...,goal1G,...
Goal
Piano per ottenere
PLANNER
Azioni possibili
il goal
goal1:- condizione11,...,condizione1k
subgoal11G,...,subgoal1NG,
subgoalP11,...,subgoalP1N.
...
goal1:-condizionem1,...,condizionemk
subgoalGm1,...,subgoalGmN,
subgoalP11,...,subgoalP1N.
goal1I:>azione1,...,goal2G,...,azionek.
DALI : un classico problema di planning
“L’idea è utilizzare il concetto di goal e di evento interno per
determinare i passi necessari alla realizzazione di un piano
adattandolo ai cambiamenti ambientali”
Facciamo la spesa...con DALI
vaiE:>sono_a_casaA,compra_tuttoG.
compra_tutto:-isa(supermercato_aperto),
isa(ferramenta_aperta),procura_bananaG,
procura_latteG,procura_chiodiG,vai_a_casaG,
pago_bananaP,pago_latteP,pago_chiodiP,sono_
a_casaP.
compra_tutto:-isa(supermercato_aperto),
not(isa(ferramenta_aperta)),procura_bananaG,
procura_latteG,vai_a_casaG, pago_bananaP,
pago_latteP,sono_a_casaP.
compra_tutto:-not(isa(supermercato_aperto)),
isa(ferramenta_aperta),procura_chiodiG,
vai_a_casaG, pago_chiodiP,sono_a_casaP.
compra_tuttoI:>acquisto_tuttoA.
…
procura_banana:-vai_al_supermercatoG,compra_bananaG,
sono_al_supermercatoP,compro_bananaP.
procura_bananaI:>pago_bananaA.
procura_chiodi:-vai_alla_ferramentaG,compra_chiodiG,
sono_in_ferramentaP,compro_chiodiP.
procura_chiodiI:>pago_chiodiA.
vai_al_supermercato:-isa(supermercato_aperto),
sono_a_casaP.
vai_al_supermercato:-isa(supermercato_aperto),
sono_in_ferramentaP.
vai_al_supermercatoI:>sono_al_supermercatoA.
…
vai_a_casa:-sono_in_ferramentaP.
vai_a_casa:-sono_al_supermercatoP.
vai_a_casaI:>sono_a_casaA.
compra_banana:-sono_al_supermercatoP.
compra_bananaI:>compro_bananaA.
…
compra_chiodi:-sono_in_ferramentaP.
compra_chiodiI:>compro_chiodiA.
DALI: rivedere con i goals l’esempio delle
scarpe
vaiE:>metti_scarpeG.
metti_scarpe:-metti_scarpa_dG,metti_scarpa_sG,
messa_scarpa_dP, messa_scarpa_sP.
metti_scarpeI:>messe_le_scarpeA.
metti_scarpa_d:-metti_calzino_dG,messo_calzino_dP.
metti_scarpa_dI:>messa_scarpa_dA.
metti_scarpa_s:-metti_calzino_sG,messo_calzino_sP.
metti_scarpa_sI:>messa_scarpa_sA.
metti_calzino_d:-isa(ho_il_calzino_d).
metti_calzino_dI:>messo_calzino_dA.
metti_calzino_s:-isa(ho_il_calzino_s).
metti_calzino_sI:>messo_calzino_sA.
Cosa abbiamo fatto:
• L’approccio alla pianificazione mostrato si applica a problemi semplici e
con contesto dinamico.
• Dali ha la possibilità di affrontare problemi di pianificazione più
complessi usando Answer Set Programming
Grazie!
Scarica

Strips-like Planning in the DALI Logic Programming Language