Системи штучного інтелекту

Розподіл балів

  • І половина семестру (09.02.26 - 21.03.26)
    • Лабораторні 1(3), 2(3), 3(4), 4(4) - 14 балів
    • Презентація - 5 балів
    • Контрольна робота - 20 балів
  • ІІ половина семестру (23.03-23.05.2026)
    • Лабораторні 5(4), 6(4), 7(4), 8(4) - 16 балів
    • Презентація 2 - 5 балів
    • Контрольна робота - 20 балів
  • Протягом семестру
    • Самостійна робота - 10 балів
  • Екзаменаційна сесія
    • Поточні бали - 40 балів
    • Екзаменаційні тести - 50 балів
    • Усна компонента - 10 балів

Диски для звітності

Корисні посилання
Follow Us
Лабораторна робота №4

Ройовий інтелект

Мета роботи. Ознайомитися з програмними реалізаціями алгоритмів ройового інтелекту та випадкового пошуку. Дослідити функції та можливості алгоритмів, обрати та практично реалізувати алгоритм мовою Python, з вибором різних значень параметрів, критеріїв чи навчальних наборів.

Алгоритми ройового інтелекту — це клас методів оптимізації та пошуку рішень, натхненних колективною поведінкою соціальних істот у природі: мурах, бджіл, птахів, риб або навіть бактерій. Основна ідея полягає в тому, що складна та ефективна поведінка системи може виникати з простих правил взаємодії між окремими агентами без централізованого керування. Кожен агент діє локально, але завдяки обміну інформацією формується глобально узгоджене рішення.

Одним з найвідоміших прикладів є алгоритм мурашиної оптимізації (Ant Colony Optimization, ACO). Він моделює процес пошуку їжі мурахами, які залишають сліди феромону на шляху до джерела їжі. Чим коротший або ефективніший маршрут, тим сильніший феромон, і тим більша ймовірність, що інші мурахи оберуть саме цей шлях. В задачах оптимізації це сприяє знаходженню наближених оптимальних рішень, наприклад, в задачі комівояжера або при маршрутизації транспортних потоків.

Інший популярний підхід — алгоритм рою частинок (Particle Swarm Optimization, PSO), натхненний рухом зграї птахів або косяка риб. В цьому методі кожна «частинка» представляє потенційне рішення і рухається в просторі можливих рішень, орієнтуючись на власний найкращий досвід та найкращий досвід всієї групи. Такий механізм спроможний швидко знаходити хороші розв’язки для складних задач з великою кількістю параметрів.

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

Алгоритм мурашиної колонії

Діяльність мурашок має яскраво виражену групову поведінку. Працюючи разом, група мурах здатна затягнути в мурашник часточки їжі або будівельного матеріалу, в 10 разів важче за самих мурах. Дослідники розробляють алгоритми, що базуються на корисних властивостях мурашиної колонії, з метою застосування в повсякденному житті.

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

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

Мурахи вирішують проблеми пошуку шляхів за допомогою хімічної регуляції. Кожна мураха залишає за собою на землі доріжку особливих речовин - феромонів. Інша мураха, відчувши слід на землі, спрямовується по ньому. Чим більше в одному шляху пройшло мурашок - тим сильніше слід і тим більше у мурашок виникає «бажання» піти в ту ж сторону. Оскільки мурахі, що знайшли найкоротший шлях до «їжі», витрачають менше часу на шлях туди і назад, їх слід швидко стає найпомітнішим. Він привертає більшу кількість мурашок, і коло замикається. Решта шляху - менш використовувані - з часом пропадають.

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

Еволюційна програма мурашиної колонії імітує поведінку мурах під час збирання їжі, де мурашки змушені працювати разом, щоб досягти успіху.

Більшість мурашиних алгоритмів оперують великою кількістю мурах, які шукають їжу та несуть її до мурашника. Одне рішення, що працює для 20 мурах, буде працювати і для однієї мурашки. Якщо використовують 20 мурах, то проблему вирішують у 20 разів швидше.

Рис. 2. JS-демонстрація мурашиного алгоритму (відкрити)

Алгоритм рою частинок

Ідея алгоритму була частково запозичена з досліджень поведінки скупчень тварин (косяків риб, зграй птахів тощо), модель була трохи спрощена, а особини названо нейтрально - частинки.

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

Найважливіше в алгоритмі – це корекція швидкості, саме від цього кроку залежить збіжність алгоритму.

Рис. 2. JS-демонстрація алгоритму рою частинок (відкрити)
Пояснення до прикладу:
Керування
Ініціалізувати - створення рою частинок
Автозапуск - безперервна оптимізація з анімацією
Один крок - покрокове виконання для навчання
Зупинити - пауза автоматичного виконання
Кількість частинок: 5-100 (рекомендовано 30-50)
4 тестові функції
Сферична - проста, один глобальний мінімум
Растрігіна - складна, багато локальних мінімумів
Аклі - дуже складна, багато пасток
Розенброка - вузька долина, важко знайти
Параметри алгоритму
Інерція (w): 0.1-1.0 - швидкість "забування" попередньої траєкторії
Когнітивний (c1): 0.5-3.0 - притягання до власного найкращого
Соціальний (c2): 0.5-3.0 - притягання до глобального найкращого
Функціонування алгоритму
Ініціалізація: Розміщення частинок у випадкових позиціях
Оцінка: Кожна частинка оцінює своє значення функції
Оновлення швидкості: v = w×v + c1×r1×(pBest - x) + c2×r2×(gBest - x)
Оновлення позиції: x = x + v
Запам'ятовування: Збереження кращих позицій
Візуалізація
Сині точки - поточні позиції частинок
Червоні точки - особисті найкращі позиції (pBest)
Жовта точка - глобально найкраща позиція (gBest)
Теплова карта - значення функції (синій=низько, червоний=високо)
Лінії - зв'язок між поточною та особистою найкращою позицією
Рекомендовані параметри
Стандартні: w=0.7, c1=1.5, c2=1.5
Дослідження: w=0.9, c1=2.0, c2=0.5
Експлуатація: w=0.4, c1=0.5, c2=2.0

