Car Agent. Struktura chování:

Podobné dokumenty
Příklad aplikace Klient/Server s Boss/Worker modelem (informativní)

Typický prvek kolekce pro české řazení

KTE / ZPE Informační technologie

Algoritmizace a programování

Distribuované systémy a výpočty

Čipové karty Lekařská informatika

XI. FIPA abstraktní architektura, nástroj JADE

Algoritmizace a programování

Pokud zadání nerozumíte nebo se vám zdá nejednoznačné, zeptejte se. Pište čitelně, nečitelná řešení nebudeme uznávat.

Class loader. každá třída (java.lang.class) obsahuje referenci na svůj class loader. Implementace class loaderu

Pro kontrolu správného formátu hodnoty N použijeme metodu try-catch.

Abstraktní datové typy: zásobník

1. Téma 12 - Textové soubory a výjimky

Principy objektově orientovaného programování

Stromy. Příklady. Rekurzivní datové struktury. Základní pojmy

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007

Základní pojmy. Matice(řádky, sloupce) Matice(4,6) sloupce

Úvod do programovacích jazyků (Java)

Testování. Zadání příkladu. Vytvoření kostry třídy. Obsah:

Programování v Javě I. Únor 2009

20. Projekt Domácí mediotéka

RMI Remote Method Invocation

Vláknové programování část V

Obsah přednášky 7. Základy programování (IZAPR) Přednáška 7. Parametry metod. Parametry, argumenty. Parametry metod.

2) Napište algoritmus pro vložení položky na konec dvousměrného seznamu. 3) Napište algoritmus pro vyhledání položky v binárním stromu.

Programování v Javě I. Leden 2008

Úvod do programování - Java. Cvičení č.4

Datové struktury. alg12 1

Java a XML. 10/26/09 1/7 Java a XML

Seznamy a iterátory. Kolekce obecně. Rozhraní kolekce. Procházení kolekcí

Projekty pro výuku programování v jazyce Java

Java Výjimky Java, zimní semestr

PREPROCESOR POKRAČOVÁNÍ

Definice třídy. úplná definice. public veřejná třída abstract nesmí být vytvářeny instance final nelze vytvářet potomky

Java - výjimky. private void vstup() throws IOException {... }

17. Projekt Trojúhelníky

Chain of responsibility

8 Třídy, objekty, metody, předávání argumentů metod

typová konverze typová inference

Statické proměnné a metody. Tomáš Pitner, upravil Marek Šabo

IW5 - Programování v.net a C# 4 Pokročilé konstrukce C#

Výjimky. v C# a Javě

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007

