Babeş-bolyai university of cluj-napoca


Limbaje de programare pentru agenți



Yüklə 381,75 Kb.
səhifə6/13
tarix26.07.2018
ölçüsü381,75 Kb.
#59182
1   2   3   4   5   6   7   8   9   ...   13

2.3 Limbaje de programare pentru agenți


Dezvoltarea sistemelor mult-agent poate fi realizată în orice tip de limbaj de programare, cu preponderență cele orientate-obiect, deoarece conceptul de obiect este foarte asemănător agentului. Deși agenții pot fi dezvoltați pornind de la obiecte, limbaje specifice agenților, platforme sau instrumente de dezvoltare sunt utile în abordarea sistemelor multi-agent, acestea putând îmbunătăți calitatea și stabilitatea sistemului.

2.3.1 Programarea orientă agent (POA)


Yoav Shoham propune “o nouă paradigmă de programare, bazată pe un alt punct de vedere asupra procesului de calcul”, pe care o numește programare orientată pe agenți, agent-oriented programming [14].

Principală noțiune de bază a programării orientate pe agenți este programarea acestor entități în termeni de noțiuni mentale: opinie, cerere, intenție, termeni pe care teoreticienii în domeniu i-au dezvoltat cu scopul de a descrie proprietățile agenților.

De ce abordarea unei programări orientate agent? Capacitatea agenților inteligenți de a acționa independent prin procese simple a stârnit un interes major. Printre caracteristicile principale ce clasifică acești agenți de interes regăsim [14]:


  • capacitatea de a acționa independent;

  • reprezentarea superioară a funcționalității – un nivel superior de abstractizare comparativ modelelor orientate-obiect;

  • flexibilitatea, combinând caracteristicile funcționale active și reactive;

  • performanța în timp real;

  • fiabilitatea pentru aplicațiile distribuite;

  • abilitatea muncii în echipă.

Vom prezenta în cele ce urmează câteva limbaje de programare ce implementează paradigma programării orientate agent.

2.3.2 Limbaje de programare orientate agent

2.3.2.1 Agent0


Agent0 este limbajul propus de Shoham în [17], cu scopul de a dovedi teoriile sale, reprezentând un punct de pornire în direcția limbajelor orientate agent. Într-un astfel de limbaj, un agent este descris de următoarele caracteristici: capabilitatea (instrucțiunile pe care le poate executa), opinii inițiale (jucând rolul opiniilor dintr-o arhitectură BDI), angajamente, reguli de angajament (acestea determină modul în care agentul acționează, comportamentul acestuia). Fiecare regulă de angajament este definită prin următoarele: condiția mesajului, condiția mentală și o acțiune.

Pentru a determina următoarea regulă aplicată la un moment dat, condiția mesajului este potrivită cu mesajele pe care agentul le recepționează, iar condiția mentală este potrivită cu intenția agentului. Dacă regula este clasificată ca fiind acceptată, atunci agentul execută acțiunea. Așa cum este prezentat în [17], sintaxa regulilor de angajament este următoarea:



COMMIT (msgcond, mntlcond, agent, action)

unde msgcond reprezintă mesajul, mntlcond reprezintă starea mentală, agent definește numele agentului, iar action acțiunea ce urmează a fi executată.

Modul de operare este descris prin instrucțiunea repetitivă descrisă mai jos (Figura 2.3):


  1. Citește toate mesajele curente, actualizând opiniile – și în consecință angajamentele – când acest lucru este necesar.

  2. Execută toate angajamentele pentru ciclul curent, acolo unde condiția de capabilitate a acțiunii asociate este satisfăcută.

  3. Salt la pasul 1.

Este de remarcat faptul că acest limbaj este de fapt un prototip, nefiind conceput pentru realizarea sistemelor de producție la scară largă.

Figura 2.3 Fluxul de control în limbajul AGENT0





2.3.2.2 Jack Intelligent Agent


Jack Intelligent Agent sau pe scurt Jack, este un limbaj de programare dedicat agenților dezvoltat de Agent Oriented Software Pty. Ltd. (AOS). Jack este un framework dezvoltat in Java, care vine cu o extensie a programării orientate obiect prin introducerea caracteristicilor tipice agenților precum: agenți, obiective, evenimente, capacități și baze de cunoștințe. Jack utilizează agenți inteligenți pentru modelarea comportamentelor simple și raționale [18].

În [19] agenții Jack sunt descriși ca fiind ”componente software autonome care au obiective explicite de atins sau evenimente de tratat”. Jack introduce un set de clase și interfețe, precum și un set de componente plug-in, care permit dezvoltarea componentelor bazate pe agenți. Agenții nu sunt constrânși în utilizarea unui anumit limbaj de comunicare, dar limbaje precum KQML sau FIPA ACL pot fi utilizate în acest scop [18].



Jack oferă suport pentru diverse arhitecturi, dar modelul de bază care este abordat de către autori este Belief Desire Intention (BDI). Bazat pe modelul BDI, agentul va urmări dorințele sau obiectivele pentru care a fost dezvoltat prin găsirea planurilor corespunzătoare și a intențiilor pe baza unui set actual de date (convingeri) cu privire la starea mediului.

În conformitate cu [18] Jack este compus din trei extensii principale. Prima extensie oferă limbajului o sintaxă suplimentară care poate fi împărțită în:



  • Cuvinte cheie pentru identificarea componentelor agent.

  • Un set de declarații utilizate la declarația atributelor sau a unor caracteristici ale componentelor.

  • Un set de declarații utilizate pentru definirea relațiilor.

  • Un set de declarații folosit pentru manipularea stării agenților.

Compilatorul este considerat cea de-a doua extensie a limbajului Jack, acesta fiind utilizat pentru a converti codul în sintaxă pur Java. Din moment ce codul este compilat în Java, acesta poate fi apelat de un alt cod Java.

În cele din urmă, a trei-a extensie este reprezentată de agentul Jack Kernel (agentul nucleu), care furnizează o serie de clase necesare în momentul rulării, oferind astfel caracteristica orientată agent a limbajului.


2.3.2.3 Open Agent Architecture


Open Agent Architecture (OAA) este un framework dedicat dezvoltării agenților, care a fost creat la centrul inteligenței artificiale al Institutului de Cercetare Stanford (SRI). Acesta este definit de autori ca “a framework for integrating a community of heterogeneous software agents in a distributed environment”. Deci, OAA, permite dezvoltarea sistemelor multi-agent, în care agenții comunică cu scopul de a-și îndeplini obiectivele pentru care aceștia au fost implementați. Procedurile bibliotecii dedicată agenților sunt disponibile în mai multe limbaje de programare precum: Java, Lisp, Prolog și C/C++.

În OAA agenții sunt văzuți ca procese independente ce folosesc un limbaj de comunicare la nivel înalt și care pot contribui în mod activ la procesul de calcul. Caracteristicile de autonomie și reactivitate ale unui agent sunt de asemenea regăsite în agenții utilizați de acest limbaj.

OAA se bazează pe agenți ce comunică între aceștia folosind Inter-Agent Communication Language (ICL), și de asemenea specifică modelul de comunicare descris de structura sistemului, așa cum se poate observa și în Figura 2.4.

Figura 2.4 Structura sistemului Open Agent Architecture (vezi Figura 1 în [20])

În această structură agentul Facilitator joacă rolul principal. El reprezintă un agent special de tip server care are rolul de a comunica și coordona ceilalți participanți și care de asemenea permite un sistem blackboard de comunicare [20]. Într-un mediu de tip OAA pot exista mai mulți agenți de tip facilitator, fiecare dintre aceștia având proprii săi agenți de servicii.

Celelalte categorii de agenți regăsiți în acest sistem sunt Application Agent, Meta Agent și User Interface Agent. Agenții dedicați aplicației oferă un anumit serviciu, fie independent de domeniu precum recunoașterea vorbirii, procesarea limbajului natural sau e-mailul, fie pentru un domeniu specific precum agentul care rezervă anumite locuri. Meta Agent are rolul de a asista facilitatorul în coordonarea altor agenți. În plus acești agenți pot utiliza cunoștințele specifice aplicației și domeniului.

