Разработка элементов систем искусственного интеллекта с использованием логической модели представления знаний Вариант 19 - файл n1.docx

Разработка элементов систем искусственного интеллекта с использованием логической модели представления знаний Вариант 19
Скачать все файлы (355.5 kb.)

Доступные файлы (1):
n1.docx376kb.30.12.2010 15:37скачать

n1.docx

ГОУ ВПО

«Уфимский государственный авиационный технический университет»

Пояснительная записка к курсовой работе

по дисциплине «Системы искусственного интеллекта»

на тему

«Разработка элементов систем искусственного интеллекта с использованием логической модели представления знаний»

Вариант 19

Специальность 230102 – Автоматизированные системы

обработки информации и управления

Факультет информатики и робототехники

Кафедра автоматизированных систем управления

Курс 5

Семестр 9

Оценка ________________ Исполнитель

Консультант студ. гр. АСОИ-5

(зач. кн. )

___________ Алыпов Ю. Е. ___________

«___» ____________ 2010 г. «___» ___________ 2010 г.

Уфа – 2010

СОДЕРЖАНИЕ


1. Задание 1..………………………………………………………………………3

1.1 Теоретическая часть задания 1……………………………………….………3

1.2 Дерево родственных связей……...…………...……………………….……...4

1.3 Текст программы на языке Turbo Prolog...……………………...…….…......5

1.4 Результаты работы программы…………..……………………....………......6

2. Задание 2………………………………………………………………….…….7

2.1.1 Теоретическая часть задачи 1……………………………………………....7

2.1.2 Текст программы на языке Turbo Prolog (для задачи 1)……...………......8

2.1.3 Результаты работы программы (для задачи 1).……………....……….......9

2.2.1 Теоретическая часть задачи 2……………………………………………...9

2.2.2 Текст программы на языке Turbo Prolog (для задачи 2)……...………....10

2.2.3 Результаты работы программы (для задачи 2).……………....……….....12

3. Задание 3..……………………………………………………………………..14

3.1 Теоретическая часть задания 3………………………………………….…..14

3.2 Текст программы на языке Turbo Prolog...……………………...…….…....14

3.3 Результаты работы программы…………..……………………....………....15

Список использованной литературы…………………………………………...16


1. Задание 1
Цель – знакомство с основами логического программирования (Prolog).

Используя предикаты parent(symbol,symbol), man(symbol), woman(symbol), married(symbol,symbol), записать факты, описывающие Вашу семью. Записать 8 правил вывода для любых родственных отношений в Вашей (или вымышленной) семье (например: мать, отец, сестра, брат, племянница, племянник, тетя, дядя, внучка, внук, бабушка, дедушка, двоюродная сестра, двоюродный брат и т.д.).
1.1 Теоретическая часть задания 1



Prolog – это язык программирования, предназначенный для обработки символьной нечисловой информации. Особенно хорошо он приспособлен для решения задач, в которых фигурируют объекты и отношения между ними. Например, родственные отношения.

Программа на языке Prolog состоит из предложений, которые можно разделить на две группы: факты и правила вывода.

В виде фактов в программе записываются данные, которые принимаются за истину и не требуют доказательства. Данные в фактах могут быть использованы для логического вывода. Факт может описывать некоторые свойства объекта или отношения между объектами. Можно дать следующее определение для факта: факт – это свойство объекта или отношение между объектами, для которого известно, что они истинны.

Второй тип предложений – правила вывода. Правило вывода состоит из двух частей, разделенных условным обозначением :- , которое читается как «если», или «при условии, что». Левая часть правила вывода называется заголовком или головной целью. Правая часть правила вывода называется хвостом или хвостовой частью. Хвостовая часть может состоять из нескольких условий (хвостовых целей), перечисленных через запятую или точку с запятой. Запятая означает операцию «логическое И», точка с запятой – операцию «логическое ИЛИ». Головная цель правила вывода считается доказанной, если доказаны все хвостовые цели в правой части правила вывода.

Предикат – это имя свойства или отношения между объектами с последовательностью аргументов.

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

Пользуясь правилами и фактами, пролог-система может проводить рассуждения относительно имеющихся пространственных отношений. Само название «Пролог» есть сокращение, означающее программирование в терминах логики. В то время, как традиционные языки программирования являются процедурно- или объектно-ориентированными, Prolog основан на описательной или декларативной точке зрения на программирование.

