Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Лабораторная работа №4 / Лабораторная №4

.doc
Скачиваний:
16
Добавлен:
20.06.2014
Размер:
147.97 Кб
Скачать

МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ РФ

ГОСУДАРСТВЕННОЕ ОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ

ВЫСШЕГО ПРОФЕССИОНАЛЬНОГО ОБРАЗОВАНИЯ

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

КАФЕДРА АВТОМАТИЗИРОВАННЫХ СИСТЕМ УПРАВЛЕНИЯ

Лабораторная работа №4

«Создание экспертной системы на языке Prolog с использованием прямой цепочки рассуждений»

по дисциплине

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

Студент

Бутаков В.В.

подпись, дата

фамилия, инициалы

Группа

АС-09

Принял

Махлышев М.А.

ученая степень, звание

подпись, дата

фамилия, инициалы

Липецк 2012

Задание

1. Сформировать собственную базу правил (не менее 20 правил) в произвольной предметной области на основе собственных знаний или знаний эксперта.

2. Написать программный модуль на языке Prolog, реализующий вышеприведенный алгоритм.

База правил

ЕСЛИ уровень цен=растет, ТО реальный доход=падает.

ЕСЛИ реальный доход=падает, ТО потребительские расходы=падают.

ЕСЛИ потребительские расходы=падают, ТО савокупный спрос=падает.

ЕСЛИ уровень цен=падает, ТО спрос на деньги=падает.

ЕСЛИ спрос на деньги=падает, ТО процентная ставка=падает.

ЕСЛИ процентная ставка=падает, ТО инвестиции=растут.

ЕСЛИ инвестиции=растут, ТО савокупный спрос=растет.

ЕСЛИ уровень цен=растет, ТО экспорт=сокращается.

ЕСЛИ экспорт=сокращается И импорт=увеличивается, ТО чистый экспорт=сокращается.

ЕСЛИ реальный доход=растет, ТО савокупный спрос=растет.

ЕСЛИ налоги=растут И трансферты=падают, ТО реальный доход=падает.

ЕСЛИ трансферты=растут И налоги=падают, ТО реальный доход=растет.

ЕСЛИ реальный доход=растет, ТО потребительские расходы=растут.

ЕСЛИ спрос на деньги=растет, ТО процентная ставка=растет.

ЕСЛИ процентная ставка=растет, ТО инвестиции=падают.

ЕСЛИ экспорт=увеличивается И импорт=сокращается, ТО чистый экспорт=увеличивается.

ЕСЛИ трансферты=падают, ТО потребительские расходы=падают.

ЕСЛИ налоги=падают, ТО потребительские расходы=растут.

ЕСЛИ экспорт=увеличивается, ТО савокупный спрос=растет.

Код программы

domains

database

have_found(symbol,symbol)

db_identify(symbol,symbol)

db_denied(symbol,symbol)

predicates

identify(symbol,symbol,integer)

identify_end(symbol,symbol,integer)

identify_first(symbol,symbol)

identify_que(symbol,symbol)

denied(symbol,symbol)

check_if(symbol,symbol)

remember(symbol,symbol,symbol)

find(symbol,symbol)

goal

identify_first(X,Y),

not(find(X,Y)),

have_found(XA,YA),

write("Вывод экспертной системы: ",XA," ",YA,"."),

nl,

!.

clauses

find(X,Y):-

identify(X,Y,1),!.

find(X,Y):-

identify(X,Y,2),!.

find(X,Y):-

identify(X,Y,3),!.

find(X,Y):-

identify(X,Y,4),!.

find(X,Y):-

identify(X,Y,5),!.

find(X,Y):-

identify(X,Y,6),!.

find(X,Y):-

identify(X,Y,7),!.

find(X,Y):-

identify(X,Y,8),!.

find(X,Y):-

identify(X,Y,9),!.

find(X,Y):-

identify(X,Y,10),!.

identify("уровень цен","падает",N):-

N1=N-1,

identify("спрос на деньги","падает",N1),!.

identify("спрос на деньги","падает",N):-

N1=N-1,

identify("процентная ставка","падает",N1),!.

identify("процентная ставка","падает",N):-

N1=N-1,

