Министерствообразования и науки Украины
Черниговскийгосударственный технологический университет
Кафедра информационных и компьютерныхсистем
Лабораторная работа №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
releasevariable /* УБИРАЕМ НЕНУЖНЫЕ НАМ ПЕРЕМЕННЫЕ */
e.lstr = 500 /* МАКСИМАЛЬНАЯ ДЛИНА СТРОКИ */
E.DECI = 2 /* кол-во знаков после точки */
output " ДЕНЬ ДОБРЫЙ, МИСТЕР(МИССИС)."
output " Вы хотите совершить прогнозцен на бирже? "
output " Тогда вы обратились поадресу. :) "
output " Данная ЭС поможет вам вэтом… "
output " ИТАК, НАЧНЕМ ..."
ytd = «0»
td = 0
output " Введите вчерашний курсдоллара"
input ytd numusing «dddd»
output «Введите нынешний курсдолара»
input td numusing «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 procstvstr using «a» with "(y/n)"
RULE: R2
IF: ytd >td & (procstv = «y» or procstv = «Y»)
THEN: dol = «Курс доллара падает.»
prcs = " Процентные ставки растут."
output «Хотите ли вы узнать прогноз обуровне цен на бирже?»
input urcenstr 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 urcenstr 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
THEN: output «Хотите ли вы узнать прогноз о процентныхставках?»
input procstvstr using «a» with "(y/n)"
RULE: R9
IF: ytd
THEN: dol = «Курс доллара растёт.»
prcs = " Процентные ставки падают."
output «Хотите ли вы узнать прогноз обуровне цен на бирже?»
input urcenstr using «a» with "(y/n)"
RULE: R10
IF: ytd
THEN: urc = «Уровень цен на бирже растёт.»
prognoz =«d»
RULE: R11
IF: ytd
THEN: prognoz= «b»
RULE: R12
IF: ytd
THEN: dol = «Курс доллара растёт.»
output «Хотите ли вы узнать прогноз обуровне цен на бирже?»
input urcenstr using «a» with "(y/n)"
RULE: R13
IF: ytd
THEN: prognoz= «a»
RULE: R14
IF: ytd
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”. Как видно по результат, данная оболочка позволяетзначительно упростить процесс создания таких систем, позволив их разработчикуакцентировать свое внимание исключительно на аспектах самой системы (ее правили выводов), и не тратить лишнее время на построение графического или командногоинтерфейса на языках программирования высокого уровня.