Автор работы: Пользователь скрыл имя, 03 Ноября 2013 в 17:25, курсовая работа
В данном курсовом проекте рассматривается разработка элементов систем искусственного интеллекта с использованием логической модели представления знаний. Для логического программирования предназначен язык Пролог (Prolog), который также будет изучен в ходе работы.
Задание 1. 4
Задание 2 9
Часть 1. 9
Часть 2. 11
Задание 3. 15
Общий вывод. 18
Министерство образования Российской Федерации
Уфимский государственный авиационный
технический университет
КУРСОВАЯ РАБОТА
по дисциплине «Системы искусственного интеллекта»
на тему
«Разработка элементов систем искусственного интеллекта с использованием логической модели представления знаний»
Специальность 230102 – Автоматизированные системы обработки информации и управления
Факультет информатики и робототехники
Кафедра автоматизированных систем управления
Курс 5
Семестр 9
Оценка ________________ Исполнитель
Консультант: студ. гр.
(зач. кн.)
___________ _________.
«___» ____________ 2011 г. «___» ___________ 2011 г.
Уфа 2011
Содержание.
Введение.
В данном курсовом
проекте рассматривается разраб
Используя предикаты 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 Результат работы программы.
Выводы.
В ходе выполнения
данного задания построено
Написать программу, которая меняет порядок следования букв в слове на противоположный.
Программа написана на языке высокого уровня 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 Результат работы программы.
Вывод.
На языке высокого уровня С++ написана программа, которая позволяет изменить порядок следования символов строки произвольной длины на противоположный. Пользователю предлагается ввести нужную строку символов, программа выводить на экран ее длину и результирующую последовательность символов.
Требуется написать программу для продажи театральных билетов. Должна быть представлена следующая информация: спектакль, свободные места, цена билета. Реализовать вывод всей информации о билетах, поиск билета по ряду. Реализовать поиск по цене с указанием максимально возможной цены (должна быть выведена информация о билетах, цены на которые ниже указанного значения). Для удобства работы реализовать меню с соответствующими пунктами.
Листинг программы на языке высокого уровня С++:
# 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 Результат работы программы. Реализация поиска билетов по сумме, меньше заданной.
Вывод.
Написана программа для
Написать программу для решения задачи: четыре друга A, B, C, 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.Первая и четвертая задача написаны на нем, вторая и третья – на языке высокого уровня С++. Все программы выдают правильный результат.