ТОП 10:

Факт – это то, что известно.



Правило – это способ порождения новых фактов на основе имеющихся.

Для родственных отношений мы можем установить множество правил, избавляясь от необходимости вводить дополнительные факты, например, кто

кому приходится братом, племянником и т.д. Правило, определяющее отношение брат или сестра (имеют общих родителей):

sibling(X,Y) :- parent(Z,X), parent(Z,Y), X< >Y.

Предикат сравнения X< >Y нужен для того, чтобы Пролог не выводил решения, что каждый сам себе брат или сестра.

Для точного определения брат это или сестра, тетя или дядя, бабушка или дедушка, мать или отец и т.п. необходимо добавить факты полового признака – одноместные предикаты, например, men и women

man (рюрик). man (игорь). man (святослав). и т.д.

woman (ефанда). woman (ольга). и т.д.

Правило, определяющее отношение типа дядя, выглядит следующим образом:

uncle(X,Y) :- parent(Z,Y), sibling(X,Z), man(X).

Когда в ходе резолюции цели Пролог встречает не факт, а правило, то вначале унифицирует заголовок правила, т.е. сравнивает связанные переменные и присваивает значения свободным переменным. В случае успешной унификации аргументов Пролог подставляет значения аргументов из заголовка в первый предикат в теле правила и ставит этот предикат себе в качестве подцели, которую начинает унифицировать с базой знаний. В случае успешной резолюции данной подцели Пролог переходит к следующему условию правила.

Если унификация этого предиката условия приводит к неудаче, то Пролог выполняет откат к предыдущему условию правила. Этот откат происходит только в том случае, если этот предыдущий предикат является неоднозначным.

Если в цепочке предикатов внутри правила встречаются как однозначные, так и неоднозначные предикаты, то откат после неудачи выполняется на ближайший неоднозначный предикат.

Факт – знания, основанные на константах (неизменяемые знания).

Правила – знания, которые выводятся на основании фактов.

Набор фактов и правил не содержит в себе алгоритма.

Правила и факты существуют независимо друг от друга.

Объединение правил для вывода результата происходит в ходе резолюции цели.

Переменные в заголовке правила существуют только внутри данного правила.

При откате внутри правила происходит переход к предыдущему неоднозначному предикату в правиле.

 

Пример программы на Прологе

Существует множество реализации языка Пролог для разных классов вычислительных систем. Для выполнения лабораторных работ используется программный продукт Visual Prolog v.5.2 Personal Edition for Windows.

Программа на Прологе состоит из нескольких секций, каждая из которых идентифицируется ключевым словом и имеет следующую обобщенную структуру:

 

Domains

/* секция объявления доменов */

Database

/* секция объявления динамических баз данных */

Predicates

/* секция объявления предикатов */

Clauses

/* предложения (факты и правила) */

Goal

/* подцель_1, подцель_2, и т. д. */

Обязательным в программе является присутствие двух секций с именами predicates и clauses. В первой из них описываются структуры используемых в программе отношений, а во второй эти отношения определяются. Более подробно секции Пролог-программы будут рассмотрены на следующих практических занятиях.

Для набора фактов и правил, рассмотренных выше, один из возможных примеров программы на Прологе будет иметь вид:

Рис. 1.2.Пример программы на Прологе

Пролог-программа может использовать комментарии, которые не влияют на выполнение программы, но могут оказать помощь человеку, читающему программу. Пролог игнорирует произвольное число строк, заключенное между символами /* и */. Все, что находится между % и концом строки, также рассматривается как комментарий.

Практикум 1-1

: Запустите систему Пролог. Создайте программу «Родственные отношения» в соответствии с рис.1.1., рис.1.2. Проверьте работу программы, ответив на вопросы: 1. Является ли Ольга родителем Игоря? 2. Кто родители князя Игоря? 3. Есть ли у Олега дети? 4. Чьим внуком является Ярослав Мудрый? 5. Сколько детей у Анны Византийской?  

 

Практикум 1-2

: Добавьте правила, для определения родственных связей · отец · мать · брат · сын · дядя Проверьте работу программы, ответив на вопросы: 1. Кто отец Владимира Красное Солнышко?? 2. Перечислить всех матерей? 3. Сколько братьев у Ярослава Мудрого? 4. Был ли сын у Ярополка? 5. Был ли дядя у Мстислава Храброго?  

 

