49916

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

Курсовая

Информатика, кибернетика и программирование

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

Русский

2014-01-12

283.52 KB

15 чел.

ФЕДЕРАЛЬНОЕ АГЕНТСТВО РОССИЙСКОЙ ФЕДЕРАЦИИ ПО ОБРАЗОВАНИЮ И НАУКЕ

УФИМСКИЙ ГОСУДАРСТВННЫЙ АВИАЦИОННЫЙ ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ

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

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

на тему:

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

Вариант 25

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

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

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

Курс   5

Семестр            9

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

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

                         (зач. кн.075746)

 ___________Алыпов Ю.Е.                           _________Хисаев Р.М.

«___» ____________ 2012 г.             «___» ___________ 2012» г.

Уфа 2012

Задание 1

Задание:

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

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

13 вариант моя задача,20

Рис. 1. Дерево родственных отношений

Исходный текст:

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).
print

clauses
man("Mirgaiaz").
man("Marat").
man("Aidar").
man("Radmir").

woman("Hadicha").
woman("Hamdia").
woman("Zemfira").
woman("Regina").


parent("Mirgaiaz","Marat").
parent("Mirgaiaz","Aidar").
parent("Hadicha","Marat").
parent("Hadicha","Aidar").
parent("Marat","Radmir").
parent("Hamdia","Radmir").
parent("Aidar","Regina").
parent("Zemfira","Regina").

married("Mirgaiaz"," Hadicha").
married("Marat"," Hamdia").
married("Aidar"," Zemfira").

mother(X,Y):-parent(X,Y),woman(X).
father(X,Y):-parent(X,Y),man(X).
son(X,Y):-man(Y),parent(X,Y).
dauther(X,Y):-woman(Y),parent(X,Y).

grandma(X,Z):-parent(X,Y),parent(Y,Z),woman(X).
grandfa(X,F):-parent(X,Y),parent(Y,F),man(X).

brother(X,Y):-parent(Z,X),parent(Z,Y),man(X),X<>Y.
sister(X,Y):-parent(Z,X),parent(Z,Y),woman(X),X<>Y.  

plem(X,F):-parent(Z,F),man(F),parent(P,X),parent(P,Z),Z<>X. 

print:-mother(X,Y),write(X,"-mother-",Y),nl,fail.
print:-father(X,Y),write(X,"-father-",Y),nl,fail.
print:-son(X,Y),write(Y,"-son-",X),nl,fail.
print:-grandma(X,Z),write(X,"-grandma-",Z),nl,fail.
print:-grandfa(X,F),write(X,"-grandfa-",F),nl,fail.
print:-dauther(X,Y),write(Y,"-dauther-",X),nl,fail.
print:-brother(X,Y),write(X,"-brother-",Y),nl,fail.
print:-plem(X,F),write(F,"-plemannik-",X),nl,fail.
print.
GOAL
print,readln(I).

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

Выводы: 

По заданию было построено дерево родственных отношений, составлено 19 фактов и 13 правил, которые описывают родственные связи в моей семье. Используя язык логического программирования Prolog, написана программа, в которой отображаются все родственные отношения с помощью заданных правил и фактов. Использовались такие предикаты, как  parent(string, string), man(string), woman(string), married(string ,string).

2 задание(6 задача).

Вычислить произведение двух целых положительных чисел (используя суммирование).

Исходный текст:

Пролог

PREDICATES

p(real,integer,real)

CLAUSES

p(_,0,0):-!.

p(A,B,C):-B1=B-1,p(A,B1,C1),C=C1+A.

goal

   write("A*B"),nl,

   write("A: "),readint(A),

write("B: "),readint(B),

   p(A,B,C),

   write("A*B: ",C).

Си++

#include <iostream>

using namespace std;

typedef unsigned short USHORT;

typedef unsigned short ULONG;

ULONG GetPower(USHORT n1, USHORT n2);

int main()

{

USHORT n1,n2;

   ULONG answer;

cout << "n1: " << endl;

cin >> n1;

cout << "n2:" << endl;

cin >> n2;

answer=GetPower(n1,n2);

cout<<n1<<"to the"<<n2<< "th power is" <<answer<<endl;

system("pause");

return 0;

}

ULONG GetPower(USHORT n1,USHORT n2)

{  if (n1==1)

return n2;

if (n2==1)

return n1;

else

return(n1+GetPower(n1,n2-1));

}

2 задание(задача 3)

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

Исходный текст:

DOMAINS

s = string

ss = string*

i = real

is = real*

DATABASE

fact(s,i)

reki(s,i)

ozera(s,i)

PREDICATES

menuprint

menuitem(i)

menu

       databased(ss,is)

dbr(ss,is)

dbo(ss,is)

printt(ss,is, i)

printtitle1

printtitle2

       printtitle3

maximum(i,ss,is)

CLAUSES

 

fact("Russia",17075400).

fact("Canada",9976140).

fact("USA",9518900).

fact("KNDR",9598077).

fact("KAZAHSTAN",2727300).

reki("Amazonka",7100).

reki("Nil",6650).

reki("Hyanhe",5800).

reki("Volga",3530).

ozera("Verhnee",406).

ozera("Ontario",246).

ozera("Michigan",281).

ozera("Gurom",230).

 

printt([H1|T1], [H2|T2],Counter) :- Counter2 = Counter+1,

write(Counter), write (" "),

write(H1), write("\t"), write (H2), write("\t\t"),nl, not(T1 = [ ]), T2 = [ ],!,

printt(T1,[H2],Counter2).

printt([_|T1], [_|T2], Counter) :- Counter2 = Counter+1,

printt(T1, T2,Counter2).

printtitle1 :- write("Nazvanie strani"), write("\t"),

write ("Ploshad strani(km2)"),nl.

printtitle2:-write("Nazvanie reki"),write("\t"),write("Dlina reki"),nl.

printtitle3:-write("Nazvanie ozera "),write("\t"),write("Glubina ozera "),nl.

maximum(Max, [H1|T1], [H2|T2]) :- H2 > Max, !, write(H1),

write("\t"), write (H2),nl, maximum(Max, T1, T2).

 

maximum(Max, [_|T1], [_|T2]) :-  maximum(Max, T1, T2).

menuprint :-write("\nNagmite [1] - Vivod iformacion spravochnika .\n"),

write("Nagmite [2] - Poisk strani po nazvaniu.\n"),

write("Nagmite [3]-Poisk reki po nazvaniu.\n"),

write("Nagmite [4] - Poisk ozer po nazvaniu.\n"),

write("Nagmite [5] - Poisk s porogovim znacheniem dla plochadi stran.\n"),

write("Nagmite [6] - Poisk s porogovim znacheniem dla dlini reki.\n"),

write("Nagmite [7] - Poisk s porogovim znacheniem dla glubini ozer .\n").

menu :- menuprint,write("Vash vibor: "),readint(X),clearwindow,nl, % ваш выбор вывод на экран

menuitem(X).

menuitem(1) :-databased(L1, L2), printtitle1, printt(L1, L2,1), nl.

menuitem(1):-dbr(R1,R2),printtitle2,printt(R1,R2,1),nl.

menuitem(1):-dbo(V1,V2),printtitle3,printt(V1,V2,1),nl,fail.

menuitem(2) :-  write ("Vvedite nazvanie objekta : "),

readln(Klass),printtitle1,write("\n"), findall(A, fact(Klass,A), L1),

write("\n"),printt([Klass],L1,1),nl.

menuitem(3):-write("Vvedite nazvanie objekta : "), readln(Klass),write("\n"),

findall(A,reki(Klass,A),R1),printtitle2

,write("\n"),printt([Klass],R1,1),nl.

menuitem(4):-write("Vvedite nazvanie objekta : "),readln(Klass),write("\n"),

findall(A,ozera(Klass,A),V1),printtitle3,

write("\n"),printt([Klass],V1,1),nl.

menuitem(5) :-write("Vvedite minimalnuy vozmognuy ploshad strani: "),

readreal(Max),write("\n"),printtitle1, databased(L1, L2), maximum(Max, L1, L2),

nl, menu.

menuitem(6):-write("Vvedite minimalnuy vozmognuy dlinu reki:"),readint(Max),

write("\n"),printtitle2,dbr(R1,R2),maximum(Max,R1,R2),nl,menu.

menuitem(7):-write("Vvedite minimalnuy vozmognuy glubiny ozera :"),

readint(Max),write("\n"),printtitle3,dbo(R1,R2),maximum(Max,R1,R2),nl,menu.

menuitem(8):- !.

menuitem(_) :- menu.

 

databased(L1, L2) :-   findall(A, fact(A,_),L1),

findall(A, fact(_,A),L2).

dbr(R1,R2):-findall(A,reki(A,_),R1),findall(A,reki(_,A),R2).

dbo(V1,V2):-findall(A,ozera(A,_),V1),findall(A,ozera(_,A),V2).

GOAL

menu.

                                                             Задание 3 (3)

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

Исходный текст программы:

domains

s=symbol

slist=s*

predicates

colour(s)

colour_or_colour(s,s,s) % два цвета 

solve(s,s,s,s,s) % решить

print

clauses

colour("krasnii").

colour("chernii").

colour("goluboi").

colour("sinii").

colour("belii").

colour_or_colour(A,B,C):-C=A;C=B.

solve(Ivan,Petr,Maxim,Sacha,Boris):-Ivan=" krasnii ",                    

colour(Petr),Petr<>Ivan,Petr<>"chernii",Petr<>"sinii",Petr<>"goluboi",

colour_or_colour("chernii","sinii",Maxim),Maxim <>Ivan,Maxim<>Petr,    

colour(Sacha),Sacha<>Ivan,Sacha<>Petr,Sacha<>Maxim,colour_or_colour("belii","sinii",Boris),

Boris<>Ivan,Boris<>Petr,Boris<>Maxim,Boris<>Sacha.

print:-solve(Ivan,Petr,Maxim,Sacha,Boris),

write("Ivan car - ",Ivan,"\n","Petr car - ",Petr,"\n"," Maxim car - ", Maxim,"\n","Sasha car - ",Sacha,"\n","Boris car - ",Boris,"\n"),nl.

%-если убрать fail,то посчитает только один вариант! Если поставить то все возможныеgoal

goal

print

4 задача

Разработать программу поиска решения, предметная область произвольная, например, выбор сотового телефона, покупка автомобиля и т.п. В качестве примера можно использовать следующую программу на естественном языке  

Предметная область: Экспертная система для выбора мобильного телефона

domains

 s=symbol

database

 xpositive(s, s)

 xnegative(s, s)

predicates

do_expert_job

do_consulting

vopros(s,s)

cena(s)    

eto(s)

positive(s,s)

negative(s,s)

remember(s,s,s)

clear_facts

goal

  do_expert_job.

clauses

do_expert_job :-

nl,write("* * * * * * * * * * * * * * * * * * * "),

nl,write(" Ekspertnaa sistema dla vibora telefona ."),

nl,write("                                      "),

nl,write("Pogalusta otvette na vopros "),

nl,write("'yes' or 'no'.    "),

nl ,write("* * * * * * * * * * * * * * * * * * * "),

nl,nl,

do_consulting,

readchar(_),

exit.

do_consulting :-

cena(X),!,nl,

write("Cena na vibranii vami telefon  - ",X,"."),nl,

   clear_facts.

do_consulting :-

 nl,write("Vi neudovletvoreni !"),  clear_facts.

vopros(X,Y) :-

write(" Vopros : ",X,"  ",Y," ?"),

readln(Otvet),

remember(X,Y,Otvet).

positive(X,Y) :-

   xpositive(X,Y),!.

positive(X,Y) :-

