1.16M
Категория: ПрограммированиеПрограммирование

Разработка предикатной модели представления знаний. Лабораторная работа №1

1.

Лабораторная работа №1.
Разработка предикатной модели
представления знаний

2.

Цели: изучить принципы разработки
предикатной модели представления знаний
Задачи:
1. Изучить основы языка Prolog
2. Изучить среду Strawberry Prolog
3. Разработать предикатную модель
представления знаний для извлечения
знаний о родственных отношений в семье

3.

Описание среды Strawberry Prolog
Окно редактирования текста программы
Окно просмотра результатов компилирования
и работы программы
Окно работы программы 3D Studio

4.

Запуск и отладка программы
Запустить
Компилировать
Пошаговая отладка

5.

Пример 1 решения задачи на Prolog
Задача
Все небедные и умные люди счастливы.
Человек, читающий книги, - неглуп.
Том умеет читать и является состоятельным человеком.
Счастливые люди живут интересной жизнью.
Можно ли указать человека, живущего интересной жизнью?
Описание задачи на Prolog
happy(X):-rich(X), clever(X).
clever(X):-read(X).
rich(tom).
read(tom).
interesting_life(X):-happy(X).
?-interesting_life(X), write(X).
Программа содержит 6 предложений:
3 правила,
2 факта и
вопрос.
Результатом работы Пролог-программы будет ответ системы: tomYes.
Человек, живущий интересной жизнью – это Том

6.

Пример 2 решения задачи на Prolog
Импликация - если
Мэри любит груши,
попкорн, яблоки.
Бет любит все красные
фрукты, которые
нравятся Мэри и
попкорн, который
любит Бэт.
Что любит Бэт?
Комментарии - %
Окончание предиката, импликации и цели - .
?- цель программы, запрос на который Prolog выдаст ответ.
В импликации и цели: , - И ; - ИЛИ
fail - Выполнение возврата и перебора всех значений базы фактов

7.

Пример 3 решения задачи на Prolog
1) верно ли, что Аня является матерью Саши;
2) верно ли, что Андрей является отцом Артема;
3) кто является ребенком Александра;
4) кто родители Лены;
5) Перечислите всех родителей и их детей.
DOMAINS
имя=string
PREDICATES
nondeterm
родитель(имя, имя)
CLAUSES
родитель(илья, марина).
родитель(марина, ира).
родитель(елена, иван).
родитель(николай, ира).
родитель(ольга, алексей).
родитель(марина, саша).
родитель(сергей, иван).
GOAL
родитель(марина, саша) .

8.

Пример 4 решения задачи на Prolog
Имеются факты вида: родитель(имя, имя) и женщина(имя).
а) составить правило мать и определить, кто мать Маши.
Решение:
DOMAINS
имя=string
PREDICATES
родитель(имя, имя)
женщина(имя)
мать(имя,имя)
CLAUSES
родитель("Марина","Ирина").
родитель("Елена", "Анна").
родитель("Ольга","Марина").
родитель("Ольга","Татьяна").
родитель("Татьяна","Катя").
родитель("Анна", "Маша").
женщина("Ольга").
женщина("Маша").
женщина("Ирина").
женщина("Елена").
женщина("Анна").
женщина("Марина").
женщина("Татьяна ").
женщина("Катя").
мать(X,Y):-родитель(X,Y),женщина(X).
GOAL
мать(X,"Маша").
Результат:
X=Анна
1 Solution

9.

b) составить правило бабушка и определить, кто бабушка Маши.
Решение:
DOMAINS
имя=string
PREDICATES
nondeterm родитель(имя,имя)
женщина(имя)
nondeterm мать(имя,имя)
nondeterm бабушка(имя,имя)
CLAUSES
родитель("Марина","Ирина").
родитель ("Елена", "Анна").
родитель("Ольга","Марина").
родитель("Ольга","Татьяна").
родитель("Татьяна","Катя").
родитель ("Анна", "Маша").
женщина("Ольга").
женщина( "Маша").
женщина("Ирина").
женщина("Елена").
женщина("Анна").
женщина("Марина").
женщина("Татьяна ").
женщина("Катя").
мать(X,Y):-родитель(X,Y),женщина(X).
бабушка(X,Z):-мать(X,Y),родитель(Y,Z).
GOAL
бабушка(X,"Маша").
Результат:
X=Елена
1 Solution
Замечание: ключевое слово nondeterm определяет недетерминированные предикаты, которые могут совершать откат назад и
генерировать множественные решения. Таким образом, если задача предполагает возможность получения несколько решений, следует
объявлять предикаты как недетерминированные.

10.

