49916

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

Курсовая

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

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

Русский

2014-01-12

283.52 KB

13 чел.

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

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

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

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

на тему:

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

Вариант 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 с. 

 

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

36493. Термічна ефузія 238 KB
  Кількість зіткнень з нею за одиницю часу становить за законом косинусу . Повна кількість молекул у такому об’ємі становить . Цей простір буде також необмежений тому ми можемо вважати кількість комірок у ньому нескінченною. Скористаємось формулою Больцмана де у нашому випадку у знаменнику немає обмеження оскільки кількість комірок є нескінченною .
36494. Основи вакуумної техніки 120.78 KB
  Мірою кількості газу що переміщується у системі є величина яка згідно із рівнянням стану ідеального газу може бути записана як . Вакуумники – люди консервативні тому міра газу визначається у несистемних одиницях : лмм рт. або лтор а всі розрахунки кількості газу ми будемо вести на одиницю часу. Швидкістю відкачки насосу будемо називати такий об’єм газу який входить за одиницю часу до насосу і виміряний при тискові який має місце біля його входу .
36495. Термічна дифузія 233.6 KB
  Перший доданок являє собою потік взаємної дифузії молекул 1 газу а другий – термодифузійний потік. На рисунку вихідні сталі відносні концентрації змінились і набули вигляду концентрація молекул першого газу біля першої пластини; концентрація молекул першого газу біля другої пластини; концентрація молекул другого газу біля першої пластини; концентрація молекул другого газу біля другої пластини. В результаті такої конвекції нагріта частина газу рухається відносно холодної створюючи провиток. Очевидно що температура газу поблизу проволоки...
36496. Взаємна дифузія 175.31 KB
  Згідно із основним рівнянням переносу можна записати ; . Згідно із рівнянням Фіка яке справедливо і для суміші газів коефіцієнт дифузії першого газу у суміші двох газів . Рівняння політропного процесу робота при цьому процесі Ізотермічний і адіабатний процеси – це процеси ідеалізовані. Запишемо для нього рівняння.
36497. Квантовий підхід Дебая-Борна 315.41 KB
  Хоча швидкості молекул змінюються у стані термодинамічної рівноваги властивості газу залишаються сталими. Насправді закон про статистичний закон розподілу молекул за швидкостями можна сформулювати так : скільки молекул газу або яка їх частка мають швидкості значення яких лежать у деякому інтервалі наближеному до заданої швидкості Зрідження газів і методи одержання низьких температур. Рівняння ВандерВаальса показує що будь який газ може бути переведеним в рідкий стан але необхідною умовою для цього є попереднє охолодження газу до...
36498. Рівняння Ван-дер-Ваальса 238.96 KB
  Дія відштовхування зводиться до того що молекула не допускає проникнення у свій об’єм інших молекул. Отже сили відштовхування враховуються через деякий ефективний об’єм молекул. Якщо газ у нас не дуже стиснутий то взаємодії між молекулами будуть лише парні участь третьої четвертої та інших молекул малоймовірна. Припустимо що у посудині із об’ємом знаходяться лише дві однакові молекули.
36499. Розподіл газових молекул за проекціями (напрямками) швидкостей 3.96 MB
  Переписавши ось у такому вигляді отримане рівняння визначимо фізичний зміст цієї функції. У вибраній нами системі координат у просторі швидкостей відстань до початку координат і є модуль швидкості отже Тепер ми можемо записати таке рівняння . Такого роду рівняння мають назву функціональних. Для їх визначення ми повинні знайти два незалежних рівняння.
36500. Розподіл молекул у полі сил. Формула Больцмана. Барометрична формула. Дослід Перрена по визначенню числа Авогадро 258.99 KB
  Наявність зовнішньої сили призведе до того що молекули у просторі будуть розміщені неоднорідно отже створюватимуть у різних точках простору різний тиск. Для осі ця різниця тисків на грані паралелепіпеда перпендикулярні осі де зміна тиску на одиницю довжини; зміна тиску на бічних гранях; площа граней. Згадаємо що ; – відповідно повні диференціали зміни тиску та потенціальної енергії. Повний диференціал зміни тиску газу дорівнює добутку концентрації молекул на повний диференціал зміни потенціальної енергії молекули взятому з...
36501. Біноміальний розподіл 536.29 KB
  Кількість частинок у ньому . Кількість комірок у об’ємі причому завжди виконується умова тобто частинка завжди знайде собі місце. Виділимо у об’ємі менший фіксований об’єм і будемо шукати імовірність того що кількість частинок потрапить у цей об’єм. Кількість комірок у об’ємі повинно бути принаймні не меншою за щоб усі частинки могли розміститись.