Komunikační protokoly

Už jsme mluvili o ontologiích, které dávají význam zprávám posílaným mezi agenty, nicméně z praktických důvodů se agenti také musí dohodnout na některých komunikačních protokolech. Ty určují, kdy může agent poslat zprávu jinému agentovi a jaká je očekávaná odpověď. Pro komunikaci v multiagentních systémech existuje řada standardů, nejznámější je však standard FIPA vydávaný Foundation for Intelligent Physical Agents.

Norma FIPA specifikuje řadu protokolů používaných pro komunikaci více agentů a také jazyky, které se používají pro kódování obsahu zpráv a formátu samotné zprávy (obálky).

Struktura zpráv FIPA ACL

Struktura zpráv je uvedena ve specifikaci FIPA Agent Communication Language (FIPA-ACL) Message Structure Specification. Tato specifikace udává pole, která se mohou nebo musí vyskytovat v každé zprávě vyhovující FIPA. Existují běžná pole, která najdete v každé zprávě - sender, receiver, reply-to a content. Existují ale i další pole, jako třeba performative, která specifikují, o jakou zprávu se jedná (REQUEST, QUERY, INFO, …). Jaké performative a kdy mohou být použita, je ve skutečnosti specifikováno níže popsanými protokoly. Obsah zprávy je popsán v jiných polích - ontology, language a encoding. Parametr ontologie určuje ontologii, kterou agenti používají, zatímco jazyk určuje, který jazyk používají (např. které výrazy z logiky prvního řádu mohou být použity), nakonec kódování říká, jak jsou zprávy kódovány (např. je-li zpráva XML, nebo něco jiného).

Ve zprávách je také několik dalších polí, která komunikaci zjednodušují - conversation-id pomáhá přiřadit zprávy ke konkrétní komunikaci a reply-by určuje, do kdy má agent na zprávu odpovědět.

FIPA SL Content Language

Norma FIPA Semantic Language (FIPA-SL) specifikuje jazyk, kterým agenti komunikují a co mohou vyjádřit. Jazyky definují syntaxi výrazů, které agenti mohou odeslat - mohou obsahovat logické spojky, jako je konjunkce, disjunkce, implikace, negace a ekvivalence, společně s kvantifikátory a takzvanými referenčními operátory. Referenční operátor iota odkazuje na jedinou hodnotu proměnné, která splňuje výraz, pokud taková hodnota neexistuje nebo pokud existuje více hodnot vyhovujících danému výrazu, hodnota se považuje za neexistující (a dotaz na tuto hodnotu končí chybou). Operátory any a all označují jakýkoli objekt, který vyhovoval danému výrazu, respektive všechny objekty, které vyhovují danému výrazu.

Specifikace uvádí několik příkladů komunikace pro některé referenční operátory. Následující příklady například ukazují možnou komunikaci pomocí any referenčního operátoru mezi agenty a a b, za předpokladu, že beliefs agenta a jsou {P(A), Q(1, A), Q(1, B)}.

(query‑ref
    :sender (agent-identifier :name B)
    :receiver (set (agent-identifier :name A))
    :content
        "((any (sequence ?x ?y) (q ?x ?y)))"
    :language fipa-sl
    :reply‑with query1)

(inform
    :sender (agent-identifier :name A)
    :receiver (set (agent-identifier :name B))
    :content
        "((= (any (sequence ?x ?y) (q ?x ?y)) (sequence 1 a)))"
    :language fipa-sl
    :in‑reply‑to query1)

Další ukazuje komunikaci se referenčním operátorem all.

(query‑ref
    :sender (agent-identifier :name B)
    :receiver (set (agent-identifier :name A))
    :content
        "((all (sequence ?x ?y) (q ?x ?y)))"
    :language fipa-sl
    :reply‑with query1)

(inform
    :sender (agent-identifier :name A)
    :receiver (set (agent-identifier :name B))
    :content
        "(( = (all (sequence ?x ?y) (q ?x ?y)) (set(sequence 1 a)(sequence 1 b))))"
    :language fipa-sl
    :in‑reply‑to query1)

Zprávy mají performative inform nebo query-ref, pak můžeme vidět část obálky zprávy a obsah napsaný v jazyce SL. Všimněte si, že výsledky druhého dotazu jsou množina.

Norma umožňuje i jiné, složitější výrazy. Jak již bylo zmíněno, můžeme použít vzorce napsané v modální logice. Je povolena řada modalit, a to B pro beliefs, U pro nejistotu, I pro intentions a PG pro trvalé cíle. Můžeme také vyjádřit, že něco bylo právě vykonáno (done) nebo že nějaká akce je proveditelná (feasible).

Úplný jazyk FIPA-SL může být pro mnoho aplikací příliš silný, proto norma specifikuje řadu omezenějších jazyků. SL0 neumožňuje žádné logické spojky, a tedy může vyjadřovat pouze akce a jejich parametry/výsledky. SL1 obsahuje logické spojky z výrokové logiky, zatímco SL2 umožňuje predikátovou logiku prvního řádu a modální logiku, nicméně je omezen tak, aby všechny výrazy byly rozhodnutelné.

Komunikační protokoly FIPA

Všechny komunikační protokoly FIPA jsou v repozitáři na webové stránce FIPA.

Nejzákladnějším FIPA protokolem je REQUEST. V Request protokolu vyzve iniciátor (ten, který zahajuje konverzaci) účastníka (druhého agenta), aby něco udělal. Za tímto účelem iniciátor odešle zprávu s performative REQUEST (typicky obsahující činnost, která by měla být provedena). Účastník může odpovědět zprávou s performative REFUSE nebo AGREE. Pokud účastník souhlasí s provedením akce, měl by později zaslat buď FAILURE, pokud akce z jakéhokoli důvodu selže, nebo zprávu s performative INFORM-RESULT s výsledky (nebo pouze INFORM-DONE, pokud výsledek neexistuje). Existuje také Query protokol , který je stejný, ale místo provedení akce je účastník požádán o odpověď na nějaký dotaz. Tento protokol začíná zprávou QUERY. Velmi podobný je i Subscribe protokol, který se používá, když si iniciátor přihlásí odběr zpráv, kdykoliv se něco stane. Iniciátor použije zprávu s performative SUBSCRIBE k iniciování protokolu, účastník souhlasí nebo odmítá a poté (pokud účastník souhlasil) odešle zprávu, kdykoli se stane daná věc.

Protokol contract net je trochu složitější. Iniciátor v tomto případě zasílá několika respondentům zprávu CFP (Call for Proposal). Tato zpráva obsahuje akci, kterou má respondent provést. Každý respondent odpoví zprávou (PROPOSE), ve které popíše podmínky (např. cenu) pro provedení akce. Může také odpovědět, že akci neprovede vůbec (REFUSE). Iniciátor si z odpovědí vybere některé respondenty, kteří akci provedou, a zašle jim zprávu ACCEPT_PROPOSAL. Ostatním respondentům zasílá REJECT_PROPOSAL.

První krok protokolu je stejný jako v Request protokolu, pouze iniciátor odešle namísto příkazu performative REQUEST použije CFP. To je způsob, jak druhý agent ví, že nemá provádět akci, ale poslat své podmínky. To také ukazuje, jak jsou performative ve zprávách důležité. Akce se provede poté, co respondent obdrží zprávu ACCEPT_PROPOSAL.

Existují další komunikační protokoly, jako například brokering protokol, který umožňuje agentovi požádat jiného agenta, aby našel agenty, kteří jsou schopni provést nějakou akci. Navíc existují i protokoly pro anglické a holandské aukce.