Mother(X,Y):- parent(X,Y),woman(X). 


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Mother(X,Y):- parent(X,Y),woman(X).



Добавьте правило для нахождения всех отцов. Получите список всех матерей и их детей, а также отцов и их детей.

3. Индивидуальное задание. Согласно своему варианту, обозначьте бинарные отношения родства, определенные на множестве людей. Базовыми отношениями при этом являются: бинарное отношение РОДИТЕЛЬ (англ.: parent), унарное отношение ЖЕНЩИНА (англ.:woman), унарное отношение МУЖЧИНА (англ.:man), бинарное отношение СУПРУГИ (англ.:married). Все базовые отношения задаются в форме фактов.

Перечисленные ниже производные родственные отношения определяются на основе базовых родственных отношений.

Для получения ответов на запросы согласно своему варианту расширьте свое дерево родственных отношений.

1. сын (son)

2. дочь (daughter)

3. брат (brother)

4. сестра (sister)

5. внук (grandson)

6. внучка (granddaughter)

7. дедушка (grandfather)

8. бабушка (grandmother)

9. тетя (aunt)

10. дядя (uncle)

11. племянник (nephew)

12. племянница (niece)

13. Правнук (great_grandson)

14. Правнучка (great_granddaughter)

15. двоюродный брат [кузен] (first_coustin_brother)

16. двоюродная сестра [кузина] (first_coustin_sister)

17. двоюродный дядя (first_coustin_uncle)

18. двоюродная тетя (first_coustin_aunt)

19. муж (husband)

20. жена (wife)

21. тесть (wifes_father)

22. теща (wifes_mother)

23. свекор (husbands_father)

24. свекровь (husbands_mother)

25. деверь [брат мужа] (husbands_brother)

26. свояченица [сестра жены] (wifes_sister)

27. зять

28. невестка

КОНТРОЛЬНЫЕ ВОПРОСЫ

  1. Какова структура Пролог-программ?
  2. Какие разделы программ относятся к основным?
  3. Что содержится в разделе DOMAINS?
  4. Что содержится в разделе PREDICATES?
  5. Что такое «арность»?
  6. Для чего предназначен раздел CLAUSES?
  7. Опишите раздел GOAL.
  8. Перечислите дополнительные разделы программ. Дайте их краткую характеристику.

 

 

ЛАБОРАТОРНАЯ РАБОТА №2

Тема: Создание программ на логическом языке в среде Visual Prolog.

Цель: Научиться писать простейшие программы на языке Пролог.

ТЕОРЕТИЧЕСКАЯ ЧАСТЬ

 

ОСНОВНЫЕ ФАЗЫ ПРОГРАММИРОВАНИЯ НА ЯЗЫКЕ ПРОЛОГ

Программирование на языке Пролог состоит из следующих этапов:

Ø объявления некоторых фактов об объектах и отношениях между ними;

Ø определения некоторых правил об объектах и отношениях между ними;

Ø формулировки вопросов об объектах и отношениях между ними.

Ø

ОПИСАНИЕ БАЗЫ ЗНАНИЙ

 

В логической модели знаний, которая используется в языке Пролог, база знаний (БЗ) состоит из фактов и правил.

Описание фактов – достаточно простая задача, так как факт определяет свойство объекта или отношение (связь) между объектами. Любое имя, используемое в Прологе, должно состоять не более чем из 250 символов, первый из которых при этом должен обязательно быть строчной буквой (кроме имён переменных) желательно латинского алфавита (от a до z). Пробелы в записи имени недопустимы, однако можно использовать подчерк (_) в качестве разделителя компонент.

