Стратегії пошуку у просторі станів

Розділ: Штучний інтелект

📌 Про що ця тема

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


📖 Головне

• Простір станів — це набір: початковий стан, цільовий стан (або умова мети), множина операторів (дій), які переводять один стан в інший. Часто зображають як граф або дерево.

• Вузол — стан; ребро — застосування оператора (може мати вартість/ціну переходу).

• Задача пошуку: знайти шлях від початкового стану до цільового (послідовність дій).

• Стратегії ділять на дві групи: неінформовані (сліпі) та інформовані (евристичні).

• Пошук у ширину (BFS): переглядає всі вузли рівня, потім наступний рівень. Використовує чергу (FIFO). Гарантує найкоротший шлях за кількістю кроків, але потребує багато памʼяті.

• Пошук у глибину (DFS): йде вглиб однією гілкою до кінця, потім повертається (backtracking). Використовує стек (LIFO). Економить памʼять, але може зациклитися й не дає оптимального шляху.

• Пошук із обмеженням глибини — DFS, що не спускається глибше заданого рівня.

• Ітеративне заглиблення — поєднує переваги BFS і DFS: повторює пошук із глибини, поступово збільшуючи ліміт.

• Інформований пошук використовує евристику h(n) — оцінку «наскільки близько» стан до мети.

• Жадібний пошук (greedy best-first): обирає вузол із найменшою h(n). Швидкий, але не завжди оптимальний.

• Алгоритм A*: оцінює вузли функцією f(n) = g(n) + h(n), де g(n) — вартість шляху від старту, h(n) — евристика до мети. За коректної евристики дає оптимальний шлях.

• Критерії оцінки стратегії: повнота (чи знайде рішення, якщо воно є), оптимальність (чи знайде найкраще), часова й просторова складність.


🔢 Як це працює на прикладі

Задача: з міста A дістатися в D. Переходи: A→B, A→C, B→D, C→D.

• BFS: з A перевіряє сусідів B і C (рівень 1), потім їхніх сусідів — знаходить D. Шлях у 2 кроки.

• DFS: з A йде в B, з B — у D. Знаходить D, не оглядаючи гілку C.

• A*: якщо вартості A→B=1, B→D=5, A→C=2, C→D=1, то g через B = 6, через C = 3. A* обере шлях A→C→D як дешевший.


⚠️ Типові помилки

• Плутають BFS і DFS за структурою даних: BFS — черга, DFS — стек.

• Вважають, що DFS завжди знаходить найкоротший шлях — ні, це робить BFS (за кроками) чи A* (за вартістю).

• Плутають g(n) і h(n): g — уже пройдений шлях, h — прогноз до мети.

• Думають, що жадібний пошук і A* — одне й те саме; A* враховує ще й пройдений шлях.

• Забувають про перевірку відвіданих станів — через це DFS зациклюється.


🎯 Що завчити напамʼять

• BFS — черга (FIFO), по рівнях, найкоротший за кроками.

• DFS — стек (LIFO), вглиб, економний за памʼяттю.

• A*: f(n) = g(n) + h(n).

• g(n) — вартість пройденого шляху, h(n) — евристична оцінка до мети.

• Критерії: повнота, оптимальність, часова і просторова складність.


🧠 Перевір себе

1. Яку структуру даних використовує пошук у ширину?

2. Чим відрізняється жадібний пошук від A*?

3. Що означає функція g(n) в алгоритмі A*?

4. Яка стратегія ризикує зациклитися і чому?


Відповіді: 1 — чергу (FIFO), переглядає стани по рівнях; 2 — жадібний враховує лише h(n), а A* — суму g(n)+h(n), тому A* оптимальніший; 3 — вартість шляху, вже пройденого від початкового стану до вузла n; 4 — пошук у глибину (DFS), бо може нескінченно йти однією гілкою без перевірки відвіданих станів.

Перевірити себе на практиці

Прочитати — половина справи. Далі потрібні завдання цієї ж теми з розбором кожної відповіді: саме на них видно, чи справді тема закрита.