КУРСОВАЯ РАБОТА по дисциплине «Системы искусственного интеллекта» на тему «Разработка элементов систем искусственного интеллекта с ис-пользованием логической модели представления знаний»
Автор: student | Категория: Технические науки / Информатика и программирование | Просмотров: 1835 | Комментирии: 0 | 28-12-2013 14:35
СКАЧАТЬ: 222.zip [298,33 Kb] (cкачиваний: 35)




КУРСОВАЯ РАБОТА


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

Вариант 3


Содержание
Введение………………………………………………………………………3
1. Теоретическая часть………………………………………………………..4
2. Задание 1………………………………………………………………....... 6
3. Задание 2…………………………………………………………………...10
4. Задание 3………………………………………………………………….. 14
5. Задание 4…………………………………………………………………...16
6. Общий вывод………………………………………………………………22
Список литературы………………………………………………..…………23



































Введение

Пролог (фр. Programmation en Logique) — язык и система логического программирования, основанные на языке предикатов математической логики дизъюнктов Хорна, представляющей собой подмножество логики предикатов первого порядка.
Основными понятиями в языке Пролог являются факты, правила логического вывода и запросы, позволяющие описывать базы знаний, процедуры логического вывода и принятия решений.
Факты в языке Пролог описываются логическими предикатами с конкретными значениями. Правила в Прологе записываются в форме правил логического вывода с логическими заключениями и списком логических условий.
Особую роль в интерпретаторе Пролога играют конкретные запросы к базам знаний, на которые система логического программирования генерирует ответы «истина» и «ложь». Для обобщённых запросов с переменными в качестве аргументов созданная система Пролог выводит конкретные данные в подтверждение истинности обобщённых сведений и правил вывода.
Факты в базах знаний на языке Пролог представляют конкретные сведения (знания). Обобщённые сведения и знания в языке Пролог задаются правилами логического вывода (определениями) и наборами таких правил вывода (определений) над конкретными фактами и обобщёнными сведениями.
Программирование на языке Пролог состоит из следующих этапов:
1.Объявление некоторых фактов об объектах и отношениях между ними.
2.Определение правил, описывающих объекты и отношения.
3.Формулировки вопросов об объектах и отношениях между ними.




1. Теоретическая часть

Prolog – это язык программирования, предназначенный для обработки символьной нечисловой информации. Особенно хорошо он приспособлен для решения задач, в которых фигурируют объекты и отношения между ними. Например, родственные отношения.
Программа на языке Prolog состоит из предложений, которые можно разделить на две группы: факты и правила вывода.
В виде фактов в программе записываются данные, которые принимаются за истину и не требуют доказательства. Данные в фактах могут быть использованы для логического вывода. Факт может описывать некоторые свойства объекта или отношения между объектами. Можно дать следующее определение для факта: факт – это свойство объекта или отношение между объектами, для которого известно, что они истинны.
Второй тип предложений – правила вывода. Правило вывода состоит из двух частей, разделенных условным обозначением :- , которое читается как «если», или «при условии, что». Левая часть правила вывода называется заголовком или головной целью. Правая часть правила вывода называется хвостом или хвостовой частью. Хвостовая часть может состоять из нескольких условий (хвостовых целей), перечисленных через запятую или точку с запятой. Запятая означает операцию «логическое И», точка с запятой – операцию «логическое ИЛИ». Головная цель правила вывода считается доказанной, если доказаны все хвостовые цели в правой части правила вывода.
Предикат – это имя свойства или отношения между объектами с последовательностью аргументов.
При записи факта или цели с использованием некоторого предиката сначала записывается имя предиката, а затем в скобках, через запятую, его аргументы.
Пользуясь правилами и фактами, пролог-система может проводить рассуждения относительно имеющихся пространственных отношений. Само название «Пролог» есть сокращение, означающее программирование в терминах логики. В то время как традиционные языки программирования являются процедурно - или объектно-ориентированными, Prolog основан на описательной или декларативной точке зрения на программирование.
Рекурсивная процедура – это процедура, которая вызывает сама себя до тех пор, пока не будет соблюдено некоторое условие, которое остановит рекурсию. Такое условие называют граничным. Рекурсивное правило всегда состоит, по крайней мере, из двух частей, одна из которых является нерекурсивной. Она и определяет граничное условие. Рекурсия – хороший способ для решения задач, содержащих в себе подзадачу такого же типа.































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

Описание родственных связей


















