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

Автор работы: Пользователь скрыл имя, 03 Ноября 2013 в 17:25, курсовая работа

Описание работы

В данном курсовом проекте рассматривается разработка элементов систем искусственного интеллекта с использованием логической модели представления знаний. Для логического программирования предназначен язык Пролог (Prolog), который также будет изучен в ходе работы.

Содержание работы

Задание 1. 4
Задание 2 9
Часть 1. 9
Часть 2. 11
Задание 3. 15
Общий вывод. 18

Файлы: 1 файл

Системы ИИ.doc

— 161.00 Кб (Скачать файл)

Министерство  образования  Российской  Федерации

 

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

технический  университет

 

 

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

 

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

на тему

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

 

 

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

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

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

Курс                 5

Семестр      9

 

 

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

Консультант:                        студ. гр.

(зач. кн.)

___________         _________.

«___» ____________ 2011 г.   «___» ___________ 2011 г.

 

Уфа 2011

 

 

Содержание.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Введение.

В данном курсовом проекте рассматривается разработка элементов систем искусственного интеллекта с использованием логической модели представления знаний. Для логического программирования предназначен язык Пролог (Prolog), который также будет изучен в ходе работы.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Задание 1.

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

 

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

 


 

 

 

 

 

 

 

 

 

 

 

 

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

 

 

 

 

 

 

Листинг программы на языке Turbo Prolog.

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("Georgi").

man("Andrey").

woman("Kapitalina").

woman("Elena").

woman("Tatyana").

woman("Svetlana").

woman("Olga").

married("Georgi","Kapitalina").

married("Igor","Elena").

parent("Elena","Tatyana").

parent("Elena","Svetlana").

%parent("Igor","Tatyana").

%parent("Igor","Svetlana").

parent("Georgi","Andrey").

parent("Georgi","Elena").

parent("Andrey","Olga").

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):-sister(A,B),parent(B,Y),parent(A,X),different(X,Y).

cousin(X,Y):-parent(A,X),brother(A,B),parent(B,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).

 

 

 

 

 

Результат работы программы на языке Turbo Prolog

Рис. 2 Результат  работы программы.

 

Выводы.

В ходе выполнения данного задания построено дерево связей, описывающее родственные  связи моей семьи. С помощью языка  логического программирования Turbo Prolog написана программа, в которой отображаются родственные отношения с помощью заданных правил.

 

 

 

 

 

 

 

 

 

Задание 2

Часть 1.

Написать  программу, которая меняет порядок следования букв в слове на противоположный.

Программа написана на языке высокого уровня C++.

# include <iostream.h>

#include <stdlib.h>

#include <string.h>

#include <ctype.h>

#include <conio.h>

void main()

{

clrscr();

const int N=20;

char s[N];

 

int M,i;

M=0;

i=0;

cout<<"Enter the string,please "<<endl;   cout<<endl;

cin>>s;

cout<<endl;

cout<<"String: "<<s<<endl;cout<<endl;

M=strlen(s);

cout<<"Dlina: "<<M<<endl; cout<<endl;

cout<<"Result string: "<<endl;cout<<endl;

for (i=M-1;i>=0;i--)

{

cout<<s[i];

}

getch();

}

 

Результат работы программы представлен на рисунке 3.

Рис. 3 Результат работы программы.

 

Вывод.

На  языке высокого уровня С++  написана программа, которая позволяет изменить порядок следования символов строки произвольной длины на противоположный. Пользователю предлагается ввести нужную строку символов, программа  выводить на экран ее длину и результирующую последовательность символов.

 

 

 

 

Часть 2.

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

 

Листинг программы на языке высокого уровня С++:

 

# include <iostream.h>

#include <stdlib.h>

#include <string.h>

#include <ctype.h>

#include <conio.h>

const int L=31;

 

struct teatr

{

  char nazv[L];

  double rad;

  double mesto;

  double price;

};

 

void input(teatr x[],int n)

{

int i;

cout<<"Enter information about the show,please"<<endl;

cout<<endl;

  for (i=0;i<n;i++)

    {

       cout<<"Name: ";cin>>x[i].nazv;

       cout<<"Row: ";cin>>x[i].rad;

       cout<<"Seat: ";cin>>x[i].mesto;

       cout<<"Price: "; cin>>x[i].price;

     }

}

 

void output(teatr x[],int n)

