- •К.Є. Золотько, д.В. Красношапка
- •1. Теоретичні основи створення систем штучного інтелекту
- •1.1. Методи розв’язання задач
- •Розв’язання задач методом пошуку в просторі станів
- •Загальна схема алгоритму Харта, Нільсона і Рафаеля
- •Розв’язання задач методом редукції
- •Розв’язання задач дедуктивного вибору
- •Розв’язання задач, що використовують немонотонну логіку, імовірнісну логіку
- •1.2. Експертні системи
- •Експертні системи, засновані на правилах (пряме виведення – forward chaining)
- •Експертні системи, що ґрунтуються на логіці (зворотне виведення – backward chaining)
- •Модуль (компонент) пояснення
- •Модуль (компонент) набуття знань
- •Етапи проектування експертної системи
- •Відмінність експертних систем від традиційних програм
- •2. Основи програмування мовою Visual Prolog
- •2.1. Загальний огляд мови Пролог
- •2.2. Основні теоретичні відомості Основні визначення мови Visual Prolog
- •2.3. Структура програми, складеної мовою Visual Prolog
- •2.4. Предикати введення – виведення
- •2.5. Об’єкти даних
- •Завдання 1
- •2.6. Вбудовані механізми мови Пролог. Керування бектрекінгом
- •2.7. Організація циклів. Рекурсія
- •2.8. Використання динамічної бази даних
- •2.9. Рекомендації щодо створення програм мовою Пролог
- •Завдання 2
- •2.10. Рекурсивні структури даних
- •Структура даних типу дерево
- •Обходи дерева
- •Бінарний пошук на дереві
- •Сортування за деревом
- •Лексикографічне впорядкування
- •2.11. Списки
- •Info("Шевченко о.В.", ["Інформатика", "Чисельні методи"]).
- •Info("Нікольський а.С.", ["Комп’ютерна графіка"]).
- •Info("Рябчук м.В.", ["Фізика", "Хімія", "Астрономія"]).
- •Info("Рябчук м.В.", X), write (X), nl.
- •Ігри двох осіб із повною інформацією
- •Мінімаксний принцип
- •Реалізація деяких методів пошуку в просторі станів у мові Пролог
- •Завдання 3
- •Засоби програмування інтерфейсів у Visual Prolog 5.2
- •3.1. Створення найпростішого додатка
- •Додавання пункту меню
- •Додавання речення для реагування на вибір пункту меню
- •Використання діалогових вікон, створених користувачем
- •Завдання 4
- •Варіанти завдань
- •Тема 1. Консультативна інтерактивна експертна система з визначення оптимальної конфігурації пеом
- •Тема 2. Діагностична інтерактивна експертна система пошуку причини й усунення несправності кольорового телевізора lg cf-20f60k
- •Порядок пошуку причини й усунення несправності телевізора lg cf-20f60k
- •Тема 3. Консультативна експертна система для вибору породи собаки
- •Тема 4. Медична консультативна експертна система щодо вибору лікарських трав
- •Тема 5. Експертна система для визначення мінерального добрива
- •Тема 6. Консультативна інтерактивна експертна система, яка допомагає директору фірми в процесі прийняття кандидата на роботу
- •Тема 7. Консультативна експертна система прогнозу повені та необхідності евакуації населення міста
- •Тема 8. Діагностична медична експертна система
- •Список рекомендованої літератури
- •Посібник до вивчення курсу
Ігри двох осіб із повною інформацією
Прикладами ігор із повною інформацією можуть бути шахи, шашки і под. У грі беруть участь два гравці, які роблять ходи по черзі, причому обидва вони мають повну інформацію про поточну ігрову ситуацію (на відміну від більшості карточних ігор). Гру вважають закінченою, якщо досягнуто позицію, яка згідно з правилами гри є термінальна (кінцева), наприклад матову позицію в шахах. Правила гри також визначають, який результат гри досягнуто в цій термінальній позиції.
Такі ігри можна подавати у вигляді дерева гри (або ігрового дерева). Вершини цього дерева відповідають ситуаціям, а дуги – ходам. Початкова ситуація гри – це коренева вершина; листки дерева – термінальні позиції.
У більшості ігор цього типу можливі такі результати: виграш, програш і нічия. Розглянемо ігри, які мають тільки два результати – виграш і програш. Ігри, у яких можлива нічия, можна спрощено вважати іграми з двома результатами – виграш і не-виграш. Двох учасників гри будемо називати гравцем і противником. Гравець може виграти в деякій нетермінальній позиції з ходом гравця (позиції гравця), якщо в ній існує який-небудь дозволений хід, який приводить до виграшу. Водночас деяка нетермінальна позиція з ходом противника (позиція противника) є виграна для гравця, якщо всі дозволені ходи з цієї позиції приводять до позицій, у яких можливий виграш. Ці правила повністю відповідають зображенню задач у вигляді І/АБО-дерева. Між поняттями, стосовними І/АБО-дерева, і поняттями, використовуваними в іграх, можна встановити взаємну відповідність таким чином.
Позиція гри – вершини, задачі.
Термінальні позиції виграшу – цільові вершини, тривіальні задачі.
Термінальні позиції програшу – задачі, які не мають розв'язку.
Виграні позиції – задачі, які мають розв'язок.
Позиції гравця – АБО-вершини.
Позиції противника – І-вершини.
Очевидно, що аналогічно поняття, стосовні пошуку в І/АБО-деревах, можна переосмислити в термінах пошуку в ігрових деревах.
Нижче наведено просту програму, яка визначає, чи є деяка позиція гравця виграна.
database
turn(symbol, symbol)
term_v(symbol)
term_p(symbol)
predicates
nondeterm vikt(symbol)
nondeterm turn_not_vikt(symbol, symbol)
clauses
vikt(P):-
term_v(P).
vikt(P):-
not(term_p(P)),
turn(P,P1),
not(term_p(P1)),
not(turn_not_vikt(P1,_)).
turn_not_vikt(P1,P2):-
turn(P1,P2), not(vikt(P2)).
turn(a, b).
turn(a, c).
turn(b, d).
turn(b, e).
turn(c, f).
turn(c, g).
term_v(d).
term_v(e).
term_p(f).
term_p(g).
goal
vikt(a).
Програма перевіряє, чи виграна позиція а. У цьому випадку система дасть відповідь yes, тобто позиція а виграна (як видно з рис. 10, існують ходи з позиції а, які приводять до виграних термінальних позицій d та c). Якщо зробити запит щодо того, чи виграна позиція с, – vikt(c), система дасть відповідь no (не існує жодного ходу з позиції с, який приводить до виграшу).
Рис. 10. Просте дерево гри
У розглядуваному випадку правила гри вбудовані в предикат turn , який породжує всі дозволені ходи, а також у предикати term_v і term_p, що розпізнають термінальні позиції, які згідно з правилами гри є виграні або програні. Вираз not(term_p(P)) означає, що Р – нетермінальна позиція програшу, а вираз not(term_p(P1)) означає, що і наступна після Р позиція теж є нетермінальною позицією програшу. Вираз not(turn_not_vikt(P1,_)) говорить: не існує ходу противника, який приводить до невиграної позиції, іншими словами, усі ходи противника приводять до позицій, виграних із погляду гравця.
Так само як і аналогічна програма пошуку в І/АБО-графах, наведена вище програма застосовує стратегію пошуку вглиб. Крім того, у ній не виключена можливість зациклювання в одних і тих же позиціях. Намагання виправити цей недолік може призвести до ускладнень, оскільки правила деяких ігор допускають таке повторення позицій. Правда, дозвіл повторювати позиції часто має умовний характер, наприклад, за шаховими правилами після триразового повторення позиції може бути оголошена нічия.
Вищенаведена програма демонструє основні принципи програмування ігор. Але для практично прийнятної реалізації таких складних ігор, як шахи або го, потрібно застосовувати значно більш потужні методи. Надзвичайна комбінаторна складність таких ігор робить простий алгоритм, який проглядає дерево аж до термінальних ігрових позицій, абсолютно неприйнятним. Наприклад, якщо в кожній шаховій позиції існує приблизно 30 дозволених ходів і термінальні позиції розміщені на глибині 40 ходів, то простір пошуку шахової партії має астрономічні розміри – близько 10120 позицій (один хід (два напівходи) – 30301 000 позицій, 40 ходів – 1 00040 позицій).