Пример 5 решения задачи на Prolog
Имеется база данных, содержащая факты вида отдыхает(имя, город), украина(город), россия(город),
прибалтика(город). Составить правило, позволяющее определить, кто отдыхал в России.
Проследить поиск решения задачи с помощью отладчика Visual Prolog и построить целевое дерево поиска с
возвратом.
Решение:
1. Создайте новый проект (Project | New Project) и наберите текст программы:
DOMAINS
имя, город=string
PREDICATES
отдыхает(имя, город)
украина(город).
россия(город).
прибалтика(город).
отдых_Россия(имя)
CLAUSES
отдыхает(sasha, antalia).
отдыхает(anna, sochi).
отдыхает(dima, urmala).
отдыхает(oleg, kiev).
украина(kiev).
россия(sochi).
прибалтика(urmala).
отдых_Россия(X):отдыхает(X,Y),
россия(Y).
GOAL
отдых_Россия(X),
write(X),nl.

11.

Программа на Prolog описывающая
дерево родственных отношений
родитель( пам, боб).
родитель( том, боб).
родитель( том, лиз).
родитель( боб, энн).
родитель( боб, пат).
родитель( пам, джим).
Точка, стоящая
после предиката,
указывает на то, что
рассматриваемое
выражение
является фактом.
• является ли Боб родителем Пат?
?- родитель( боб, пат).
yes
(да)
• "Кто является родителем Лиз?"
?- родитель( X, лиз).
X = том
• "Кто дети Боба?"
?- родитель( боб, X).
X = энн
• набрать точку с запятой), и она найдет
другой ответ:
X = пат

12.

Кто является родителем родителя
Джима?
Поскольку в программе прямо не сказано, что представляет
собой отношение родитель родителя, такой вопрос следует
задавать в два этапа
(1) Кто родитель Джима? Предположим, что это некоторый Y.
(2) Кто родитель Y? Предположим, что это некоторый X.
?- родитель( Y, джим), родитель( X, Y).
Ответ будет:
X = боб
Y = пат

13.

Ход работы
1.
2.
3.
4.
5.
6.
Построить генеалогическое дерево своей семьи
Описать генеалогическое дерево в виде набора фактов на
языке Prolog
Разработать на выбор пять правил определения родственных
отношений (дедушка, внук, дядя, двоюродный брат, внучатый
племянник и т.д.)*
Проверить правила на модели родственных отношений своей
семьи
Разработать пять вопросов о родственных отношения в свое
семье
Подготовить отчет о выполнении лабораторной работы
https://ru.wikipedia.org/wiki/%D0%A0%D0%BE%D0%B4%D1%81%D1%82%D0%B2%D0%BE

14.

Пример. Дерево родственных
отношений
Пример:
Отношение -родитель- (parent) между
объектами.
parent (tom, bob) - это факт,
определяющий , что Том является
родителем Боба.
parent - имя отношения,
tom, bob - его аргументы.
Дерево родственных отношений:
parent (pam, bob).
parent (tom, bob).
parent (tom, liz).
parent (bob, ann).
parent (bob, pat).
parent (mary, ann).
parent (pat, juli).

15.

Примеры правил
Пример 1:
2) child(Y, X):-parent (X, Y).
т.е:
для всех X и Y Y -ребенок X, если X -родительY.
Пример 2:
mother(X,Y):-parent(X,Y),woman(X).
т.е.:
для всех X и Y X –мать Y , если X –родитель Y и
X – женщина

16.

Социальное родство

17.

Пример выполнения лабораторной работы.
Граф родственных отношений
Никола
й
Татьяна
Валера
Олеся
Валя
Валя
Андрей
Александ
р
Елена
Анатоли
й
Иван
Татьяна
Андрей
Дмитри
й

18.

Составляем БД описывающую граф
отношений
parent ("Nikolay", "Valera").
parent ("TatianaV", "Olesya").
parent ("Valya", "Valera").
parent ("Valera", "Alexander").
parent ("Anatoly", "Helena").
parent ("Helena", "Alexander").
parent ("Valya", "Helena").
parent ("Andrey", "AndreyA").
parent ("Anatoly", "Ivan").
parent ("Helena", "AndreyA").
parent ("Valya", "Ivan").
parent ("Ivan", "Dmitriy").
parent ("Valera", "Olesya").
parent ("TatianaI", "Dmitriy").
married("TatianaI","Ivan").
married("Helena","Andrey").
married("TatianaV","Valera").

19.

Примеры правил
father(X,Y):- parent(X,Y),man(X).
mother(X,Y):- parent(X,Y),woman(X).
son(X,Y):-parent(Y,X),man(X).
daughter(X,Y):-parent(Y,X),woman(X).
wife(X,Y):-check_married(X,Y), woman(X).

20.

Примеры вопросов
Пример 1. Мама Александра
?-mother(X,"Alexander"),write(X),write(" ").
Пример 2. Елена жена Андрея
?-married("Helena","Andrey"),write(" ").
Пример 3. Олеся сестра Александра
?-sister("Olesya","Alexander"),write(" ").
?-married(X,"Andrey"),write(X),write(" ").
English     Русский Правила