Редактор правил
Редактор базы знаний (Rule Editor) предназначен для формирования и модификации нечетких правил.
Общий вид редактора правил базы знаний приведен на рис.
В нижней части графического окна расположены кнопки Help и Close, которые позволяют вызвать окно справки и закрыть редактор, соответственно.
Редактор правил содержит четыре системных меню File, Edit, View, Options, меню выбора термов входных и выходных переменных, поля установки логических операций И, ИЛИ, НЕ и весов правил, а также кнопки редактирования и просмотра правил.
Для ввода нового правила в базу знаний необходимо с помощью мыши выбрать соответствующую комбинацию термов входных и выходных переменных, установить тип логической связки (И или ИЛИ) между переменными внутри правила, установить наличие или отсутствие логической операции НЕ для каждой переменной, ввести значение весового коэффициента правила и нажать кнопку Add Rule. По умолчанию установлены следующие параметры:
логическая связка переменных внутри правила – И;
логическая операция НЕ – отсутствует;
значение весового коэффициента правила – 1.
Возможны случаи, когда истинность правила не изменяется при произвольном значении некоторой входной переменной, то есть эта переменная не влияет на результат нечеткого логического вывода в данной области факторного пространства. Тогда в качестве значения этой переменной необходимо установить none.
Для удаления правила из базы знаний необходимо сделать однократный щелчок левой кнопкой мыши по этому правилу и нажать кнопку Delete Rule.
Для модификации правила необходимо сделать однократный щелчок левой кнопкой мыши по этому правилу, затем установить необходимые параметры правила и нажать кнопку Edit Rule.
Пример разработки системы нечеткого вывода
В качестве примера разработки системы нечеткого вывода в интерактивном режиме с помощью графических средств пакета Fuzzy Logic Toolbox рассмотрим следующую нечеткую модель.
"Чаевые в ресторане". Рассмотрим ситуацию в ресторане, при которой после окончания обслуживания посетителя принято оставлять официанту чаевые. Основываясь на устоявшихся обычаях и интуитивных представлениях посетителей ресторанов, величина суммы чаевых не является постоянной и зависит, например, от качества обслуживания и качества приготовления заказанных блюд.
Задача состоит в том, чтобы разработать некоторую экспертную систему, которая была бы реализована в виде системы нечеткого вывода и позволяла бы определять величину чаевых на основе субъективных оценок посетителей качества обслуживания и качества приготовления заказанных блюд.
Эмпирические знания о рассматриваемой проблемной области могут быть представлены в форме следующих эвристических правил продукций:
Если обслуживание плохое или ужин подгоревший, то чаевые — малые.
Если обслуживание хорошее, то чаевые — средние.
Если обслуживание отличное или ужин превосходный, то чаевые — щедрые.
В качестве входных параметров системы нечеткого вывода будем рассматривать 2 нечеткие переменные: "качество обслуживания" и "качество приготовления заказанных блюд" (или сокращенно — "качество ужина"), а в качестве выходного параметра — нечеткую переменную "величина чаевых".
В качестве множества первой переменной "качество обслуживания" будем использовать множество Т1={"плохое", "хорошее", "оппичиое"}, а в качестве множества второй переменной "качество ужина" будем использовать множество Т2={"подгоревший"', "превосходный"}. В качестве множества выходной переменной "величина чаевых" будем использовать множество Т3={"малые", "средние", "щедрые"}. При этом каждый из темов первой и второй входной переменной будем оценивать по 10-балльной порядковой шкале, при которой цифре 0 соответствует наихудшая оценка, а цифре 10 — наилучшая оценка. Что касается термов выходной переменной, то будем предполагать, что малые чаевые составляют около 5% от стоимости заказанных блюд, средние чаевые — около 15%, а щедрые чаевые — около 25%.
С учетом сделанных уточнений, рассмотренная субъективная информация о величине чаевых может быть представлена в форме 3-х правил нечетких продукций следующего вида (система нечеткого вывода типа Мамдани):
ПРАВИЛО_1: ЕСЛИ "качество обслуживания плохое" ИЛИ "ужин подгоревший" ТО "величина чаевых малая"
ПРАВИЛО_2: ЕСЛИ "качество обслуживания хорошее" ТО "величина чаевых средняя"
ПРАВИЛО_3: ЕСЛИ "качество обслуживания отличное" ИЛИ "ужин превосходный" ТО "величина чаевых щедрая"
Процесс разработки системы нечеткого вывода в интерактивном режиме для рассмотренного выше примера "Чаевые в ресторане" состоит в выполнении следующей последовательности действий:
Вызвать редактор систем нечеткого вывода FIS, для чего в окне команд набрать имя соответствующей функции fuzzy. После выполнения этой команды на экране появится графический интерфейс редактора FIS с именем системы нечеткого вывода Untitled и типом системы нечеткого вывода (Мамдани), предложенными по умолчанию
Поскольку в примере рассматривается система нечеткого вывода с двумя входами, необходимо добавить в разрабатываемую систему FIS еще одну входную переменную. Для этого следует выполнить команду меню Edit>Add Variable... >Input. В результате выполнения этой команды на диаграмме системы нечеткого вывода появится новый желтый прямоугольник с именем второй входной переменной: input2
3. Изменим имена входных и выходных переменных, предложенных системой MATLAB по умолчанию. Для этого необходимо выделить прямоугольник с именем соответствующей переменной, выполнив щелчок на его изображении на диаграмме (стороны выделенного прямоугольника имеют красный цвет). После этого следует набрать новое имя переменной в поле ввода Name в правой части редактора FIS. Результат изменения имен переменных системы нечеткого вывода изображен на рис.
4. Изменим имя системы нечеткого вывода (Untitled), предложенное по умолчанию. Для этого сохраним создаваемую структуру FIS во внешнем файле с именем qualnew.fis, выполнив команду меню File>Export>To Disk....
При этом будет вызвано стандартное диалоговое окно сохранения файла, в котором пользователю предлагается ввести имя соответствующего файла (расширение файла приписывается автоматически). Оставим без изменения предложенные системой MATLAB по умолчанию, метод нечеткого логического И (And method)— значение "min", метод нечеткого логического ИЛИ (Or method) — значение "max", метод импликации (Implication)— значение "min", метод агрегирования (Aggregation) — значение "max" ' и метод дефаззификации (Defuzzification)— значение "centroid". Очевидно, эти значения могут быть изменены пользователем.
5. Теперь необходимо определить термы и их функции принадлежности для входных и выходных переменных нашей системы нечеткого вывода. Для этой цели следует воспользоваться редактором функций принадлежности.
После вызова редактора функций принадлежности каждой из переменных по умолчанию предлагается 3 терма с треугольными функциями принадлежности
Вначале изменим диапазон определения значений входных переменных, для чего в полях ввода Range и Display Range изменим верхнее значение с 1 на 10 (баллов). Аналогично выполняются изменения соответствующих диапазонов для выходной переменной "tip", при этом верхнее значение 1 следует заменить на 30 (%). Изменения подтверждаются нажатием на клавишу <Enter> на клавиатуре.
Далее изменим названия термов первой входной переменной "обслуживание", предложенные системой MATLAB по умолчанию (mf1, mf2, mf3) на "bad", "good", "very" соответственно. Оставим без изменения тип функций принадлежности переменных (треугольный trimf). Параметры функций принадлежности зададим в виде троек a b c, где a – нижняя граница интервала, b – середина интервала, с – верхняя граница интервала. Вид редактора функций принадлежности после внесенных изменений для первой из входных переменных изображен на рис.
Аналогичным образом изменим названия термов второй входной переменной "dinner" и удалим один из термов с соответствующей функцией принадлежности. Переход к редактированию переменной осуществляется щелчком на изображении прямоугольника с именем необходимой переменной. Функции принадлежности ее термов и параметры зададим аналогично первой переменной.
Вид редактора функций принадлежности после внесенных изменений для второй входной переменной изображен на рис.
Наконец, изменим названия термов и параметры функций принадлежности для выходной переменной tip", оставив без изменения треугольный тип функций принадлежности, предложенный системой MATLAB. Для терма "little" зададим параметры [0 5 10], для терма "small"— [10 15 20], для терма " ched" — [20 25 30]. Вид редактора функций принадлежности после сделанных изменений для выходной переменной "tip" изображен на рис.
6. Теперь настала очередь определить правила нечеткого вывода для разрабатываемой экспертной системы. Для этой цели следует воспользоваться редактором правил.
Поскольку первоначально база правил нечеткого вывода пуста, то после вызова редактора правил центральное многострочное поле ввода не содержит никаких правил. Для их определения следует использовать поля меню и переключатели в нижней части графического интерфейса редактора правил. Для задания первого правила следует оставить выделенное по умолчанию поле с именем терма "bad" для первой входной переменной, поле с именем терма "gor" - для второй входной переменной и поле с именем терма "little" - для выходной переменной. Далее следует переключатель Connection поставить в положение or (логическое ИЛИ) и нажать на кнопку Add rule. После этого первое правило отобразится в верхнем окне.
Аналогичным образом задается второе правило, для которого следует выделить имена термов "good", "none" и "small", и третье правило с именами термов "very ", "velik" и "ched" для соответствующих переменных. Вид редактора правил после их определения для разрабатываемой экспертной системы изображен на рис.
7. После сохранения системы нечеткого вывода на диске, создадим графическое приложение, в котором предусмотрим ввод входных переменных в символьном виде, преобразование их в числовые значения (для каждого символьного значения берем среднее значение соответствующего интервала), выполнение системы нечеткого вывода для этих значений и получение числового значения выходной переменной. Затем значение выходной переменной анализируется и переводится в один из осмысленных термов, который выводится на экран. Так проводится экспертная консультация
Разместим на форме 4 поля StaticText (две подсказки для двух вводимых величин, одну подсказку для результата и одно поле для выводимого результата консультации), 3 поля RadioButton (для выбора значения первой входной величины ), 2 поля RadioButton (для выбора значения второй входной величины ) и кнопку Push Button, по нажатии которой происходит обращение к функции отклика (Callback).
Окно примет вид:
При нажатии правой кнопкой мыши по любому элементу на форме или по самой форме появляется контекстное меню
Для нашего примера функция CallBack кнопки имеет вид:
%Прием выбранных значений входных параметров
r11=get(handles.radiobutton1,'Value');
r12=get(handles.radiobutton2,'Value');
r13=get(handles.radiobutton3,'Value');
r21=get(handles.radiobutton4,'Value');
r22=get(handles.radiobutton5,'Value');
%Фаззификация
if (r11==1)
r1=1
end
if (r12==1)
r1=5.5
end
if (r13==1)
r1=8.5
end
if (r21==1)
r2=1.5
end
if (r22==1)
r2=6.5
end
%загрузка системы нечеткого вывода из файла
fis=readfis('qualnew');
%выполнение нечеткого вывода для заданных значений входных переменных
y=evalfis([r1 r2],fis)
%Дефаззификация
if (y<=10)
ys='малые';
elseif (y<=20)
ys='средние';
else
ys='щедрые';
end
%Запись значения на экран
set(handles.text3,'String',ys);
Выполнение
диалоговой программы начинается при
нажатии кнопки
на форме
Пример диалога:
До нажатия кнопки
После нажатия кнопки:
