Разработка элементов систем искусственного интеллекта с использованием логической модели представления знаний
Автор работы: Пользователь скрыл имя, 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
Содержание.
Введение.
В данном курсовом
проекте рассматривается разраб
Задание 1.
Используя предикаты parent(symbol,symbol), man(symbol), woman(symbol), married(symbol,symbol), записать факты, описывающие семью. Записать 8 правил вывода для любых родственных отношений семье (например: мать, отец, сестра, брат, племянница, племянник, тетя, дядя, внучка, внук, бабушка, дедушка, двоюродная сестра, двоюродный брат и т.д.).
Описание родственных
связей представлено на
Рис. 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),
aunt(X,Y) :- parent(Z,Y), sister(X,Z), woman(X).
cousin(X,Y):-sister(A,B),
cousin(X,Y):-parent(A,X),
print_m :- mother(Parent,Child),write(
print_m.
print_f :- father(Parent,Child),write(
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 Результат работы программы.
Выводы.
В ходе выполнения
данного задания построено
Задание 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 Результат работы программы. Реализация поиска билетов по сумме, меньше заданной.
Вывод.
Написана программа для
Задание 3.
Написать программу для решения задачи: четыре друга A, B, C, D играют каждый на одном из инструментов: флейте, рояле, гитаре и скрипке. Каждый владеет одним из иностранных языков: английским, французским, немецким и испанским. Известно, что:
- юноша, играющий на гитаре, говорит по-испански;
- B не играет ни на скрипке, ни на флейте, ни на рояле;
- A не играет ни на скрипке, ни на флейте и не знает английского;
- D говорит по-французски, но не играет на скрипке.
Кто на каком инструменте играет и на каком языке говорит?
Программа реализована на языке Turbo Prolog:
PREDICATES
instrument(symbol)
lang(symbol)
instrument_lang(symbol,symbol)
friend_instrument(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\
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.Первая и четвертая задача написаны на нем, вторая и третья – на языке высокого уровня С++. Все программы выдают правильный результат.