1.2 Дерево родственных связей
Рис. 1. Дерево родственных связей
Построенное дерево родственных отношений описывается приведенной ниже пролог-программой. Правилами вывода родственных отношений являются: мать (mother), отец (father), брат (brother), сестра (sister), бабушка (grandmother), дядя (uncle), тетя (aunt), кузен (cousin_br), кузина (cousin_sis), племянник (nephew), племянница (niece).

1.3 Текст программы на языке Turbo Prolog
PREDICATES

parent(string, string)

man(string)

woman(string)

married(string, string)

mother(string, string)

father(string, string)

brother(string, string)

sister(string, string)

grandmother(string, string)

uncle(string, string)

aunt(string, string)

cousin_br(string, string)

cousin_sis(string, string)

nephew(string, string)

niece(string, string)
CLAUSES

parent(dina,X):- X=kostya; X=andrey.

parent(kostya,X):- X=maria; X=petr.

parent(elena,X):- X=maria; X=petr.

parent(andrey,X):- X=ivan; X=liza.

parent(julia,X):- X=ivan; X=liza.

parent(ivan,renata).

parent(elvira,renata).
man(X):- X=kostya; X=andrey; X=petr; X=ivan.

woman(X):- X=dina; X=elena; X=julia; X=maria; X=liza; X=elvira; X=renata.
married(kostya,elena).

married(andrey,julia).

married(ivan,elvira).
father(X,Y):- parent(X,Y), man(X).

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

brother(X,Y):- mother(Z,X), mother(Z,Y), man(X), X<>Y.

sister(X,Y):- father(Z1,X), mother(Z2,Y), married(Z1,Z2), woman(X), X<>Y.

grandmother(X,Y):- parent(Z,Y), parent(X,Z), woman(X).

uncle(X,Y):- parent(Z,Y), brother(X,Z).

aunt(X,Y):- parent(Z,Y), sister(X,Z).

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

cousin_br(X,Y):- aunt(Z,Y), parent(Z,X), man(X).

cousin_sis(X,Y):- uncle(Z,Y), parent(Z,X), woman(X).

cousin_sis(X,Y):- aunt(Z,Y), parent(Z,X), woman(X).

nephew(X,Y):- parent(Z,X), brother(Y,Z), man(Y).

nephew(X,Y):- parent(Z,X), sister(Y,Z), man(Y).

niece(X,Y):- parent(Z,X), brother(Y,Z), woman(Y).

niece(X,Y):- parent(Z,X), sister(Y,Z), woman(Y).

1.4 Результаты работы программы
Goal: father(X,Y): Goal: mother(X,Y):


Goal: brother(X,Y): Goal: sister(X,Y):


Goal: grandmother(X,Y): Goal: uncle(X,Y):

Goal: aunt(X,Y): Goal: cousin_br(X,Y):


Goal: cousin_sis(X,Y): Goal: nephew(X,Y):


Goal: niece(X,Y):

В результате работы программы были определены имена членов семьи, которые являются мамой, папой, бабушкой, братом, сестрой, дядей, тетей, кузэном, кузиной, племянником, племянницей. Для описания родственных отношений на языке Turbo Prolog использовались 4 предиката parent(symbol,symbol), man(symbol), woman(symbol), married(symbol,symbol) и 11 правил вывода мать (mother), отец (father), брат (brother), сестра (sister), бабушка (grandmother), дядя (uncle), тетя (aunt), кузен (cousin_br), кузина (cousin_sis), племянник (nephew), племянница (niece).
2. Задание 2
Цель – знакомство с поиском с возвратом и рекурсией в Prolog.

Задача 1. Вычислить сумму ряда целых нечетных чисел от 1 до n.

Задача 2. Написать программу для продажи туристических туров. Должна быть представлена следующая информация: название тура, страна, продолжительность, цена. Реализовать вывод информации обо всех турах, поиск тура по стране. Реализовать поиск по продолжительности с указанием интервала возможной продолжительности (должна быть выведена информация о турах, продолжительность которых попадает в указанный интервал). Для удобства работы реализовать меню с соответствующими пунктами.
2.1.1 Теоретическая часть задачи 1
Рекурсивная процедура – это процедура, которая вызывает сама себя до тех пор, пока не будет соблюдено некоторое условие, которое остановит рекурсию. Такое условие называют граничным. Рекурсивное правило всегда состоит, по крайней мере, из двух частей, одна из которых является нерекурсивной. Она и определяет граничное условие. Рекурсия – хороший способ для решения задач, содержащих в себе подзадачу такого же типа.

Составим программу для вычисления суммы ряда целых нечетных чисел. Составим правило sum, состоящее из 3-х частей:

