В разделе CLAUSES реализованы предикаты goal и послать_координаты. Предикат goal вызывается автоматически при создании экземпляра класса 'Main' в начале работы программы. Он с помощью стандартного предиката load загружает базу данных внешний_файл, а затем с помощью стандартного предиката find извлекает из неё экземпляр класса некоторой внешней программы. Полученный экземпляр класса передаётся в качестве аргумента в предикат послать_координаты, который осуществляет в нём удалённый вызов предиката координаты_человека, а потом выводит на экран надпись. Обратите внимание, что используется асинхронный вызов [3] предиката координаты_человека (с помощью префикса «<<»). Асинхронный вызов предиката необходим потому, что прочитанный из внешнего файла экземпляр класса не является внутренним по отношению к процессу «Наблюдатель» и, следовательно, не может принимать простые вызовы предикатов. Перед вызовом предиката будет осуществлена динамическая проверка метода класса и типов его аргументов.
В тексте логической программы определён также интерфейс 'ПринимающийАгент', описывающий методы, которые, как ожидает агент «Наблюдатель», должен поддерживать другой агент. Обратите внимание, что интерфейс 'ПринимающийАгент' никак не связан с определениями предикатов в логической программе «Распознаватель», и соответствие этих определений будет установлено динамически, во время работы агентов.
|
interface 'ПринимающийАгент': |
||
|
[ |
||
|
PREDICATES: |
||
|
координаты_человека(REAL,REAL) |
- (i,i); |
|
|
] |
Вспомогательный класс 'ОбменДанными' определён так же, как в программе «Распознаватель». Единственным отличием является то, что тип Target включает экземпляры классов, наследующих интерфейс 'ПринимающийАгент'.
|
class 'ОбменДанными' (specialized 'Database'): |
||
|
[ |
||
|
DOMAINS: |
||
|
Target |
= ('ПринимающийАгент'). |
|
|
] |
Запустим на исполнение логическую программу «Распознаватель». Агент создаст на диске «G:» файл «РазделяемыеДанные.db» и выведет на экран надпись (см. рис. 1).
Рис. 1. Агент «Распознаватель» опубликовал экземпляр своего класса
и готов принимать удалённые вызовы из других агентов.
Файл «РазделяемыеДанные.db» является текстовым, потому что предопределённый класс 'Database' предназначен для хранения данных в виде, удобном для человека. Содержимое файла может выглядеть примерно так (содержимое текстовой строки сокращено):
('fe ... wt0ljs14r4x55uyf07tgbhvepgh05ibgefzoum5n41zjd9eh95zc');
Строка символов в апострофах и круглых скобках является обычным термом Акторного Пролога, а именно, текстовым представлением экземпляра класса. На уровне реализации языка, этот текст является закодированной заглушкой (Java RMI stub), поставленной в соответствие экземпляру класса. Заметим, что наличие компактного текстового представления экземпляра класса (точнее, ссылки на экземпляр класса) даёт принципиальную возможность общения агентов не только через файлы, но и по любым другим протоколам связи, включая электронную почту.
Теперь запустим агент «Наблюдатель». Эта программа прочитает из файла «РазделяемыеДанные.db» ссылку на экземпляр класса программы «Распознаватель» и осуществит удалённый вызов предиката (см. рис. 2).
Рис. 2. Агент «Наблюдатель» прочитал экземпляр класса агента «Распознаватель», осуществил удалённый вызов предиката в этой логической программе и вывел сообщение на экран.
Агент «Распознаватель» примет удалённый вызов из агента «Наблюдатель» и выведет на экран полученные координаты человека (см. рис. 3).
Рис. 3. Агент «Распознаватель» принял удалённый вызов предиката
из агента «Наблюдатель» и вывел полученные данные на экран.
Рассмотренный пример иллюстрирует основные принципы реализации удалённых вызовов предикатов в распределённой версии Акторного Пролога, включая динамическую проверку типов и внешнее представление передаваемых ссылок на экземпляры классов.
Заключение
Разработано расширение логического языка Акторный Пролог, поддерживающее возможности распределённого логического программирования. В основе распределённой версии языка лежит новое решение проблемы строгой типизации в многоагентных системах на основе комбинированной системы типов. Распределённая версия Акторного Пролога совмещает преимущества языка со строгой типизацией, а именно, возможность получения быстрого и устойчивого исполняемого кода, с возможностями динамической проверки типов при взаимодействии агентов. Разработанные средства логического программирования являются основой для создания декларативной платформы многоагентного программирования, ориентированной на распределённую обработку видеоинформации в реальном времени и децентрализованное интеллектуальное видеонаблюдение. Разработанные средства распределённого логического программирования планируется использовать для многоагентного интеллектуального видеонаблюдения.
Литература
1. Морозов А.А. Акторный Пролог // Программирование. - 1994. - № 5. - с. 66_78.
2. Morozov A.A. Actor Prolog: an Object-Oriented Language with the Classical Declarative Semantics // Proc. of IDL'99 workshop / Ed. by K. Sagonas and P. Tarau. - Paris, 1999.
3. Morozov A.A. Logic Object-Oriented Model of Asynchronous Concurrent Computations // Pattern Recognition and Image Analysis. - 2003. - Vol. 13, No. 4. - pp. 640_649.
4. Russell S., Norvig P. Artificial Intelligence. A Modern Approach. - London: Prentice-Hall, 1995.
5. Shen W., Hao Q., Yoon H.J., Norrie D.H. Applications of agent-based systems in intelligent manufacturing: An updated review // Advanced Engineering Informatics. - 2006. - Vol. 20. - pp. 415_431.
6. Baldoni M., Baroglio C., Mascardi V., Omicini A., Torroni P. Agents, Multi-Agent Systems and Declarative Programming: What, When, Where, Why, Who, How? // A 25-year Perspective on Logic Programming / Ed. by A. Dovier and E. Pontelli. - Berlin, Heidelberg: Springer-Verlag, 2010. - pp. 204_230.
7. Gascueсa J.M., Fernбndez-Caballero A. On the use of agent technology in intelligent, multisensory and distributed surveillance // The Knowledge Engineering Review. - 2011. - Vol. 26:2. - pp. 191_208.
8. Kravari K., Bassiliades N. A Survey of Agent Platforms // Journal of Artificial Societies and Social Simulation. - 2015. - Vol. 18, No. 1. - Paper 11. -
9. Vallejo D., Albusac J., Castro-Schez J.J., Glez-Morcillo C., Jimйnez L. A multi-agent architecture for supporting distributed normality-based intelligent surveillance // Engineering Applications of Artificial Intelligence. - 2011. - Vol. 24. - pp. 325_340.
10. Ejaz N., Manzoor U., Nefti S., Baik S.W. A Collaborative Multi-Agent Framework for Abnormal Activity Detection in Crowded Areas // International Journal of Innovative Computing, Information and Control. - 2012. - Vol. 8, No. 6 (June). - pp. 4219_4234.
11. Morozov A.A., Vaish A., Polupanov A.F., Antciperov V.E., Lychkov I.I., Alfimtsev A.N., Deviatkov V.V. Development of concurrent object-oriented logic programming platform for the intelligent monitoring of anomalous human activities // BIOSTEC 2014 / Ed. by G. Plantier, T. Schultz, A. Fred, H. Gamboa. - CCIS 511. - Springer International Publishing, 2015. - pp. 82_97.
12. Morozov A.A., Polupanov A.F. Intelligent visual surveillance logic programming: Implementation issues // CICLOPS-WLPE 2014 / Ed. by T. Strцder and T. Swift. - Aachener Informatik Berichte no. AIB-2014-09. - RWTH Aachen University, 2014. - pp. 31_45.
13. Morozov A.A., Polupanov A.F. Development of the logic programming approach to the intelligent monitoring of anomalous human behaviour // OGRW 2014 / Ed. by D. Paulus, C. Fuchs, D. Droege. - Koblenz: University of Koblenz-Landau, 2015. - No. 5. - pp. 82_85.
14. Morozov A.A., Polupanov A.F., Sushkova O.S. An Approach to the Intelligent Monitoring of Anomalous Human Behaviour Based on the Actor Prolog Object-Oriented Logic Language // RuleML 2015 DC and Challenge. Proceedings of the 9th International Rule Challenge and the 5th RuleML Doctoral Consortium / Ed. by N. Bassiliades, P. Fodor, A. Giurca, G. Gottlob, T. Kliegr, G.J. Nalepa, M. Palmirani, A. Paschke, M. Proctor, D. Roman, F. Sadri, N. Stojanovic. - Berlin: CEUR, 2015.
15. Morozov A.A. Development of a Method for Intelligent Video Monitoring of Abnormal Behavior of People Based on Parallel Object-Oriented Logic Programming // Pattern Recognition and Image Analysis. - 2015. - Vol. 25, No. 3. - pp. 481_492.
16. Morozov A.A., Sushkova O.S. The intelligent visual surveillance logic programming Web Site. - 2016.
17. Odell J. Objects and agents compared // Journal of Object Technology. - 2002. - No. 1. - pp. 41_53.
18. Morozov A.A., Sushkova O.S., Polupanov A.F. A translator of Actor Prolog to Java // RuleML 2015 DC and Challenge. Proceedings of the 9th International Rule Challenge and the 5th RuleML Doctoral Consortium / Ed. by N. Bassiliades, P. Fodor, A. Giurca, G. Gottlob, T. Kliegr, G.J. Nalepa, M. Palmirani, A. Paschke, M. Proctor, D. Roman, F. Sadri, N. Stojanovic. - Berlin: CEUR, 2015.
19. Nierstrasz O., Dami L. Component-oriented software technology // Object-Oriented Software Composition / Ed. by O. Nierstrasz and D. Tsichritzis. - Prentice Hall, 1995. - pp. 3_28.
20. Davison A. A survey of logic programming-based object oriented languages. - Technical Report 92/3. - Melbourne, Australia: Dep. of Computer Science, University of Melbourne, 1992.
21. Адаменко А.Н., Кучуков А.М. Логическое программирование и Visual Prolog. - СПб.: БХВ-Петербург, 2003.
Аннотация
Рассмотрена проблема введения средств многоагентного программирования в логический язык со строгой (сильной) типизацией. Для обеспечения корректного взаимодействия агентов предложен подход на основе комбинированной системы типов, идея которого заключается в том, что принцип статической проверки типов в логическом языке смягчается, а именно, проверка корректности использования объекта, полученного из другой программы (агента), откладывается до тех пор, пока он не понадобится для удалённого вызова предикатов. Во всех остальных случаях осуществляется статическая проверка типов. На основе предложенного подхода реализовано расширение объектно-ориентированного логического языка Акторный Пролог, поддерживающее распределённое программирование. Конечной целью создания этого расширения языка является разработка средств распределённого логического программирования для многоагентной обработки видеоинформации и распределённого интеллектуального видеонаблюдения.
Ключевые слова: распределённое логическое программирование, агентное логическое программирование, Акторный Пролог, строгая типизация, комбинированная система типов, номинативная система типов, структурная система типов, статическая проверка типов, динамическая проверка типов, удалённый вызов предиката, объектно-ориентированное логическое программирование, децентрализованное логическое программирование, параллельное логическое программирование, логический агент, трансляция Пролога в Джаву, интеллектуальное видеонаблюдение.
The paper addresses the problem of the development of agent logic programming means. The Actor Prolog object-oriented logic language extension that supports distributed logic programming and remote predicate calls is described. This is intended for the multi-agent visual surveillance system implementation, that is, for the development of logic programs (agents) that acquire, analyze the video stream semantics in real time, and communicate with each other to facilitate the analysis and share obtained information / conclusions. The Actor Prolog language has a strong type system that is an important feature of the language and it is necessary for the fast and reliable executable code generation. Thus, the contradiction between the language strong type system and the idea of the software agents' independency was a problem to be resolved in the course of adapting the Actor Prolog language to the multi-agent paradigm. The problem of incorporation of distributed multi-agent programming means into the strongly typed logic language is considered. The approach to the multi-agent interaction based on the dynamic and static typing fusion is proposed. The language distinguishes instances of classes (the own worlds) created in a logic program and class instances created in other agents (the foreign worlds). The static type-checking and standard features of a nominative type system are implemented for all the own worlds like in the conventional Actor Prolog. At the same time, the dynamic type-checking and elements of a structural type system are implemented for all the foreign worlds. The program separates clearly the own and foreign worlds including the own worlds that were transmitted to other agents and then returned home. This mechanism combines the advantages of the static type-checking for the high-performance code generation with the flexibility of the dynamic type-checking that is necessary for the multi-agent systems programming.
Keywords: distributed logic programming, agent logic programming, Actor Prolog, strong typing, combined type system, nominative type system, structural type system, static type-checking, dynamic type-checking, remote predicate call, object-oriented logic programming, decentralized logic programming, concurrent logic programming, logical agent, Prolog to Java translation, intelligent visual surveillance.