МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ УКРАИНЫ ХАРЬКОВСКИЙ НАЦИОНАЛЬНЫЙ УНИВЕРСИТЕТ РАДИОЭЛЕКТРОНИКИ

advertisement
МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ УКРАИНЫ
ХАРЬКОВСКИЙ НАЦИОНАЛЬНЫЙ УНИВЕРСИТЕТ
РАДИОЭЛЕКТРОНИКИ
Кафедра ПО ЭВМ
Отчёт
По лабораторной работе №1
По курсу «Основы проектирования систем искусственного интеллекта»
Тема: ПРОЕКТИРОВАНИЕ ЭЛЕМЕНТОВ ПРОДУКЦИОННЫХ
МОДЕЛЕЙ
Выполнил:
ст. гр. ПОАС-00-3
Авраменко Р.В.
Проверил:
Ельчанинов А.Б.
Харьков 2002
ВВЕДЕНИЕ
Сегодня всем, кто работает в области информатики или интересуется
этой новой областью науки, известен термин "экспертные
системы".
Экспертная система (expert system, knowledge based system) - это
программная система, знания и умения которой сравнимы с умением и
знаниями специалистов в какой-нибудь специальной области знаний.
Экспертные системы вместе с системами обработки естественных языков
являются
наиболее важными в
коммерческом
плане
областями
использования искусственного интеллекта.
В
рамках
исследования
искусственного
интеллекта
созданы
многочисленные экспертные системы для разных областей знания, таких,
например, как медицинская диагностика и обследование пациентов, генные
и молекулярные исследования, составление конфигурации вычислительных
машин, образование, поиск неисправностей в устройствах и системах и
многие
другие
практические
приложения.
Диагностические
системы
используются для установления связи между нарушениями деятельности
организма и их возможными причинами. Наиболее известна диагностическая
система MYCIN, которая предназначена для диагностики и наблюдения за
состоянием больного при менингите и бактериальных инфекциях. Ее первая
версия была разработана в Стенфордском университете в середине 70-х
годов. В настоящее время эта система ставит диагноз на уровне врачаспециалиста. Она имеет расширенную базу знаний, благодаря чему может
применяться и в других областях медицины.
В этой работе
разрабатывается экспертная система, связанная с
диагностикой медицинских заболеваний.
1 Цель работы:
Разработать экспертную систему, содержащую модули логического
вывода, модули объяснений, ведения БД и БЗ, применительно к предметной
области – медицинская диагностика.
В качестве модели представления зданий, используется нечеткий
вывод.
ЭС должна предоставлять средства для ввода новых и изменения
существующих правил, возможность изменения функций принадлежности
нечетких понятий нечетким множествам.
2 РАЗРАБОТКА МОДЕЛЕЙ ПРЕДСТАВЛЕНИЯ ЗНАНИЙ
2.1. Концептуальное представление предметной области
с использованием продукционной модели
Экспертная система – это интеллектуальная программа, способная
осуществлять логические выводы на основании знаний в конкретной
предметной области и обеспечивающая решение специфических для данной
области задач. Базовый вариант архитектуры ЭС изображен на рисунке 1.
Задание и
ведение знаний
и фактов
ЭКСПЕРТ
База знаний
(БЗ)
Модуль ведения
знаний и фактов
Диалоговые
средства
эксперта
ДБ
фактов
Модуль
логического
вывода
Модуль
объяснений
БД
объяснений
Диалоговые средства пользователя
Заключения,
Ввод данных
ПОЛЬЗОВАТЕЛЬ
объяснение
Рисунок 1 – Базовый вариант экспертной системы
База знаний (БЗ) реализует механизм представления знаний и
управления ими. Модуль логического вывода предназначен для управления
процессом вывода на основе знаний, хранящихся в БЗ, и фактов,
представленных в БД. Механизм логического вывода тесно взаимосвязан с
принципам представления знаний в БЗ. Процесс пополнения и ведения БД и
БЗ на основе опроса и работы эксперта реализуется модулем ведения знаний
и фактов. Модуль объяснений реализует функцию выдачи заключений ЭС и
объяснений ее действий в удобной для пользователя форме и по его
требованию. ЭС должна включать в свой состав развитые средства
диалогового взаимодействия с ней как для пользователя, так и для эксперта.
Принципы разработки и программирования ЭС определяются
выбранным способом представления знаний и связанным с ним механизмом
логического вывода. Можно выделить пять основных групп моделей
представления
знаний:
логические
модели
(модели,
основанные
на
исчислении предикатов); модели, основанные на использовании правил
(продукционные модели); модели, основанные на использовании фреймов;
модели на семантических сетях; модели для представления нечетких знаний.
Продукционная модель.
Правила продукций.
Продукционная модель, или модель, основанная на правилах, позволяет
представить знания в виде предложений типа:
Если (условие), то (действие), постусловие.
ядро
Под условием понимается некоторое предложение-образец, по которому
осуществляется поиск в базе знаний, а под действием — действия,
выполняемые
при
успешном
исходе
поиска
(они
могут
быть
промежуточными, выступающими далее как условия, и терминальными или
целевыми,
завершающими
работу
системы).
Постусловие
описывает
действия и процедуры, которые необходимо выполнить после реализации
действия. Например, после покупки некоторой вещи в магазине необходимо
в описи товаров уменьшить количество вещей такого типа на 1. Ядра
продукций можно классифицировать по различным основаниям. Прежде
всего, все ядра делят на 2 больших типа: детерминированные и
недетерминированные. В детерминированных ядрах при актуализации ядра и
при
выполнимости
условия,
правая
часть
(действие)
выполняется
обязательно; в недетерминированных — правая часть может выполняться и
не выполняться. Т.о. секвенция в детерминированных ядрах реализуется с
необходимостью, а в недетерминированных — с возможностью: Если А то
возможно В. Возможность может определятся некоторыми оценками
реализации ядра. Если А, то с вероятностью р реализовать В. Такая оценка
может быть лингвистической, связанной с понятием лингвистической
переменной, например: Если А то с большой долей уверенности В.
Возможны
другие
способы
задания
оценки
реализации
ядра.
Детерминированные продукции м.б. однозначными и альтернативными. Во
втором
случае
в
правой
части
ядра
указываются
альтернативные
возможности выбора, которые оцениваются специальными весами выбора. В
качестве таких весов используются вероятностные оценки, лингвистические
оценки, экспертные оценки и т.п.(Если А, то Чаще всего надо делать В 1,
РЕЖЕ В2). Особым видом выделяют прогнозирующие продукции, в которых
описываются последствия, ожидаемые при актуализации А, например: Если
А, то с вероятностью р можно ожидать В.
При использовании продукционной модели база знаний состоит из
набора правил. Программа, управляющая перебором правил, называется
машиной вывода. Чаще всего вывод бывает прямой (от данных к поиску
цели) или обратный (от цели для ее подтверждения — к данным). Данные —
это исходные факты, на основании которых запускается машина вывода —
программа, перебирающая правила из базы.Предметная область (Заболевание
гортани)
2.2 Концептуальное представление предметной области
с использованием продукционной модели
В данном случае, для предметной области – медицинская диагностика,
было разработано 11 правил. Правила описаны в таблице 1.
Описание правил ЭС
В выводе данной экспертной системы, участвует 11 правил, которые можно
разделить на четыре категории:
- Ларингит острый
- Ларингит хронический катаральный
- Ларингит хронический гипертрофический
- Ларингит хронический атрофический
Для вывода каждой болезни, применяется как минимум 3 правила, которые
перечислены в таблице 1.
Таблица 1. Список правил нечеткой модели
Номер
Формулировка
1
ЕСЛИ (1 и 2), ТО «Кашель сухой затем с мокротой»
2
ЕСЛИ (1 и 2 и 3 и 4), ТО «Ларингит острый»
3
ЕСЛИ 5, ТО «Головная боль»
4
ЕСЛИ Головная боль, ТО «Повышенная температура
тела»
5
ЕСЛИ (5 и 6 и 7 ), ТО «Иногда боль при глотании»
6
ЕСЛИ (2 и 3 и 8 и 9 ), ТО «Ларингит хронический
катаральный»
7
ЕСЛИ (1 и 2 и 3), ТО «Ларингит хронический
катаральный»
8
ЕСЛИ ( 8 и 9), ТО «Ларингит хронический катаральный»
9
ЕСЛИ ( 2 или 11), ТО «Ларингит хронический
атрофический»
ЕСЛИ (10 и 12), ТО «Ларингит хронический
10
атрофический»
ЕСЛИ (13 и 14 и 15 ), ТО «Ларингит хронический
11
гипертрофический»
3 ПРОГРАММНАЯ РЕАЛИЗАЦИЯ СИСТЕМЫ
3.1 Разработка основных архитектурных компонент системы
3.1.1 Разработка структуры БД и БЗ
Все отношения, необходимые для функционирования экспертной
системы были созданы при помощи инструментальной оболочки DeskTop
DataBase. Она позволяет создавать таблицы стандарта Paradox, определять
поля, их типы, а также задавать маски и ограничения на вводимые числовые
данные, задавать ключевые поля, родительские и внешние ключи.
В
процессе логического вывода, экспертная система использует 5 отношений,
описание которых приведено в таблице 3.
Таблица 3 - Список имеющихся отношений
Название
Назначение
отношения
Rule
Используется для хранения правил
R
Справочник, по имеющимся выводам
F
Справочник, по имеющимся предпосылкам
NF
Нечеткие
понятия,
описывающие
предметную
область
Нечеткие
NR
понятия,
описывающие
возможные
результаты вывода
Таблица 4 - Структура полей отношения Rule
Название поля
Тип
Rule
Autoincrement
R1
Целый
Идентификатор
Номер правила
Номер
правила,
входящего
в
предпосылку
F1..F5
Целый
Номера
предпосылок
(ссылки на справочник)
R
Целый
Номер правила,
образующегося в
результате вывода
Таблица 5 - Структура полей отношения R
Название поля
Тип
Идентификатор
R
Autoincrement
Номер правила
Text
Символьный
Лингвистическое
описание
результата
вывода
Таблица 6 - Структура полей отношения F
Название поля
F
Тип
Autoincrement
Идентификатор
Номер
предпосылки
Text
Символьный
Лингвистическое
описание предпосылки
Таблица 7 - Структура полей отношения NR
Название поля
Тип
Идентификатор
NumR
Autoincrement
Номер правила
N1-N5
С плавающей
Значение функции
запятой
принадлежности
нечеткого
понятия
к
нечеткому множеству
Таблица 8 - Структура полей отношения NF
Название поля
Тип
Идентификатор
Nf
Autoincrement
Поле индекса
NumFact
Целый
Номер факта
NumOtvet
Целый
Номер
нечеткого
понятия, входящего в
нечеткое множество
N1-N5
С плавающей запятой
Значение
функции
принадлежности
нечеткого
понятия
к
нечеткому множеству
3.1.2 Разработка модуля логического вывода
Основной особенностью системы с нечетким выводом, является то, что
она практически полностью реализует продукционную систему, однако в
отношениях в качестве составных частей правил используются нечеткие
значения.
К продукционным ЭС относятся системы, использующие для
представления знаний правила вида «ЕСЛИ-ТО» (явление – реакция). Эти
системы бывают двух типов – с прямыми и обратными выводами.
В системах продукций с обратными выводами с помощью правил
строится дерево И/ИЛИ, связывающее в единое целое факты и заключения.
На основе этого дерева осуществляется логический вывод. Необходимость
реализации операции ИЛИ возникает, когда существует множество правил,
из которых выводится одно и то же заключение.
Логические
выводы
бывают
прямыми,
обратными
и
двунаправленными. При прямим выводе граф И/ИЛИ анализируется снизу
вверх, от исходных данных к корню, который представляется пользователю
как гипотеза заключения. При таком способе анализируется большое
количество данных, не имеющих прямого отношения к заключению. При
обратном выводе анализируются только те части дерева, которые имеют
отношение к данному заключению, т.е. процесс вывода осуществляется на
графе И/ИЛИ сверху вниз, от гипотезы к данным. При двунаправленном
выводе сначала используется небольшой объем данных для выбора гипотезы
(на основе прямого вывода), а затем запрашивается расширенный объем
данных для ее подтверждения.
При реализации системы продукций с прямым выводом не
требуется построения и анализа графа И/ИЛИ, а этот процесс заменяется
циклическим
обновлением
данных
в
результате
последовательного
выполнения правил. Эти системы включают три компоненты: базу правил,
состоящую из набора продукций; БД, содержащую множество фактов;
интерпретатор для получения логического вывода на основании правил и
фактов. На рисунке 2 представлен принцип функционирования систем
продукций с прямым выводом.
ИНТЕРПРЕТАТОР
База
База
1.ЕСЛИ
правил
A1 И B1 ТО C1
П
2. ЕСЛИ C1 И C2 ТО D1
1
A1
A2
A
B1 B2
B
данных
.
.
.
П
запись
2
считывани
C1
C2
C
D1
D
е
Рисунок 2 - Принцип функционирования систем продукций с прямым
выводом.
В результате вывода исходная БД в подобных системах преобразуется
от первоначального состояния к целевому. С увеличением числа правил и
фактов значительно замедляется скорость вывода., поэтому такие системы
обычно не используются для решения крупномасштабных задач.
Модуль логического вывода, реализован на языке Borland С++, и
содержится в заголовочном файле unit1.h. Список функций, реализующих
вывод, приведен в таблице 9.
Таблица 9 - Описаний функций
Название
Тип функции
Вызываемые
Назначение
функции
countneed()
Void
Нет
Считает
количество
предпосылок в
правиле
checkrule()
Bool
Нет
Проверка на
выполнение
правила
nextrule()
Void
ruleout()
countneed()
Переход на
проверку
следующего
правила
Продолжение таблицы 9 – Описаний функций
Название
Тип функции
Вызываемые
Назначение
функции
findnextrule(
Void
Countneed()
Поиск нового
Ruleout()
правила в БЗ
makeresult()
buildrelation1()
Void
Нет
Формирование
нечеткого
отношения №1
preparebuild()
Void
buildrelation1()
Подготовка к
Svertka()
построению
buildrelation2()
нечетких
отношений
Makeresult()
Void
Нет
Формирования
конечного
вывода(нечеткого
понятия)
Svertka()
Void
Нет
Свертка нечетких
отношений
buildrelation2()
Void
Нет
Формирование
нечеткого
отношения №2
ruleout()
Checkrule()
Вывод вопроса к
Preparebuild()
пользователю на
Findnextrule()
экран
Void
nextrule()
makeresult()
Таблица 10 - Описание переменных и констант
Идентификатор
Тип
Назначение
Need
int
Число предпосылок в правиле
I,j
Int
Переменные для циклов
Prav
int
Число «правильных ответов»
пользователя
fact[100]
int
Промежуточный массив для хранения
результатов анализа полученных
предпосылок
Stroka
int
Текущая строка в таблице minmas
Продолжение таблицы 10 - Описание переменных и констант
Идентификатор
Тип
temprelation1[5][5
float
Назначение
Временный массив для построения
нечеткого отношения
]
relation1[5][5]
float
Нечеткое отношение №1
relation2[5][5]
float
Нечеткое отношение №2
minmas[5][5]
double
minf[5]
float
Массив, содержащий нечеткие понятия
Значения принадлежности нечеткого
понятия к нечеткому множеству
minr[5]
float
Значения принадлежности нечеткого
понятия вывода к нечеткому множеству
Max
float
Испоьзуется для поиска максимального
числа
Strmin
int
Индекс строки макс числа в массиве
Text
AnsiString
Текст сопровождения, выводимый на
экран
final[5]
float
tempmas[5][3]
int
Окончательное нечеткое отношение
Промежуточный массив, для контроля
входных команд пользователя
Rel
int
Число полученных нечетких
отношеений
Флаг конца вывода
Endrule
bool
ii,z,ii1
int
Переменные для циклов
Firstfact
int
Индекс первого факта в БД
Ourotvet
AnsiString
Лингвистическая переменная,
содержащя текст вывода
Firstotvet[5]
float
Нечеткое понятие, вводимое
пользователем
r1[50]
int
Промежуточный массив для хранения
результатов анализа полученных
предпосылок
Укрупненная блок схема алгоритма, представлена на рисунке 3.
Начало
Инициализация
переменных
Начало диалога
Правило
пройдено?
Да
Нет
Checkrule
Ответы
совпадают ?
Nextrule
Да
Нет
Prav++
Есть еще
Nextrule
правило?
Нет
Preparebuild
Проверка
таблиц
Да
Ruleout
Вывод
объяснений
Findnextrule
Конец
Нечеткое
отношение
есть?
вывода?
Конец
Needcount
BuildRelation
Да
Да
Svetrka
Нет
Нет
Рисунок 3 - Укрупненная блок-схема алгоритма логического вывода
3.1.3 Разработка модуля объяснений
Модуль объяснений предназначен для формирования и отображения
поясняющей информации, в ходе логического вывода. Фактически он
запоминает «маршрут» следования по дереву вывода, и отображает его на
экране. Основным компонентом модуля объяснений является объект Memo,
из библиотеки визуальных компонентов языка Bolrand C++ Builder.
Информация предоставляется в виде вопросов, которые формирует модуль
логического вывода, и ответов пользователя. Каждый ответ, кроме значения
логического параметра True или False, содержит также степень уверенности в
правильном выборе. Степень уверенности задается с помошью шкалы от 1 до
5. Каждое числовое значение имеет соответствующее лингвистическое
описание:
1. Не очень опасно
2. Малая опасность
3. Средняя степень тяжести
4. Опасное положение
5. Очень опасное положение
Таким
образом,
окончательный
составляющих:
-
Название болезни
-
Степень опасности заболевания
вывод,
формируется
из
двух
Результат вывода можно записать в текстовый файл. Данная функция
может пригодиться при создании баз данных диагнозов.
Также модуль обяснений, позволяет вести контроль над процессом
поиска правил в базе знаний, и информировать пользователя о переходах
между правилами.
3.1.4 Разработка модуля ведения БД и БЗ
Модуль ведения баз данных и баз знаний, предназначен для
обеспечения возможности ввода новых правил, фактов, нечетких понятий и
нечетких фактов, и для их модификации. Запуск модуля ведения БД и БЗ,
происходит из меню «База данных»-> «работа с БД и БЗ». Для доступа к
данным, использовались компоненты:
-
Table
-
DataSource
-
Dbnavigator
-
DBGrid
Компонент Table связывает какое-либо отношение с функциями
Borland Database Engine (BDE). Он обладает методами поиска записей, по
заданному полю, фильтрации, блокировки записей. Это ключевой элемент в
приложениях баз данных, и любой доступ к записям таблиц, производится
только через его функции и методы. Следует отметить, что он принадлежит к
так называемой группе «Доступа к данным».
Компонент
DataSource
является
связующим
звеном
между
компонентом Table и одним из компонентов группы «Управления данными».
Компонент
DBNavigator
тпринадлежит
к
группе
«Управления
данными», и служит для выполнения навигации по таблицам. В его состав
входят такие методы, как
- Переход на первую запись в отношении
- Переход на последнюю запись в отношении
- Переход на следующюю запись в отношении
- Переход на предыдущую запись в отношении
- Вставка новой записи
- Удаление записи
- Подтвержение операции модификации
Все эти методы, являются необходимыми при добавлении новых
правил в экспертную систему.
Сам алгоритм добавление правила, следующий:
1. Добавить новый вопрос в отношение F.db
2. Добавить результат вывода в отношение R.db
3. Занести правило в таблицу Rule.db
4. Заполнить нечеткие множества фактов в NF.db
5. Заполнить нечеткие множества результатов в NR.db
После каждого этапа, требуется сохранять изменения в таблице, иначе
драйвер BDE, может выдать ошибку.
Если все шаги выпонены правильно, то при следующем логическом
выводе, новое правило также будет проверяться на истинность.
Компонент DBGrid предназначен для отображения на экране записей
из активных отношений. С помощью редактора полей, можно производить
настройку компонента таким образом, что на экране будет отображаться не
все множество полей , а только разрешенные разработчиком. В модуле
объяснений используется пять компонент DBGrid, соответственно для
каждого отношения. Однако активным может быть только одно. Доступ к
полям активного отношения, осуществляется посредством компонента
DBNavigator, а его переключение компонентом ComboBox, который
устанавливает связь между отношениями.
3.2 Описание контрольного примера и экспериментальная загрузка БД и БЗ
В качестве контрольного примера, проверялась последовательность
правил, определяющих болезнь Ларингит, в не очень запущенной форме. Ход
диалога пользователя с системой отражен в таблице 11.
Таблица 11- Описание диалога пользователя с системой
Номер
Вопрос
Ответ
Увереннос
вопрос
пользовател
ть в
а
я
ответе
Да
5
Да
1
Да
4
иногда боль
Да
4
повышенная
Да
3
У вас есть сухость першение,
1
саднение?
Есть ли у вас кашель сухой затем
2
с мокротой?
Есть ли у вас голос хриплый или
3
безвучный
?
Ощущаете ли вы
4
при глотании?
Есть
5
ли
у
вас
температура тела?
Ответ: Не очень опасно – Ларингит острый
Соответствующие правила, приведены в таблице 12.
Таблица 12 - Правила, при выводе болезни Ларингит острый
Номер
Правило
вопрос
а
1
ЕСЛИ (1 ), ТО «Кашель сухой затем с мокротой»
2
ЕСЛИ (“Кашель сухой затем с мокротой ” и 3), ТО
«Иногда боль при глотании»
3
ЕСЛИ (“Иногда боль при глотании ” и 5), ТО «Головная
боль »
ЕСЛИ (“Головная боль ” и 7), ТО «Ларингит острый»
4
Перечень нечетких отношений, полученных в результате выполнения
ручного расчета операций свертки, над нечеткими понятиями, содержится в
таблице 13.
Таблица 13 – Нечеткие отношения
Отношение №1
0,1
0,1
0,1
0,5
0,8
1
0,1
0,1
0,1
0,1
0,1
0,1
2
0,1
0,1
0,1
0,1
0,1
0,1
3
0,1
0,1
0,1
0,1
0,1
0,1
4
0,5
0,5
0,5
0,5
0,5
0,5
5
0,8
0,8
0,8
0,8
0,8
0,8
Отношение №2
0,1
0,1
0,1
0,5
0,8
1
0,8
0,8
0,8
0,8
0,8
0,8
2
0,5
0,5
0,5
0,5
0,5
0,5
3
0,2
0,2
0,2
0,2
0,2
0,2
4
0,1
0,1
0,1
0,1
0,1
0,1
5
0,1
0,1
0,1
0,1
0,1
0,1
Конечное нечеткое понятие
0,1
0,1
0,1
 4 Текст программы;
Form1
unit1.cpp
0,5
0,8
//--------------------------------------------------------------------------#include <vcl.h>
#pragma hdrstop
#include "Unit1.h"
#include "Unit2.h"
#include "Unit3.h"
#include "stdlib.h"
#include "string.h"
//--------------------------------------------------------------------------#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//--------------------------------------------------------------------------__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//--------------------------------------------------------------------------void __fastcall TForm1::FormCreate(TObject *Sender)
{
//Form3->Label6->Visible=false;
endrule7=false;
showrule=false;
//stroka=0;
//Memo1->Lines[0]="Ñòàòèñòèêà: ";
//Table1->Active=true;
StringGrid1->Visible=false;
StringGrid2->Visible=false;
Panel1->Visible=false;
//Label3->Visible=false;
Label1->Visible=false;
Memo1->Visible=false;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
if((Rule->Fields->Fields[2+i]->AsInteger==0)||(i==7))
{
if (checkrule())
{
preparebuild();
findnextrule();
}
else {
nextrule();
prav=0;
while(fact[Rule->Fields->Fields[2+i]->AsInteger]!=7)
{ i++;
if ((i==7)||(fact[Rule->Fields->Fields[2+i]->AsInteger]==0)||
(fact[Rule->Fields->Fields[2+i]->AsInteger]==1)) nextrule();
}
}
ruleout();/////////////////////////////////
}//if i
if (!endrule7)
{
if(RadioGroup1->ItemIndex==0)
{
AnsiString temptext,ttt;
ttt=IntToStr(RadioGroup2->ItemIndex+1);
temptext=F->Fields->Fields[1]->AsString;
Memo1->Lines->Add("Âîïðîñ: ");
Memo1->Lines->Append(temptext);
Memo1->Lines->Append("Îòâåò: ÄÀ!");
Memo1->Lines->Append("Óâåðåííîñòü: "+ttt);
//Memo1->Lines->Add(ttt);
Memo1->Lines->Append("");
//stroka++;*/
fact[Rule->Fields->Fields[2+i]->AsInteger]=1;
tempmas[stroka][0]=Rule->Fields->Fields[6]->AsInteger;
tempmas[stroka][1]=Rule->Fields->Fields[2+i]->AsInteger;
tempmas[stroka][2]=RadioGroup2->ItemIndex+1;
//if (firstfact==0) firstfact=
stroka++;
}
else
{
fact[Rule->Fields->Fields[2+i]->AsInteger]=0;
nextrule();
prav=0;
while(fact[Rule->Fields->Fields[2+i]->AsInteger]!=7)
{ i++;
if ((i==7)||(fact[Rule->Fields->Fields[2+i]->AsInteger]==0)||
(fact[Rule->Fields->Fields[2+i]->AsInteger]==1)) nextrule();
}
ruleout();///////////////
}
if (!endrule7)
{
// DBText1->Visible=false;
while (fact[Rule->Fields->Fields[2+i]->AsInteger]!=7)
{
switch(fact[Rule->Fields->Fields[2+i]->AsInteger])
{
case 1:prav++;i++;break;
case 0:i++;break;
}//switch
}
ruleout();
RadioGroup1->ItemIndex=-1;
RadioGroup2->ItemIndex=-1;
}
}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::N7Click(TObject *Sender)
{
Memo1->Clear();
StringGrid1->Visible=true;
StringGrid2->Visible=true;
for (ii=0;ii<5;ii++)
for (z=0;z<5;z++)
{
StringGrid1->Cells[z+1][ii+1]="";
StringGrid2->Cells[z+1][ii+1]="";
}
rel=0;
firstfact=0;
Label1->Visible=true;
Memo1->Visible=true;
Rule->Active=true;
Rule->First();
R->Active=true;
nftable->Active=true;
nr->Active=true;
F->Active=true;
R->First();
F->First();
endrule7=false;
Panel1->Visible=true;
//Label3->Visible=true;
need=0;
stroka=0;
nftable->First();
nr->First();
i=0;
prav=0;
for(i=0;i<100;i++) fact[i]=7;
for(i=0;i<50;i++) r1[i]=7;
countneed();
}
//---------------------------------------------------------------------------
void __fastcall TForm1::N13Click(TObject *Sender)
{
Form1->Close();
}
//--------------------------------------------------------------------------void __fastcall TForm1::FormClose(TObject
&Action)
{
Rule->Active=false;
R->Active=false;
F->Active=false;
nftable->Active=false;
nr->Active=false;
Panel1->Visible=false;
Memo1->Visible=false;
//Label3->Visible=false;
Label1->Visible=false;
}
*Sender,
TCloseAction
//---------------------------------------------------------------------------
void __fastcall TForm1::Button3Click(TObject *Sender)
{
Rule->Active=false;
R->Active=false;
F->Active=false;
Panel1->Visible=false;
//Label3->Visible=false;
}
//--------------------------------------------------------------------------void __fastcall TForm1::N10Click(TObject *Sender)
{
Form3->Show();
}
//---------------------------------------------------------------------------
void __fastcall TForm1::SpeedButton2Click(TObject *Sender)
{
TForm1::N7Click(Sender);
}
//--------------------------------------------------------------------------void __fastcall TForm1::SpeedButton1Click(TObject *Sender)
{
Form3->Show();
}
//--------------------------------------------------------------------------void __fastcall TForm1::SpeedButton4Click(TObject *Sender)
{
Form1->Close();
}
//--------------------------------------------------------------------------void __fastcall TForm1::N9Click(TObject *Sender)
{
if(SaveDialog1->Execute())
{
Memo1->Lines->SaveToFile(SaveDialog1->FileName);
}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::N15Click(TObject *Sender)
{
Memo1->Visible=true;
Memo1->Clear();
if(OpenDialog1->Execute())
{
Memo1->Lines->LoadFromFile(OpenDialog1->FileName);
}
}
//--------------------------------------------------------------------------void __fastcall TForm1::N12Click(TObject *Sender)
{
Form2->Show();
}
//---------------------------------------------------------------------------
Form3
//--------------------------------------------------------------------------#include <vcl.h>
#pragma hdrstop
#include "Unit3.h"
//--------------------------------------------------------------------------#pragma package(smart_init)
#pragma resource "*.dfm"
TForm3 *Form3;
//--------------------------------------------------------------------------__fastcall TForm3::TForm3(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm3::FormCreate(TObject *Sender)
{
Label6->Visible=false;
Label7->Visible=false;
Label8->Visible=false;
Label9->Visible=false;
Table1->Active=true;
Table2->Active=true;
Table3->Active=true;
Table4->Active=true;
Table5->Active=true;
}
//---------------------------------------------------------------------------
void __fastcall TForm3::Button1Click(TObject *Sender)
{
DBNavigator1->DataSource=DataSource2;
//DBGrid1-> DataSource=DataSource2;
}
//--------------------------------------------------------------------------void __fastcall TForm3::ComboBox1Change(TObject *Sender)
{
switch(ComboBox1->ItemIndex)
{
case 0:
Label6->Visible=false;
Label7->Visible=false;
Label8->Visible=false;
Label9->Visible=false;
Label6->Visible=true;
DBNavigator1->DataSource=DataSource2;
//DBGrid1-> DataSource=DataSource2;
break;
case 1:
Label6->Visible=false;
Label7->Visible=false;
Label8->Visible=false;
Label9->Visible=false;
Label8->Visible=true;
DBNavigator1->DataSource=DataSource1;
//DBGrid1-> DataSource=DataSource1;
break;
case 2:
Label6->Visible=false;
Label7->Visible=false;
Label8->Visible=false;
Label9->Visible=false;
Label7->Visible=true;
DBNavigator1->DataSource=DataSource3;
//DBGrid1-> DataSource=DataSource3;
break;
case 3:
Label6->Visible=false;
Label7->Visible=false;
Label8->Visible=false;
Label9->Visible=false;
Label9->Visible=true;
DBNavigator1->DataSource=DataSource4;
//DBGrid1-> DataSource=DataSource4;
break;
case 4:
DBNavigator1->DataSource=DataSource5;
//DBGrid1-> DataSource=DataSource5;
break;
}//switch
}
//--------------------------------------------------------------------------void __fastcall TForm3::FormClose(TObject *Sender, TCloseAction &Action)
{
Table1->Active=false;
Table2->Active=false;
Table3->Active=false;
Table4->Active=false;
Table5->Active=false;
}
//--------------------------------------------------------------------------5. Тестовый пример;
Выводы:
В данной программе была реализована идея создания фрагмента оболочки
экспертной системы. В результате была получена интегрированная среда по диагностике
заболеваний. К плюсам данной программы можно отнести довольно поверхностные
знания пользователя по работе с компьютером, которые требуются для работы с ней.
Среди возможных пожеланий можно сказать о разработке системы помощи
при работе с программой. Можно также усложнить программу, переписав ее
так, чтобы она работала на основе рассуждений с использованием
вероятностного подхода. Часто к экспертным
системам
предъявляют
дополнительное требование - способность иметь дело с неопределенностью
и неполнотой. Информация о поставленной задаче может быть неполной или
ненадежной; отношения между объектами предметной области могут
быть приближенными. Например, может не быть полной уверенности в
наличии
у пользователя некоторого симптома или в том, что данные,
полученные при определении, верны.
Во всех этих случаях как раз и
необходимы рассуждения с использованием вероятностного подхода.
Достоинства и недостатки продукционной модели.
Продукционная модель чаще всего применяется в промышленных
экспертных системах. Она привлекает разработчиков своей наглядностью,
высокой модульностью, легкостью внесения дополнений и изменений и
простотой
механизма
логического
вывода.
Имеется
большое
число
программных средств, реализующих продукционный подход (язык OPS 5 [8];
"оболочки" или "пустые" ЭС — EXSYS [10], ESISP, ЭКСПЕРТ [2];
инструментальные системы ПИЭС [11] и СПЭИС [3] и др.), а также
промышленных ЭС на его основе (ФИАКР [8]) и др.
Продукционные модели имеют по крайней мере 2 недостатка. При
большом
числе
продукций
становится
сложной
проверка
непротиворечивости системы продукций. Это заставляет при добавлении
новых продукций тратить много времени на проверку непротиворечивости
новой системы. Системе присуща недетерминированность (неоднозначность
выбора выполняемой продукции из фронта активизируемых продукций)
возникают принципиальные трудности при проверке корректности работы
системы. Считается, что если в ИС число продукций достигнет тысячи, то
мало шансов, что система продукций во всех случаях будет правильно
функционировать
ЛИТЕРАТУРА
1. К. Нейлор. Как построить свою экспертную систему. .М.
Энергоатомиздат. 1991 г.
2. Элти Д. Экспертные системы. М. Наука. 1987 г.
3. . Ревунков Г.И. и др. Базы и банки данных и знаний. - М.: Высшая
шко-ла, 1992 (5 шт.)
4. Осуга С. Обработка знаний/Пер. с яп. В.И. Этова. - М.: Мир, 1989 ( 8
шт.)
5. Тейлор К. Как построить свою экспертную систему/ Пер. с англ. Н.Н.
Слепова. - М.: Энергоатомиздат, 1991 (17 шт.)
6. Таусенд К., Фохт Д. Проектирование и программная реализация
экспертных систем на персональных ЭВМ /Пер с англ. В.А.
Кондратенко. - М.: Финансы и статистика, 1990 (5 шт.)
7. Рот М. Интеллектуальный автомат :компьютер в качестве эксперта/
Пер. с нем. А.П. Свиридова. - М.: Энергоатомиздат, 1991 (5 шт.)
8. Выявление экспертных знаний/ отв. ред. С.В. Емельянов: АН СССР,
ВНИИ системн. исследов. - М.: Наука, 1989 (7 шт.)
9. Уотермен Д. Руководство по экспертным системам: пер. с англ./ Под
ред. В.Л. Стефанюка. - М.: Мир, 1989 (5 шт.)
Download