Documente Academic
Documente Profesional
Documente Cultură
Cuprins
3
4
Executia Jack
7
Clasa de agent
12
Beneficiile Jack
15
Concluzii
16
Compilatorul Agentilor Jack este un pre-procesor al codului sursa scris in JAL pe care
il converteste in cod sursa JAVA. Acest cod sursa JAVA poate fi compliat in codul
masina Java si astfel urmand a fi rulat.
3) The JACK Agent kernel
The JACK Agent kernel este motorul de rulare pentru programele scrise in JAL.
Acest motor ofera un set de clase ce da programelor JAL functionalitatea de orientare
spre agenti. Cele mai multe dintre aceste clase pot rula si implementa infrastructura de
baza si functionalitate ale agentilor.
4) The JACK Development Environment
JDE este o cross-platform a mediului grafic dezvoltator care poate fi folosita pentru a
dezvolta/realiza aplicatiile agentilor Jack. In plus , pentru a oferi suport pentru
generatia de coduri, instrumentele sunt pregatite sa suporte procesul de design si
urmarirea agentului de executie.
Arhitectura lui Jack
Dintr-o perspectiva inginereasca, Jack consta in facilitati de arhitectura independente plus un
set de componente plug-in care adreseaza cererile specificilor agenti.
Plug-in-urile furnizate cu versiunea 3.0 , eliberat in februarie 2001 , include suport pentru
modelul BDI si modelul pentru crearea echipelor de agenti numite SimpleTeam.
Pentru un programator de aplicatii, Jack consta acum in trei principale extensii la Java.
Primul este un set de aditii sintetice la limbajul gazda. Aceste aditii , la randul lor pot fi
impartite dupa cum urmeaza:
- un mic numar de cuvinte-cheie pentru identificarea componentului principal al unui
agent
- un set de afirmatii pentru declararea atributiilor si alte caracteristici ale componentelor
(de exemplu: informatia continuta pe in credinte sau adusa de evenimente)
- un set de afirmatii pentru manipularea starii unui agent (de exemplu: adaugarea de noi
teluri pentru a fi indeplinite , schimbari de credinte, interactiuni cu alti agenti).
- un set de afirmatii pentru definirea unei relatii statice(de exemplu: ce planuri pot fi
adoptate pentru a reactiona la un anumit eveniment)
Mai mult, programatorul poate folosi afirmatiile Java in componentele unui agent. Jack
suporta de asemenea variabile logice si cursoare. A doua extensie la Java este o compilatie
care transforma aditiile sintactice descrise mai sus in afirmatii si clase Java care pot fi
incarcate cu sau apelate de alte coduri Java. Compilatia transforma de altfel partial codul
planurilor pentru a obtine semantica corespunzatoare a arhitecturii BDI.
Un programator Jack poate extinde sau schimba arhitectura unui agent furnizandu-i
plugin-uri noi . Este posibila si adaugarea unor extensii sintactice pentru a fi manipulate de
compilatorul Jack. Similar, o infrastructura de diferite comunicatii poate fi furnizata prin
metodele corespunzatoare Run-time. Viitoarele versiuni ale lui Jack vor extinde baza
modelului BDI cu noi plugin-uri si se va adauga un numar de instrumente de monitorizare si
dezvoltare.
JACK event(s);
5
JACK plan(s);
JACK agent(s);
JACK capability(s);
JACK view(s);
JACK beliefset(s);
Plus o clasa Java care contine functia principala a aplicatiei care reprezinta punctul de intrare
pentru masina virtuala java si pentru orice alt fisier Java cerut de aceasta aplicatie . Fisierele
care sunt create pentru aceste entitati trebuie sa aiba acelasi nume de baza al entitatii definita
in fisier. Ei pot avea o extensie desemnand tipul entitate Jack continuta sau pur si simplu o
extensie Jack.
Extension
Usage
.jack
.agent
.cap
.plan
.event
.bel
.view
.java
Executia Jack
Cand un agent este introdus intr-un sistem , va astepta pana cand ii va fi implementat un tel
sau pana cand intalnest un eveniment la care trebuie sa raspunda. Cand primeste un
eveniment(un tel), agentul incepe activitatea pentru a manipula evenimente. Daca acesta nu
crede ca telul sau evenimentul nu a fost rezolvat , el va cauta planul potrivit pentru a-l rezolva.
Faceti un agent robot primar care sa contina o metoda Java care printeaza un mesaj pentru a
indica ca robotul picteaza o parte.
Introducere
Tinta acestui exercitiu este de a demonstra cum se construieste, compileaza si ruleaza un
program Jack folosind Mediul de Dezvoltare JACK (JDE). Drept urmare, niciun concept de
programare agent-orientat in afara in afara de crearea agentilor nu este implicat.
Nota: Seminariile o sa faca uz de design tool pentru a produce diagrame de design si pentru
a crea definitiile initiale de tip skeleton pentru aplicatie. JDE suporta multiple cai pentru a
adauga detaliu definitiior. Chiar si asa, pentru a evita confuzia de pe parcusul seminariilor o
s folosim mereu Edit ca pe o optiune jack File pentru a adauga detalii definitiilor.
Instructiuni:
1. Asigurati-va ca CLASSPATH este setata sa includa jack.jar si calea radacina pentru
aplicatia dvs.
2. Intr-un director nou numit ex1) initializati JDE folosind urmatoarea comanda:
java -Xmx90m aos.main.Jack
3. Creeaza un nou proiect dupa cum urmeaza:
Click-Stanga pe File menu in partea stanga superioara a ecranului.
Click-Stanga pe New Project.
A casuta de dialog New Project File o sa apara.
Numiti fisierul proiectului PaintRobot si click pe butonul New. Sufixul fisierului proiectului
(.prj) o sa fie adaugat automat.
Casuta de dialog The New Project File o sa se inchida si o sa va intoarca in ecranul JDE.
-In ecranul superior din partea stanga a ferestrei browser-ului , numele proiectului o sa apara
cu text rosu
4. Acum o sa dezvoltam aplicatia noastra folosin design tool.We. In aceasta aplicatie o sa
dezvoltam urmatoarele tipuri de diagrame:
O diagrama a unui agent de nivel de top care sa includa detaliile mesajelor trimise/folosite
de un agent
o diagrama ierarhica agent-capability pentru fiecare agent.
O diagrama A Data-Event-Plan (DEP) pentru fiecare capabilitate.
Observati ca la adaugarea de noi componente la diagrama de design, skeletonul pentru
definitia tipului este creat automat si adaugat la browser. Link-urile create intre componente
de pe canvas-ul de design rezulta in declaratiile corespunzatoare care sunt adaugate la
definitiile tip din browser. Indepartarea unui link din diagrama de design indeparteaza link din
modelul fundamental si apoi schimbarea o sa fie reflectata in browser. Indepartarea unei
componente dintr-o diagrama de design nu o indeparteaza pe aceasta din modelul
fundamental. Inca va exista in browser si poate fi trasa inapoi pe canvas-ul de design pentru a
vizualiza relatiile cu alte componente din diagrama.
5.Creeaza o diagrama agent nivel de top folosind design tool.
-Pentru a utiliza design tool,click-stanga pe fisierul Design Views in JDE. Un meniu pop-up
va aparea.
-Selectati Add New Design View din meniu. O casuta de dialog pop-up va parea, cerandu-va
un nume pentru diagrama de design.
-Oferiti diagramei un nume (Robot_AD) si faceti clik pe butonul Add New
-Canvas-ul de design tool o sa apara. Clik-stanga pe butonul Open design palette din bara de
meniu design tool.
-Trageti iconita Agentului din paleta design tool pe canvasul design tool.
-Completati casuta de dialog pop-ul cu detalii ale agentului Robot. Asigurati-va ca agentul
Robot este intr-un pachet numit robot. Click pe Add New button. (Acest agent o sa fie acum
afisat in browser in directorul Agent Types din Agent Model.)
-Puteti alege sa fie in Selection mode sau Link mode. Pentru a intra in Selection mode, click
pe butonul Change to selection mode din bara design tool (butonul Change to selection mode
arata o iconita sageata). In modul de selectie , puteti face click entitati de pe canvas si le
schimba locatia din diagrama. Entitatile selectate sau linkurile pot fi sterse prin selectie si
apoi apasand butonul Delete selected objects. Butonul Delete selected objects afiseaza o
iconita cu cruce. Pentru a intra in Link mode, click pe butonul Change to link mode (butonul
Change to link mode afiseaza o linie in diagonala). In modul Link puteti face conexiuni intre
entitatile de pe diagrama. Observati ca directia link-ului este semnificativa.
6. In browser , editeaza agentul Robot facand click-stanga pe agentul robot si selectand
as JACK file. Adaugati o metoda Java numita paintPart()care contine expresia
System.out.println("Painting part now").
Inchideti fisierul agentului robot pentru a va asigura ca nu sunt conflicte intre editarea
fisierului in browserul JDE ca un fisier JACK. In fereastra Editor a fiserului agent robot, click
butonul Save si apoi pe cel Close.
7. Folositi browserul pentru a adauga programul principal. Acesta este adaugat in topul
ierarhiei a fisierului Other Files.
Click dreapta pe fisierul Other Files si selectati Add New File din meniul pop-up. Adaugati
codul pentru programul principal in fereastra Edit File care apare. Salvati programul principal
cu numele Program.java. Urmatorul program principal poate fi folosit pentru a testa robotul
de vopsire:
import robot.Robot;
public class Program {
public static void main( String args[] ) {
Robot robot1 = new Robot("robbie");
robot1.paintPart();
System.exit(0);
}
}
8. Salvati proiectul. Asta se poate face prin selectarea optiunii Save Project din meniul File in
coltul stang superior la JDE.
Fereastra JDE ar trebui sa arate similar cu urmatoarea:
10
-Cand ati compilat cu succes aplicatia, click pe tab-ul Run Application din Compiler Utility.
Click pe Program.class din contents window si apoi click pe butonul Select File. Butonul Run
poate fi atunci selectat pentru a incepe sa fie rulat programul.
Exercitiul 2
11
12
7. In browser, click dreapta pe evenimentul Paint si selectati Edit as Jack file din meniul popup. Completati acest eveniment paint facandu-l:
- extindeti BDIGoalEvent;
- izolati un membru data(camp) String numit colour (aceasta este informatia care va fi
transmisa catre urmatorul eveniment); si
- includeti o metoda de postare paint(String c). Parametrul c este selectat sa fie un
evenimentului data membru colour din metoda de postare. Evenimentul complet Paint
urmeaza :
13
package robot;
public event Paint extends BDIGoalEvent {
public String colour;
#posted as
paint(String c)
{
colour = c;
}
}
Inchideti fisierul pentru a va asigura ca nu exista conflicte intre editarea fisierului in browserul JDE ca un fisier JACK. In fereastra editor a fisierul, click pe butonul Save si apoi pe
butonul Close.
8. Folosind optiunea Edit as a Jack File, editati Robotul agent si
- modificati declaratia #posts event Paint astfel incat sa devina #posts event Paint pev;
- modificati metoda paintPart() din agentul Robot asa incat aceasta sa foloseasca metoda
postEventAndWait() pentru a posta un evenimentul Paint cu culoarea alba precum urmeaza
: postEventAndWait(pev.paint("white"));
Inchideti fisierul pentru a va asigura ca nu exista conflicte in editarea fisierului in browser-ul
JDE ca un fisier JACK. In fereastra editor a fisierului, click pe butonul Save si apoi click pe
butonul Close.
9. Folosind optiunea Edit as a Jack File editati planul PaintSpecifiedCurrentColour dupa cum
urmeaza :
- verificati ca referinta evenimentul Paint gestionalta de plan este ev
- adaugati urmatoarea expresie la medota planului body : System.out.println("Painting the part
the requested colour: " +
ev.colour);
Inchideti fisierul pentru a va asigura ca nu exista conflicte in editarea fisierului in browser-ul
JDE ca un fisier JACK. In fereastra editor a fisierului, click pe butonul Save si apoi click pe
butonul Close.
10. Salvati, compilati si rulati aplicatia.
Intrebari
1. Ce se intampla daca ati fi folosit postEvent()inantrul paintPart() in locul lui
postEventAndWait()? Incercati!
Daca nu ati observat nicio diferenta, adaugati @sleep(2) inainte de copierea expresiei in
planul PaintSpecifiedCurrentColour. Rulati programul folosind postEventAndWait() in
metoda paintPart(). Inlocuiti postEventAndWait cu postEvent()si rulati programul din nou.
Explicati observatiile voastre. Stergeti @sleep(2) din plan inainte de a incepe urmatorul
exercitiu.
Asigurati-va ca ati schimbat postEvent() inapoi in postEventAndWait()inainte de a incepe
urmatorul exercitiu.
14
2. postEventAndWait() ar trebui sa fie apelat doar din subiectul principal Java sau din
subiecte Java care sunt externe JACK. In timp ce acest agent gestioneaza evenimentul,
chemarea subiectului este blocata si este necesara asteptarea pana cand agentul se intoarce cu
rezultatul. Ce problema ati fi intampinat daca postEventAndWait() ar fi fost apelata dintr-o
sarcina de agent?
Beneficiile Jack
Abordarea luata de Jack are un numar de avantaje in comparatii cu alti agenti care vin din
lumea inteligentei artificiale si arhitecturilor orientate pe obiecte standard.Adoptarea Java
garanteaza un mediu larg disponibil, de executie bine suportata. In plus la promisiunile
limbajului(rezumate de bine cunoscutul slogan Compileaza odata, foloseste-l oriunde), un
mare numar de componente software, instrumente si ingineri bine pregatiti devin disponibili.
Pentru cercetatorul A.I, preluarea unui limbaj imperativ, relativ low-level cum ar fi Java,
inseamna pierderea din puterea expresiva oferita de frameworks, bazata pe o logica sau limbaj
functional.
Totusi asta este compensat nu numai de disponibilitatea universala mentionata mai sus. Putem
trage o concluzie ca Jack este potrivit pentru experimentarea cu mai multi agenti arhitecturali
pentru a incerca o noua functionalitate (noi atitudini mentale, semantici diferite, tipuri
aditionale de baze de cunoastere etc) sau pentru a studia caracteristicile performantei in
contexte specifice. Cu atat mai mult, cand comparam frramework-urile bazate pe limbajele
A.I. traditionale, Jack are avantaje distincte datorita unei bune utilizari ale caracteristicilor
intrinsece Java. Cel mai important beneficiu este puternica tiparire care reduce sansele erorilor
de programare introduse de simple tipariri. Ofera de asemenea o versiune clasica de control ,
asigurandu-se ca interfetele sunt compatibile cu Runtime. Urmatoarea e performanta care face
ca viteza de executie a codului scris in Jack comparabila cu o implementare directa cu C sau
C++. Pentru ca ingineria sa dezvolte o aplicatie distribuita sofisticat , Jack ofera mai multe
aspecte uzuale. De exemplu :este o cale eficienta sa exprimi un nivel logic procedural foarte
inalt intr-un mediu orientat pe obiect. Asta ajuta de asemenea la dezvoltarea rapida a aplicatiei
permitandu-i o distinctie clara intre datele abstracte si operatiunile lor pe deoparte, iar pe de
alta parte comportamentul specific aplicational . In timp ce primul ar trebui sa fie bazat pe
performanta inalta , bine testata,refolosibia si in ultimul rand foarte scumpa , ultimul este mai
bine exprimat in planuri care pot fi modificate. Sensibilitatea contextului si semanticile
sofisticate de atitudini mintale ale arhitecturii BDI. Aceste caracteristici permit unele niveluri
de adaptabilitate la conditiile schimbatoare.
Uurina de integrare cu sistemele existente. Acest lucru permite, printre altele, o abordare
progresiv pentru dezvoltarea sistemului distribuit. n comparaie cu framework-urile care
provin din medii de cercetare. Jack are avantaje clare de a fi usurat, de rezistenta industriala si
accesibil pentru o comunitate mare de ingineri formai n programarea orientat pe obiecte.
Concluzii
15
JACK Intelligent Agents este un framework multi-agent care extinde limbajul Java.
Versiunea curenta suporta modelul BDI i SimpleTeam, o extensie pentru a sprijini echipa
bazata pe raionament.Modularitatea lui Jack permite extensii si alte modele pentru a fi usor
de sustinut. JACK este un produs industrie-putere, oferind un framework care are o soluie
fondat n cercetarea inteligenei artificiale n utilizarea practic. Comparativ cu
predecesorii si, de ex PRS i a sistemelor de dMARS menionate mai sus i alte agent
framework-ur similare disponibile n lumea academic, Jack nu este un "pur sistem AI. n
schimb, aceasta constituie o cstorie de succes ntre viziunea de cercetare agent i nevoile de
inginerie software, aducand puterea tehnologiei agent i mbogirea limbajului gazd, Java.
Suntem ncreztori c Jack ofer beneficii att pentru dezvoltarea de inginerie software pentru
sisteme distribuite cat i pentru cercetarile academice.
BIBILIOGRAFIE
N.Howden, R.Rnnquist, A.Hodgson, A.Lucas - JACK Intelligent Agents
http://users.cs.cf.ac.uk/O.F.Rana/agents2001/papers/18_howden.pdf
16