- •Лабораторне заняття № 1 Ознайомлення з мовою програмування Пролог
- •1.1 Загальні відомості про мову Пролог
- •1.2 Елементи мови Пролог
- •1.3 Структура програм Пролога
- •1.3.1 Секція domains Пролог-програми
- •1.3.2 Секція predicates
- •1.3.3 Секція clauses
- •1.3.4 Секція goal
- •1.3.5 Секція database
- •1.4 Розробка найпростішого інтерфейсу програми
- •1.5 Використання структур як доменів відношень
- •1.6 Процедури як елемент представлення знань
- •1.7 Цілісність і несуперечність баз даних і знань
- •1.8 Зміст звіту з лабораторної роботи
- •Лабораторна робота № 2 Керування ходом виконання програм у системі Пролог
- •2.1 Робота системи Пролог при виконанні запитів
- •2.2 Уніфікація термів
- •2.3 Пошук з поверненням при виконанні Пролог-програм
- •2.4 Використання відкату після невдачі для організації найпростішого інтерфейсу виводу
- •2.5 Організація повторюваних процесів
- •2.6 Керування пошуком з поверненням
- •2.7 Керування ходом виконання програм з використанням відсікання
- •2.8 Застосування предикату not -- заперечення як неуспіх
- •2.9 Використання методу відкату і відсікання
- •2.10 Відкат і відсікання при реалізації відносин типу „один-до-багатьох”
- •2.11 Ступінчаті функції і відсікання
- •2.12 Труднощі у використанні відсікання і заперечення
- •2.13 Зміст звіту з лабораторної роботи
- •Лабораторна робота № 3 Рекурсія і рекурсивні процедури в Пролозі
- •3.1 Визначення поняття рекурсії
- •3.2 Склад рекурсивної процедури
- •3.3 Особливості виконання рекурсивних процедур Прологом-системою
- •3.4 Приклад рекурсивної процедури пошуку довжини маршруту на графі
- •3.5 Обмеження і властивості, що забезпечують цілісність відношень
- •3.6 Зміст звіту з лабораторної роботи
- •Лабораторна робота № 4 Списки і процедури їх обробки
- •4.1 Списки як рекурсивні структури даних
- •4.2 Використання списків у Пролог-програмах
- •4.3. Найпростіші процедури роботи зі списками
- •4.4 Процедури обробки списків
- •4.5. Компонування даних у список
- •4.6. Зміст звіту з лабораторної роботи
- •Лабораторна робота № 5 Способи представлення баз даних у Пролог-програмах
- •5.1 Вступ
- •5.2 Представлення відносин у вигляді фактів
- •5.3 Представлення атрибутів у вигляді фактів
- •5.4 Представлення бази даних у вигляді списку структур
- •5.5 Представлення бази даних у вигляді лінійної рекурсивної структури
- •5.6 Представлення бази даних у вигляді двійкового дерева
- •5.7 Порівняння різних видів представлення бази даних
- •Лабораторна робота № 6 Динамічні бази даних
- •6.1 Вступ
- •6.2 Прості прийоми роботи з динамічними бд
- •6.3 Зв’язок статичних і динамічних баз даних
- •6.4 Процедура роботи з динамічною бд, що навчається у користувача
- •6.5 Розширення бази даних у файли
- •6.6. Організації файлових бд на основі файлів прямого доступу
- •6.6. Особливості представлення динамічних баз даних у Visual Prolog
- •6.7 Зміст звіту з лабораторної роботи
- •Лабораторна робота № 7 створення простої експертної системи
- •7.1 Вступ
- •7.2 Завантаження бази знань і режим консультації
- •7.2 Структура бази знань esta
- •7.3 Формати файлів баз знань в esta
- •7.4 Елементарні прийоми роботи з секціями
- •7.5 Елементарні прийоми роботи з параметрами
- •7.6. Зміст звіту з лабораторної роботи
- •Лабораторна робота № 8 розробка нечітких систем керування з використанням fuzzy logic toolbox математичного пакета matlab
- •8.1 Вступ
- •8.2 Склад графічного інтерфейсу
- •8.3 Редактор бази знань RuleEditor
- •8.4 Вступ Приклад виконання роботи
- •8.5 Зміст звіту з лабораторної роботи
- •8.6 Контрольні питання
- •Лабораторна робота № 9 порівняльне дослідження роботи алгоритмів мамдані та сугено
- •9.1 Вступ
- •9.2 Алгоритм Мамдані (Mamdani)
- •9.3 Алгоритм Сугено (Sugeno)
- •9.4 Порядок виконання роботи
- •9.5 Зміст звіту з лабораторної роботи
- •9.6 Контрольні питання
- •Список використаних джерел
- •Додаток а Службові предикати Пролога для роботи з файлами
- •Додаток б Індивідуальні завдання До лабораторних робіт № 1, 2, 4
- •Додаток в Індивідуальні завдання До лабораторної роботи № 3
- •Додаток г Індивідуальні завдання до лабораторної роботи № 5
- •Додаток д варіанти завдань до виконання лабораторної роботи № 7
- •Тема 11. Експертна система аналізу поточної успішності студентів на факультеті.
- •С.В. Зікратий, х.В. Паньків системи штучного інтелекту лабораторний практикум
1.7 Цілісність і несуперечність баз даних і знань
В Козлова тільки один колега – Петренко, зв’язаний з ним спільною працею. Разом з тим у Петренка крім Козлова є ще два колеги, що зв'язані з ним спільною працею. Але з цих двох посилань і наших представлень про поняття колеги стає зрозумілим, що Козлов працює в тому ж відділі, що і Петренко. А якщо це так, то відповідно, має більш одного колеги, на відміну від відповіді системи. Тобто системи самостійно не може дійти такого висновку.
А на запит work(„Козлов”, Оffice) система взагалі дасть негативну відповідь. У наявності суперечливість даних. Частково виправити ситуацію можна, якщо довизначити предикат work у такій редакції
work(Man_1, N):- unite(Man_1, Man_2, labour), work(Man_2, N).
Тоді на запит про номер відділу, де працює Козлов і його колег система буде давати більш точні відповіді. Але в базі work() відсутні дані про Козлова у вигляді фактів, тобто в явному вигляді. Отже, після нашого довизначення ця база стала не зовсім явною, тому що частина даних зберігається в явному вигляді, а частина виведена з інших на основі правил. У першому наближенні – це вже прообраз бази знань. Таким чином повний текст програми матиме вигляд:
/* програма 1.4 */
domains
name,firm=symbol
office=integer
object=labour; hobby(name); project(name,firm)
predicates
work(name, office)
colleague(name, name)
unite(name, name, object)
all_colleague(name, name, object)
clauses
colleague(Man1, Man2) :- work(Man1, X), work( Man2, X), Man1<>Man2.
all_colleague(X, Y, Z):- colleague(X,Y), Z=labour.
all_colleague(X, Y, Z) :- unite(X, Y, Z).
all_colleague(X, Y, Z) :- unite(Y, X, Z).
unite(„Возняк”, „Денега”, labour ).
unite(„Петренко”, „Скрипник”, project("New system",ics)).
unite(„Козлов”, „Петренко”, labour).
unite(„Савюк” , „Петренко”, hobby(sport)).
work(„Грищенко”, 101).
work(„Кардаш”, 111).
work(„Петренко”, 101).
work(„Скрипка”, 101).
work(Man1, N):-unite(Man1, Man2, labour), work(Man2, N).
1.8 Зміст звіту з лабораторної роботи
1. Вказати номер, тему й мету лабораторної роботи.
2. Дослідити роботу програм 1.1, 1.2, 1.3, результати навести в звіті.
3. Розробити програму згідно з індивідуальним завданням (додаток Б).
4. Модифікувати розроблену базу знань з використанням структур.
5. Текст та результати роботи програм навести в звіті.
Лабораторна робота № 2 Керування ходом виконання програм у системі Пролог
Мета роботи: познайомитися з процесами уніфікації і пошуку з поверненням, з методом відкату після невдачі та дією предикатів невдачі (fail) і відсікання (cut). Вивчити правила уніфікації термів, методи організації повторного виконання групи задач. Навчитися будувати меню.
2.1 Робота системи Пролог при виконанні запитів
Запит до системи – це завжди послідовність, що складається з однієї або декількох цілей. Для відповіді на запит система намагається досягти всіх цілей, тобто показати, що твердження, що міститься в запиті, істинні в припущенні, що всі відношення в програмі істинні. Іншими словами, досягти мети – це показати, що вона логічно випливає з фактів і правил програми, а якщо в запиті є змінні, то ще і конкретизувати їх, тобто знайти ті конкретні об'єкти, при підстановці яких замість змінних, забезпечать досягнення мети.
Для цього система заглиблюється в структуру програми так глибоко, як це необхідно, щоб знайти факти, що необхідні для доказу істинності запиту. Потім система повернеться у вихідний стан, довівши або виявивши, що не в змозі довести, істинність запиту. В основі роботи системи лежить рекурсивний циклічний процес уніфікації (тобто зіставлення зі зразком) і доведення підцілей.
При надходженні запиту система переглядає всю програму в пошуках першої пропозиції, заголовок якої буде уніфікуватися з запитом. Для того, щоб запит і заголовок пропозиції уніфікувалися між собою, необхідно:
– збіг у них імені предиката;
– збіг кількості аргументів предиката;
– можливість уніфікації всіх аргументів предиката (правила уніфікації термів приведені нижче).
Якщо було виявлено пропозицію, що уніфікується з запитом, то вона починає оброблятися:
– якщо тіло пропозиції є порожнім (тобто це факт), то запит відразу виявляється успішним, змінні запиту конкретизуються об'єктами факту, і це рішення позначається покажчиком повернення;
– якщо тіло пропозиції містить підцілі, то, послідовно зліва на право, кожна з них обробляється так само, як вихідний запит.
Якщо система в тексті програми не знаходить пропозиції, що уніфікується з запитом, то вона:
– повернеться до останньої успішно доведеної підцілі;
– ліквідує конкретизацію всіх змінних, що були результатом успішної обробки цієї підцілі, тобто робить змінні знову вільними;
– приступає до пошуку в множині пропозицій поточної програми, заголовка іншої пропозиції, що уніфікується з даною підціллю.
Така процедура обробки запиту одержала назву пошук з поверненням. Застосовуючи її, при успішному виконанні запиту система видає:
– або значення всіх змінних, що входять до складу запиту;
– або слова “так” або “ні”, якщо змінні в запиті були відсутні.