identify("инвестиции","растут",N1),!.

identify("инвестиции","растут",N):-

N1=N-1,

identify_end("савокупный спрос","растет",N1),!.

identify("экспорт","увеличивается",N):-

N1=N-1,

identify_end("савокупный спрос","растет",N1),!.

identify("экспорт","увеличивается",N):-

N1=N-1,

identify_que("импорт","сокращается"),

identify_end("чистый экспорт","увеличивается",N1),!.

identify("экспорт","увеличивается",N):-

not(identify_que("импорт","сокращается")),

identify_end("экспорт","увеличивается",N),!.

identify("спрос на деньги","растет",N):-

N1=N-1,

identify("процентная ставка","растет",N1),!.

identify("процентная ставка","растет",N):-

N1=N-1,

identify_end("инвестиции","падают",N1),!.

identify("трансферты","растут",N):-

N1=N-1,

identify_que("налоги","падают"),

identify("реальный доход","растет",N1),!.

identify("трансферты","растут",N):-

not(identify_que("налоги","падают")),

identify_end("трансферты","растут",N),!.

identify("реальный доход","растет",N):-

N1=N-1,

identify_end("савокупный спрос","растет",N1),!.

identify("реальный доход","растет",N):-

N1=N-1,

identify_end("потребительские расходы","растут",N1),!.

identify("уровень цен","растет",N):-

N1=N-1,

identify("экспорт","сокращается",N1),!.

identify("экспорт","сокращается",N):-

N1=N-1,

identify_que("импорт","увеличивается"),

identify_end("чистый экспорт","сокращается",N1),!.

identify("экспорт","сокращается",N):-

not(identify_que("импорт","увеличивается")),

identify_end("экспорт","сокращается",N),!.

identify("налоги","падают",N):-

N1=N-1,

identify_end("потребительские расходы","растут",N1),!.

identify("уровень цен","растет",N):-

N1=N-1,

identify("реальный доход","падает",N1),!.

identify("реальный доход","падает",N):-

N1=N-1,

identify("потребительские расходы","падают",N1),!.

identify("потребительские расходы","падают",N):-

N1=N-1,

identify_end("савокупный спрос","падает",N1),!.

identify("налоги","растут",N):-

N1=N-1,

identify_que("трансферты","падают"),

identify("реальный доход","падает",N1),!.

identify("налоги","растут",N):-

not(identify_que("трансферты","падают")),

identify_end("налоги","растут",N),!.

identify("трансферты","падают",N):-

N1=N-1,

identify("потребительские расходы","падают",N1),!.

identify_first("уровень цен","падает"):-

identify_que("уровень цен","падает"),!.

identify_first("уровень цен","растет"):-

identify_que("уровень цен","растет"),!.

identify_first("экспорт","увеличивается"):-

identify_que("экспорт","увеличивается"),!.

identify_first("спрос на деньги","растет"):-

identify_que("спрос на деньги","растет"),!.

identify_first("налоги","растут"):-

identify_que("налоги","растут"),!.

identify_first("налоги","падают"):-

identify_que("налоги","падают"),!.

identify_first("трансферты","растут"):-

identify_que("трансферты","растут"),!.

identify_first("трансферты","падают"):-

asserta(db_identify("трансферты","падают")).

identify_end(X,Y,N):-

N=1,

asserta(have_found(X,Y)),

fail.

identify_que(X,Y):-

db_identify(X,Y),!.

identify_que(X,Y):-

not(denied(X,Y)),

check_if(X,Y),!.

identify_que(X,Y):-

not(denied(X,Y)),

write("Некорректный ввод! Введите: да или нет.\n"),

identify_que(X,Y),!.

denied(X,Y):-

db_denied(X,Y),!.

check_if(X,Y):-

write(X," ",Y,"?\n"),

readln(Reply),

remember(X,Y,Reply).

remember(X,Y,"да"):-

asserta(db_identify(X,Y)).

remember(X,Y,"нет"):-

asserta(db_denied(X,Y)),

fail.

Контрольный пример

Рисунок 1 – Рабочее окно программы в режиме диалога с пользователем

Соседние файлы в папке Лабораторная работа №4