Исходный текст программы на Прологе:
PREDICATES
parent(string,string).
man(string).
woman(string).
married(string,string).
different(string,string).
mother(string,string).
father(string,string).
sister(string,string).
brother(string,string).
aunt(string,string).
cousin(string,string).
grandma(string,string).
grandpa(string,string).
print_m
print_f.
print_gm.
print_gf.
print_s.
print_b.
print_a.
print_c.
CLAUSES
man("Igor").
man("Oleg").
man("Dmitriy").
woman("Irina").
woman("Valentina").
woman("Elena").
woman("Julia").
married("Oleg","Irina").
married("Dmitriy","Valentina").
parent("Oleg","Igor").
parent("Elena"," Julia").
parent("Dmitriy","Oleg").
parent("Dmitriy","Elena").
different(X,Y) :- X=Y,!,fail; true.
mother(X,Y) :- parent(X,Y), woman(X).
mother(X,Y) :- father(Z,Y), married(Z,X).
father(X,Y) :- parent(X,Y), man(X).
%father(X,Y) :- mother(Z,Y), married(X,Z).
grandma(X,Y) :- parent(Z,Y), parent(X,Z), woman(X).
grandma(X,Y) :- grandpa(Z,Y), married(Z,X).
grandpa(X,Y) :- parent(Z,Y), parent(X,Z), man(X).
%grandpa(X,Y) :- grandma(Z,Y), married(X,Z).
sister(A,B) :- parent(C,A), parent(C,B), woman(A), different(A,B).
brother(A,B) :- parent(C,A), parent(C,B), man(A), different(A,B).
aunt(X,Y) :- parent(Z,Y), sister(X,Z), woman(X).
cousin(X,Y) :- grandpa(Z,X), grandpa(Z,Y), different(X,Y).
print_m :- mother(Parent,Child),write(Parent," is a mother of ",Child),nl,fail.
print_m.
print_f :- father(Parent,Child),write(Parent," is a father of ",Child),nl,fail.
print_f.
print_gm :- grandma(X,Y),write(X," is a grandma of ",Y),nl,fail.
print_gm.
print_gf :- grandpa(X,Y),write(X," is a grandpa of ",Y),nl,fail.
print_gf.
print_s :- sister(X,Y),write(X," is a sister of ",Y),nl,fail.
print_s.
print_b :- brother(X,Y),write(X," is a brother of ",Y),nl,fail.
print_b.
print_a :- aunt(X,Y),write(X," is an aunt of ",Y),nl,fail.
print_a.
print_c :- cousin(X,Y),write(X," is a cousin of ",Y),nl,fail.
print_c.
GOAL
print_m, print_f, print_gm, print_gf, print_s, print_b, print_a, print_c, readln (Pause).

Результаты работы программы:


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




























3. Задание 2
Задание:
1. Написать программу, реализующую словарь. В словаре содержится следующая информация: слово и его несколько переводов. Реализовать вывод всего словаря, перевод с русского на английский, с английского на русский. Для удобства работы реализовать меню с соответствующими пунктами.
2. Вычислить сумму ряда целых нечетных чисел от 1 до n.
Исходный текст программ на Прологе:
1.
PREDICATES
choice(integer).
word(string,string).
menu.
CLAUSES
word("cat","kot").
word("dog","sobaka").
word("glass","stakan").
word("glass","steklo").
word("world","mir").
word("peace","mir").
choice(1) :- word(X,Y),write(X," - ",Y),nl,fail; menu.
choice(2) :- write("Enter the english word: "), readln(X), word(X,Y), write(X," - ",Y), nl, fail; menu.
choice(3) :- write("Enter the russian word: "), readln(Y), word(X,Y), write(Y," - ",X), nl, fail; menu.
choice(4).
menu :- write("Enter the number of the point you would like to do:"), nl,
write("1.All words."), nl,
write("2.English to Russian."), nl,
write("3.Russian to English."), nl,
write("4.Exit."), nl, readint(X), choice(X).
GOAL menu.
2.
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.
Результаты работы программ:
1.











2.
Сумма единственного нечетного числа.




Сумма нечетных чисел при четном N.
















Сумма нечетных чисел при нечетном N.


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




























4. Задание 3

Задание:
У Ивана машина красная, у Петра – не черная, не синяя, не голубая, у Максима – черная и синяя. У Александра есть машины любого цвета (из перечисленных), у Бориса машины белого и синего цветов. У кого какого цвета машины, если все водители ехали на машинах разных цветов?
Исходный текст программы на Прологе:
PREDICATES
driver(symbol,symbol)
solution(symbol,symbol)
print(symbol,symbol,symbol,symbol,symbol)

CLAUSES
driver("Ivan","red").
driver("Maxim","black").
driver("Maxim","darkblue").
driver("Boris","white").
driver("Boris","darkblue").
driver("Petr","white").
driver("Petr","red").
driver("Alexandr","red").
driver("Alexandr","black").
driver("Alexandr","white").
driver("Alexandr","blue").
driver("Alexandr","darkblue").

solution(X,Y):-
driver(A,red),
driver(B,white),
driver(C,darkblue),
driver(D,black),
driver(E,blue),
A<>B,A<>C,A<>D,A<>E,
B<>C,B<>D,B<>E,
C<>D,C<>E,
D<>E,
print(A,B,C,D,E),
write("Najmite Enter"),
readln(_).