În anumite sisteme agenții dedicați interfeței cu utilizatorul constau în mai multe tipuri de ”micro-agenți”, fiecare dintre aceștia monitorizând diferite date de intrare, cum ar fi scrierea, vorbirea sau alte acțiuni ale utilizatorului. Acești ”micro-agenți” sunt numiți Modality Agents și pot fi observați în structura sistemului definită mai sus (Figura 2.4).

Cu excepția agentului facilitator care acționează asemănător unui server, toți restul agenților sunt denumiți, ca o generalitate, agenți client, deoarece acționează asemenea unor clienți pentru facilitator, acesta din urmă oferind serviciile necesare, servicii ce se regăsesc și în paradigmele client-server.


2.3.3 Java Agent Development Framework (JADE)


Java Agent Development Framework (JADE) [36] reprezintă un instrument implementat în întregime în limbajul Java, cu scopul de a simplifica dezvoltarea sistemelor multi-agent în conformitate cu standardele FIPA. JADE este un software gratuit, distribuit de Telecom Italia, care deține de altfel și drepturile de autor asupra produsului. JADE oferă posibilități de distribuire a platformei agent pe mai multe mașini, precum și un set de instrumente grafice utile pentru fazele de implementare și depanare ale aplicației.

2.3.3.1 Arhitectura JADE


Platforma JADE este formată din mai multe recipiente pentru agenți, numite containere, ce pot fi distribuite într-o rețea. Un container poate stoca un set de agenți și reprezintă o instanță a mediului de rulare JADE după cum se menționează în [21]. Printre aceste containere există unul special numit ”container principal” (”main container”), ce reprezintă primul container creat, precum și cel care este activ până în momentul închiderii platformei. Odată ce sunt lansate, toate celelalte containere trebuie să se înregistreze acestuia. Containerele sunt identificate prin numele acestora, astfel încât recipientul principal este numit ”Main Container”, în timp ce altele sunt pur și simplu numite ”Container-1”, ”Container-2” etc., aceste denumiri putând fi schimbate de către dezvoltator. Figura 2.5 reprezintă modelul FIPA de management al agenților implementat in JADE.

Figura 2.5 Captură a platformei JADE

Agenții din interiorul containerelor sunt identificați cu ajutorul unui identificator unic (AID), precum se menționează în standardele FIPA. Elementele de bază conținute de identificatorul unic sunt numele și adresa agentului. Numele agentului este un identificator unic global și are următoarea formă: ”local_name@platform_name” unde local_name reprezintă numele sau porecla dată de către utilizator agentului, iar platform_name este numele platformei pe care agentul rulează. Adresa agentului este moștenită de la platforma pe care acesta activează, și este utilizată pentru schimbul mesajelor folosind protocolul de transport al mesajelor (MTP).

JADE implementează toate standardele protocolului de transport al mesajelor definit de FIPA, cu scopul de a obține interoperabilități între diferite platforme [18]. Protocolul implicit utilizat de către JADE MTP este protocolul HTTP și începe de la inițializarea containerului principal. Alte protocoale de transport al mesajelor regăsite în domeniul public sunt: IIOP, JMS și JABER XMPP.

Împreună cu containerul principal, doi agenți speciali sunt inițializați si activați în mod automat. Acești doi agenți sunt Sistemul de Management al Agenților (Agent Management System - AMS) și Directory Facilitator (DF) definiți în standardele de management ale agenților FIPA. AMS este responsabil cu gestionarea operațiunilor platformei agent și cu furnizarea serviciilor descrise, astfel acesta devine: ”authority in the platform” [21]. DF oferă un serviciu numit ”pagini aurii”, a cărui datorie este de a ajuta agenții în găsirea serviciilor necesare realizării obiectivelor.

2.3.3.2 Instrumente JADE


JADE oferă un set de instrumente utile pentru operarea, managementul și monitorizarea agenților în fazele de implementare și depanare ale aplicației. Utilizarea acestor instrumente presupune extinderea clasei jade.core.Agent, prin urmare acestea pot fi administrate asemenea unor agenți. În cele ce urmează vom prezenta pe scurt câteva dintre aceste instrumente.
2.3.3.2.1 Remote Monitoring Agent

Agentul pentru monitorizarea la distanță (RMA) este probabil unul dintre cele mai importante instrumente pe care JADE le oferă. Acesta prezintă o interfață grafică (a se consulta Figura 2.4) pentru gestionarea și controlul platformei agent și oferă un mod grafic de inițiere a altor instrumente JADE. O instanță a RMA poate fi inițiată folosind comanda ”-gui” introdusă la linia de comandă sau prin invocarea clasei jade.tools.rma.rma.
2.3.3.2.2 The Dummy Agent

Agentul Dummy este un instrument folosit pentru testarea comportamentului altor agenți prin trimiterea de mesaje ACL. Interfața grafică (a se vedea Figura 2.6) oferă dezvoltatorilor posibilitatea de a compune și expedia mesaje cu ușurință, precum și verificarea unui istoric al mesajelor trimise și recepționate.

Figura 2.6 Interfața grafică a agentului Dummy



2.3.3.2.3 The Sniffer Agent

Agentul Sniffer are rolul de a intercepta mesajele ACL trimise între agenți cu scopul de a le evidenția grafic (vezi Figura 2.7), similar unei diagrame de secvență. Este un instrument de o mare importanță în monitorizarea comunicării agenților ce activează în respectiva platformă.

Figura 2.7 Reprezentarea grafică a agentului Sniffer



2.3.3.2.4 The Introspector Agent

Agentul Introspector (a se vedea Figura 2.8) poate fi utilizat pentru depanarea și monitorizarea ciclului de viață al unui agent, comportamentul, precum și mesajele expediate sau recepționate de acesta. Acesta oferă posibilitatea dezvoltatorului de a observa comportamentul agentului pas cu pas.

Figura 2.8 Interfața grafică corespunzătoare agentului Introspector



2.3.3.3 Funcționalități JADE


Împreună cu instrumentele grafice utile procesului de depanare, JADE respectă standardele specificațiilor FIPA oferind mai multe caracteristici necesare dezvoltării sistemelor multi-agent. Unele dintre acestea sunt descrise în secțiunile ce urmează.
2.3.3.3.1 Crearea agenților

Implementarea unui agent JADE, este o operație simplă ce presupune crearea unei clase Java ce extinde clasa jade.core.Agent și mai apoi implementarea metodei setup() a clasei de bază. Această metodă reprezintă punctul de pornire al agentului, în consecință toate inițializările acestuia se declară aici. Un exemplul simplu al unui agent ”Hello World” este prezentat mai jos.

Încetarea activității unui agent are loc în momentul apelării metodei doDelete(). Similar cu procesul de creare, imediat înaintea încetării execuției metoda takeDown() a clasei Agent este apelată. Implementarea acestei metode este opțională, deși este foarte utilă când este necesar un clean-up, cum ar fi închiderea conexiunii la baza de date sau eliminarea unor elemente de interfață.


2.3.3.3.2 Comportamentul agenților

Obiectivele pe care un agent trebuie să le îndeplinească sunt efectuate în JADE folosind modelul abstractizat al comportamentului. Deoarece una dintre principalele caracteristici ale unui agent este autonomia, agenții JADE își pot controla comportamentul prin introducerea acestora în funcție de nevoi. Comportamentele sunt implementate folosind clase Java ce extind clasa jade.core.Behaviour, acestea fiind atribuite agentului apelând metoda addBehaviour(behaviour) și sunt disociate folosind metoda removeBehaviour(behaviour). Parametrul furnizat acestor metode reprezintă comportamentul implementat de către dezvoltator. Fiecare clasă ce reprezintă un comportament trebuie să implementeze două metode action() și done(). Metoda action() definește acțiunea asociată comportamentului respectiv, în timp ce metoda done() indică dacă sarcina a fost finalizată sau nu. De fiecare dată când agentul execută un comportament, metoda action() va fi executată pana la finalizarea respectivei sarcini. Deoarece comportamentele sunt executate în paralel este datoria programatorului de a defini momentul în care agentul ar trebui să comute între execuțiile acestora.

În Figura 2.9 este prezentat modelul execuției comportamentelor unui agent.

Figura 2.9 Modelul execuției unui agent (vezi Figura 2 în [38])