{

int i;

  for (i=0;i<n;i++)

    {

       cout<<endl;

       cout<<i+1<<". '"<<x[i].nazv<<"' "<<x[i].rad<<" row  "<<x[i].mesto<<" seat  "<<x[i].price<<" rub."<<endl;

     }

}

 

void poisk1(teatr x[], int n)

{int i,k;

cout<<"Enter the row: ";cin>>k;

for (i=0;i<n;i++)

 

if (x[i].rad==k)

cout<<"'"<<x[i].nazv<<"' "<<x[i].rad<<" row  "<<x[i].mesto<<" seat  "<<x[i].price<<" rub."<<endl;

 

}

 

void poisk2(teatr x[], int n)

{

int i,k;

cout<<"Vvedite the price: ";cin>>k;

for (i=0;i<n;i++)

 

if (x[i].price<=k)

cout<<"'"<<x[i].nazv<<"' "<<x[i].rad<<" row  "<<x[i].mesto<<" seat  "<<x[i].price<<" rub."<<endl;

 

}

 

 

void main()

{

clrscr();

const int N=100;

teatr a[N];

int m,j;

 

cout<<"Enter the quantity of records: ";cin>>m;

input(a,m);

 

while(1)

{clrscr();

cout<<"1. All information.\n";

cout<<"2. Search in a row.\n";

cout<<"3. Search in a price.\n";

cout<<"4. Exit\n";

cout<<endl;

cout<<"Your choice 1-4:"; cin>>j;

switch (j)

{

case 1:output(a,m); getch();break;

case 2:poisk1(a,m); getch();break;

case 3:poisk2(a,m); getch();break;

 case 4:exit(0);

}

}

getch();

}

 

Рис. 5 Результат работы программы. Вывод на экран всей информации.

 

 

Рис. 6 Результат работы программы. Реализация поиска свободных мест по ряду.

Рис. 7 Результат работы программы. Реализация поиска билетов по сумме, меньше заданной.

 

Вывод.

Написана программа для продажи  театральных билетов. Представлена информация о названии спектакля, свободных местах, цене билета. Реализован вывод всей информации (рис. 5), поиск по ряду(рис. 6), поиск билетов по цене с указанием максимально возможной суммы (рис. 7). Для удобства работы реализовано меню с соответствующими пунктами.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Задание 3.

Написать  программу для решения задачи: четыре друга A, B, C, D играют каждый на одном из инструментов: флейте, рояле, гитаре и скрипке. Каждый владеет одним из иностранных языков: английским, французским, немецким и испанским. Известно, что:

  • юноша, играющий на гитаре, говорит по-испански;
  • B не играет ни на скрипке, ни на флейте, ни на рояле;
  • A не играет ни на скрипке, ни на флейте и не знает английского;
  • D говорит по-французски, но не играет на скрипке.

Кто на каком  инструменте играет и на каком языке говорит?

Программа реализована  на языке Turbo Prolog:

PREDICATES

instrument(symbol)

lang(symbol)

instrument_lang(symbol,symbol)

friend_instrument(symbol,symbol)

friend_lang(symbol,symbol)

          solution (symbol,symbol,symbol, symbol,symbol,symbol, symbol,symbol,symbol, symbol,symbol,symbol)

          dif(symbol, symbol, symbol,symbol)

           menu

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

 

menu :-

solution(X1, Y1, Z1, X2, Y2, Z2, X3, Y3, Z3, X4, Y4, Z4),

write("Person\tInstument\tLanguage\n"),

write(X1, "\t", Y1, "\t\t", Z1, "\n"),

write(X2, "\t", Y2, "\t\t", Z2, "\n"),

write(X3, "\t", Y3, "\t\t", Z3, "\n"),

write(X4, "\t", Y4, "\t\t", Z4, "\n").     

   

GOAL

 

menu,readln(Pause).

 

 

 

 

 

 

Рис.8 Результат работы программы.

 

Вывод.

Программа написана на языке Turbo Prolog, она осуществляет поиск решения заданной задачи. Между четырьмя друзьями (A,B,C,D), музыкальными инструментами и иностранными языками устанавливается взаимно-однозначное соответствие, и результат выводится на экран.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Общий вывод.

В ходе выполнения данной курсовой работы была рассмотрена разработка элементов систем искусственного интеллекта с использованием логической модели представления знаний. Были изучены основы логического программирования на языке Turbo Prolog.Первая и четвертая задача написаны на нем, вторая и третья – на языке высокого уровня С++. Все программы выдают правильный результат.

 

 

 

 

 

 

 

 

 




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