not(negative(X,Y)),!,vopros(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.

 

 cena("do 1000 rub") :-eto("Samsung"),

positive(has,"Memory - do 1Gb"),

positive(has,"Camera - 1.3Mpix"),!.

 cena("1000-1500rub") :-eto("Samsung"),

positive(has,"Memory - 1-2Gb"),

positive(has,"Camera - 1.3-2Mpix"),!.

 

 cena("1500-2000") :-eto("Samsung"),

positive(has,"Memory - 2-4Gb"),

positive(has,"Camera - vid 2Mpix"),!.

 cena("vid 2500rub") :-eto("Samsung"),

positive(has,"Memory - 4-8Gb"),

positive(has,"Camera - vid 2Mpix"),!.

 

cena("do 1000rub") :-eto("Nokia"),

positive(has,"Memory - 1-2Gb"),

positive(has,"Camera - 1.3Mpix"),!.

 cena("1000-1500rub") :-eto("Nokia"),

positive(has,"Memory - 2-4Gb"),

positive(has,"Camera - 1.3Mpix"),!.

 

 cena("1500-2500") :-eto("Nokia"),

positive(has,"Memory - 4-8Gb"),

positive(has,"Camera - 1.3-2Mpix"),!.

 cena("vid 2500rub") :-eto("Nokia"),

positive(has,"Memory - 4-8Gb"),

positive(has,"Camera - vid 2Mpix"),!.

cena("do 1000rub") :-eto("LG"),

positive(has,"Memory - do 1Gb"),

positive(has,"Camera - do 1.3Mpix"),!.

 cena("1000-1500rub") :-eto("LG"),

positive(has,"Memory - 2-4Gb"),

positive(has,"Camera - 1.3-2Mpix"),!.

 

 cena("1500-2500") :-eto("LG"),

positive(has,"Memory - 4-8Gb"),

positive(has,"Camera - 1.3-2Mpix"),!.

 cena("vid 2500rub") :-eto("LG"),

positive(has,"Memory - 4-8Gb"),

positive(has,"Camera - vid 2Mpix"),!.

cena("do 1000rub") :-eto("SonyEricsson"),

positive(has,"Memory - do 1Gb"),

positive(has,"Camera - 1.3Mpix"),!.

 cena("1000-1500rub") :-eto("SonyEricsson"),

positive(has,"Memory - 1-2Gb"),

positive(has,"Camera - 1.3-2Mpix"),!.

 

 cena("1500-2500") :-eto("SonyEricsson"),

positive(has,"Memory - 4-8Gb"),

positive(has,"Camera - 1.3-2Mpix"),!.

 cena("vid 2500rub") :-eto("SonyEricsson"),

positive(has,"Memory - 4-8Gb"),

positive(has,"Camera - vid 2Mpix"),!.

 

 eto("Samsung") :-             

positive(eto,"Samsung"),!.

 eto("LG") :-

positive(eto,"LG"),!.

eto("Nokia") :-

positive(eto,"Nokia"),!.

eto("SonyEricsson") :-

positive(eto,"SonyEricsson"),!.

Список литературы.:

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

 

А также другие работы, которые могут Вас заинтересовать

50664. Метод последовательного анализа при испытании на надежность 86.5 KB
  В качестве результатов испытаний приведены статистика отказов и графики зависимости отказов от времени: 1я реализация № отказа Время отказа 1 305 2 683 ИСПЫТАНИЕ ЗАВЕРШЕНО Граница браковки: 52. 1 Зависимость числа отказов от времени для 1 реализации 2я реализация № отказа Время отказа 1 311 2 377 3 693 ИСПЫТАНИЕ ЗАВЕРШЕНО Граница браковки: 52. 2 ...
50665. Релігія в світовому культурно-історичному просторі 103.5 KB
  Світові релігії в культурно-історичному просторі. Естетичні канони й етична програма буддизму. Етико-естетичні концепції християнства. Естетичний вимір Корану як священної книги ісламу. Особливості мусульманського мистецтва...
50666. Частотные модуляторы 195 KB
  Схема принципиальная электрическая ЧМ автогенератора с варикапом Схема принципиальная электрическая ЧМ автогенератора с реактивным транзистором Расчет Экспериментальная часть Выводы В ходе лабораторной работы были исследованы частотно-модулированные колебания в ЧМ автогенераторе с варикапом и реактивным транзистором. В схеме с варикапом видно что: Уходит значение центральной частоты.
50667. Исследование компенсационных стабилизаторов напряжения 831 KB
  Входное напряжение при номинальном рабочем режиме схемы: Выходное напряжение при номинальном рабочем режиме схемы: Увеличенное входное напряжение: Выходное напряжение при увеличенном входном напряжении: Измерение выходного сопротивления Выходное напряжение стабилизатора с нагрузкой...
50668. Изучение методов структурного резервирования 96.5 KB
  Возможные типы резервирования: Общее нагруженное резервирование. Поэлементное нагруженное резервирование. Общее резервирование замещением. Поэлементное резервирование замещением.
50670. Измерение коэффициента ошибок в цифровых каналах телекоммуникационных систем 186 KB
  Цель работы Ознакомление с приборами методами и схемами измерений коэффициента ошибок в цифровых каналах телекоммуникационных систем; методами оценки качества цифровой модуляции с использованием глазковых диаграмм и диаграмм рассеяния. Экспериментальная часть Измерение коэффициента ошибок на выходе канала передачи информации. Отношение сигнал шум 5 6 7 9 11 15 Число ошибок 54320 50290 56350 57420 35240 1 Общее число принятых бит 111700 106100 123800 148900 102800 466000 Коэффициент ошибок 0.
50671. Изучение законов динамики вращательного движения твёрдого тела вокруг неподвижной оси на маятнике Овербека 292.5 KB
  В этой модели считается что трение в оси неподвижного блока отсутствует этот блок невесом а момент сил трения в оси блока с крестовиной не зависит от угловой скорости вращения В этих условиях ускорение груза массой m постоянно на всём отрезке движения H. Тогда рассмотрим систему состоящую из блока 1 с моментом инерции который может вращаться вокруг неподвижной горизонтальной оси и блока 2 с моментом инерции вращающегося вокруг оси . Запишем основное уравнение динамики вращательного движения для каждого блока учитывая что...