Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
metod_SHI.doc
Скачиваний:
1
Добавлен:
01.07.2025
Размер:
2.11 Mб
Скачать

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 Робота системи Пролог при виконанні запитів

Запит до системи – це завжди послідовність, що складається з однієї або декількох цілей. Для відповіді на запит система намагається досягти всіх цілей, тобто показати, що твердження, що міститься в запиті, істинні в припущенні, що всі відношення в програмі істинні. Іншими словами, досягти мети – це показати, що вона логічно випливає з фактів і правил програми, а якщо в запиті є змінні, то ще і конкретизувати їх, тобто знайти ті конкретні об'єкти, при підстановці яких замість змінних, забезпечать досягнення мети.

Для цього система заглиблюється в структуру програми так глибоко, як це необхідно, щоб знайти факти, що необхідні для доказу істинності запиту. Потім система повернеться у вихідний стан, довівши або виявивши, що не в змозі довести, істинність запиту. В основі роботи системи лежить рекурсивний циклічний процес уніфікації (тобто зіставлення зі зразком) і доведення підцілей.

При надходженні запиту система переглядає всю програму в пошуках першої пропозиції, заголовок якої буде уніфікуватися з запитом. Для того, щоб запит і заголовок пропозиції уніфікувалися між собою, необхідно:

– збіг у них імені предиката;

– збіг кількості аргументів предиката;

– можливість уніфікації всіх аргументів предиката (правила уніфікації термів приведені нижче).

Якщо було виявлено пропозицію, що уніфікується з запитом, то вона починає оброблятися:

– якщо тіло пропозиції є порожнім (тобто це факт), то запит відразу виявляється успішним, змінні запиту конкретизуються об'єктами факту, і це рішення позначається покажчиком повернення;

– якщо тіло пропозиції містить підцілі, то, послідовно зліва на право, кожна з них обробляється так само, як вихідний запит.

Якщо система в тексті програми не знаходить пропозиції, що уніфікується з запитом, то вона:

– повернеться до останньої успішно доведеної підцілі;

– ліквідує конкретизацію всіх змінних, що були результатом успішної обробки цієї підцілі, тобто робить змінні знову вільними;

– приступає до пошуку в множині пропозицій поточної програми, заголовка іншої пропозиції, що уніфікується з даною підціллю.

Така процедура обробки запиту одержала назву пошук з поверненням. Застосовуючи її, при успішному виконанні запиту система видає:

– або значення всіх змінних, що входять до складу запиту;

– або слова “так” або “ні”, якщо змінні в запиті були відсутні.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]