În acest context JADE oferă trei tipuri principale de comportamente: one-shot behaviour, cyclic și generic behaviors. Fiecare dintre acestea respectă caracteristicile menționate anterior, cu mici particularități descrise în aliniatele ce urmează.



  • One-Shot Behavior reprezintă cel mai simplu comportament, fiind finalizat într-o singură execuție. Prin aceasta ne referim la faptul că metoda action() este apelată o singură dată, iar valoarea returnată de metoda done() este întotdeauna adevărată. Pentru implementarea acestui comportament clasa OneShotBehaviour trebuie extinsă.

  • Cyclic Behavior este opusul comportamentului descris anterior, acesta fiind asemenea unui ciclu infinit, deci metoda done() returneză tot timpul o valoare falsă în timp ce metoda action() este executată la infinit. Pentru implementarea acestui comportament clasa CyclicBehaviour trebuie extinsă. Pentru a opri ciclul infinit comportamentul trebuie sa fie îndepărtat din lista comportamentelor atribuită agentului utilizând metoda removeBehaviour().

  • Generic Behavior este reprezentat de clasa Behaviour. Diferă de comportamentele prezentate mai sus prin faptul că metodei done() nu i se oferă o implementare prealabilă. Responsabilitate de a determina condiția de stop a comportamentului cade în seama programatorului.
2.3.3.3.3 Comunicarea agenților

Unul dintre principalele aspecte în dezvoltarea sistemelor multi-agent este reprezentat de comunicarea agenților. JADE oferă aceasta ca una dintre caracteristicile sale fundamentale, iar implementarea acesteia este în conformitate cu standardele FIPA descrise anterior. Comunicarea între agenții JADE se bazează pe un schimb asincron de mesaje, fiecare agent având o coadă internă în care sunt stocate mesajele recepționate. Chiar dacă agentul este înștiințat de recepționarea unui mesaj este alegerea dezvoltatorului când și dacă aceste mesaje sunt preluate.

Structura mesajelor, în conformitate cu FIPA ACL, este formată din mai multe elemente precum: expeditorul mesajului, lista receptorilor, actul comunicativ, conținutul mesajului, limbajul conținutului, ontologia precum și unele câmpuri ce permit controlul conversațiilor concurente: identificatorul conversației, reply-with, in-reply-to, reply-by. Limbajul conținutului se referă la sintaxa utilizată pentru exprimarea conținutului mesajului în timp ce ontologia se referă la semnificațiile asociate acestui conținut.


2.3.3.3.4 Serviciul ”Pagini Aurii”

O altă caracteristică importantă este reprezentată de serviciul ”Pagini Aurii” (Yellow Pages Service), care permite agenților să publice o descriere a serviciilor pe care aceștia le oferă, în scopul de a fi ușor de găsit de către alți agenți interesați de aceste servicii [22]. În conformitate cu specificațiile FIPA, JADE pune la dispoziție agentul Directory Facilitator, care oferă serviciul ”pagini aurii”, astfel încât publicarea și căutarea serviciilor este realizează prin intermediul schimbului de mesaje.

Pentru publicarea unui serviciu următoarele trebuie furnizate următoarele informații ce includ: identificatorul agentului (AID), lista de servicii oferite și descrierea lor și opțional, lista limbajelor conținutului și ontologi. Pentru fiecare serviciu descrierea include numele său, tipul, precum și o listă de proprietăți specifice serviciului reprezentată ca perechi de tipul cheie-valoare. Pentru a publica serviciul descrierea acestuia trebuie creată ca o instanță a clasei DFAgentDescription, invocând mai apoi metoda register() din clasa DFService.

Pe de altă parte, căutarea unui serviciu presupune definirea unui model ce conține descrierea serviciului solicitat. Acest model este trimis agentului DF, care va oferi răspunsul în forma unei liste de servicii ce se potrivesc cu descrierea oferită. Implementarea acestui proces este realizată folosind metoda search() din clasa DFService.

CAPITOLUL III



Yüklə 381,75 Kb.

Dostları ilə paylaş:
1   2   3   4   5   6   7   8   9   ...   13




Verilənlər bazası müəlliflik hüququ ilə müdafiə olunur ©muhaz.org 2024
rəhbərliyinə müraciət

gir | qeydiyyatdan keç
    Ana səhifə


yükləyin