Наибольшую трудность представляет описание правил. Правила используются в тех случаях, если необходимо показать, что некоторый факт зависит от других фактов (условий). Правила обладают большей общностью, чем факты. Это объясняется тем, что в правилах обычно содержаться переменные. Важно помнить, что переменная используется для обозначения не одного конкретного объекта, а различных объектов. Область действия переменной – одно правило. Кроме того, переменная обозначает один и тот же объект по всему правилу. Вот почему в процессе логического вывода все вхождения одной переменной в правиле заменяются одним и тем же значением. Имена переменных должны задаваться с заглавной буквы или с символа подчёркивания «_». Существует и особый вид переменной, которая называется анонимной и обозначается символом «_» (и только!). Она используется в качестве аргумента предиката в случае, когда конкретное значение переменной несущественно. Значения таких переменных не выводятся на печать. Следует заметить, что если в одном правиле используется несколько анонимных переменных, то все они разные.

Например, если нас интересует, является ли кто-либо мамой, но нам не нужно знать их детей (см. лабораторную работу №1), то нужно задать цель:

mother(Х,_).

Пролог при этом выдаст имена всех матерей, которые найдёт в базе данных согласно правилу:

mother(X,Y):-parent(X,Y),woman(X).

Именно благодаря правилам и переменным система логического вывода позволяет выводить такие значения, которые в явном виде в БЗ отсутствуют.

ФОРМУЛИРОВКА ЦЕЛЕЙ

 

Существует два вида целей:

Ø подтвердить справедливость факта. Ответом системы на такие запросы выступает логическое Yes или No. В естественном языке такие цели соответствуют конструкции вопроса типа: «Действительно ли, что …?»;

Ø перечислить все значения переменных, указанных в запросе. В естественном языке аналогом этих целей выступают вопросы, начинающиеся со слов Что? Кто? Сколько? Где? и т.д., ответы на которые требуют уточнения кое-каких деталей касательно объекта, указанного в вопросе.

При формулировке правил и целей допускается использование отрицания, конъюнкции, дизъюнкции, а также операций сравнения (<,<=,>,>=,<>,=).

 

МОДЕЛИРОВАНИЕ РАССУЖДЕНИЙ

 

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

Пусть программа на Прологе содержит следующие утверждения (факты и правила) (фразы, заключенные в «/*..….*/», воспринимаются Прологом как коментарий):

знает(мария,хор). /* Мария знает хор*/

(1) знает(мария,сольфеджио). /* Мария знает сольфеджио*/

(2) знает(мария,информатика). /* Мария знает информатику*/

(3) знает(мария,алгебра). /* Мария знает алгебру*/

знает(мария,геометрия). /* Мария знает геометрию*/

/*Иван знает те же курсы, что и Мария, при условии, что эти курсы изучаются в университете */

знает(иван,X):- знает(мария,X),университет_курс(X).

университет_курс(информатика). /*информатика изучается в университете*/

университет_курс(алгебра). /*алгебра изучается в университете*/

университет_курс(геометрия). /*геометрия изучается в университете*/

музыка_курс(сольфеджио). /*сольфеджио изучается в музучилище*/

музыка_курс(хор). /*хор изучается в музучилище*/

и цель:

знает(иван,X). /*какие курсы знает Иван?*/

Пролог ищет факты и головы правил, сопоставимые с целью. Два факта сопоставимы (или соответствуют друг другу), если выполняются следующие три условия сопоставления фактов:

1. имена отношений одинаковы (побуквенное совпадение);

2. отношения имеют равное количество аргументов;

3. аргументы, расположенные в одинаковых позициях, сопоставимы.

Правила сопоставления аргументов:

3.1. Имена конкретных объектов сопоставимы, если они совпадают;

3.2. Переменная сопоставима с именем конкретного объекта;

3.3. Переменная сопоставима с другой переменной.

Пролог просматривает утверждения в том порядке, в каком они вводились в БЗ. Поэтому сначала сравниваются цель

знает(иван,Х)

и факт

знает(мария,хор).

