Агентно-орієнтований підхід

Матеріал з Вікіпедії — вільної енциклопедії.
Перейти до навігації Перейти до пошуку

Агентно-орієнтований підхід (надалі АОП) до програмування — різновид представлення програм, або парадигма програмування, в якій основними концепціями є поняття агента і його поведінки, які залежать від середовища, в якому він знаходиться. Концепція була запропонована Шохемом в 1990 році[1]. Визначення парадигми, дане автором:[2]

Цю нову парадигму програмування цілком розумно назвати раціональним програмуванням. Точно також як об'єктно-орієнтоване програмування зрушило парадигму з написання процедур до створення об'єктів, раціональне програмування зрушило парадигму з створення інформаційних об'єктів до створення мотивованих агентів.

Агентом є все, що може сприймати своє середовище за допомогою датчиків і впливає на це середовище за допомогою виконавчих механізмів.[3]

Це ж визначення в термінах Java:[4]

/**
 * @ Author Ravi Mohan
 * @ Author Ciaran O'Reilly
 * /
public interface Agent extends EnvironmentObject {
/ **
* Call the Agent's program, which maps any given percept
* Sequences to an action.
*
* @ Param percept
* The current percept of a sequence perceived by the Agent.
* @ Return the Action to be taken in response to the currently
* Perceived percept.
* /
Action execute (Percept percept);

/**
* Life-cycle indicator as to the liveness of an Agent.
*
* @ Return true if the Agent is to be considered alive, false otherwise.
* /
boolean isAlive ();

/**
* Set the current liveness of the Agent.
*
* @ Param alive
* Set to true if the Agent is to be considered alive, false
* Otherwise.
* /
void setAlive (boolean alive);
}

АОП як можлива еволюція ООП[ред. | ред. код]

У об'єктно-орієнтованому програмуванні (надалі ООП) обчислювальний процес розглядається як система, зібрана з модулів, які взаємодіють один з одним і мають власні способи обробки отримуваних повідомлень. У свою чергу, АОП уточнює ці рамки, фіксуючи активність агентів і зміни їх стану. Наявність у агента механізму метаутворення забезпечує принципово новий рівень автономії. Агент не обов'язково виконує вказівку будь-якого іншого агента чи користувача, він просто залежить від умов середовища, включаючи цілі та наміри інших агентів. На відміну від об'єкта, агент може взяти на себе певні зобов'язання або, навпаки, відмовитися від виконання деякої роботи, мотивуючи це відсутністю компетентності, зайнятістю іншим завданням. У той же час, агент може виконувати такі дії як породження, гальмування та заміну інших агентів, активізацію функцій (як своїх, так і в інших агентів), активізацію сценарію діяльності, запам'ятовування поточного стану інших агентів. Все це наочно показує, що агент, будучи «активним об'єктом» знаходиться на більш високому рівні складності по відношенню до традиційних об'єктів в ООП[5].

Зробимо порівняння деяких понять[6]:

  • Об'єкт — програмна сутність заданої структури та конкретизованих механізмів взаємодії з іншими об'єктами за допомогою передачі повідомлень. Повідомлення формуються і відсилаються у відповідь на отримані повідомлення. Формування повідомлень відбувається процедурами на підставі даних.
  • Актор — програмна сутність заданої структури і механізмів взаємодії.
    • Містить дані і процедури.
    • Інкапсуляція, відношення, успадкування, породження повідомлень.
  • Агент — програмна сутність для виконання поставлених завдань. Володіє поведінкою, а саме: взаємодіє із зовнішнім складним середовищем, що динамічно-розвивається; здатною модифікуватися або бути модифікованої іншими агентами в залежності від конкретних умов. Взаємодія має на увазі[7]:
    • Сприйняття динаміки середовища;
    • Дії, що змінюють середовище;
    • Міркування з метою інтерпретації спостережуваних явищ, вирішення завдань, виведення висновків і визначення дій.

Залежно від ступеню свободи середовища, що припускає наявність у ній відповідного типу агента, середовища поділяються на:

  • Замкнуті: кінцеве детерміноване або імовірнісний опис всього середовища, яке відоме агенту апріорі або шляхом дослідження.
  • Відкриті: кінцеве детерміноване або імовірнісний опис локальній області середовища, в якій знаходиться агент і яке відоме йому апріорі або шляхом дослідження.
  • Трансформовані: середовища, що динамічно розвивається, структурою яких є агент.

Причини виникнення[ред. | ред. код]

Причини виникнення агентно-орієнтованого підходу:

  1. Необхідність подолання меж операційних середовищ;
  2. Усунення різнорідності об'єктних моделей, викликаних тим, що класи і об'єкти, побудовані в різних інструментальних середовищах, мають певні відмінності.

Постановка завдання[ред. | ред. код]

У цілому, система АОП повинна включати наступні базові компоненти:[8] [9]

  • Обмежену формальну мову з відповідними синтаксисом і семантикою для опису внутрішнього стану агента, яке визначається кількома параметрами типу переконань, бажань, намірів і зобов'язань;
  • Мову програмування для специфікації агентів, що включає примітивні команди типу REQUEST і INFORM;
  • Агентифікатор, який перетворює нейтральні компоненти до програмованих агентів.

Основними властивостями, якими повинні мати агенти, вважаються: [джерело?]

  • Автономність — здатність виконувати дії самостійно;
  • Гомогенність/гетерогенність — здатність об'єднувати однорідні або різнорідні функції;
  • Наявність «інтелекту», здатності до навчання, корекція поведінки для поліпшення власної ефективності;
  1. Активне поведінка, постійний обмін інформацією «всередині» агента і між агентом і середовищем;
  2. Комунікативність — обмін даними з зовнішнім середовищем;
  3. Сприйняття середовища — наявність спеціальних «засобів» сприйняття середовища функціонування агента;
  4. Мобільність — переміщення агента всередині інших програмних і фізичних середовищ і/або компонентів.

Реалізації[ред. | ред. код]

Розподілені об'єктні архітектури (CORBA, DCOM, Java RMI, WEB-services), володіючи багатьма перерахованими властивостями, мають такі недоліки:

  1. Необхідність перекомпіляції програмних кодів при внесенні змін в об'єкти і інтерфейси;
  2. Неможливість динамічної адаптації поведінки програмних об'єктів залежно від статків і поведінки середовища;
  3. Неможливість роботи в явній формі з моделями знань;

Розподілене об'єктне середовище JADE (засноване на Java RMI, Java CORBA IDL, Java Serialization і Java Reflection API) надає Java агентам такі властивості:

  1. Автономність, здатність виконувати дії самостійно: агент слід списку поводжень, який може бути поповнений асіхронно, тобто і в режимі очікування, і в режимі «зайнятий — йде робота».
  2. Стійкість: не маючи побічного ефекту після кожної поведінки, має можливість відкату.
  3. Активне поведінка: полягає в тому, що в разі невдачі, виконуються циклічні спроби виконати поточний, а потім перейти до наступного кроку поведінки. Під час виконання поведінки агент зайнятий — не взаємодіє із середовищем. Після завершення поточного поведінки, агент переходить до наступного за списком, а в разі відсутності списку — очікує поява такого. Об'єкт ж у випадку успіху не має спуску, а в разі невдачі — кидає завдання.
  4. Мобільність: можливість передавати агент в іншій контейнер. Дана властивість виникає з відсутності після виконання кожного поведінки побічного ефекту.

Структура агента[ред. | ред. код]

Структурно агента можна зобразити наступним чином:

Агент
  |
  |-> Ресурси
  |
  |-> Об'єкти
       |
       |-> Функції
       |
       |-> Дані

Загальні Приклади використання[ред. | ред. код]

Типовим прикладом агентно орієнтованого підходу можна назвати спеціальні програми, що імітують дії гравців в комп'ютерних іграх. Поширена назва для таких програм — боти. Однак, використання ботів не обмежується застосуванням в комп'ютерних іграх. Їх можна зустріти як елемент програми в чатах і форумах, що виконують роль «співрозмовника» і підтримуючих «дискусії». Однак деякі боти виконують не тільки роль імітаторів в процесі спілкування або гри, вони використовуються для редагування текстової інформації (у тому числі і в Вікіпедії), для налагодження мережевих з'єднань, модерування ресурсів і т. ін.

JADE[ред. | ред. код]

Дуже просто створити агента в 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.

Кожен агент-покупець отримує назву книги, яку він повинен придбати як аргумент командного рядка і періодично запитує всіх відомих йому продавців-агентів, щоб зробити запит про покупку. Як тільки пропозиція отримано, агент-покупець підтверджує його і відправляє замовлення. Якщо більше ніж один агент-продавець надає цю книгу, покупець вибирає найкращу пропозицію (найкращу ціну). Купивши необхідну книгу, агент-покупець завершує роботу. Кожен агент-продавець має мінімальний інтерфейс, за допомогою якого користувач може додавати нові назви (і їх ціну) в локальний каталог книг, виставлених на продаж. Агенти-продавці знаходяться в стані очікування запитів від агентів-покупців. Коли вони отримують запит на книгу, вони перевіряють, чи є дана книга в їх каталозі. Якщо так, то вони відповідають пропозицією з ціною. Інакше відмовляють. Коли вони отримують замовлення на покупку, вони обробляють його і видаляють запитану книгу зі свого каталогу.

Примітки[ред. | ред. код]

  1. Shoham Yoav. Agent Oriented Programming.. — 1990.
  2. Shoham Yoav. Multiagent systems: Algorithmic, Game-Theoretic, and Logical Foundations = Artificial Intelligence: A Modern Approach. — 504 с. (Перевірено Помилка: неправильний час)
  3. Стюарт Рассел, Пітер Норвіг. Штучний інтелект: сучасний підхід = Artificial Intelligence: A Modern Approach. — 2-ое вид. — 1407 с.
  4. Ravi Mohan, Ciaran O'Reilly. Agent class. Архів оригіналу за 13-07-2013. Процитовано 01-06-2010.
  5. А. Н. Швецов, Агентно-ориентированные системы: от формальных моделей к промышленным приложениям, 2008
  6. Тарасов В.Б. Агенты, многоагентные системы, виртуальные сообщества: стратегическое направление в информатике и искусственном интеллекте. // Новости искусственного интеллекта. — 1998.
  7. Б.Хейес-Рот
  8. Shoham Yoav. ~ ulieru/Teaching/CS6705/Shoham.pdf Agent-oriented programming. // Artificial Intelligence. — 1993.
  9. Тарасов В.Б. От многоагентных систем к интеллектуальным организациям: философия, психология, информатика.. — 2002.

Див. також[ред. | ред. код]

Література[ред. | ред. код]