Алгоритм формирования базы знаний
Поможем в ✍️ написании учебной работы
Поможем с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой

В данном курсовом проекте для формирования базы был применен алгоритм с прямой цепочкой рассуждений

Пусть iое правило имеет следующую структуру

Если Фi1 = ЗФi1

и Ф i2 = ЗФi2

и Фi3 = ЗФi3

то Вi = ЗВ i.

Здесь i – номер правила, Фi1,2,3 - это факты iго правила, ЗФi1,2,3 – значение факта Фi j,

В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 ***********

 


Алгоритм вывода

Работа процедуры вывода начинается с загрузки содержимого файлов МПУ, МПВ, СПУ, СПВ, ТПУ и ТПВ в переменные соответствующего типа. Для СПВ и СПУ добавляем второй столбец, куда будет запоминаться получаемые в процессе вывода переменные вывода и условия. Для СПВ добавляем еще один, третий столбец, куда будет записываться номер по порядку полученных выводов. Кроме этого вводим следующие дополнительные переменные:

нап – номер анализируемого правила;

нпу – номер переменной условия в СПУ

ну – номер рассматриваемого условия в анализируемом правиле;

пу – индекс первого условия текущего правила;

кпу – число условий в анализируемом правиле;

кпв - число полученных выводов;

ЗУ(м) – массив значений условий из правила ;

ЗУТ – значение проверки текущего условия в правиле;

ЗУП(м) – массив значений условий введенных пользователем;

ОПВ() – очередь переменных вывода, где будут запоминаться переменные вывода «сработанных» правил для организации цепочки рассуждения. Вывод заключается в поиске в базе знаний правил, которые зависят от текущей «рабочей» переменной вывода. Если находим совпадение «рабочей» переменной и переменной вывода, то активизируется процедура проверки правила. Если правило сработало, т.е. введенные пользователем ответы и хранящиеся в БЗ значения совпали, полученная переменная вывода запоминается в очереди переменных вывода для того, чтобы стать следующей «рабочей» переменной вывода. После того, как поиск правил с текущей «рабочей» переменной вывода завершается, она удаляется из очереди. Вывод завершается после того, как очередь переменных вывода опустеет.

Алгоритм вывода можно представить в следующей последовательности:

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) следующую по порядку в очереди переменную.

Выводим на экран последнюю выведенную СПВ. Если пользователь запрашивает объяснения полученного вывода, выводим все сработанные СПУ в обратном порядке.

Дата: 2019-05-29, просмотров: 167.