Основной упор этой модели в Delphi делается на максимальном реиспользовании кода. Это позволяет разработчикам строить приложения весьма быстро из заранее подготовленных объектов, а также дает им возможность создавать свои собственные объекты для среды Delphi. Никаких ограничений по типам объектов, которые могут создавать разработчики, не существует.
3.2 Алгоритм работы экспертной системы
3.2.1 Алгоритм формирования базы знаний
В данном курсовом проекте для формирования базы был применен алгоритм с прямой цепочкой рассуждений
Пусть iое правило имеет следующую структуру
Если Фi1 = ЗФi1
и Ф i2 = ЗФi2
и Фi3 = ЗФi3
то Вi = ЗВ i.
Здесь i – номер правила, Фi1,2,3 - это факты iго правила, ЗФi1,2,3 – значение факта Фij,
Вi - название вывода iго правила, ЗВi – содержание или значение вывода Вi..
В данном курсовом проекте число условий в одном правиле не ограничено. Пусть есть N правил подобной структуры. Число правил задает эксперт при создании базы знаний.
Чтобы в алгоритме вывода можно было оперировать фактами, значениями фактов, учитывать их связь в определенном правиле и делать выводы, соответствующие данному набору фактов, база данных экспертной системы представляется в виде определенных структур: массив переменных условия (МПУ), массив переменных вывода (МПВ), списки переменных условия (СПУ) и вывода (СПВ), очередь переменных вывода (ОПВ).
Вначале формируем массив переменных условия МПУ и массив переменных вывода МПВ путем переписывания туда содержимого из соответствующих полей формы. Далее, после ввода всех правил строим СПВ и СПУ.
В таблицах 2.1, 2.2 приведена структура МПУ, МПВ, СПУ, СПВ.
Таблица 2.1 – Структура массивов условий и выводов
МПУ(n*3, 3) | МПВ(n,3) |
Ф11 ЗФ11 1 Ф12 ЗФ12 2 Ф13 ЗФ13 3 Ф21 ЗФ21 3 ???????? ???????? Ф31 ЗФ31 0 Ф32 ЗФ32 4 Ф33 ЗФ33 1 …………….. Фn1 ЗФn1 * Фn2 ЗФn2 * Фn3 ЗФn3 * | В1 ЗВ1 1 В2 ЗВ2 2 В3 ЗВ3 1 ………. Вn ЗВn * |
Таблица 2.1 – Структура списков условий и выводов
СПУ(ку) | СПВ(кв) |
Ф11 Ф12 Ф13 Ф32…………….. Фn1 Фn2 Фn3 | В1 В2 ………. Вn |
Вначале на основе анализа МПВ формируем список переменных вывода СПВ. Анализ заключается в следующем алгоритме:
1. Первую переменную вывода В1 помещаем без обработки как СПВ (1) и устанавливаем текущее количество выводов кв=1 и в третий столбец МПВ записываем: МПВ(1,3)=1, т.е. по содержимому этого столбца обеспечиваем связь МПВ и СПВ.
2. От i =2 до N: (для всех МПВ( i, 1) проверяем была ли эта переменная уже записана в состав СПВ):
От р=1 до кв: если МПВ(i, 1) = СПВ (р), то МПВ( i, 3) =р; иначе кв=кв+1; СПВ(кв)= МПВ( i, 1); МПВ(i, 3)=кв.
Далее аналогично анализируем МПУ для формирования списка переменных условия СПУ.
1. ку=1; СПУ(1)=МПУ(1);
2. От i =1 до N*М: (для всех МПУ( i, 1):
От р=1 до кв: если МПУ(i, 1) = СПВ (р), то МПУ(i, 3)=0; i= i + 1 и перейти к п.2. (т.е. проверяем была ли эта переменная уже записана в состав СПВ как переменная вывода и в этом случае в третий столбец МПУ записываем 0 и эту переменную в перечень переменных условия не включаем).
От у=1 до ку: если МПУ(i, 1) = СПУ (у), то МПУ(i, 3) =у; иначе ку=ку+1; СПУ(ку)= МПУ( i, 1); МПУ(у, 3)=ку.
Теперь формируем ТПУ (таблица переменных условия) и ТПВ (таблица переменных вывода). Структура таблиц приведена в таблицах 2.3, 2.4.
Для i=1,ку
ТПУ.условие (i)=СПУ(i), j=1
для кк=1, n*3
если МПУ(1,3)=i, то ТПУ.значение (i, j )=МПУ(кк,2); j= j +1.
Для определения ТПУ.вопрос формируем форму и в ней запрашиваем у эксперта о том, какой вопрос следует задавать пользователю для выяснения переменной условия ТПУ.условие(i).
Таблица 2.3 – Структура таблицы переменных условия
ТПУ.условие | ТПУ.значение | ТПУ.вопрос |
Ф11 | ЗФ11 | *********** |
ЗФ33 | ||
Ф12 | ЗФ12 | *********** |
Ф13 | ЗФ13 | *********** |
ЗФ21 | ||
Ф32 | ЗФ32 | *********** |
…………….. | *********** | |
Фn1 | ЗФn1 | *********** |
Фn2 | ЗФn2 | *********** |
Фn3 | ЗФn3 | *********** |
Аналогично формируем ТПВ. В поле ТПВ рекомендация помещаем для каждого значения вывода соответствующую текстовую интерпретацию, для чего запрашиваем ее у эксперта. В качестве значений вывода можно использовать ссылки на любые объекты, поясняющие текущий вывод.
Последним действием формирования БЗ будет процедура сохранения МПУ, МПВ, СПУ, СПВ, ТПУ и ТПВ в виде файла. В данном проекте база знаний сохраняется в один файл с расширением *.bzn.
Таблица 2.4 – Структура таблицы переменных вывода
ТПВ.вывод | ТПВ.значение | ТПВ.рекомендация |
В1 | ЗВ 1 | *********** |
ЗВ 3 | *********** | |
В2 | ЗВ 2 | *********** |
3.2.2 Алгоритм вывода
Работа процедуры вывода начинается с загрузки содержимого файлов МПУ, МПВ, СПУ, СПВ, ТПУ и ТПВ в переменные соответствующего типа. Для СПВ и СПУ добавляем второй столбец, куда будет запоминаться получаемые в процессе вывода переменные вывода и условия. Для СПВ добавляем еще один, третий столбец, куда будет записываться номер по порядку полученных выводов. Кроме этого вводим следующие дополнительные переменные:
нап – номер анализируемого правила;
нпу – номер переменной условия в СПУ
ну – номер рассматриваемого условия в анализируемом правиле;
пу – индекс первого условия текущего правила;
кпу – число условий в анализируемом правиле;
кпв - число полученных выводов;
ЗУ(м) – массив значений условий из правила ;
ЗУТ – значение проверки текущего условия в правиле;
ЗУП(м) – массив значений условий введенных пользователем;
ОПВ() – очередь переменных вывода, где будут запоминаться переменные вывода «сработанных» правил для организации цепочки рассуждения. Вывод заключается в поиске в базе знаний правил, которые зависят от текущей «рабочей» переменной вывода. Если находим совпадение «рабочей» переменной и переменной вывода, то активизируется процедура проверки правила. Если правило сработало, т.е. введенные пользователем ответы и хранящиеся в БЗ значения совпали, полученная переменная вывода запоминается в очереди переменных вывода для того, чтобы стать следующей «рабочей» переменной вывода. После того, как поиск правил с текущей «рабочей» переменной вывода завершается, она удаляется из очереди. Вывод завершается после того, как очередь переменных вывода опустеет.
Алгоритм вывода можно представить в следующей последовательности:
1. В ОПВ() помещается начальная переменная вывода и количество переменных вывода в очереди устанавливаем как кпв=1.
2. Пока не пуста ОПВ() выполняем п. 3,4.
3. От п=1 до M*N /организуем просмотр всех правил на совпадение с «рабочей» переменной вывода/
{если МПУ(п,1) = ОПВ(1) то нап=округление до большего целого (п/м); ну=1;пу= (нап-1)*м; /определяем номер правила, в котором присутствует«рабочая» переменная вывода/
кпу=0
от у=1 до м /проверяем текущее правило/
пока МПУ(пу+у,1)<> «»; ЗУ(у)= МПУ(пу+у,2); кпу=кпу+1;
нпу=МПУ(пу+у,3) /считываем номер текущей переменной условия из СПУ /
если СПУ (нпу,2) = «», то вывести пользователю вопрос ТПУ.вопрос (нпу) с вариантами ответов из ТПУ.значение(нпу);
записать в СПУ(нпу,2) выбранный пользователем ответ;
ЗУП(у) = СПУ(нпу,2);
Проверяем правило:
ЗП= Истина; от у=1 до кпу; если ЗУ(у) = ЗУП(у), то ЗУТ=Истина; ЗП=ЗП and ЗУТ;
если ЗП=Истина, то СПВ([МПВ(нап,3),2] = МПВ(нап,2); СПВ([МПВ(нап,3),3] = кпв; кпв=кпв+1; ОПВ(кпв)= МПВ(нап,1);}
Если достигнут конец МПУ, удаляем из ОПВ() ОПВ(1) и устанавливаем ОПВ(1) следующую по порядку в очереди переменную.
Выводим на экран последнюю выведенную СПВ. Если пользователь запрашивает объяснения полученного вывода, выводим все сработанные СПУ в обратном порядке.
3.3 Структура разработанной экспертной системы
3.3.1 Проект «Expert»
Проект «Expert» служит для создания базы знаний и для редактирования уже существующей. Модуль «Unit1» проекта служит показательной формой при загрузке экспертной системы в режиме приобретения знаний. В этом режиме эксперт, используя компонент приобретения знаний, наполняет систему знаниями, которые позволяют ЭС в режиме решения самостоятельно (без эксперта) решать задачи из проблемной области. Эксперт описывает проблемную область в виде совокупности данных и правил. В этом модуле эксперт непосредственно создает саму базу знаний, формирует правила. При этом имеется возможность редактирования правил, удаления правил, сохранения базы знаний, загрузки ранее сохраненной базы знаний. Модуль «Unit1» и модуль «Unit 2» необходимы для введения экспертом вопросов к переменным условия и рекомендаций к переменным вывода соответственно.