Мультиагентные системы и сообщества агентов, страница 8


Рисунок 2.3 Синхронные и асинхронные коммуникации между агента понимающими KQML.

Интересно, что KQML сообщения могут быть вложенными, т.е. содержанием KQML сообщения может быть другое KQML сообщение. Например, если Агент1 не может общаться напрямую с Агентом2 (но может общаться с Агентом3), Агент1 может попросить Агента3 переслать сообщение Агенту2.

(forward

   :from                      Agent1

   :to                           Agent2

   :sender                   Agent1

   :receiver                 Agent3

   :language              KQML

   :ontology               kqml-ontology

   :content                 (tell

                                                   :sender                   Agent1

                                                   :receiver                 Agent2

                                                   :language              KIF

                                                   :ontology               Block-World

                                                   :content                 (On (Block A) (Block B))))

В переданном KQML сообщении значение поля :from становиться значением поля :sender поля :content сообщения, значением поля :to в переданном сообщении становиться значением поля :receiver.

Перформативы KQML могут быть организованы в сеть основных категорий:

-  базовые перформативы запроса (вычислить, спросить одного, спросить всех, …)

-  многоответные перформативы запроса (поток в, поток всем, …)

-  перформативы ответа (ответить, извиниться, …)

-  основные информационные перформативы (сказать, архивировать, отменить, сказать обратное, разархивировать, …)

-  перформативы generator (генератора?) (ожидание, готовность, следующий, отдых, …)

-  перформативы определения способностей (объявлять, описывать, наблюдать, …)

-  сетевые перформативы (регистрировать, убрать регистрацию, переправить, отправить всем, …)

Перформатив объявить используется отправителем :sender для информирования получателя :receiver о способностях отправителя :sender :

(advertise

   :sender                   Agent2

   :receiver                 Agent1

   :language              KQML

   :ontology               kqml-ontology

   :content                 (ask-all

                                                   :sender                   Agent1

                                                   :receive                  Agent2

                                                   :in-reply-to            id1

                                                   :language              Prolog

                                                   :ontology               Block-World

                                                   :content                 “on(X,Y)”))

Теперь Агент1 может запросить Агент2:

(ask-all

   :sender                   Agent1

   :receiver                 Agent2

   :in-reply-to            id1

   :reply-with             id2

   :language              Prolog

   :ontology               Block-World

   :content                 “on(X,Y)”

Агент2 может ответить с утверждениями соответствующими его базе знаний:

(tell

   :sender                   Agent2

   :receiver                 Agent1

   :in-reply-to            id2

   :language              Prolog

   :ontology               Block-World

   :content                 “[on(a,b), on(c,d)]”

Проблемы:

И отправитель, и получатель должны понимать используемый язык коммуникации агентов; онтология должна быть создана и доступна общающимся агентам.