1-я часть правила (нерекурсивная) определяет, что сумма единственного нечетного числа, равного 1, равна 1.

2-я часть правила (рекурсивная) вычисляет сумму нечетных чисел при нечетном n.

3-я часть правила (рекурсивная) вычисляет сумму нечетных чисел при четном n.
2.1.2 Текст программы на языке Turbo Prolog (для задачи 1)
PREDICATES

sum(integer, integer)
CLAUSES

sum(1,1):- !.

sum(N,Y):- N mod 2<>0, N1=N-2, sum(N1,Y1), Y=Y1+N.

sum(N,Y):- N mod 2=0, N1=N-1, N2=N1-2, sum(N2,Y1), Y=Y1+N1.
GOAL

write("Enter naturalnoe chislo N: "),

readint(N),

sum(N,Y),

write("Summa nechetnih chisel"),nl,

write("ot 1 do N ravna: ",Y),nl.
2.1.3 Результаты работы программы (для задачи 1)
N = 5. Результат: 9 N = 5. Результат: 9


N = 1. Результат: 1 N = 11. Результат: 36

Таким образом, составленная пролог-программа осуществляет вычисление суммы нечетных целых чисел от 1 до n с помощью процедуры рекурсии. Полученные результаты для тестовых примеров подтверждают корректность работы программы.
2.2.1 Теоретическая часть задачи 2
Одной из важнейших особенностей языка Пролог является возможность поиска всех решений. Поиск всех решений достигается использованием механизма поиска с возвратом.

Можно сформулировать четыре основных правила поиска с возвратом:

Правило 1: подцели должны быть согласованы по порядку, слева направо (сверху вниз);

Правило 2: предикатные предложения проверяются в том порядке, в котором они появляются в программе, сверху вниз;

Правило 3: когда подцель сопоставляется с заголовком правила, тело этого правила должно быть доказано (тело правила состоит, в свою очередь, из новых подцелей, которые должны быть доказаны);

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

Для управления поиском решений существует два стандартных предиката:

– предикат fail, использующийся для поддержания поиска с возвратом;

– предикат !, использующийся для предотвращения поиска с возвратом.

Таким образом, fail – это тождественно-ложный предикат, искусственно создающий ситуацию неуспеха. После выполнения этого предиката управление передается в точку отката и поиск продолжается. Использование предиката fail позволяет найти все решения задачи.

Чтобы ограничить пространство поиска и прервать поиск решений при выполнении какого-либо условия, используется предикат отсечения (обозначается !). Однажды пройдя через отсечение, невозможно вернуться назад, т.к. этот предикат является тождественно-истинным. Процесс может только перейти к следующей подцели, если такая имеется.
2.2.2 Текст программы на языке Turbo Prolog (для задачи 2)
DOMAINS

name=string

country=string

duration=integer

price=integer
PREDICATES

case(integer)

tour(name, country, duration, price)

shapka

vivod

menu_vozvrat

menu
CLAUSES

tour("Old_Praga","Czech",5, 2).

tour("Hot_Beach","Turkey",14, 3).

tour("Egyptians","Egypt",7, 1).

tour("Braziliada", "Brazil", 8, 3).

tour("English ","England",3,1).

tour("Dreams ","Italy",20, 5).

tour("Berlin ","German",10,2).

tour("Majic_Rim","Italy",9, 1).
menu:-

clearwindow,

write("Menu. Prodaja tourov:"),nl,

write("<1> Vivod vseh tourov"),nl,

write("<2> Poisk by country"),nl,

write("<3> Poisk by duration"),nl,

write("<4> Exit"), nl,

write("Vvedite nomer menu: "),

readint(Menu),

case(Menu).
shapka:-

write("Name Strana Dni Price"),nl.
vivod:-

tour(Name,Country,Duration,Price),

write(Name," ",Country," ",Duration," ",Price),nl, fail.
menu_vozvrat:-

write("Najmite Enter"),

readln(_),

menu.
case(4):-

write("Exit").
case(1):-

clearwindow,

write("Vivod vseh tourov:"),nl,

shapka,

vivod.

case(1):-

menu_vozvrat.
case(2):-

clearwindow,

write("Vveditу stranu: "),

readln(Country),nl,

shapka,

tour(Name,Country,Duration,Price),

write(Name," ",Country," ",Duration," ",Price),nl,

fail.

case(2):-

menu_vozvrat.
case(3):-

clearwindow,

write("Vvedite min days: "),

readln(minim),

write("Vvedite max days: "),

readreal(maxim),nl,

shapka,

tour(Name,Country,Duration,Price),

Duration>=minim, Duration<=maxim,

