Автор: Пользователь скрыл имя, 26 Января 2013 в 14:42, курсовая работа
Задание 1: Используя предикаты parent(symbol,symbol), man(symbol), woman(symbol), married(symbol,symbol), записать факты, описывающие Вашу семью. Записать 8 правил вывода для любых родственных отношений в Вашей (или вымышленной) семье (например: мать, отец, сестра, брат, племянница, племянник, тетя, дядя, внучка, внук, бабушка, дедушка, двоюродная сестра, двоюродный брат и т.д.).
Задание 2: 1. Вычислить значение n-го члена ряда Фибоначчи: f(0)=0, f(1)=1,
f(n)=f(n-1)+f(n-2).
Министерство образования Российской Федерации
уфимский государственный авиационный
технический университет
КУРСОВАЯ РАБОТА
по дисциплине «Системы искусственного интеллекта»
на тему
«Разработка элементов систем искусственного интеллекта с использованием логической модели представления знаний»
Вариант 10
Специальность 230102 – Автоматизированные системы обработки информации и управления
Факультет информатики и робототехники
Кафедра автоматизированных систем управления
Курс 5
Семестр 9
Оценка ________________ Исполнитель
Консультант:
(зач. кн. 085582)
___________Алыпов Ю.Е. ________Ларионов В.Э.
«___» ____________ 2012г. «___» ___________ 2012 г.
Уфа – 2012
Используя предикаты parent(symbol,symbol), man(symbol), woman(symbol), married(symbol,symbol), записать факты, описывающие Вашу семью. Записать 8 правил вывода для любых родственных отношений в Вашей (или вымышленной) семье (например: мать, отец, сестра, брат, племянница, племянник, тетя, дядя, внучка, внук, бабушка, дедушка, двоюродная сестра, двоюродный брат и т.д.).
Описание родственных связей:
Текст программы на Прологе
predicates
parent(string,string)
man(string)
woman(string)
married(string,string)
plem(string,string)
mother(string,string)
father(string,string)
grandma(string,string)
grandfa(string,string)
son(string,string)
dauther(string,string)
brother(string,string)
sister(string,string)
clauses
man("Alekcandr").
man("Vladimer").
man("Oleg").
man("Misha").
man("Denis").
woman("Anna").
woman("Irina").
woman("Zybarzt").
parent("Alekcandr"," Vladimer").
parent("Alekcandr"," Oleg").
parent("Anna"," Vladimer").
parent("Anna"," Vladimer").
parent("Vladimer"," Denis").
parent("Irina"," Denis").
parent("Oleg"," Misha").
parent("Zybarzt"," Misha").
married("Alekcandr"," Anna").
married("Vladimer"," Irina").
married("Oleg"," Zybarzt").
mother(X,Y):-parent(X,Y),
father(X,Y):-parent(X,Y),man(
son(X,Y):-man(Y),parent(X,Y).
dauther(X,Y):-woman(Y),parent(
grandma(X,Z):-parent(X,Y),
grandfa(X,F):-parent(X,Y),
brother(X,Y):-parent(Z,X),
sister(X,Y):-parent(Z,X),
plem(X,F):-parent(Z,F),man(F),
print:-mother(X,Y),write(X,"-
print:-father(X,Y),write(X,"-
print:-son(X,Y),write(Y,"-son-
print:-grandma(X,Z),write(X,"-
print:-grandfa(X,F),write(X,"-
print:-dauther(X,Y),write(Y,"-
print:-brother(X,Y),write(X,"-
print:-plem(X,F),write(F,"-
print.
GOAL
print,readln(I).
Результат работы программы:
Выводы:
По заданию было построено дерево родственных отношений, составлено 19 фактов и 9 правил, которые описывают родственные связи в моей семье. Используя язык логического программирования Prolog, написана программа, в которой отображаются все родственные отношения с помощью заданных правил и фактов. Использовались такие предикаты, как parent(string, string), man(string), woman(string), married(string ,string).
1.
Вычислить значение n-го члена ряда Фибоначчи:
f(0)=0, f(1)=1,
f(n)=f(n-1)+f(n-2).
Текст программы на Прологе
PREDICATES
nondeterm f(integer, integer)
nondeterm fibo(integer, integer)
CLAUSES
f(1, 1).
f(0, 0).
f(X, R) :- X2 = X-1, X3 = X-2, f(X2, R2), f(X3, R3), R = R2+R3.
fibo(R, R) :- nl.
fibo(R, Itog) :- f(R, Res), write(Res, " "), R2=R+1,
fibo(R2, Itog).
GOAL
fibo(0, 15).
Результаты
Цель: task(0,15).
Результат:
2. Написать программу для продажи туристических туров. Должна быть представлена следующая информация: название тура, страна, продолжительность, цена. Реализовать вывод информации обо всех турах, поиск тура по стране. Реализовать поиск по продолжительности с указанием интервала возможной продолжительности (должна быть выведена информация о турах, продолжительность которых попадает в указанный интервал). Для удобства работы реализовать меню с соответствующими пунктами.
Текст программы на Прологе
DOMAINS
s = string
ss = string*
i = integer
is = integer*
DATABASE
fact(s,s,i,i)
PREDICATES
menuprint
nondeterm menuitem(i)
nondeterm menu
nondeterm databased(ss, ss, is, is)
nondeterm printtour(ss,ss,is,is, i)
printtitle
nondeterm tourinterval(i,i, ss,ss,is,is)
CLAUSES
%база данных
fact("Trip on China market ","China",9,11500).
fact("Crazy Turkey Beach ","Turkey",4,11000).
fact("Jara in Egypt ","Egypt",8,18000).
fact("Zabavniy snow in Europe ","Europe", 15, 31000).
fact("Dikie OAE ","OAE",07,21400).
fact("Sigara Tour ","Kuba ",05,31000).
fact("Garnoe Puteshestvie ","Ukraina",05,9000).
fact("Rai na Zemle ","Goa",08,19800).
%предикаты
printtour([H1|T1], [H2|T2], [H3|T3], [H4|T4], Counter) :- Counter2 = Counter+1, write(Counter), write (" "),
write(H1), write("\t"), write (H2), write("\t"),
write(H3), write("\t"), write(H4), nl, not(T1 = []), T2 = [], !, printtour(T1, [H2], T3, T4, Counter2).
printtour([_|T1], [_|T2], [_|T3], [_|T4], Counter) :- Counter2 = Counter+1, printtour(T1, T2, T3, T4, Counter2).
printtitle :- write (" "), write("Tour"), write("\t\t\t"), write ("Country"), write("\t"),
write("Days"), write("\t"), write("Price($USD"), nl.
tourinterval(Min, Max, [H1|T1], [H2|T2], [H3|T3], [H4|T4]) :- H3 >= Min, H3 <= Max, !, write(H1), write("\t"), write (H2), write("\t"),
write(H3), write("\t"), write(H4), nl, tourinterval(Min, Max, T1, T2, T3, T4).
tourinterval(Min, Max, [_|T1], [_|T2], [_|T3], [_|T4]) :- tourinterval(Min, Max, T1, T2, T3, T4).
menuprint :- write("\nSelling Turist's tours. The menu:\n"),
write("<1> - tour database\n"),
write("<2> - tour search by country\n"),
write("<3> - tour search by duration\n"),
write("<4> - exit\n").
menu :- menuprint, readint(X), nl, menuitem(X).
menuitem(1) :- databased(L1, L2, L3, L4), printtitle, printtour(L1, L2, L3, L4, 1), nl, fail.
menuitem(2) :- write ("Country?\n"), readln(Country), findall(A, fact(A,Country,_,_), L1),
findall(A, fact(_,Country,A,_), L2), findall(A, fact(_,Country,_,A), L3),
printtitle, printtour(L1,[
menuitem(3) :- write("Minimun days?\n"), readint(Min), write("Maximun days?\n"), readint(Max),
databased(L1, L2, L3, L4), tourinterval(Min, Max, L1, L2, L3, L4), nl, menu.
menuitem(4) :- !.
menuitem(_) :- menu.
databased(L1, L2, L3, L4) :- findall(A, fact(A,_,_,_),L1), findall(A, fact(_,A,_,_),L2), findall(A, fact(_,_,A,_),L3), findall(A, fact(_,_,_,A),L4).
GOAL
menu.
Результаты
При запуске программы появится диалоговое окно:
В нем можно осуществить одно из действий, предложенных в меню.
Результат выбора tour database:
Результат выбора tour search by country:
Результат выбора tour search by duration:
Задание 3:
Четыре друга A, B, C, D играют каждый на одном из инструментов: флейте, рояле, гитаре и скрипке. Каждый владеет одним из иностранных языков: английским, французским, немецким и испанским. Известно, что:
Кто на каком инструменте играет и на каком языке говорит?
Текст программы на Прологе
PREDICATES
nondeterm instrument(symbol)
nondeterm lang(symbol)
nondeterm instrument_lang(symbol,symbol)
nondeterm friend_instrument(symbol,
nondeterm friend_lang(symbol,symbol)
nondeterm solution (symbol,symbol,symbol, symbol,symbol,symbol,
symbol,symbol,symbol, symbol,symbol,symbol)
nondeterm dif(symbol, symbol, symbol,symbol)
output
CLAUSES
instrument(flute).
instrument(piano).
instrument(guitar).
instrument(violin).
lang(english).
lang(french).
lang(german).
lang(spanish).
instrument_lang(guitar, spanish).
friend_instrument(a, Y) :- not(Y=violin), not(Y=flute).
friend_instrument(b, Y) :- not(Y=violin), not(Y=flute), not(Y=piano).
friend_instrument(d, Y) :- not(Y=violin).
friend_lang(a, Z) :- not(Z=english).
friend_lang(d, french).
dif(Y1, Y2, Y3, Y4) :- Y1<>Y2, Y1<>Y3, Y1<>Y4, Y2<>Y3, Y2<>Y4, Y3<>Y4.
solution(X1, Y1, Z1, X2, Y2, Z2, X3, Y3, Z3, X4, Y4, Z4) :-
X1=a, X2=b, X3=c, X4=d,
instrument(Y1), instrument(Y2), instrument(Y3), instrument(Y4),
lang(Z1), lang(Z2), lang(Z3), lang(Z4),
dif(Y1, Y2, Y3, Y4), dif(Z1, Z2, Z3, Z4),
friend_instrument(X1, Y1), friend_instrument(X2, Y2),
friend_instrument(X4, Y4), friend_lang(X1, Z1),
friend_lang(X4, Z4), instrument_lang(Y2, Z2).
output:-clearwindow,solution(
write("Friend"," Instrument ","Lang"),nl,nl,
write("1- ",X1," - ",Y1," - ",Z1),nl,nl,
write("2- ",X2," - ",Y2," - ",Z2),nl,nl,
write("3- ",X3," - ",Y3," - ",Z3),nl,nl,
write("4- ",X4," - ",Y4," - ",Z4),
readln(_).
GOAL
output.
Результаты:
Выводы:
В результате написания курсовой были освоены основы логического программирования на языке Пролог. Полученные знания были реализованы на практике.
Задание 4
Разработать программу поиска решения, предметная область произвольная, например, выбор сотового телефона, покупка автомобиля и т.п.
Предметная область: выбор телевизора.
Дерево:
Листинг программы:
domains
database
xpositive(symbol,symbol)
xnegative(symbol,symbol)
predicates
do_podbor_111.
do_consulting
ask(symbol,symbol)
televizor(symbol)
positive(symbol,symbol)
negative(symbol,symbol)
remember(symbol,symbol,
clear_facts
goal
do_podbor_111.
clauses
do_podbor_111:-
makewindow(1,7,7,"Vybor televizora.",1,3,22,71),
nl,write("********************
nl,write(" "),
nl,write(" Please answer the questions 'yes' or 'no'"),
nl,write("*******************
nl,nl,
do_consulting,
write("Press space bar."),nl,
readchar(_),
removewindow,
exit.
do_consulting:-
televizor(X),!,nl,
write("HC ",X,"."),nl,
clear_facts.
do_consulting:-
nl,write("Izvinite, takogo televizora dlya vas 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.
televizor("vam podhodit Samsung UE40ES7507UXRU "):-
positive(televizor,"plazma"),
positive(televizor,"
positive(televizor,"stoit <12000"),!.
televizor("vam podhodit Panasonic Viera TX-PR50UT50 "):-
positive(televizor,"plazma"),
positive(televizor,"
positive(televizor,"stoit 12000-20000"),!.
televizor("vam podhodit Hitachi 42PMA500E "):-
positive(televizor,"plazma"),
positive(televizor,"panel"),
positive(televizor,"stoit <12000"),!.
televizor("vam podhodit Erisson 42 PH 01 "):-
positive(televizor,"plazma"),
positive(televizor,"panel"),
positive(televizor,"stoit 12000-20000"),!.
televizor("vam podhodit Sony FWD-50PX3S "):-
positive(televizor,"LCD"),
positive(televizor,"TN matrica"),
positive(televizor,"stoit <14000"),!.
televizor("vam podhodit Rolsen RP-42H30 "):-
positive(televizor,"LCD"),
positive(televizor,"TN matrica"),
positive(televizor,"stoit 14000-17000"),!.
televizor("vam podhodit Pioneer KURO PDP-LX6090 "):-
positive(televizor,"LCD"),
positive(televizor,"MVA matrica"),
positive(televizor,"stoit 14000-16000"),!.
televizor("vam podhodit Fujitsu Plasmavision W P42HHA10W PDP "):-
positive(televizor,"LCD"),
positive(televizor,"MVA matrica"),
positive(televizor,"stoit 16000-20000"),!.
televizor("vam podhodit LG 50PM690S "):-
positive(televizor,"LCD"),
positive(televizor,"IPS matrica"),
positive(televizor,"stoit 19000-22000"),!.
televizor("vam podhodit LG 42PA4510 "):-
positive(televizor,"LCD"),
positive(televizor,"IPS matrica"),
positive(televizor,"stoit 22000-25000"),!.
televizor("vam podhodit Philips 42PF7320 "):-
positive(televizor,"LED"),
positive(televizor,"White LED"),
positive(televizor,"stoit <11000"),!.
televizor("vam podhodit Philips Flat TV 50PF9965 "):-
positive(televizor,"LED"),
positive(televizor,"White LED"),
positive(televizor,"stoit 11000-15000"),!.
televizor("vam podhodit Samsung PS60E6507EUXRU "):-
positive(televizor,"LED"),
positive(televizor,"RGB LED"),
positive(televizor,"stoit 19000-23000"),!.
televizor("vam podhodit Nokia LG 50PA6520"):-
positive(televizor,"LED"),
positive(televizor,"RGB LED"),
positive(televizor,"stoit 23000-27000"),!.
Результаты работы программ:
Написана программа, которая реализует выбор телевизора.
Список используемой литературы: