[ Webhosting profitux.cz ]
hertpl: Undefined index: page_title(template line: 74) in templates/articles_print.html on line 39

Programování inteligentních agentů - 1. díl

Co je to agent?

Úvod

Jednotlivé programovací jazyky se od sebe v mnoha věcech odlišují. To není zjištění nové, natož pak překvapivé. Jedním z kritérií, které při sledování těchto odlišností můžeme uplatnit je například úroveň abstrakce, kterou nám daný programovací jazyk nabízí. Jinými slovy to, jak moc si programátor musí při řešení problému uvědomovat, že jej řeší na konkrétním stroji.

Nejméně abstraktními programovacími jazyky (lze-li to tak už vůbec nazvat) jsou assemblery. Psaní kódu v assembleru pro programátora představuje například nutnost přímo manipulovat s jednotlivými registry v procesoru.

O něco výše bychom mohli zařadit programovací jazyky jako je Pascal a C. Ty se sice vzájemně v mnoha aspektech liší, nicméně základem je u obou psaní modulů, respektive kódu založeném na využívání funkcí (a procedur). Velkým přínosem těchto jazyků je také možnost definovat si uživatelské typy a následně s proměnnými těchto typů manipulovat pomocí funkcí a procedur.

Pokud nám programovací jazyk umožní manipulovat s daty sdruženými v uživatelském typu pomocí funkcí definovaných přímo uvnitř tohoto typu (takový typ se potom nazývá třída, v ní zapozdřenou funkci nazýváme member funkcí nebo metodou), hovoříme o objektových, nebo také objektově orientovaných jazycích. Příklady jazyků, které jsou založeny na tomto paradigmatu jsou například jazyky C++, Java nebo C#. Objekty jsou spolu funkčně propojeny vzájemým volání metod. Jakýkoli kód je tak proveden až v okamžiku, kdy je metoda nějakého obejktu zavolána a v takovém případě je také tento kód vždy proveden.

Uvažme, že by jednotlivé objekty měli možnost chovat se do jisté míry autonomě. Kdyby mohly jistý kód spustit "spontálně", kdyby nemusely vykonat kód obsažený v metodě, kterou právě zavolal jiný takovýto "autonomní objekt" (třeba proto, že by to nabouralo jiný jejich cíl, který je výše v žebříčku priorit) a kdyby - například - nějaký objekt požadoval po takovém volajícím objektu odůvodnění či diskuzi ohledně jeho požadavku - lidově řečeno "nechal se přemlouvat". Takovéto objekty schopné jisté míry autonomity potom nazýváme agenty. Programování agentů - Agent Oriented Programming - je pak (nejčastěji) chápáno jako modelování vnitřního stavu mysli agenta a schémat podle kterých komunikuje.

O inteligentních agentech

Idea inteligentních agentů je relativně mladá. V současné době proto ještě neexistuje jasný konsenzus o tom, jak by měl třeba vypadat programovací jazyk pro tvorbu agentů, ani jak se má postupovat z hlediska softwarového inženýrství (zde bylo vše "šito na míru", neexistují dobře zformulované obecné principy) - jedná se tedy zajisté o zajímavou a perspektivní oblast. Především je nutné si říci, že pokud chceme mít nějaký software, který se chová autonomně, musíme napřed definovat, pro jaké prostředí je daný agent navržen (statické vs. dynamické, deterministické vs. nedeterministické, agent je může/nemůže vnímat celé najednou, ...) a hlavně - jakým způsobem bude agent tvořit rozhodnutí a na základě čeho.

Agenty bychom si z tohoto pohledu (rozdělení je lepší chápat z pohledu implementace agentu: implementace agentů mohou používat například reaktivní pravidla, neuronové sítě a nebo plánování založené na nějakém logickém formalismu, úprava - viz diskuze) mohli například rozdělit následovně:

  • reaktivní agenti jsou vhodní pro velice rychle se měnící prostředí. Jejich vzorec uvažování je jednoduchý - jejich vjem je přímo mapován na určitou akci, v podstatě dle schématu "IF vjem THEN akce". Neprobíhá zde tedy uvažování v pravém slova smyslu a tvorba rozhodnutí se zakládá čistě na (pozorovatelném) stavu prostředí, bez ohledu na budoucí následky tohoto rozhodnutí.
  • agenti založeni na neuronových sítích (mohou se naučit "klasicky" nebo mohou být vyvíjeny pomocí evolučních algoritmů) jsou vhodní a dnes velice oblíbení především proto, že jsou schopni tvořit rozhodnutí velice rychle a statisticky i relativně dobře. Na druhou stranu negarantují správnost žádného rozhodnutí. Navíc je nejspíš nemožné navrhnout programovací jazyk pro tvorbu takovýchto agentů. Agenti se musí učit tak říkajíc jen z dat - to nemusí být vždy vhodné, především tam, kde je na rozhodnutí času dost, ale kde chybné rozhodnutí není akceptovatelné.
  • agenti založeni na logice jsou často (ne vždy) z kategorie takzvaných BDI (Belief Desire Intention) architektur. Ty vycházejí z modelování toho, v co agent věří, co si přeje a pro co se již rozhodl - co je jeho záměrem. V oblasti BDI architektur je již proveden poměrně rozsáhlý výzkum - nejčastěji se zde používá různě rozšířená Kripkeho sémantika možných světů, která (po oněch rozšířeních) modeluje důležité aspekty záměrů tak, jak je podává filosof Bratman. Zároveň se jedná o přístup, který umožňuje navrhnout programovací jazyk pro tvorbu agentů.

APL (Agent Programming Languages)

Několikrát jsme zde v článku zmínili pojem "programovací jazyk pro tvorbu agentů". Samozřejmně i my se budeme programování agentů věnovat - v příštím díle. Programovacích jazyků pro vývoj agentů byla navržena celá řada. Nejspíš prvním takovým jazykem byl (dnes již archaický) AGENT-0. Dále můžeme zmínit jazyky (con)Golog a Metatem, nebo třeba i platformu JADE založenou na Javě, kde je možné inteligentí agenty rovněž s úspěchem vyvíjet. My se však budeme blíže seznamovat s programováním agentů na volně dostupné platformě 3APL (čti "tripl-ej-pí-el", An Abstract Agent Programming Language), a to ze stejného důvodu, proč se učí programovat spíše v Pascalu než v C#.

Doporučené čtení a materiály

  • Michael Wooldridge: Intelligent Agents
  • Platforma 3APL ke stažení a dokumentace
  • Cohen & Levesque: Intention Is Choice with Commitment (Artificial Intelligence 42, 1990, pp. 213-261.)
  • Rao & Georgeff: Modeling Rational Agents within a BDI-Architecture (in Proc. KR'91, Morgan Kaufmann, 1991, pp. 473-484.)
  • John-Jules Meyer: Modal Logics for Intelligent Agents

Související články:

  • Programování inteligentních agentů - 2. díl
  • Programování inteligentních agentů - 3. díl
  • Programování inteligentních agentů - 4. díl
  • Programování inteligentních agentů - 5. díl

Komentáře čtenářů

[P] (2008-07-01 13:18:17)

to deleni agentu mi prijde prinejmensim nestastne. Nevidim duvod proc by reaktivni agent nemohl vyuzivat neuronovou sit. Pokud vim pointa reatkivnich agentu je, ze neplanuji dopredu a neinteraguji s ostatnimi agenty narozdil od proaktivnich (planujicich) a socialnich (interagujicich).

[P] (2008-07-01 13:27:11)

ted tak koukam, ze ses z MFF, pokud vim, tak minimalne Olmer uci ze agenti se deli na reaktivni, proaktivni a socialni :-)

Petr Dvorak (2008-07-01 13:31:49)

Dobry den.

To deleni agentu povazuji za deleni "napriklad". Pro zajiste lepsi deleni Vas odkazu na prvni odkaz v sekci "Doporucene cteni" (proto jsem to tam dal - je tam spousta doplnujicich informaci...).

Pan Olmer je pro me zajiste dobrou autoritou (Wooldridge nebo Meyer z Utrechtu, ktery agenty ucil me jsou ale bezesporu vetsi kapacity...). Ale myslim, ze to deleni ktere uvadite (reaktivni, proaktivni a socialni) neni z jisteho pohledu take prilis strukturovane - proc by napriklad proaktivni agent nemohl byt zaroven socialni?

Problem techto deleni je, ze se berou prilis vazne. Proste mame agenty reaktivni, proaktivni a socialni a basta... :)

Co se neuronovych siti tyce, tak tam je to zajiste jeste mnohem slozitejsi, v te oblasti se prilis ale dobre neorientuji. Presto: komplexni neuronova sit muze obsahovat zpetnou vazbu, tedy zde je mozno realizovat pamet. Proto - napriklad pri pohledu na nektere lidi je to i videt - se da rict, ze v obecne podobe muze neuronova sit zprostredkovat deliberativni uvazovani (dokonce jsem videl jak se to tam umi hezky vyvinout). Tedy - ano - neuronova sit s dvema neurony je jiste reaktivni...

To deleni bych tedy zduvodnil asi takto:

Znam Olmera (logika, MAS), Broma (umele bytosti, zaryty reaktivista) a Nerudu (evolucni algoritmy a umele site) :o).

