Агентно-ориентированный подход (АОП) к программированию, разновидность представления программ, или парадигма программирования, в которой основополагающими концепциями являются понятия агента и его поведения, которое зависит от среды, в которой он находится. Концепция была предложена Шохемом в 1990г.
В ООП вычислительный процесс понимается как система, собранная из модулей, которые взаимодействуют друг с другом и имеют собственные способы обработки поступающих сообщений. В свою очередь, АОП уточняет эти рамки, фиксируя активность агентов и изменения их состояний через анализ убеждений, обязательств, намерений и пр. Наличие у агента механизма целеобразования обеспечивает принципиально новый уровень автономии. Агент необязательно выполняет распоряжения какого-либо другого агента или пользователя, а просто зависит от условий среды, включая цели и намерения других агентов. В отличие от объекта, агент может принять на себя определенные обязательства или, наоборот, отказаться от выполнения некоторой работы, мотивируя это отсутствием компетентности, занятостью другой задачей и т. п. В то же время, агент может выполнять такие действия как порождение, подавление и замена других агентов, активизация функций (как своих, так и у других агентов), активизация сценария деятельности, запоминание текущего состояния других агентов и пр. Все это наглядно показывает, что агент, будучи «активным объектом» или «искусственным деятелем», формирующим свое собственное поведение, находится на более высоком уровне сложности по отношению к традиционным объектам в ООП.
Произведём сравнения некоторых понятий:
Объект — программная сущность, заданной структуры и конкретизированных механизмов взаимодействия с другими объектами посредством передачи сообщений. Сообщения формируются и отсылаются в ответ на пришедшие. Формирование сообщений происходит на основании данных процедурами.
Актор — программная сущность, заданной структуры и механизмов взаимодействия.
Содержит данные и процедуры.
Инкапсуляция, отношение, наследование, порождение сообщений
Агент — программная сущность, для выполнения поставленных задач обладает поведением, а именно, взаимодействует с внешней сложной и динамично-развивающейсясредой, могущая модифицироваться или быть модифицированной другими агентами в зависимости от конкретных условий. Взаимодействие подразумевает:
восприятие динамики среды;
действия, изменяющие среду;
рассуждения в целях интерпретации наблюдаемых явлений, решения задач, вывода заключений и определения действий.
В зависимости от степени свободы среды, подразумевается неличие соответствующего типа агента, подразделяется на:
Замкнутые — конечное детерминированное или вероятностное описание всей среды, которое известно агенту априорно или ислепдовательски.
Открытые — конечное детерминированное или вероятностное описание локальной области среды, в которой находится агент и известно априорно или исследовательски ему.
Трансформируемые — динамически развивающиеся среды, развивающие структурой является агент.
Причины возникновения А.-о.п.:
Необходимость преодоления границ операционных сред;
Устранение разнородности объектных моделей, вызванных тем что классы и объекты построенные в различных инструментальных средах имеют определенные отличия.
В целом, система АОП должна включать следующие базовые компоненты:
ограниченный формальный язык с соответствующими синтаксисом и семантикой для описания внутреннего состояния агента, которое определяется несколькими параметрами типа убеждений, желаний, намерений и обязательств;
язык программирования для спецификации агентов, включающий примитивные команды типа REQUEST и INFORM;
агентификатор, преобразующий нейтральные компоненты в программируемые агенты.
Основные свойствами, которыми по возможности должны обладать агенты, считаются:
Автономность — способность выполнять действия самостоятельно;
Гомогенность/гетерогенность — способность объединять однородные или разнородные функции;
Способность к обучению, и «интеллект» — машинное обучение, коррекция поведения для улучшения собственной эффективности;
Активное поведение, постоянный обмен информацией «внутри» агента и между агентом и средой;
Коммуникативность — обмен данными с внешней средой;
Восприятие среды — наличие специальных «средств» восприятия среды функционирования агента;
Мобильность — перемещение агента внутри других программных и физических сред и/или компонентов.
Распределённые объектные архитектуры (CORBA, DCOM, Java RMI, WEB-services) стремясь преодолеть указанные ограничения, не решают следующих проблем:
Необходимость перекомпиляции программных кодов при внесении изменений в объекты и интерфейсы;
Невозможность динамической адаптации поведения программных объектов в зависимости от состояний и поведения среды;
Невозможность работы в явной форме с моделями знаний;
Распределённые объектная среда JADE (основана на Java RMI, Java CORBA IDL, Java Serialization и Java Reflection API) придаёт Java агентам свойства:
Автономность — способность выполнять действия самостоятельно: агент следует списку поведений, который может быть пополнен асихронно, то есть и когда он в режиме ожидания, и когда в режиме занять — идёт работа.
Устойчивость — не имея побочного эффекта после каждого поведения, даёт возможность отката.
Активное поведение агента заключается в том, что в случае неудачи, выполняются циклические попытки выполнить текущее, а затем перейти к следующему действию поведения. Во время выполниния поведения агент занят — не взаимодействует со средой. После завершения текущего поведения, агент переходит к следующему по спуску, а в случае отсутствия — ожидает появление такового. Объект же в случае успеха не имеет спуска, а в случае неудачи — бросает задачу.
Мобильность — возможность передавать агент в другой контейнер. Данное свойство возникает из отсутствия после выполнения каждого поведения побочного эффекта.
Структурно агента можно изобразить следующим образом:
Агент
|
|->Ресурсы
|
|->Объекты
|
|->функции
|
|->данные
Типичным примером агентно ориентированного подхода можно назвать специальные программы, имитирующие действия игроков в компьютерных играх. Распространенное название для таких программ — боты. Однако, использование ботов не ограничивается применением в компьютерных играх. Их можно встретить как элемент программы в чатах и форумах, выполняющих роль «собеседника» и поддерживающих «дискуссии». Однако некоторые боты выполняют не только роль имитаторов в процессе общения или игры, они используются для редактирования текстовой информации (в том числе и в Википедии), для наладки сетевых соединений, модерирования ресурсов и т. п.
Очень просто создать агента в JADE, определив его метода инициализации:
import jade.core.Agent;
public class BookBuyerAgent extends Agent {
protected void setup() {
// Printout a welcome message
System.out.println("Hello! Buyer-agent "+getAID().getName()+” is ready.”);
}
}
Фактическая работа, которую агент должен делать, как правило, осуществляется в рамках «поведения агента». Поведение представляет собой задачу, которую агент может выполнять.
Агент может выполнять одновременно несколько моделей поведения. Однако важно заметить, что расписание нескольких моделей поведения в агенте имеет не упреждающий характер, а кооперативный. Это означает, что когда поведение исполняется по расписанию, его метод action() вызывается и работает до тех пор, пока не завершится. Поэтому именно программист определяет, когда агент переключается от исполнения данного поведения к выполнение следующего.
С учетом описанного механизма планирования важно подчеркнуть, что поведение, подобное представленному ниже, препятствует выполнению любого другого поведения, т.к его action() метод никогда не завершается.
public class OverbearingBehaviour extends Behaviour {
public void action() {
while (true) {
// do something
}
}
public boolean done() {
return true;
}
}
Рассмотрим предметную область «Торговля книгами», на которой будут проиллюстрированы шаги, необходимые для создания агентно-ориентированных приложений с JADE.
Каждый покупающий агент получает название книги, которую он должен приобрести в качестве аргумента командной строки и периодически запрашивает всех известных ему продавцов-агентов, чтобы сделать запрос о покупке. Как только предложение получено, агент-покупатель подтверждает его и отправляет заказ. Если больше чем один агент-продавец предоставляет данную книгу, покупатель выбирает лучшее предложение (самую лучшую цену). Купив требуемую книгу, агент-покупатель завершает работу. Каждый агент-продавец имеет минимальный интерфейс, с помощью которого пользователь может добавлять новые названия (и их цену) в локальный каталог книг, выставленных на продажу. Агенты-продавцы находятся в состоянии ожидания запросов от агентов-покупателей. Когда они получают запрос на книгу, они проверяют, имеется ли данная книга в их каталоге. Если да — то они отвечают предложением с ценой. Иначе — отказывают. Когда они получают заказ на покупку, они обрабатывают его и удаляют запрошенную книгу из своего каталога.