print(A,B,C,D,E):-
write("U ",A,"a ","red mashina"),nl,nl,
write("U ",B,"a ","white mashina"),nl,nl,
write("U ",C,"a ","darkblue mashina"),nl,nl,
write("U ",D,"a ","black mashina"),nl,nl,
write("U ",E,"a ","blue mashina"),nl,nl.

GOAL
solution(X,Y)
Результаты работы программ:


Написана программа, которая реализует поиск решения по заданному условию. Между множеством имен водителей и множеством машин устанавливается взаимно-однозначное соответствие.



















5. Задание 4
Задание:
Разработать программу поиска решения, предметная область произвольная, например, выбор сотового телефона, покупка автомобиля и т.п.

Предметная область: онлайн подбор помады в интернет-магазине «КРАСОТА»

Исходный текст программы на Прологе:
PREDICATES
do_podbor_111.
do_consulting
ask(symbol,symbol)
pomada_is(symbol)
positive(symbol,symbol)
negative(symbol,symbol)
remember(symbol,symbol,symbol)
clear_facts
goal
do_podbor_111.

CLAUSES
do_podbor_111:-
makewindow(1,7,7,"Online podbor pomadi v internet-magazine #KRASOTA#",1,3,22,71),
nl,write("********************************************************************"),
nl,write(" "),
nl,write(" Please answer the questions 'yes' or 'no'"),
l,write("********************************************************************"),
nl,nl,
do_consulting,
write("Press space bar."),nl,
readchar(_),
removewindow,
exit.
do_consulting:-
pomada_is(X),!,nl,
write("Pomada ",X,"."),nl,
clear_facts.
do_consulting:-
nl,write("Sorry, nugnoi vam pomadi u nas net!"),
clear_facts.
ask(X,Y):-
write(" Vi gelaete>>> ",X," ",Y,"? "),
readln(Reply),
remember(X,Y,Reply).
positive(X,Y):-
xpositive(X,Y),!.
positive(X,Y):-
not(negative(X,Y)),!,
ask(X,Y).
negative(X,Y):-
xnegative(X,Y),!.
remember(X,Y,yes):-
asserta(xpositive(X,Y)).
remember(X,Y,no):-
asserta(xnegative(X,Y)),
fail.
clear_facts:-
retract(xpositive(_,_)),
fail.
clear_facts:-
retract(xnegative(_,_)),
fail.
pomada_is("vam podhodit firmi Oriflame"):-
positive(pomadu,"krasnuju"),
positive(pomadu,"gidkaya"),
positive(pomadu,"s bleskom"),
positive(pomadu,"prosvechivajuhuju"),!.

pomada_is("Vam podhodit firmai Dior"):-
positive(pomadu,"krasnuju"),
positive(pomadu,"gidkaya"),
positive(pomadu,"s bleskom"),
positive(pomadu,"dvuhcvetnuju"),!.

pomada_is("Vam podhodit firmi Maybelline"):-
positive(pomadu,"krasnuju"),
positive(pomadu,"tverdaya"),
positive(pomadu,"s bleskom"),
positive(pomadu,"vodostoikuju"),!.

pomada_is("Vam podhodit firmi L'Oreal"):-
positive(pomadu,"krasnuju"),
positive(pomadu,"srednei-geskosti"),
positive(pomadu,"bez bleska"),!.

pomada_is("Vam podhodit firmi Dolce & Gabbana"):-
positive(pomadu,"bordovaya"),
positive(pomadu,"gidkuju"),
positive(pomadu,"vodostoikaya"),
positive(pomadu,"dvuhcvetnuju"),!.

pomada_is("Vam podhodit firmi CHANEL"):-
positive(pomadu,"bordovaya"),
positive(pomadu,"gidkuju"),
positive(pomadu,"vodostoikaya"),
positive(pomadu,"bescvetnaya"),!.

pomada_is("vam podhodit gigienicheskaya firmi Nivea"):-
positive(pomadu,"bescvetnaya"),
positive(pomadu,"poleznaya"),!.

Результаты работы программ:
Примеры, когда покупатель подбирает себе нужную помаду.

.






Примеры, когда покупатель не смог подобрать себе нужную помаду.


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














6. Общий вывод
В результате выполнения курсовой работы были изучены основы логического программирования на языке Prolog, так же были разработаны 5 программы на языке Prolog. Все написанные программы соответствую указанным требования по поставленной задачи курсового проекта.


























Список литературы
1. И. Братко Программирование на языке Пролог для искусственного интеллекта: Пер. с англ.-М.: Мир, 1990.- 560 с.
2. Ин Ц., Соломон Д. Использование Турбо-Пролога. – М.: Мир, 1993. – 608 С.
3. Стерлинг Л., Шапиро Э. Искусство программирования на языке Пролог. – М.: Мир, 1990. – 235 с.
4. Internet.