Similar presentations:
Разработка предикатной модели представления знаний. Лабораторная работа №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 решения задачи на Prolog1) верно ли, что Аня является матерью Саши;
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(" ").