Практикум 1-3

: Самостоятельно сформулируйте пять запросов к базе знаний Оформите Отчет по лабораторной работе  

 

 


Контрольное задание 1

Исходные данные

Номер варианта индивидуального задания выбирается по последней цифре номера зачетной книжки (номера студенческого билета).

В индивидуальном задании студенту для описания базы фактов предлагается минимальный набор родственных отношений в соответствии с вариантом:

0. отец/2. мать/2.
1. сын/2. дочь/2.
2. сын/3. дочь/3.
3. родитель/2. мужчина/1.
4. родитель/2. женщина/1.
5. ребенок/2. мужчина/1.
6. ребенок/2. женщина /1.
7. ребенок/3.
8. родители/3.
9. ребенок/3. сын/2.

Значками «/1», «/2», «/3» задается арность отношения или, говоря в терминах предметной области, количество личностей в отношении.

Например:

· отношение «мужчина/1» характеризует такой факт как «Виктор является мужчиной» или на Пролог

мужчина (“Виктор”);

· отношение «отец/2» характеризует родственное отношение «Виктор отец Андрея» или на Пролог

отец (“Виктор”, “ Aндрей”);

· отношение «сын/3» характеризует родственной отношение «Андрей сын Виктора и Аллы» или на Пролог

сын (“Андрей”, “Виктор”, “Алла”);

· отношение «родитель/3» характеризует родственной отношение «Виктор и Алла родители Андрея» или на Пролог

родители (“Виктор”, “Алла”, “Андрей”).

Примечание: Указанный в задании минимальный набор фактов родственных отношений может быть расширен дополнительными фактами, но необходимость подобного действия необходимо обосновать.

Задание 1. Генеалогическое дерево

Для определения фактов базы знаний необходимо составить генеалогическое дерево и изобразить его на бумаге в виде семантической сети. Пример генеалогического дерева приведен на рис.1.1. Личности, объединяемые генеалогическим деревом, могут быть как реальными (Иван Грозный, Петр I, Николай II, Пушкин А.С., и т.п.), так и виртуальными (родословные гномов и т.п. персонажей). Для проверки правильности составления всех правил родственных отношений дерево должно содержать не менее четырех уровней или, говоря языком предметной области, на дереве должны быть прадедушки (прабабушки) и правнуки (правнучки). Для упрощения задания не рекомендуется (но не возбраняется) вводить в генеалогическое дерево личностей порождающих циклические связи, являющимися, например, одновременно «супругой» и «двоюродной сестрой».

Задание 2. Представление правил

Используя исходные предикаты (в соответствии с вариантом) написать правила для установления родственных связей, таких как:

· отец, мать, сестра, брат, сын, дочь;

· двоюродная сестра (кузина), двоюродный брат (кузен), дядя, тетя, племянник, племянница;

· дедушка, бабушка, прадедушка, прабабушка, внук, внучка, правнук, правнучка.

Дополнительно (для желающих - задания повышенной трудности):

кровные (общий предок), сводные брат и сестра, шурин, деверь, золовка, тесть, теща, зять, невестка.

Для каждого родственного отношения первоначально необходимо записать правило на естественном языке (в виде продукции). Например:

ЕСЛИ есть такой X который является отцом Z

И Z является отцом ИЛИ матерью Y

ТОГДА X является дедом Y.

Затем переписать это же правило на языке Пролог:

grandfather (X,Y) :- father (X,Z), father (Z,Y).

grandfather (X,Y) :- father (X,Z), mother (Z,Y).

Задание 3. Программа на Прологе

Перевести генеалогическое дерево в базу фактов, в соответствии с предикатами, заданными в варианте.

Описать все правила родственных отношений.

Сформулировать запросы для проверки работы программы

Требования к оформлению

Преподавателю на проверку сдается файл Microsoft Word, содержащий следующую информацию:

1. Титульный лист

2. Генеалогическое дерево

3. Составление правил искомых родственных связей в базе знаний

4. Листинг разработанной базы знаний на языке Пролог

5. Примеры запросов к базе знаний и ее ответов

ПРАКТИЧЕСКОЕ ЗАНЯТИЕ 2.







Последнее изменение этой страницы: 2017-02-10; Нарушение авторского права страницы

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.234.244.18 (0.008 с.)