- •Лабораторне заняття № 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.3.4 Секція goal
У секції goal задається внутрішня мета програми. Це дозволяє програмі запускатися незалежно від середовища розробки. Якщо внутрішня мета включена в програму, то Пролог виконує пошук тільки одного першого рішення, і зв'язані з змінними значення не виводяться на екран, якщо не передбачити застосування операторів виводу інформації.
У систему Пролог включене більш ніж 200 вбудованих стандартних предикатів і більше дюжини стандартних доменів. У випадку використання цих предикатів і доменів немає необхідності оголошувати їх у програмі.
Розглянемо приклад програми, у якій задана внутрішня мета і використовується звертання до стандартних предикатів:
/* Програма 1.2 */
predicates
hello (string)
goal
hello (_).
clauses
hello (Name):- write("Please, type your name "), readln(Name), nl, write("Welcome ", Name).
У цій програмі запитується Ваше ім'я, а потім воно виводиться на екран.
Перелік і призначення стандартних предикатів наведений у додатку А.
Однак найчастіше метою є складний запит до програми. Для доведення якої-небудь складної мети Пролог повинний довести всі його підцілі, створивши при цьому необхідну множину зв'язаних змінних. Якщо ж одна з підцілей помилкова Пролог повернеться назад і перегляне альтернативні рішення попередніх підцілей, а потім знову піде вперед, але з іншими значеннями змінних. Цей процес називається „пошук з поверненням”.
1.3.5 Секція database
Ключове слово database вказує на початок послідовності описів предикатів динамічної бази даних. Динамічна база даних є базою, у яку факти додаються під час виконання програми. Вимоги до описів предикатів такі ж, як і в секції predicates. Факти, що належать динамічній базі даних, обробляються відмінним від звичайних предикатів чином для того, щоб прискорити роботу з БД великого обсягу. Факти динамічної бази можуть модифікуватися протягом сеансу роботи, завантажуватися з дискового файлу за допомогою стандартного предиката consult або записуватися в дисковий файл за допомогою предиката save.
1.4 Розробка найпростішого інтерфейсу програми
Формування внутрішньої мети програми вимагає від користувача не тільки завдання запиту, але і забезпечення відображення його результатів на екрані. Тому необхідно змінити мету, додавши ще одну підціль, що забезпечує відображення терму на екрані дисплея:
goal
likes(Who,"пиво"), write(Who).
Запустимо на виконання програму, у якій мета являє собою вже кон'юнкцію двох підцілей. У результаті виконання цієї програми у вікні діалогу видається повідомлення про один розв’язок,
Петро
Зв'язано це з тим, що при значенні Who="Петро" кожна з підцілей приймає значення “істина” і вся мета стає істинної, що приводить до закінчення процесу висновку. Таким чином, при використанні внутрішньої мети шукається тільки перша з правильних відповідей. Для забезпечення пошуку всіх розв’язків слід скористатися ще одним вбудованим предикатом fail.
Таким чином, з використанням внутрішньої мети, нашу програму можна представити в такому вигляді:
/* Програма 1.3 */
domains
person,thing = string
predicates
likes(person,thing)
goal
likes(Who,"пиво"), write(Who), nl, fail. /* ціль */
clauses
likes("Іван","Марія").
likes("Петро","пиво").
likes("Іван",X) :- likes("Петро",X).
Мета рішення складається з чотирьох підцілей, з'єднаних між собою комами, тобто мета рішення задачі представляється кон'юнкцією підцілей. Мета буде досягнута, тобто матиме значення "істина" (true), якщо кожна з підцілей буде істинною. Підцілі даної програми містять один визначений користувачем предикат likes і три вбудованих стандартних предикати Пролога:
– write(term) – виводить терм на дисплей,
– nl – забезпечує перехід на новий рядок,
– fail – викликає стан невдачі при доведенні цільового твердження.
Включення в мету додаткових підцілей зв'язане з тим, що завдання мети вимагає від користувача не тільки формулювання запиту, але і забезпечення відображення його результатів на екрані, а також забезпечення пошуку всіх значень, що задольняють запитові.
Застосування предиката fail викликає стан невдачі при доведенні цільового твердження і перехід до повторного його доведення при інших початкових значеннях.
Предикат hello(person) з програми 1.2, можна використовувати для виводу у вікно будь-яких, визначених у ньому термів, що дозволяє використовувати його як інтерфейс для раніше розробленої програми 1.3. Можливо два варіанти спільного використання предикатів з цих двох програм:
– режим переносу у вихідний модуль описів і визначень предиката шляхом копіювання з іншого файлу;
– режим текстової підстановки у вихідний модуль файлу, що містить опис і визначення необхідних предикатів.