write(Name," ",Country," ",Duration," ",Price),nl,

fail.

case(3):-

menu_vozvrat.
GOAL

menu.
2.2.3 Результаты работы программы (для задачи 2)
Goal: menu (Меню программы):

<1> Vivod vseh tourov (Вывод всей базы туристических туров):
<2> Poisk by country (Turkey) (Поиск тура по стране – Турция):

<2> Poisk by country (Italy) (Поиск тура по стране – Италия):

<3> Poisk by duration (10-14) (Поиск тура по продолжительности с указанием продолжительности 10-14 дней):


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

3. Задание 3
Цель – решение логических задач в Prolog.

По древнему поверью, у каждого месяца есть свой камень-талисман. Так, июню, июлю и сентябрю соответствуют камни рубин, сапфир и жемчуг. Эти камни означают мудрость, здоровье и благополучие. У какого месяца какой камень-талисман и что он означает, если известно, что:


3.1 Теоретическая часть задачи 3
Prolog позволяет наиболее естественным образом решать логические задачи, моделируя процесс размышления человека с помощью правил.

Многие логические задачи связаны с рассмотрением нескольких конечных множеств с одинаковым количеством элементов, между которыми устанавливается взаимно-однозначное соответствие. В Prolog эти множества можно описывать как базы данных, а зависимости между объектами устанавливать с помощью правил.
3.2 Текст программы на языке Turbo Prolog
PREDICATES
stone(symbol)

meaning(symbol)

month_stone(symbol, symbol)

month_meaning(symbol, symbol)

stone_meaning(symbol, symbol)

rezult(symbol, symbol, symbol, symbol, symbol, symbol, symbol, symbol, symbol)

dif(symbol, symbol, symbol)
CLAUSES

stone(rubin).

stone(sapfir).

stone(jemchug).
meaning(mudrost).

meaning(zdorovie).

meaning(blagopoluchie).
month_stone(september, Y):- not(Y= jemchug), not(Y=rubin).

month_meaning(june, Z):- not(Z=mudrost), not(Z=blagopoluchie).

month_meaning(july, Z):- not(Z=mudrost).

stone_meaning(Y, Z):- Y=rubin, not(Z=zdorovie).

dif(Y1,Y2,Y3):- Y1<>Y2, Y1<>Y3, Y2<>Y3.
rezult(X1,Y1,Z1,X2,Y2,Z2,X3,Y3,Z3):-

X1=june, X2=july, X3=september,

stone(Y1), stone(Y2), stone(Y3),

meaning(Z1), meaning(Z2), meaning(Z3),

stone_meaning(Y1, Z1), stone_meaning(Y2, Z2),

month_stone(X3,Y3),

month_meaning(X1,Z1), month_meaning(X2,Z2),

dif(Y1,Y2,Y3), dif(Z1,Z2,Z3).
3.3 Результаты работы программы
Goal: rezult(X1,Y1,Z1,X2,Y2,Z2,X3,Y3,Z3):

X1=june, Y1=jemchug, Z1=zdorovie,

X2=july, Y2=rubin, Z2=blagopoluchie,

X3=september, Y3=sapfir, Z3=mudrost.
Таким образом, составленная программа в соответствии с заданными логическими условиями реализует поиск решения путем установления взаимно однозначного соответствия между множеством месяцев, множеством камней-талисманов и множеством их толкований.


СПИСОК ИСПОЛЬЗОВАННОЙ ЛИТЕРАТУРЫ


  1. Братко И. Алгоритмы искусственного интеллекта на языке PROLOG, 3-е издание: Пер. с англ. – М.: Издательский дом «Вильямс», 2004. – 640 с.

  2. Братко И. Программирование на языке Пролог для искусственного интеллекта: Пер. с англ. – М.: Мир, 1990. – 560с.

  3. Новицкая Ю. В. Основы логического и функционального программирования: учебное пособие. – Новосибирск: НГТУ, 2006. – 53 с.

  4. Стобо Д. Ж. Язык программирования Пролог.: Пер. с англ. – М.: Радио и связь, 1993. – 368 с.

  5. Цуканова Н. И. Логическое программирование на языке Visual Prolog: учебное пособие / Н. И. Цуканова, Т. А. Дмитриева. – М.: Горячая линия - Телеком, 2008 . – 144 с.

  6. Янсон А. Турбо-Пролог в сжатом изложении: Пер. с нем. – М.: Мир, 1991. – 94 с.


Учебный текст
© perviydoc.ru
При копировании укажите ссылку.
обратиться к администрации