- •К.Є. Золотько, д.В. Красношапка
- •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. Діагностична медична експертна система
- •Список рекомендованої літератури
- •Посібник до вивчення курсу
2.2. Основні теоретичні відомості Основні визначення мови Visual Prolog
Програма, написана мовою Visual Prolog, складається з фраз (речень). У кінці кожнї фрази ставлять крапку. Фрази мови Пролог бувають трьох типів: факти, правила і запитання.
Факти містять твердження, завжди безумовно правильні. Факт – це твердження, яке визначає відношення між об’єктами або описує ознаки об’єкта. Формат запису факту має такий вигляд:
<ім’я відношення>(ім’я_об’єкта1, ім’я_об’єкта2,…, ім’я_об’єкта).
У процесі запису факту треба додержуватися таких правил:
Імена всіх відношень і об’єктів мають починатися з малої літери.
Спочатку записують ім’я відношення, потім у круглих дужках через кому – імена об’єктів.
Кожен факт повинен закінчуватися крапкою.
Імена об’єктів у дужках перераховують в одному вибраному порядку.
Наприклад, факти з одним та двома об’єктами можна записати таким чином:
car(black).
speak(liza, english).
Природною мовою ці факти означають таке: „Автомобіль чорний” та „Ліза говорить англійською”.
Правило містить твердження, істинність якого залежить від деяких умов. Формат запису правила має вигляд
голова правила>:– <тіло правила.
Голова – це факт, що буде правильним за виконання умов, які знаходяться в тілі правила. Умови в тілі правила являють собою терми, з’єднані між собою комою або крапкою з комою (кома означає „і”, а крапка з комою – „або”). Символ „:–”, який стоїть між головою та тілом правила, означає „якщо”. Наприклад, правило
buy(peter, car) :– like(peter, car), have(peter, money).
можна інтерпретувати таким чином: „Пітер купить автомобіль, якщо автомобіль подобається Пітеру і Пітер має гроші”.
Запитання складаються з одного або декількох цільових тверджень. Пролог-система розглядає запитання як мету, якої треба досягти. Запитання можна розглядати як правило, яке має тільки тіло. У Visual Prolog запитання розміщують у розділі goal. Наприклад, запитання: buy(peter, car). можна інтерпретувати так: „Чи купив Пітер автомобіль?”.
Атом – це ім'я, число без знака або символ: liza, 12, z.
Змінна – абстрактний об’єкт, ім’я якого починається з великої літери або символу підкреслювання: X, Y, Man, _number.
Аргумент – ім'я об'єкта в круглих дужках.
Домен – тип даних.
Предикат – це символьне ім’я (ідентифікатор), яке пов’язує відношення з його аргументами:
family(peter, joan, kate, bob),
де family – предикат;
peter, joan, kate, bob – аргументи.
Функтор – ім'я складного об'єкта, наприклад:
date(3, october, 2001),
де date – функтор.
База даних у мові Пролог – це сукупність фактів.
Уніфікація – процес перевірки двох термів на відповідність одне одному.
Терми – всі об'єкти даних у мові Пролог, наприклад: date(3, october, 2001), october.
2.3. Структура програми, складеної мовою Visual Prolog
Програма, написана мовою Пролог, складається з чотирьох основних розділів (секцій), охарактеризованих нижче.
І. Розділ domains призначений для оголошення доменів, які не є стандартними доменами Прологу.
У традиційній мові Пролог є тільки один тип – домен. У Visual Prolog треба оголошувати домени аргументів предикатів. Розділ domains уможливлює досягнення двох цілей. По-перше, можна давати смислові імена доменам, навіть якщо вони за своєю суттю є стандартними доменами Прологу. По-друге, можна оголошувати структури даних, які не є стандартними доменами. Visual Prolog 5.2 підтримує нижчезазначені домени.
1. Базові стандартні домени:
– char (символи) – окремий символ або символ після знака „\” розміщений в апострофах: ‘t’, ‘0’, ‘\\’ („\”), ‘\”’ (лапки ”), ‘\’’ (апостроф ’), ‘\n’ (перехід на наступний рядок), ‘\t’ (табуляція). Після знака „\” можна використовувати ASCIІ-код символу: ‘\65’ (символ А), ‘\10’ (символ пробілу);
– real (дійсні числа) – довжина типу 8 байтів;
– string (рядки) – послідовність символів у лапках, наприклад: “Bonny”, “1991”, “Київ”;
– symbol (символічні імена) – послідовність літер, цифр і знаків підкреслювання, яка починається з літери нижнього регістру, наприклад: cat, uncle_aunt, sky5;
Інтегральні стандартні домени:
– integer (цілі числа) – довжина типу залежить від платформи. Для 32-бітової платформи довжина складає 4 байти;
– byte, sbyte, short, ushort, word, unsigned, dword, long, ulong (див. довідку Visual Prolog 5.2).
3. Бінарний домен – binary (див. довідку Visual Prolog 5.2).
4. Особливо оброблювані визначені домени (Specially Handled Predefined Domains) – accessmode, bgi_ilist, bt_selector, db_selector, dbasedom, denymode, file, place, ref and reg (див. довідку Visual Prolog 5.2).
ІІ. Розділ predicates призначений для оголошення предикатів та доменів аргументів предикатів.
Формат оголошення предиката такий:
predicateName(argument_type1, argument_type2, ..., argument_typeN)
Ставити крапку в кінці оголошення не потрібно. Як тип аргументу використовують стандартні домени, або домени, оголошені в розділі domains. Ім’я предиката починають з літери, за якою розташовують літери, цифри або знаки підкреслювання „_”. Максимальна довжина імені предиката – 250 знаків.
ІІІ. Розділ clauses – „серце” програми, складеної мовою Пролог. У ньому розміщено факти і правила, використовувані, коли Пролог намагається задовольнити запит програми.
Речення для певного предиката слід поміщати в розділі clauses. Послідовність речень, які визначають предикат, називають процедурою.
Намагаючись задовольнити запит (вирішуючи питання, поставлені в розділі goal), Пролог починає перевіряти речення з верхньої частини секції clauses. Ідучи вниз, Пролог розміщує зовнішні покажчики на кожному реченні, які задовольняють поточну підмету. Якщо речення не є частиною логічного шляху, який веде до рішення, Пролог повертається до встановленого покажчика й шукає речення, яке задовольняє підмету (цей процес називають бектрекінгом).
IV. Розділ goal висвітлює стартову мету програми.
По-суті, розділ goal – це те саме, що й тіло правила, тобто просто список підцілей. Пролог автоматично здійснює мету, коли стартує програма. Якщо всі підцілі задоволено, програма закінчується успішно. У противному разі говорять що програма закінчується неуспіхом. Нижче наведено приклад програми.
DOMAINS
author, name, publisher = symbol
price = byte
quantity = ulong
PREDICATES
nondeterm book(author,name,publisher,price,quantity)
CLAUSES
book(alexander_abramov,riders_from_nowhere,raduga,15,200).
book(agatha_christie,selected_stories,progress,20,150).
book(jennifer_niederst,html,o_reilly,10,100).
GOAL
book(agatha_christie,selected_stories, _ , _ ,X).
Ця програма знаходить у БД кількість книжок автора Агати Крісті з назвою „Вибрані оповідання”. Нас не цікавлять видавництво й ціна, тому вони позначені анонімними змінними – знаком підкреслювання. Значення анонімних змінних не виводяться під час відповіді системи на запит.
V. Розділ database (або facts) – динамічна БД. У ній розміщено факти, які можна змінювати, видаляти чи додавати в БД під час виконання програми.
VІ. Розділ constants містить оголошення символічних констант. Синтаксис оголошення такий:
<Id> = <Macro definition>
де <Id> – ім’я символічної константи; <Macro definition> – значення, яке присвоюють константі; наприклад:
CONSTANTS
zero = 0
ten = (1*(10–1)+1)
pi = 3.141592653
Існує декілька обмежень щодо використання символьних констант: визначення констант не може посилатися саме на себе; система не розрізняє літери верхнього і нижнього регістрів, тому в розділі clauses перша літера імені символьної константи повинна бути нижнього регістру, щоб система не сплутала константу зі змінною; у програмі може бути декілька розділів clauses, але оголосити символьну константу слід до її використання.
VІІ. Розділи global domains, global predicates і global facts дозволяють оголошувати глобальні домени, предикати та речення в програмі. Ці розділи розміщують на початку програми.