Первые аргументы несопоставимы. Следовательно, попытка сопоставить цель и факт неуспешна. Пролог продолжает сопоставлять цель со всеми фактами для отношения «знает». Результаты этих сопоставлений неуспешны, так имя объекта «мария» несопоставимо с именем «иван». Пролог переходит к правилу. Цель и голова правила сопоставимы, так как их переменные свободны (неозначенные переменные называются свободными). Теперь факты правой части правила становятся подцелями. Первой подцелью является

знает(мария,Х).

Это новая подцель, поэтому Пролог снова начинает просмотр БЗ с первого факта для отношения «знает» и находит

знает(мария,хор).

Этот факт сопоставим с подцелью. Значением переменной Х становится «хор». (Переменные, получившие конкретное значение, называются связанными) Однако существуют другие утверждения, которые могли быть использованы для доказательства первой подцели. Поэтому Пролог устанавливает указатель отката (бэктрекинга (backtracking)) в точку (1). С этого указателя Пролог сделает попытку найти другое решение, если вся цель окажется неуспешной.

Вторая подцель есть:

университет_курс(Х),

так как переменная Х имеет значение «хор». Все сопоставления этой подцели с фактами БЗ неуспешны. Поэтому первая попытка доказать цель завершилась неудачей.

Пролог выполняет откат к указателю (1). Переменная Х становится свободной из-за неуспешного доказательства цели. В точке, определяемой указателем отката, Пролог находит утверждение

знает(мария,сольфеджио)

и устанавливает указатель отката (2) на следующий факт для предиката «знает». Переменная Х принимает значение «сольфеджио».

Подцель

университет_курс(солфеджио)

не может быть доказана, следовательно, доказательство цели снова привело к неудаче. Переменная Х освобождается, а для доказательства цели будет сделана следующая попытка. Пролог выполняет откат в точку (2). Теперь первая подцель сопоставляется с фактом

знает(мария,информатика),

Х получает значение «информатика», а указатель отката устанавливается в точку (3). Вторая подцель принимает вид:

университет_курс(информатика).

Успешное сопоставление этой подцели доказывает цель. Следовательно, ответ на поставленный вопрос формулируется так: «Иван знает информатику». Цель успешно доказана, поэтому переменная Х становится свободной и может быть вновь означена при поиске других решений.

ПРАКТИЧЕСКИЕ ЗАДАНИЯ

 

1. Описать БЗ «Библиотека», содержащую факты:

Ø О читателях – студентах:

Фамилия Курс Фамилия Курс
Иванов   Анисимов  
Петров   Тихонов  
Сидоров   Травкин  
Ковалёв   Жданов  
Антонов   Галкин  

Ø О книгах, невозвращённых читателями в срок

Название книги Номер книги Год издания Фамилия студента
Физика     Иванов
Химия     Петров
Физика     Антонов
Химия     Тихонов
Химия     Галкин
Математика     Галкин

 

Ø Добавить к БЗ правило, позволяющее определить:

  1. какие книги (название, номер) не возвращены студентами заданного курса;
  2. кто из студентов не вернул книги, изданные до 1990 года;
  3. кто из студентов не вернул книги заданной тематики (например, по химии).

 

Ø Сформулировать цели:

1. перечислить фамилии студентов 3-го курса, которые пользуются услугами библиотеки;

2. перечислить фамилии студентов 2-го и 4-го курсов, которые пользуются услугами библиотеки;

3. какие книги (название и номер) не возвращены студентами 2-го курса?

4. Кто из студентов не вернул книги, изданные до 1990 года?

5. Кто из студентов не вернул книги по физике?

 

2. Описать БЗ «Компьютеры».

Факты базы знаний содержат следующую информацию.

- какие фирмы изготавливают вычислительные системы и их составные части:

Фирмы-изготовители Название изделия
Mem1, Mem2 Внутренняя память
Disk1, Disk2 Диски
Pr1 Процессоры
Comp1, Comp2 Компьютеры
Net1, Net2 Вычислительные сети

 

- услугами каких фирм-поставщиков пользуются фирмы-изготовители. (Одна и та же фирма может быть изготовителем и поставщиком, например, Comp1.) (рис.2)