public class Karel { private int position; public boolean issmiling; public int getposition() { return position;

UJO Framework. revoluční architektura beans. verze

JUnit příklad na použití

Pokud zadání nerozumíte nebo se vám zdá nejednoznačné, zeptejte se. Pište čitelně, nečitelná řešení nebudeme uznávat.

Generické programování

Dědičnost (inheritance)

Zápis programu v jazyce C#

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007

Semin aˇr Java V yjimky Radek Ko ˇc ı Fakulta informaˇcn ıch technologi ı VUT Unor 2008 Radek Koˇc ı Semin aˇr Java V yjimky 1/ 25

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007

Kód, který se nebude často měnit

OMO. 4 - Creational design patterns A. Singleton Simple Factory Factory Method Abstract Factory Prototype Builder IoC

Pokud zadání nerozumíte nebo se vám zdá nejednoznačné, zeptejte se. Pište čitelně, nečitelná řešení nebudeme uznávat.

Parametrizované třídy Generics generické třídy. JDK zavádí mimo jiné tzv. parametrizované třídy - generics

1. Téma 03 - Rozhodování

Teoretické minimum z PJV

Code Contracts. Robert Haken [MVP ASP.NET, MCT] Software architect, Owner at HAVIT, s.r.o. knowledge-base.havit.cz

Java - řazení objektů

IRAE 07/08 Přednáška č. 7. Začátek (head)

Úvod do programovacích jazyků (Java)

Seminář Java II p.1/43

Definice třídy. úplná definice. public veřejná třída abstract nesmí být vytvářeny instance final nelze vytvářet potomky

Struktura třídy, operátory, jednoduché algoritmy, junit. Programování II 2. cvičení Alena Buchalcevová

Řídicí struktury. alg3 1

Počítačové laboratoře bez tajemství aneb naučme se učit algoritmizaci a programování s využitím robotů CZ.1.07/1.3.12/

Zapouzdření. Tomáš Pitner, upravil Marek Šabo

Objektově orientované programování

Jazyk C# (seminář 6)

IRAE 07/08 Přednáška č. 2. atr1 atr2. atr1 atr2 -33

Jazyk C# (seminář 3)

DTP Základy programování Úvod do předmětu

ANT. Aplikační programování v Javě (BI-APJ) - 1 Ing. Jiří Daněček Katedra softwarového inženýrství Fakulta informačních technologií ČVUT Praha

III/2 Inovace a zkvalitnění výuky prostřednictvím ICT

Webové služby a XML. Obsah přednášky. Co jsou to webové služby. Co jsou to webové služby. Webové služby a XML

Dalším příkladem může být například výstup dat na různá zařízení, souborů, grafických rozhraní, sítě atd.

Programovací jazyk Java

Výčtový typ strana 67

Začínáme s vývojem pro Android

Iterator & for cyklus

Objektově orientované programování

Platforma J2EE. Lukáš Zapletal liberix.cz. Platforma Java 2 Enterprise Edition vývoj webových aplikací

Mělká a hluboká kopie

Dynamicky vázané metody. Pozdní vazba, virtuální metody

DSL manuál. Ing. Jan Hranáč. 27. října V této kapitole je stručný průvodce k tvorbě v systému DrdSim a (v

Generické typy. Podrobněji: The Java Language Specification ( Third Edition ) , 18

5 Rekurze a zásobník. Rekurzivní volání metody

1. Programování proti rozhraní

TŘÍDY POKRAČOVÁNÍ. Události pokračování. Příklad. public delegate void ZmenaSouradnicEventHandler (object sender, EventArgs e);

III/2 Inovace a zkvalitnění výuky prostřednictvím ICT

Jini (pronounced GEE-nee) Cvičení 8 - DS 2006

Textové soubory. alg9 1

Tvorba informačních systémů

Řídicí příkazy KAPITOLA 3. Vstup znaků z klávesnice

PROGRAMOVACÍ JAZYKY A PŘEKLADAČE REALIZACE PŘEKLADAČE I

Základy programování v jazyce JAVA

(c) Miroslav Balík, Ondřej Kroupa, Martin Pelant 11/29/ přednáška. Práce na pozadí. Služby. Notifikace

Úvod - problém. Při přidání nového modelu je nutné upravit. Kód, který se nebu de často měnit. n Mějme obchod s auty:

Transkript:

Car Agent Struktura chování: SequentialBehavior() SubBehavior(AgentRequestProtocol) send/receive parkingrequest SubBehavior(UseThisParkplace) reakce na příchozí zprávu usethisparkplace SequentialBehavior() SubBehavior(OneShotBehavior movingtotheparkplace) SubBehavior(OneShotBehavior parkingcar) SubBehavior(OneShotBehavior leavingparkplace) SubBehavior(AgentRequestProtocol) send leavingparkplace SubBehavior(finalization) Aktivity a procesy se mapují na metody Metody se obalují do OneShotBehavior. Odesílání zprávy a zpracování odpovědi se realizuje jako SubBehavior pomocí AgentRequestProtocol (AchieveREInitiator) Větvení v aktivitním diagramu se realizuje pomocí pomocné proměnné a stavů Každá větev reakce na zprávu má samostatné chování Každá sekvence aktivit a procesů je realizována pomocí SequentialBehavior

Zdrojový kód: import jade.core.aid; import jade.core.behaviours.behaviour; import jade.core.behaviours.oneshotbehaviour; import jade.core.behaviours.sequentialbehaviour; import jade.lang.acl.aclmessage; public class CarAgent extends LabisAgent { private AID dispatcheragent; //reference to Dispatcher private ACLMessage msg; //object of communication message private AgentMessage message; private Car car; private int messagestatus; public CarAgent() { dispatcheragent = new AID("MAS_Dispatcher", AID.ISLOCALNAME); message = new AgentMessage(); public void finalization() { super.finalization(); dodelete(); protected void setup() { car = (Car) this.getarguments()[0]; initialization(); msg = new ACLMessage(ACLMessage.REQUEST); msg.addreceiver(dispatcheragent); message.setcommand(public.msg_parking_request); message.setcontent(car); message.savetomsg(msg); //sending the messages messagestatus = 0; Behaviour b1 = new AgentRequestProtocol(this, msg) { protected void handleinform(aclmessage inform) { message.loadfrommsg(inform); System.out.println("Agent " + inform.getsender().getname() + " do: " + message.getcommand()); if (message.getcommand().equals(public.msg_use_this_parkplace)) messagestatus = 1; if (message.getcommand().equals(public.msg_parking_is_full)) messagestatus = 2; ; Behaviour b2 = new OneShotBehaviour(this) { finalization(); ; SequentialBehaviour mainprocess = new SequentialBehaviour(); mainprocess.addsubbehaviour(b1); mainprocess.addsubbehaviour(new UseThisParkplace()); mainprocess.addsubbehaviour(b2);

addbehaviour(mainprocess); private class UseThisParkplace extends SequentialBehaviour { public void onstart() { if (messagestatus == 2) { System.out.println("Parking is full"); return; if (messagestatus == 0) { System.out.println("Some problem with parking"); return; if (messagestatus == 1) { //actualbehaviour = this; this.addsubbehaviour(new OneShotBehaviour(this.myAgent) { movingtotheparkplace(); ); this.addsubbehaviour(new OneShotBehaviour(this.myAgent) { parkingcar(); ); this.addsubbehaviour(new OneShotBehaviour(this.myAgent) { leavingparkplace(); ); public void movingtotheparkplace() { + " moving to the parkplace: " + message.gettext()); public void parkingcar() { + " parking for " + car.gettime()); long start = System.currentTimeMillis(); while (start + (car.gettime() * 1000) > System.currentTimeMillis()) { public void leavingparkplace() { System.out.println("Agent " + getlocalname() + " leaving parkplace"); message.reset(); msg = new ACLMessage(ACLMessage.INFORM); msg.addreceiver(dispatcheragent); message.setcommand(public.msg_leaving_parkplace); message.setcontent(car); message.savetomsg(msg); addsubbehaviour(new AgentRequestProtocol(this.myAgent, msg) { );

DispatcherAgent Struktura chování: SubBehavior(AgentRespondProtocol) pro příjem REQEST zpráv SubBehavior(AgentRespondProtocol) pro příjem INFORM zpráv Aktivity a procesy se mapují na metody V průběhu života Agenta běží dvě paralelní chování, které pouze přijímají zprávy REQUEST a INFORM (to neodpovídá zcela aktivitnímu diagramu, ale je vyžadována systémem JADE a FIPA komunikací) Veškeré sekvence aktivit a procesů mohou být realizovány pouhým spouštěním, protože již spuštěné chování se vykoná celé Aktivity posílání zpráv jsou pouze odpovědí na zpracovanou přijatou zprávu

Zdrojový kód: import jade.domain.fipanames; import jade.domain.fipaagentmanagement.failureexception; import jade.lang.acl.aclmessage; import jade.lang.acl.messagetemplate; public class DispatcherAgent extends LabisAgent { private MyParkingDispatcherGui dgui; public Car[][] parking; private int carcount = 0; public String choosingandreservationoftheparkplace(car c) { String str = new String(); carcount++; for (int i = 0; i < parking.length; i++) for (int j = 0; j < parking[0].length; j++) { //System.out.println("parking: "+c+"/"+i+","+j+"-"+parking[i][j]); if (parking[i][j] == null) { parking[i][j] = c; str = "(" + i + "," + j + ")"; i = parking.length; j = parking[0].length; dgui.update(); return str; public void releaseoftheparkplace(car c) { carcount--; for (int i = 0; i < parking.length; i++) for (int j = 0; j < parking[0].length; j++) if (c!= null && parking[i][j]!= null) if (parking[i][j].getidnumber().equals(c.getidnumber())) { parking[i][j] = null; i = parking.length; j = parking[0].length; dgui.update(); protected void setup() { initialization(); + " waiting for requests..."); //receiving request's messages MessageTemplate template = MessageTemplate.and(MessageTemplate.MatchProtocol(FIPANames.InteractionProtocol.FIPA_REQUEST), MessageTemplate.MatchPerformative(ACLMessage.REQUEST)); addbehaviour(new AgentRespondProtocol(this, template) { //request process protected ACLMessage prepareresultnotification(aclmessage request, ACLMessage response) throws FailureException { + ": Request action successfully performed"); if (receivemessage.getcommand().equals( Public.MSG_PARKING_REQUEST)) { AgentMessage message = new AgentMessage(); ACLMessage inform = request.createreply();

message.setcommand(public.msg_use_this_parkplace); message inform.setperformative(aclmessage.inform); if (carcount >= parking.length * parking[0].length) message.setcommand(public.msg_parking_is_full); else {.settext(choosingandreservationoftheparkplace((car) receivemessage.getcontent())); message.savetomsg(inform); return inform; else { + ": Action failed"); throw new FailureException("unexpected-error"); ); //receiving inform's messages template = MessageTemplate.and(MessageTemplate.MatchProtocol(FIPANames.InteractionProtocol.FIPA_SUBSCRIBE), MessageTemplate.MatchPerformative(ACLMessage.INFORM)); addbehaviour(new AgentRespondProtocol(this, template) { //vlastni zpracovani udalosti protected ACLMessage prepareresultnotification(aclmessage request, ACLMessage response) throws FailureException { + ": Inform action successfully performed"); if (receivemessage.getcommand().equals( Public.MSG_LEAVING_PARKPLACE)) { releaseoftheparkplace((car) receivemessage.getcontent()); AgentMessage message = new AgentMessage(); ACLMessage inform = request.createreply(); inform.setperformative(aclmessage.inform); message.setcommand(public.msg_ok); message.savetomsg(inform); return inform; else { + ": Action failed"); throw new FailureException("unexpected-error"); ); public DispatcherAgent() { this.availablemessages.add(public.msg_parking_request); this.availablemessages.add(public.msg_leaving_parkplace); parking = new Car[2][2];//initialization of parking dgui = new MyParkingDispatcherGui(this); dgui.setvisible(true); public int getcarcount() { return carcount;

Možný návrh mapování (bez FIPA) Aktivity Metody Procesy Metody Hlavní agentův proces SequentialBehavior Odeslání zprávy příkazy uvnitř chování Přijetí zprávy příkazy uvnitř chování (blokování chování dokud nebude nějaká zpráva přijata) Větvení větvení uvnitř chování založené na podmínce a zařazení potřebného chování každá větev realizována podle své struktury (nejčastěji SequentialBehavior) Sekvence SequentialBehavior Paralelismus CyclicBehavior, každá větev vnitřně jako SequentialBehavior Příkazy uvnitř chování metody obalené OneShotBehavior a spuštěné jako SubBehavior