benvenu4 alla lezione di “programming mul4-agent systems in … · 2017. 5. 25. · benvenu4 alla...
TRANSCRIPT
AnnaTamburro26/05/2016
Benvenu4allalezionedi“Programmingmul4-agentsystemsinAgentSpeakusing
Jason”
Cap7-User-definedComponent
Jasonèdistribuitoconunaseriedifunzionalitàdibase.
Glisviluppatoridurantelefasidisviluppodeilorosistemivoglionoavereunaseriedirequisi4
(accessoaidatabase,integrazionedeisistemilegacy,interfaccegraficheemol4altri).
Persoddisfareques4requisi4èstatoadoTatounapprocciobasatosull’estendibilità.
Jasonèstatosviluppatoinjavaecosìanchelesueestensioniepersonalizzazioniincluderanno
alcuniprogrammiJava.
Gliagen4possonoesseresviluppa4con:
• Linguaggiodichiara4vo
• Paradigmaobject-oriented.
Jason(User-definedcomponent)
AnnaTamburro 2
Nuovicomandipossonoesseresviluppa4usandoazioniinternedefinitedall’utentetramite
diversicomponen4dell’interprete.
Cisono2ragionipercreareun’azioneinterna:
• Estenderelecapacitàdell’agente(questopuòcreareunmigliorlivellodiastrazioneperiltask
richiestorispeToaquellafornitodaAgentSpeak)
• Consen4reall’agentediu4lizzareilcodicelegacygiàprogrammatoinJavaoaltrilinguaggi.
EsistonoancheazionistandardinternecheappartengonogiàalladistribuzionediJason.
E’possibile,inoltre,anchepersonalizzareedestenderediversecomponen4dell’interprete.
Jason(User-definedcomponent)
3AnnaTamburro
Leazioniinternedefinitedall’utentedovrebberoessereorganizzateinlibrerie.
L’azionedistance,peresempioècontenutanellalibreriamathedèaccessibilesianelcontestochenelbodydeipianidiAgentSpeak.
NelcodiceAgentSpeak,un’azioneinternaèaccessibileinquestomodo:
+event:true<−math.distance(10,10,20,30,D);...
+event:math.distance(10,10,20,30,D)&D>30<−...
Jason(User-definedcomponent)
4AnnaTamburro
LelibreriesonodefinitecomepacchefJavaeogniazionenellalibreriautentedovrebbeessere
unaclasseJavaall’internodelpaccheTo.
Inomidelpackageedellaclassesonoinomidellalibreriaedell’azionechesarannopoiusa4nei
programmiAgentSpeak.
package math;
import jason.*;
import jason.asSyntax.*;
import jason.asSemantics.*;
public class distance extends DefaultInternalAction {
@Override public Object execute( TransitionSystem ts, Unifier un, Term[] args ) throws Exception { < the code that implements the IA goes here >
}
}
• Gliiden4ficatoricheinizianoconunaleTeramaiuscolainAgentSpeakdenotanolevariabili
• inomidellalibreriaedellaclassedell’azioneinternainizianoconunaleTeraminuscola.
Jason(User-definedcomponent)
5AnnaTamburro
TuTeleclassichedefinisconoazioniinternedevonoimplementarel’interfacciaInternalAc4on.Esisteun’implementazionedidefaultDefaultInternalAc1onchedovrebbesemplificarelacreazionediunanuovaazioneinterna.UnanuovaclasseperdefinireunanuovaazioneinternadeveestenderelaclasseDefaultInternalAc1on.
Jason(User-definedcomponent)
6AnnaTamburro
Override
Ilmetodoexecute(Transi4onSystem,Unifier,Term[])vienerichiamatodall’agentediAgentSpeak
– IlprimoargomentodelmetodoèTransi1onSystemchecon4eneleinformazionisullostatocorrentedell’agente
– IlsecondoargomentoèUnifierchedeterminal’esecuzionedelpianoincuièapparsal’azioneinternaoilcontrollodiseilpianoèapplicabileequestodipendedasel’azioneinternaapparenelcontestoonelbodydelpiano.
– IlterzoargomentoTerm[]èunarraydiargomen4passa4alleazioniinternedall’utentenelcodicediAgentSpeakchehachiamatol’azioneinterna.
IlsecondometododellaclasseDefaultInternalAc1onèchiamatosuspendInten1on:questometododovrebberes4tuiretruequandol’azioneinternaprovocal'intenzionediesseresospesa.LasuaimplementazionepredefinitanellaclasseDefaultInternalAc1onres4tuiscefalse.
Jason(User-definedcomponent)
7AnnaTamburro
try{NumberTermp1x=(NumberTerm)args[0];
NumberTermp1y=(NumberTerm)args[1];NumberTermp2x=(NumberTerm)args[2];NumberTermp2y=(NumberTerm)args[3];
doubler=Math.abs(p1x.solve()-p2x.solve())+Math.abs(p1y.solve()-p2y.solve());
NumberTermresult=newNumberTermImpl(r);returnun.unifies(result,args[4]);
}
Jason(User-definedcomponent)
8AnnaTamburro
IlcodiceJavanelmetododiesecuzioneperl'azioneinternamath.distancehatrefasi:
1. SioTengonoiriferimen4peri4numeripassa4comeparametriallafunzionieperiqualisaràcalcolataladistanza.NumberTermèun’interfacciaimplementatadaNumberTermImpl.VarTermèunavariabilechepuòessereassociataadunnumerooun’espressionearitme4caArithExpr.
2. Sicalcolailvaloredelladistanza.Ilmetodosolve()vieneusatoperoTenereilvalorenumericodiNumberTerminmodocheancheleespressionipossanoessereusatecomeparametri,peresempio:math.distance(X1+2,Y1/5-1,20,20,D)
3. VienecreatounoggeToNumberTermcherappresentailrisultato.QuestooggeTovieneunificatoconilquintoargomento.Taleunificazionepotrebbenonriuscireoaveresuccesso.
try{NumberTermp1x=(NumberTerm)args[0];
NumberTermp1y=(NumberTerm)args[1];NumberTermp2x=(NumberTerm)args[2];NumberTermp2y=(NumberTerm)args[3];
//2.calculatesthedistancedoubler=Math.abs(p1x.solve()-p2x.solve())+Math.abs(p1y.solve()-p2y.solve());//3.createsthetermwiththeresultand
//unifiestheresultwiththe5thargumentNumberTermresult=newNumberTermImpl(r);returnun.unifies(result,args[4]);
}
Jason(User-definedcomponent)
9AnnaTamburro
IlcodiceJavanelmetododiesecuzioneperl'azioneinternamath.distancehatrefasi:
catch(ArrayIndexOutOfBoundsExcep4one){
thrownewJasonExcep4on("Theinternalac4on’distance’"+"hasnotreceivedfivearguments!");
}catch(ClassCastExcep4one){
thrownewJasonExcep4on("Theinternalac4on’distance’"+"hasreceivedargumentsthatarenotnumbers!");
}
catch(Excep4one){thrownewJasonExcep4on("Errorin’distance’");
}
Jason(User-definedcomponent)
10AnnaTamburro
Ilrisultatodell’unificazioneèancheilrisultatodell'esecuzionedell’azioneinterna.Nelcasoincuil’azioneinternavieneu4lizzatanelcontestodiunpianoeritornafalsesignificacheilpianononèapplicabile.Quandovieneu4lizzatoinunbodydelpiano,ilreturnfalsefaràfalliràilpianochehachiamatol’azioneinterna.
Un’azioneinternapuòres4tuire:• unvalorebooleano:indicasel'esecuzionedell’azioneinternahaavutosuccessoo
meno• uniteratorediunificatori:vieneu4lizzataperanalizzaresoluzionialterna4ve
quandol’azioneinternavieneu4lizzatanelcontestodeipiani.
PersonalizzazionedellaclasseAgent
DalpuntodivistadiuninterpreteAgentSpeakesteso,unagenteè:• uninsiemedibelief
• unaseriedipiani
• funzionidiselezionedefinitedall'utente
• funzionedifiducia(unrapportosocialmenteacceTabileperimessaggiricevu4)
• BeliefUpdateFunc4on
• BeliefRevisionFunc4on
• circumstance:comprendeglieven4incorso,leintenzionievariealtrestruTurechesononecessariedurantel'interpretazionediunagenteAgentSpeak
L'implementazionepredefinitadiquestefunzioniècodificatainunaclassechiamataAgent,chepuòesserepersonalizzatadaglisviluppatorialfinediestenderelefunzionalitàdibase.
11AnnaTamburro
PersonalizzazionedellaclasseAgent
12AnnaTamburro
LaclasseAgentcomprendeunaseriedimetodisucuivieneeffeTuatooverride:
Diagrammadelleclassi:Agent
AlcunideimetodidellaclasseAgentchevengonosoTopos4adoverridesonoiseguen4:
• selectMessage(Queue<Message>mailbox):selezionailmessaggiochesaràges4tonelciclodiragionamentocorrente.L’implementazionedidefaultrimuoveeres4tuisceilprimomessaggiodellapostadell’agente
• selectEvent(Queue<Event>events):selezional'eventocheverràges4tonelciclodiragionamentocorrente.L’implementazionedidefaultrimuoveeres4tuisceilprimoeventodellacoda
• selectOp1on(List<Op4on>op4ons):questometodovieneu4lizzatoperselezionareunatradiverseopzioni.L’implementazionedidefaultrimuoveeres4tuiscelaprimaopzionesecondol’ordineincuiipianisonosta4scrifnelcodice.
PersonalizzazionedellaclasseAgent
13AnnaTamburro
• selectInten1on(Queue<Inten4on>inten4ons):selezional'intenzionediessereulteriormenteeseguitonelciclodiragionamentocorrente.L’implementazionedidefaultrimuoveeres4stuiscelaprimaintenzioneincodaedopol’esecuzionel’intenzionevieneinseritaallafinedellacoda.Leintenzionivengonoeseguitesecondol’algoritmodischedulingRoundRobin
• socAcc(Messagem):res4tuiscetrueseilmessaggiomèsocialmenteacceTabile.L’implementazionedidefaultres4tuiscetruepertufimessaggi.Nelleapplicazioniincuilasicurezzaèunproblema,ènecessariosovrascriverloperchél’agentepotrebberisultaresuscefbileadaTacchi
• buf(List<Literal>percepts):aggiornalabasedibeliefconiprecefda4eaggiungetuficambiamen4chesonosta4effefvamenteesegui4comenuovieven4nelsetdieven4.
• brf(Literaladd,Literalrem,Inten4oni):rivedelabeliefpermeTendol’aggiuntaelarimonzione(sepresente)diununleTerale.IlterzoparametroèlastruTuradell’intenzionecheharichiestoilcambiamentodibelief.LoscopodiquestometodoèesseresoTopostoadoverride,inquantol’implementazionedidefaultnonfanulla.
PersonalizzazionedellaclasseAgent
14AnnaTamburro
LafunzionediBeliefUpdateaggiornasemplicementelabeliefegeneraglieven4esterni,manonnegaran4scelaconsistenza.SpeTaallosviluppatoredelmodelloambientefareinmodochelecontraddizioninonsiverifichino.
L’implementazionedidefaultdellaBeliefUpdatefunc4onfunzionacomesegue:
forallb∈Bifb∉P
thendeletebfromB
add⟨-b,⊤⟩toEforallp∈P
Ifp∉BthenaddptoBadd⟨+p[source(percept)],⊤⟩toE
PersonalizzazionedellaclasseAgent
B:InsiemeditufiliTeralinellabeliefP:listadeipercefaTualiE:insiemedeglieven4
15AnnaTamburro
Comeesempiodipersonalizzazionediunagenteusiamoilrobotaspirapolvere.Esempio:cambiamoeventselec4onfunc4ondelrobotinmododadareprioritàaglieven4crea4quandovienepercepitolosporco.
importjason.asSeman4cs.*;importjason.asSyntax.*;importjava.u4l.*;publicclassDirtyFocusAgentextendsAgent{
sta4cTriggerfocus=Trigger.parseTrigger("+dirty[source(percept)]");@OverridepublicEventselectEvent(Queue<Event>events){
Iterator<Event>i=events.iterator();while(i.hasNext()){ Evente=i.next(); if(e.getTrigger().equals(focus)){ i.remove(); returne; }}returnsuper.selectEvent(events);
}}
PersonalizzazionedellaclasseAgent
STEP:1. Lacodadiquestoagentepuòavereeven4del
4po:dirty,pos(r),andpos(l)einaggiuntaglieven4internicrea4daisuoiproposi4
2. IlmetodoselectEventcontrollatufglielemen4dellacodaecontrollaseiltriggerèugualeadirty[source(percept)]
3. Seesisteuntaleevento,vienerimossodallacodaeres4tuitoperessereges4todalciclodiragionamentocorrente
4. Altrimen4,chiamal'implementazionepredefinitadelmetodores4tuendol’elementoall’iniziodellacoda.
16AnnaTamburro
PersonalizzazionedellaclasseAgent
importjason.asSeman4cs.*;importjason.asSyntax.*;importjava.u4l.*;publicclassIdleAgentextendsAgent{
sta4cTermidle=DefaultTerm.parse("idle");@OverridepublicInten4onselectInten4on(Queue<Inten4on>inten4ons){
Iterator<Inten4on>ii=inten4ons.iterator();while(ii.hasNext()){ Inten4oni=ii.next(); if(isIdle(i)){ if(inten4ons.size()==1){ ii.remove(); returni; }
}else{//siriferiscealprimoif ii.remove();
returni; }//endelse }//endwhile
returnnull;}
Esempio:ilcodiceseguenteimplementaunainten4onselec4onfunc4onnelcodicediAgentSpeakperunqualcheAgente.
• L'intenzione,chiamiamola“intenzionediinafvità”,deveessereselezionatasoloquandononc'ènientealtrodafare
• Finchèl'agentehamolteintenzioni,nondovrebbemaiessereselezionatal'intenzionediinafvità
17AnnaTamburro
PersonalizzazionedellaclasseAgent
privatebooleanisIdle(Inten4oni){
for(IntendedMeansim:i.getIMs()){
Predlabel= im.getPlan().getLabel();
if(label.hasAnnot(idle)){ returntrue; } } returnfalse;
}}
18AnnaTamburro
• Percontrassegnarel'intenzionecome'inafvo',ilprogrammatoreaggiungeun'annotazionediinafvitànell'e4cheTadelpianocheformeràl'intenzione.
• QuestopuòcomportareproblemidiconcorrenzaquandonuovefunzionidiselezionevengonointrodoTesenzatroppaaTenzione.
• Nelcasoincuil’ambientesiatroppodinamico,invece,risultau4lemeTeredapartequalcheevento.
Esempio:ilcodiceseguenteimplementaunainten4onselec4onfunc4onnelcodicediAgentSpeakperunqualcheAgente.
Perunagenteèessenzialelavorareefficacementeinunsistemamul4-agenteeperfarequestodeve:• interagireconl'ambiente
• Interagireconaltriagen4
L'interpreteAgentSpeakèsoloilmoduloragionamentoall'internodell’architeTuradiunagentecomplessivachesiinterfacciaconilmondoesterno.IlterminearchiteIurastaadiden4ficarel'architeTuracomplessivadell’agente.
L’architeTurafornisce:
• percezione(tramiteisensori)
• Azione(modellazionedell'agentetramiteglieffectors),
• ilmodoincuil'agentericevemessaggidaaltriagen4.
Ques4aspefpossonoancheesserepersonalizza4perogniagentesingolarmente.
Personalizzazionedell’architeTura
19AnnaTamburro
L’implementazionedell’architeTuradidefaultsitrovanellaclasseAgArchchel’utentepuòestenderequandorisultanecessario.Questaclasseèunbridgeperl’infrastruTurasoTostantemul4-agenteinmodocheilprogrammatorepossapersonalizzare,senzapreoccuparsidicomevieneimplementataconcretamentelapercezioneedellacomunicazionechevengonoges4tealivelloarchiteTurale.
Personalizzazionedell’architeTura
perceive:res4tuisceunelencodiliTeralicherappresentanoquantoappenapercepitodall'agente.L'implementazionepredefinitaofenesemplicementelepercezioniinvia4dall'ambienteelores4tuisce.act:quandol'esecuzionediqualcheintenzionecon4eneun'azione,questometodovienechiamatopereseguirel'azione.Ilprimoargomentocon4eneideTaglidell'azionesendMsg:inviaunmessaggioaunaltroagentebroadcast:questometodoinviaunmessaggioatufgliagen4no4checondividonol'ambientecheckMail:questometodoleggetufimessagginellacaselladipostadell'agentealivelloinfrastruTuraeliaggiungenellacaselladipostaalivellodiinterpretecomeistanzedelmessaggiodellaclasseJason.
20AnnaTamburro
importjason.asSyntax.*;importjason.architecture.*;importjava.u4l.*;publicclassVCArchextendsAgArch{
@OverridepublicList<Literal>perceive(){
//u4lizzalapercezionedidefaultList<Literal>per=super.perceive();//senullaècambiantonell’ambienteif(per!=null){
Iterator<Literal>ip=per.iterator();while(ip.hasNext()){
Literall=ip.next();if(l.getFunctor().equals("pos")){
ip.remove();}
}}
returnper;}
}
Personalizzazionedell’architeTura
Quandosipersonalizzanoalcunidiques4metodi,èspessoopportunou4lizzarel'implementazionepredefinitainAgArchesolodopochehaterminatolasuaesecuzionesipassaaprocessareilvalorediritornodiques4metodi.
Esempio:rimuovereognipercezionerela4vaalposizionamentoperl’agenteaspirapolvere:
MASvacuum_cleaning{environment:VCWorldagents:vcagentArchClassVCArch;
}
QuestaclassevieneassegnataadunagentenelfilediconfigurazionedelprogeTousandolaparolachiaveagentArchClass.
21AnnaTamburro
Esempio:supponiamodivolercontrollare,alivellodiarchiteTura,azioniperagen4aspirapolvereinmodochepossacompieresoloazioniadestraeasinistra.Leazionicheilrobotpuòsceglieredifarenonsarannoeseguite,anchesel’interpreteleconsideraeseguiteconsuccesso.Questo4podipersonalizzazionedell’architeTuravieneusataperevitarechegliagen4compianoqualcosadiproibitoopericoloso,datocheessisonoautonomiedèquindidifficilegaran4rechenontenteràdifarecertecose.
@Overridepublicvoidact(Ac4onExecac4on,List<Ac4onExec>feedback){
Stringafunctor=ac4on.getAc4onTerm().getFunctor();if(afunctor.equals("le�")||afunctor.equals("right")){ //fingechel’azionesiaeseguitaconsuccessoelaimpostaatrue ac4on.setResult(true); feedback.add(ac4on);}else{ //richiamal’implementazionedidefault super.act(ac4on,feedback);}
}
Personalizzazionedell’architeTura
22AnnaTamburro
Esempio:torniamoall'esempiorobotdomes4coesupponiamochel'agentesupermarketdeveignorareimessaggiinvia4dagliagen4owner.SicambiailmetododipostacheckMail()inmododarimuoveretalimessaggialivellodiarchiteTura.
Personalizzazionedell’architeTura
@OverridepublicvoidcheckMail(){//richiamal’implementazionepredefinitvaper//rimuovereimessaggiconcondizionemailbox.super.checkMail();//rimuovetufimessaggiinvia4dagliagen4ownerIteratorim=getTS().getC().getMailBox().iterator();while(im.hasNext()){
Messagem=(Message)im.next();
if(m.getSender().equals("owner")){im.remove();//inviaunmessaggioall’agenteownerper//informarlocheisuoimessaggiverrannoignora4Messager=newMessage("tell",getAgName(),m.getSender(),"msg(\"Youarenotallowedtoorderanything,"+"onlyyourrobotcandothat!\")");sendMsg(r);
}//endif }//endwhile }//endcheckMail
23AnnaTamburro
E’possibilepersonalizzareanchelaclasseBeliefBasecheèl’interfacciaimplementatadallaclasseDefaultBeliefBase(implementazionedidefault).
PersonalizzazionedellaBeliefbase
add(literalBel):aggiungeunleTeralenellaBB.Res4tuiscetrueseèstataaggiuntalabelief
remove(literalBel):rimuoveilleTeraledallaBB.Res4tuiscetrueselabeliefèstataeffefvamenterimossa
contains(literalBel):controllaseunleTeralesitrovabellaBBelores4tuisce.
getRelevant(literalBel):res4tuisceuniteratorepertuTelebelief
24AnnaTamburro
CisonoduepersonalizzazionidellaBBdisponibiliconladistribuzioneJason:1. memorizzalebeliefinunfileditesto(inmododamantenerelostatodellaBBdiun
agente)2. memorizzaalcunedellebeliefinundatabaserelazionale(puòessereusataperl’accessoa
qualsiasidbrelazionale).
PersonalizzazionedellaBeliefbase
25AnnaTamburro
MemorizzazionedellebeliefinunfileditestoPerconfigurarel'agenteadu4lizzarelaBBpersistenteinununicofilesiusaquestaconfigurazione:
PersonalizzazionedellaBeliefbase
MAScustBB{agents:abeliefBaseClassjason.bb.TextPersistentBB;}
Ognivoltachesieseguequestoagente,lesuebeliefvengonocaricatedaunfile(denominato<nomedell'agente>.bb)e,primaditerminare,lesuebeliefsonomemorizzatenellostessofile.Sino4cheilcodiceAgentSpeakrimanelostessoindipendentementedallapersonalizzazionedellaBB.L'aTuazionediquestaBBsos4tuiscesemplicementel’initefermaimetodipercaricareesalvarelebelief.
26AnnaTamburro
Memorizzazionedellebeliefinundatabaserelazionale• Peru4lizzarelapersistenzainundatabase,(JavaDataBaseConnec4vity)siusalafeature
JavaJDBC• NonvengonomemorizzatetuTelebeliefinundatabase,masoloquelleesplicitamente
elencate
• Laconnessionepersonalizzatarichiede5parametri:
– Driverjdbc
– URLperlaconnessione
– Nomeutente
– Password
– Unalistadibeliefmappatenellatabellatablece
PersonalizzazionedellaBeliefbase
MAScustBB{agents:abeliefBaseClassjason.bb.JDBCPersistentBB("org.hsqldb.jdbcDriver",//driverforHSQLDB"jdbc:hsqldb:bookstore",//URLconnec4on"sa”,//user"",//password"[count_exec(1,tablece)]");
}
27AnnaTamburro
Memorizzazionedellebeliefinundatabaserelazionale• Selatabellatablecenonesiste,vienecreata
• Conquestaconfigurazione,sialaleTurachelamodificaallebelief,vengonomappateconcomandiSQL.
PersonalizzazionedellaBeliefbase
28AnnaTamburro
MAScustBB{agents:abeliefBaseClassjason.bb.JDBCPersistentBB("org.hsqldb.jdbcDriver",//driverforHSQLDB"jdbc:hsqldb:bookstore",//URLconnec4on"sa”,//user"",//password"[count_exec(1,tablece)]");
}
IllinguaggioAgentSpeakinterpretatodaJasonacceTadirefvedelcompilatore.Ledirefvevengonou4lizzateperpassarealcuneistruzioniall'interpretenonlegateallaseman4cadellinguaggio,masemplicementesintafche.Esistonodue4pididirefvechepossonoessereinseriteinqualsiasipuntodelcodiceAgentSpeak:• single-commanddirec4ves• scopedirec4ves
EsempiodiSingle-commanddirec1ves:"{"<direc4ve-name>"("<parameters>")""}”
EsempiodiScopedirec1ves:"{""begin"<direc4ve-name>"("<parameters>")""}"
<agentspeak-program>"{""end""}"
Pre-processingDirec4ves
29AnnaTamburro
UnacaraTeris4cainteressantediJasonèchel'insiemedidirefvedelcompilatorepuòesserefacilmenteestesodalprogrammatore.Ogninuovadirefvavieneprogrammatainunaclassecheimplemental'interfacciaDirec4ve.Questainterfacciahasolounmetodo:
• Agentprocess(Preddirec4ve,AgentouTerContent,AgentinnerContent):
– ilparametropredicatorappresentaladirefva
– ouTerContentrappresentailpuntoincuideveessereusataquestadirefva
– innerContentindicailcontenutoracchiusodalladirefva.
– Ilcontenutointernohaunaseriedipianiebeliefchedevonoesseremodifica4dalladirefva
– Ilmetododeveres4tuireunanuovaistanzadell’agenteincuisonocontenu4ipianielebeliefmodifica4.
Pre-processingDirec4ves
30AnnaTamburro
FINESperosisiacapitoqualcosa:)
AnnaTamburro26/05/2016