Мультиагентні системи або «як завалити мамонта, маючи натовп тупих неандертальців»

Мультиагентні системи або «як завалити мамонта, маючи натовп тупих неандертальців»

Здрастуй, Товариш. З цього моменту, починаю цикл статей на тему «Мультиагентні системи або як завалити мамонта, маючи натовп тупих неандертальців».

Мультиагентні системи або «як завалити мамонта, маючи натовп тупих неандертальців»

Для початку, відповімо на запитання: «А в чому взагалі новизна мультиагентних систем? Чому нам не вирішувати завдання класичними методами штучного інтелекту? ».

Більшість існуючих підходів до створення штучного інтелекту тим чи іншим чином намагаються спроектувати «Сверхмозг», «Божественний об'єкт», який як бравий голлівудський супергерой поодинці переб'є всі, хто стоїть перед ним завдання. Він і столяр, і тесля, і на мишей мисливець. Однак, як ми знаємо в реальності таке відбувається не часто, і велика універсальність означає слабкі вміння у всіх областях, або величезні витрати на навчання або проектування такого чуда.

Що ж це нам дає? Як показує практика, і народна мудрість - «Одна голова добре, а дві - краще», конкатенація не надто розумних агентів дозволяє вирішувати завдання набагато складніші, які навіть не снилися найрозумнішому агенту в системі.

Ну що ж, вистачить слів. Давайте спробуємо написати каркас для побудови простенької мультиагентной системи. Писати будемо на мові C #. У даній статті ми покажемо основну структуру агентів, без розгляду взаємодій між ними.

На початку опишемо загальний вигляд агентів:

Цей мінімум агента містить наступні властивості і методи:

Дії агента і обробка повідомлень делегується об'єкту поведінки:

Інтерфейс IRealObject описує загальну структуру, властиву всім об'єктам, що описують моделюються об'єкти. В даному випадку інтерфейс досить короткий:

Давайте спробуємо скласти агента, що реалізує потрібний нам інтерфейс. Для цього створимо об'єкт, що описує вождя неандертальців:

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

Нарешті, опишемо самого агента:

На цьому моменті закінчимо першу статтю з циклу. Поки нічого особливого, проте, найцікавіше ще попереду, Товариш.