Определить отношение «конкурент». Две фирмы конкурируют, если они выпускают одинаковые устройства.

Определить отношение «использует изделие», которое устанавливает связь между фирмами-поставщиками и фирмами-изготовителями. Например, фирма Comp1 использует изделия от фирм Mem1, Disk1, Disk2, Pr1, а фирма Net1 – от Mem1, Disk1, Disk2, Pr1, Comp1 (рис.2).

 

 

Disk1 Disk2

           
     
 

 

 


Comp1 Mem1 Comp2 Mem2

               
     
       
 

 


Pr1

 

 

Net1 Net2

 

Рис.1. Взаимодействие фирм-поставщиков и фирм-изготовителей.

 

Получить ответы на следующие вопросы:

1. Какие фирмы производят внутреннюю память?

2. Изделиями каких фирм пользуется фирма Net2?

3. Какие фирмы конкурируют между собой?

4. Какие фирмы по изготовлению компьютеров конкурируют между собой?

5. Диски каких фирм использует фирма Comp1?

6. Какие фирмы поставляют изделия для фирмы Comp2?

7. Внутреннюю память каких фирм использует фирма Net2?

3. Индивидуальное задание. Разработать программу, содержащую простую базу данных с использованием правил для получения информации в результате поиска по образцу среди совокупности фактов в заданной предметной области для заданного количества объектов и учитываемых параметров (таблица 1).

Указание: тип объектов, характеристики учитываемых параметров, а также характеристики образца выбрать самостоятельно.

Таблица 1.

№ варианта Наименование предметной области Количество объектов Количество учитываемых параметров
  «Поиск жилья» (для фирмы по торговле недвижимостью)    
  «Поиск преступника» (для органов внутренних дел)    
  «Выбор места для отдыха» (для бюро путешествий)    
  «Выбор подарка» (для супермаркета)    
  «Поиск работы» (для службы занятости)    
  «Подбор книг» (для библиотеки)    
  «Выбор автомобиля»    
  «Выбор компьютера»    
  «Поиск преступника»    
  «Выбор подарка»    
  «Выбор места для проведения отпуска»    
  «Выбор жилья»    
  «Выбор авиакомпании для путешествия по заданному маршруту»    
  «Выбор загородного дома»    
  «Выбор подарка»    
  «Поиск преступника»    
  «Выбор автомобиля»    
  «Выбор компьютера»    
  «Подбор книг» (для библиотеки)    
  «Выбор загородного дома»    
  «Поиск работы»    
  «Отбор кинофильма для предварительного показа на кинофестивале»    
  «Выбор места для отдыха»    
  «Выбор загородного дома»    
  «Выбор облицовочных материалов для ремонта квартиры»    

 

КОНТРОЛЬНЫЕ ВОПРОСЫ

  1. Что входит в базу знаний Пролога?
  2. Что описывают факты в Прологе?
  3. Как формируются правила на Прологе?
  4. Как задаются имена в Прологе?
  5. Объясните суть переменных в Прологе.
  6. Что такое «анонимная переменная»?
  7. Как классифицируются в Прологе вопросы в зависимости от получаемого результата?
  8. Каковы условия сопоставимости фактов в Прологе?
  9. Каковы правила сопоставления?
  10. Объясните принцип отката в Прологе.

 

 

ЛАБОРАТОРНАЯ РАБОТА №3

Тема: Контроль механизма бэктрекинга при поиске решений.

Цель: Научиться использовать встроенные предикаты fail,cut и not.

ТЕОРЕТИЧЕСКАЯ ЧАСТЬ

 

В Прологе существуют два специальных предиката, которые позволяют контролировать механизм бэктрекинга: предикат fail, заставляющий запускать механизм бэктрекинга, и cut (обозначается с помощью символа “!”), предназначенный для отмены бэктрекинга.



Поделиться:


Последнее изменение этой страницы: 2016-12-30; просмотров: 662; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

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