Deleni vychazi spise z toho, jak je agenty mozne konstuovat nez z toho, jake jsou typy agentu dle jejich schopnosti tvorit komplexni rozhodnuti a dosahu uvazovani ci socialni interakce.

Petr Dvorak

[P] (2008-07-01 13:52:37)

Ja sem pana Wooldridge a Bradshwa taky trochu cetl, a Olmer je ma predpokladam prectene v daleko vyraznejsim rozsahu...

O tom jestli jsou kapacity nebo nejsou diskutovat nechci. Samozrejme uznavam je i jejich dilo, ale rozumove schopnosti s vekem spise klesaji (prinejlepsim stagnuji; to je obecne zname, nikoliv urazka), a kreativita a otevrenost novym myslenkam nejdou dohromady spolu s egem (coz netvrdim ze je jejich pripad, ale bohuzel se to tak stava). Ale rozhodne by i me potesilo zucastnit se prednasek nokoho z "velikanu".

Neuronova sit nemusi mit nutne 2 neurony, aby bylo chovani reaktivni... napr Creatures maji tusim 340 neuronu a o prilis chytrem planovani se mluvit neda (pouze se nauci scenare chovani, ale nejsou schopny sestavit plan z jednotlivych ukonu).

Co se socialnich agentu tyce, napada Vas "uzitecny" socialni agent, ktery neplanuje? Vyjednavani ci kooperace uz vyzaduji planovani.

Ja to deleni take neberu dogmaticky ;-)

Petr Dvorak (2008-07-01 13:54:28)

Jeste bych mozna dodal k tem reaktivnim agentum: paklize je v podminkove vetvi pouze vjem (if vjem then akce), jedna se o ryze reaktivniho agenta. Nicmene tam take muze byt i stav (if p[vjem, stav] then akce+zmena stavu) - reaktivni agent muze vyuzivat pamet (viz Wooldridge, C. Brom, ...). Tedy reaktivni agent nemusi byt uplne trivialni a nemyslim, ze by reaktivni agent nemohl byt socialni (napriklad si do stavu ulozim, ze jsem videl v okoli agenta a proto malou Nell nezachranim, protoze to budto udela ten druhy agent, a nebo jsme na vine za jeji smrt oba... :)).

[P] (2008-07-01 14:20:28)

tak ted uz jen muzem meditovat nad tim jestli je "uzitecny" :D

Petr Dvorak (2008-07-01 14:25:59)

Tak - to zalezi na tom, jestli se chceme Nell zbavit nebo ne... :o)

No... V teto oblasti se dnes veci hybou dopredu tak rychle, ze co bylo in pred rokem je obsolete dnes:o). Treba prave Creatures - to byla driv hitovka:)... Pan Brom na tom dnes demonstruje chovani umelych bytosti, je to cele celkem pekne udelane.

Co se tyce toho uzitecneho socialniho agenta bez deliberace, tady preci podle me staci zamyslet se nad tim spise spolecensky, ne informaticky. Polozit si otazku, zdali zname nejakou profesi (roli, ...), ktera vyzaduje spolecenskou interakci a pritom nemusi planovat.

Ja myslim, ze by se dali takovi agenti vymyslet bez problemu - co treba takovy agent "mediator komunikace"? Aneb agent zprostredkovavajici komunikaci mezi dvema nezavislymi systemy (ktery napriklad preklada pozadavky mezi reprezentacemi a jedine co zna je "komu, co a od koho").

Zde je deliberace mozna vhodna (napriklad uvazovani typu "Tady uz jsem dlouho nebyl a neptal jsem se jestli je treba neco predat, nemrknu se tam?" nebo "Tenhle me vzdy pri prekladu pozadavku bohate odmeni daty ze sve databaze, tak k nemu budu chodit casteji, protoze mam za cil nejen prekladat, ale i sbirat data z databaze"), ale ne nezbytna (obejdeme se bez ni, na funkcnost to vetsinou moc vlivu mit nebude)...

Je taky mozna dobre rict, ze pojem agent je dnes tak siroky (buzz word?), ze si nekdy az rikam jestli ma vubec cenu se tim zabyvat. Ono koneckoncu kazdy objekt je jen hodne tupy agent (ke rceni ohledne toho, jak probiha delegace pozadavku mezi entitami: "Objekty to delaj zdarma, agenti za penize" - no, ale zdarma je preci taky za penize - za zadne penize...). A pak ma clovek stazeny program EmailCheckingAgent, ktery kazdych 5 minut zkontroluje jestli nemam novou postu... :o) To je podle me takovy typicky ciste reaktivni ""agent""...