Реалізації алгоритмів ройового інтелекту в Python

Для реалізації метаевристичних алгоритмів в Python існує кілька спеціалізованих бібліотек. Деякі з них фокусуються на конкретних методах, тоді як інші є універсальними фреймворками, що містять десятки різних алгоритмів «з коробки».

1. Універсальні фреймворки (багато алгоритмів в одному)

Ці бібліотеки є найбільш потужними, оскільки дозволяють порівнювати різні підходи (PSO, ACO, ABC тощо) в межах одного коду.

  • PyPop7. Сучасна та дуже потужна бібліотека, яка підтримує величезну кількість популяційних алгоритмів, включаючи PSO, ABC, Firefly, Bat, Cuckoo Search та багато інших.
  • Mealpy. Мабуть, найбільш повна бібліотека. Вона містить понад 150 алгоритмів, включаючи всі згадані вами: Wolf Pack, Monkey Search, Fish School, Ant Colony та інші.
  • NiaPy. Мікро-фреймворк для природних алгоритмів. Добре структурований, підтримує PSO, BA, FFA, CSS.
  • PySwarms. Спеціалізована та дуже популярна бібліотека саме для PSO (Particle Swarm Optimization). Вона має докладну документацію та інтеграцію з NumPy.

2. Спеціалізовані рішення за типами алгоритмів

  • PSO (Рой частинок). PySwarms, MealPy
  • ACO (Мурахи). AntColony (для задачі комівояжера) або MealPy
  • ABC (Бджоли). BeePy або Mealpy
  • CSA (Зозулі). CuckooSearch (у складі NiaPy або MealPy)
  • WPS, BA, FFA, MS, FSS. Найкраще реалізовано в NiaPy або MealPy

3. Гібридні та еволюційні фреймворки

Якщо вам потрібна висока продуктивність або можливість створювати власні варіації алгоритмів:

  • DEAP (Distributed Evolutionary Algorithms in Python). Це "золотий стандарт" для еволюційних обчислень. Хоча вона більше орієнтована на генетичні алгоритми, її гнучкість дозволяє легко реалізувати PSO або ACO.
  • PyGMO (Python Parallel Global Multiobjective Optimization). Дуже швидка (написана на C++ з інтерфейсом Python), підтримує паралельні обчислення та складні топології роїв.

Вибір алгоритму

  • Якщо потрібно швидко протестувати різні алгоритми (наприклад, порівняти Вовків з Кажанами) — обирайте Mealpy.
  • Якщо це наукове дослідження і потрібна стабільність та візуалізація PSO — обирайте PySwarms.
  • Якщо потрібна максимальна швидкість для складних обчислень — використовуйте PyGMO.

Лабораторне завдання

  1. Ознайомитися з теоретичними матеріалами щодо природніх алгоритмів.
  2. Послідовно випробувати наведені приклади. Здійснити низку досліджень в кожному з додатків: з параметрами, що встановлено за замовченням, зі зміненими параметрами.
  3. Обрати для реалізації певний природній або еволюційний алгоритм.
    • Алгоритм рою частинок (Particle Swarm Optimization, PSO).
    • Алгоритм мурашиної колонії (Ant Colony Optimization, ACO).
    • Алгоритм бджолиної сім'ї (Artificial Bee Colony, ABC).
    • Алгоритм пошуку зграєю вовків (Wolf Pack Search, WPS).
    • Алгоритм кажанів (Bat Algorithm, BA).
    • Алгоритм світлячків (Firefly Algorithm, FFA).
    • Алгоритм мавп (Monkey Search, MS).
    • Алгоритм пошуку зозуль (Cuckoo Search Algorithm, CSA).
    • Алгоритм зграї риб (Fish School Search, FSS).
  4. Алгоритм реалізовувати мовою Python, використовуючи різноманітні бібліотеки.
  5. Результат виконання продемонструвати викладачеві. Пояснити дію алгоритму, вхідні дані та інтерпретацію результату виконання.

Зміст звіту

  1. Назва та мета виконання лабораторної роботи.
  2. Короткий опис алгоритму, що вибрано для реалізації.
  3. Скріншоти виконання алгоритму з коротким описом.
  4. Аналітичні висновки щодо отриманих результатів, можливого застосування алгоритму для виконання певних завдань.

Контрольні запитання

  1. Для вирішення яких завдань призначені природні алгоритми.
  2. Для вирішення яких завдань здебільшого призначені ройові алгоритми.
  3. Які особливості рою (зграї) використано при розробленні ройових алгоритмів.
  4. Для вирішення яких завдань призначені алгоритми колективної поведінки.
  5. Які корисні властивості мурашиної колонії запозичено для реалізації алгоритмів колективної поведінки.
  6. Назвати особливості алгоритму рою частинок, який практичний зміст вони несуть.