
- •Реалізація методів штучного інтелекту у середовищі Visual Prolog
- •Теоретична частина Методи розв’язання задач.
- •Розв’язання задач методом пошуку в просторі станів.
- •Загальна схема алгоритму Харта, Нільсона і Рафаеля
- •Розв’язання задач методом редукції.
- •Розв’язання задач дедуктивного вибору
- •Розв’язання задач, що використовують немонотонні логіки, імовірнісні логіки.
- •Експертні системи.
- •Експертна система, заснована на правилах
- •Експертні системи, що базуються на логіці.
- •Модуль (компонент) пояснення.
- •Модуль набуття знань (компонент набуття знань).
- •Етапи проектування ес.
- •Відмінність експертних систем від традиційних програм
- •Основи програмування на мові Visual Prolog Загальний огляд мови Пролог
- •Основні теоретичні відомості Основні визначення мови Visual Prolog (далі просто Пролог)
- •Структура програми на мові Пролог (для Visual Prolog 5.2)
- •Предикати введення - виведення
- •Об’єкти даних
- •Завдання 1.
- •Вбудовані механізми мови Пролог. Управління бектрекінгом.
- •Організація циклів. Рекурсія.
- •Моделювання недетермінованого скінченного автомата.
- •Використання динамічної бази даних
- •Рекомендації для створення програм на Пролозі.
- •Завдання 2.
- •Рекурсивні структури даних
- •Структура даних типу дерева
- •Обходи дерева
- •Бінарний пошук на дереві.
- •Сортування по дереву
- •Лексикографічне впорядкування
- •Реалізація деяких методів пошуку в просторі станів на Пролозі.
- •Завдання 3.
- •Короткі відомості про засоби програмування інтерфейсів (vpi) Visual Prolog 5.2
- •Створення найпростішого додатку.
- •Додавання пункту меню.
- •Додавання речення для реагування на вибір пункту меню
- •Вставка предикату dlg_Note в речення.
- •Використання діалогових вікон, створених користувачем.
- •Завдання 4.
- •Тема 1. Консультуюча інтерактивна експертна система по визначенню оптимальної конфігурації пеом.
- •Тема 2. Діагностична інтерактивна експертна система пошуку причини й усунення несправності кольорового телевізора lg cf-20f60k.
- •Тема 3. Консультуюча експертна система для вибору породи собаки.
- •Тема 4. Медична консультуюча експертна система на вибір лікарських трав.
- •Тема 5. Експертна система для визначення мінерального добрива.
- •Тема 6. Консультуюча інтерактивна експертна система,яка допомагає директору фірми при прийомі кандидата на роботу. Експертна система дозволяє визначити яку посаду у фірмі може зайняти кандидат.
- •Тема 7. Консультуюча експертна система прогнозу повені і необхідності евакуації міста n.
- •Тема 8. Діагностична медична експертна система.
- •Додаток Експертна система ідентифікації птахів Північної Америки.
- •Експертна система фінансового планування.
- •Список літератури.
Моделювання недетермінованого скінченного автомата.
Скінченні автомати широко використовуються на практиці, наприклад в синтаксичних і лексичних аналізаторах.
Недермінований скінченний автомат – це абстрактна машина, яка читає символи із вхідного ланцюжка і вирішує, допустити чи відкинути цей ланцюжок. Автомат має декілька станів і завжди знаходиться в одному з них. Він може змінити стан, переходячи з одного стану в інший. Внутрішню структуру такого автомату можна представити графом переходів, як показано на малюнку . У цьому прикладі S1, S2, S3 і S4 – стани автомата. Стартувавши із початкового стану (у нашому прикладі це S1), автомат переходить із стану в стан у міру читання вхідного ланцюжка.
Рис 4. Приклад недетермінованого скінченного автомата.
Перехід залежить від поточного вхідного символу, як показують мітки на дугах графа переходів.
Перехід виконується кожен раз при зчитуванні вхідного символа. Зазначимо, що переходи можуть бути недетермінованими. На Рис 4. видно, що якщо автомат знаходиться у стані S1 і поточний символ дорівнює a, то перехід може вібутися як в S1, так і в S2. Деякі дуги помічені міткою пусто, яка позначає «пустий символ». Ці дуги відповідають «спонтанним переходам» автомата. Такий перехід називається спонтанним, тому що він виконується без зчитування вхідного ланцюжка.
Стан S3 обведений подвійною лінією, це означає, що S3 – кінцевий стан. Про автомат кажуть,що від допускає вхідний ланцюжок, якщо в графі переходів існує шлях, такий, що:
він починається в початковому стані,
він закінчується в кінцевому стані, і
мітки дуг, які утворюють цей шлях, відповідають повному вхідному ланцюжку.
Вирішувати, який із можливих переходів робити в кожен момент часу – виключна справа автомата. Зокрема, автомат сам вирішує, чи робити спонтанний перехід, якщо він можливий в поточному стані. Однак абстрактні не детерміновані машини такого типу мають чарівну властивість: якщо існує вибір, вони завжди обирають «вірний» перехід, тобто перехід, який веде до допущення вхідного ланцюжка при наявності такого переходу. Автомат на малюнку, наприклад, допускає ланцюжки ab і aabaab , але відкидає ланцюжки abb і abba. Легко бачити, що цей автомат допускає всі ланцюжки, які закінчуються на ab і відкидає всі інші.
Деякий автомат можна описати на Пролозі за допомогою трьох відношень:
Унарного відношення final (кінцеве) , яке визначає кінцевий стан автомату.
Триаргументного відношення transition (перехід) , яке визначає перехід від стану до стану, при цьому transition(S1, X, S2) означає перехід від стану S1 до стану S2, якщо зчитаний символ X.
Бінарного відношення spontaneous(S1, S2) (спонтанний), яке означає,що можливий спонтанний перехід із S1 в S2.
Для автомата, зображеного на малюнку, ці відношення будуть такими:
final(S3).
transition(S1, a, S1).
transition(S1, a, S2).
transition(S1, b, S1).
transition(S2, b, S3).
transition(S3, a, S4).
spontaneous(S2, S4).
spontaneous(S3, S1).
Представимо вхідні ланцюжки у вигляді списків Прологу. Ланцюжок aab буде представлений як [a,a,b]. Модель автомата, буде обробляти заданий вхідний ланцюжок і вирішувати, допускати його чи ні. За визначенням, недетермінований автомат допускає заданий ланцюжок, якщо (починаючи із початкового стану) після її зчитування він здатен опинитися у кінцевому стані. Модель програмується у вигляді бінарного відношення permissible (допускається), яке визначає прийняття ланцюжка із данного стану. Так
permissible(State, Chain)
істинне, якщо автомат, починаючи із стану State як із початкового, допускає ланцюжок Chain. Відношення permissible можна визначити за допомогою трьох речень. Вони відповідають наступним трьом випадкам:
Пустий ланцюжок [ ] допускається із стану S , якщо S - кінцевий стан.
Непустий ланцюжок допускається із стану S, якщо після зчитування першого його символа автомат може перейти до стану S1, і частина ланцюжка, що залишилася, допускається із S1. Цей випадок ілюструється на рис. 5(а).
Ланцюжок допускається із стану S, якщо автомат може зробити спонтанний перехід із S в S1, а потім допустити (увесь) вхідний ланцюжок із S1. Цей випадок ілюструється на рис. 5(б).
перший символ
частина ланцюжка,що
залишилася
S
S1
(б)
Рис. 5 Допущення ланцюжка: (а) при зчитуванні першого символа ; (б) при здійсненні спонтанного переходу.
Ці правила можна перекласти намову Пролог наступним чином:
permissible(S, [ ]):-
final(S).
permissible(S, [X | Remaining ]):-
transition(S, X, S1),
permissible(S1, Remaining ).
permissible(S, Chain):-
spontaneous(S, S1),
permissible(S1, Chain ).
Спитати про те, чи допускається ланцюжок aaab , можна так: permissible(s1, [a,a,a,b]). Повністю програму на Visual Prolog можна представити таким чином:
domains
list = symbol *
database
final(symbol)
transition(symbol, symbol, symbol)
spontaneous(symbol, symbol)
predicates
nondeterm permissible(symbol, list)
clauses
final(s3).
transition(s1, a, s1).
transition(s1, a, s2).
transition(s1, b, s1).
transition(s2, b, s3).
transition(s3, b, s4).
spontaneous(s2, s4).
spontaneous(s3, s1).
permissible(S, [ ]):-
final(S).
permissible(S, [X | Remaining ]):-
transition(S, X, S1),
permissible(S1, Remaining ).
permissible(S, Chain):-
spontaneous(S, S1),
permissible(S1, Chain ).
goal
permissible(s1, [a,a,a,b]).
Програми на Пролозі часто виявляються здатними вирішувати більш загальні задачі, ніж ті, для яких вони спершу були створені. В нашому випадку ми спитати модель також про те, в якому стані повинен знаходитись автомат на початку роботи, щоб він допустив ланцюжок ab :
permissible(S, [a,b]).
Ми можемо спитати також «Які всі ланцюжки довжиною 3, допустимі із стану s1?»
permissible(s1, [X1,X2,X3]).