Создание пробной экспертной системы
СОДЕРЖАНИЕ: Назначение экспертной системы. Разработка экспертной системы путем самостоятельного программирования в полном объеме простейшей ЭС в GURU. Листинг экспертной системы по прогнозированию на бирже уровня цен, если валютный курс доллара падает или растет.Министерство образования и науки Украины
Черниговский государственный технологический университет
Кафедра информационных и компьютерных систем
Лабораторная работа №3
по дисциплине:
“Компьютерные системы искусственного интеллекта”
Создание пробной экспертной системы
Выполнил студент гр. МК-061
И.С. Чадюк
Руководитель к. ф.-м. н., доцент
В.А. Бычко
Чернигов – 2010
Цель работы
Самостоятельное программирование в полном объеме простейшей экспертной системы.
Краткие теоретические сведенья
Во время консультации может создаться впечатление, что действия, выполняемые машиной логических выводов, не имеют отношения к проблеме. Это возможно потому, что пользователь не знает, как происходит внутренний процесс аргументации. Если пользователь действительно не понимает, почему от него требуют той или иной информации, он может отреагировать, используя Y(CTRL-Y). В этом случае он увидит на экране дисплея текущее обрабатываемое правило. После нажатия ENTER это объяснение исчезает, и он может ввести ответ.
После консультации с набором правил, пользователь может попросить систему объяснить, какие правила и переменные использовались. Для этого применяются две команды:
HOW - выдает переменные, которые использовались;
WHY - объясняет правила, которые использовались.
Объясним, какую информацию дает их использование.
HOW - выдает значение переменкой цели, правило или правила, с помощью которых была определена цель.
HOW имя переменной - выдает значение или значения с указанной переменной.
HOW число - выдает значение или значения переменной с порядковым номером, заданными этой переменной в наборе правил.
WHY - воспроизводит на экране дисплея объяснение (REASON) и переменные, которые требовались для правила, выполняющегося последним. Переменные отображаются с порядковый номером, который можно потом использовать в команде HOW (см. выше).
WHY имя правила - воспроизводит на экране дисплея объяснение (REASON) и переменные, необходимые для данного правила.
WHY число - воспроизводит на экране дисплея объяснение и переменные, необходимые для REASON правила с указанным порядковым номером в наборе правил.
Для того чтобы объяснить процесс аргументации, необходимо использовать HOW и WHY совместно.
Опишем подробно работу набора правил. Он предназначен для иллюстрация обратной аргументации.
В INITIAL идет инициализация переменных. Рассмотрим ее отдельные строки.
e.tryp = e - задает стратегию оценки посылки (части “if” правила), содержащего неизвестные переменные. Истинность посылки оценивается сразу же после того, как очередная неизвестная переменная становится известной. Тестирование посылки прекращается (несмотря на то, что все переменные в ней еще не определены), если только удается определенно установить ее истинность или ложность.
e.lstr = 80 - максимальная длина символьной строки, которая может выводиться на экран.
е.lnum = максимальная длина числа.
В VAR описываются пользовательские переменные (см. списание лабораторнойработы 1).
Часть DO - окончание работы экспертной системы. Конструкция test ... case ... endtestпроверяет переменную advice и в зависимости от ее значения выполняет те или иные действия.
Ход работы
Описание ЭС на естественном языке.
Вы хотите прогнозировать на бирже уровень цен. Если валютный курс доллара падает, то процентные ставки растут. Если валютный курс доллара растет, то процентные ставки падают. Если процентные ставки растут, то уровень цен на бирже падает. Если процентные ставки падают, то уровень цен на бирже растет.
Полученное дерево ЭС приведено ниже.
PROGNOZ*
R3
YTD
TD
PROCSTV
R1
YTD
TD
R8
YTD
TD
URCEN
R2
YTD
TD
(PROCSTV)
R5
YTD
TD
(PROCSTV)
R9
YTD
TD
(PROCSTV)
R12
YTD
TD
(PROCSTV)
R4
YTD
TD
(PROCSTV)
(URCEN)
R6
YTD
TD
(PROCSTV)
(URCEN)
R7
YTD
TD
(PROCSTV)
(URCEN)
R10
YTD
TD
(PROCSTV)
(URCEN)
R11
YTD
TD
(PROCSTV)
(URCEN)
R13
YTD
TD
(PROCSTV)
(URCEN)
R14
YTD
TD
(PROCSTV)
(URCEN)
Листинг экспертной системы
GOAL: prognoz
INITIAL:
clear
release variable /* УБИРАЕМ НЕНУЖНЫЕ НАМ ПЕРЕМЕННЫЕ */
e.lstr = 500 /* МАКСИМАЛЬНАЯ ДЛИНА СТРОКИ */
E.DECI = 2 /* кол-во знаков после точки */
output ДЕНЬ ДОБРЫЙ, МИСТЕР (МИССИС).
output Вы хотите совершить прогноз цен на бирже?
output Тогда вы обратились по адресу. :)
output Данная ЭС поможет вам в этом...
output ИТАК, НАЧНЕМ ...
ytd = 0
td = 0
output Введите вчерашний курс доллара
input ytd num using dddd
output Введите нынешний курс долара
input td num using dddd
DO:
clear
output НА ОСНОВЕ ДАННОЙ ИНФОРМАЦИИ:
output
test prognoz
case a
output dol
break
case b
output dol
output prcs
break
case c
output dol
output urc
break
case d
output dol
output prcs
output urc
break
endtest
RULE: R1
IF: ytd td
THEN: output Хотите ли вы узнать прогноз о процентных ставках?
input procstv str using a with (y/n)
RULE: R2
IF: ytd td (procstv = y or procstv = Y)
THEN: dol = Курс доллара падает.
prcs = Процентные ставки растут.
output Хотите ли вы узнать прогноз об уровне цен на бирже?
input urcen str using a with (y/n)
RULE: R3
IF: ytd td (procstv = y or procstv = Y) (urcen = y or urcen = Y)
THEN: urc = Уровень цен на бирже падает.
prognoz = d
RULE: R4
IF: ytd td (procstv = y or procstv = Y) (urcen = n or urcen = N)
THEN: prognoz = b
RULE: R5
IF: ytd td (procstv = n or procstv = N)
THEN: dol = Курс доллара падает.
output Хотите ли вы узнать прогноз об уровне цен на бирже?
input urcen str using a with (y/n)
RULE: R6
IF: ytd td (procstv = n or procstv = N) (urcen = n or urcen = N)
THEN: prognoz = a
RULE: R7
IF: ytd td (procstv = n or procstv = N) (urcen = y or urcen = Y)
THEN: urc = Уровень цен на бирже падает.
prognoz = c
RULE: R8
IF: ytd td
THEN: output Хотите ли вы узнать прогноз о процентных ставках?
input procstv str using a with (y/n)
RULE: R9
IF: ytd td (procstv = y or procstv = Y)
THEN: dol = Курс доллара растёт.
prcs = Процентные ставки падают.
output Хотите ли вы узнать прогноз об уровне цен на бирже?
input urcen str using a with (y/n)
RULE: R10
IF: ytd td (procstv = y or procstv = Y) (urcen = y or urcen = Y)
THEN: urc = Уровень цен на бирже растёт.
prognoz = d
RULE: R11
IF: ytd td (procstv = y or procstv = Y) (urcen = n or urcen = N)
THEN: prognoz = b
RULE: R12
IF: ytd td (procstv = n or procstv = N)
THEN: dol = Курс доллара растёт.
output Хотите ли вы узнать прогноз об уровне цен на бирже?
input urcen str using a with (y/n)
RULE: R13
IF: ytd td (procstv = n or procstv = N) (urcen = n or urcen = N)
THEN: prognoz = a
RULE: R14
IF: ytd td (procstv = n or procstv = N) (urcen = y or urcen = Y)
THEN: urc = Уровень цен на бирже растёт.
prognoz = c
VARIABLE: prognoz
FIND: prognoz = error
LABEL: прогнозируем курс долара
var: prcs
FIND: prcs = error
LABEL: прогноз проц ставки
var: urc
FIND: urc = error
LABEL: прогноз уровня цен
VAR: dol
FIND: dol = error
LABEL: прогноз доллара
var: ytd
LABEL: вчерашний курс доллара
VAR: td
LABEL: текущий курс доллара
VAR: procstv
LABEL: процентная ставка
VAR: urcen
LABEL: уровень цен на бирже
END:
Выводы
В результате выполнения данной лабораторной работы закрепили знания по разработке ЭС путем самостоятельного программирования в полном объеме простейшей ЭС в “GURU”. Как видно по результат, данная оболочка позволяет значительно упростить процесс создания таких систем, позволив их разработчику акцентировать свое внимание исключительно на аспектах самой системы (ее правил и выводов), и не тратить лишнее время на построение графического или командного интерфейса на языках программирования высокого уровня.