Связь между входом и выходом запоминается в таблице нечетких правил (рис.2.).
Каждая запись в данной таблице соответствует своему нечеткому правилу, например:
Если ДИСТАНЦИЯ БЛИЗКО и НАПРАВЛЕНИЕ ПРАВОЕ, тогда РУЛЕВОЙ УГОЛ РЕЗКО ВЛЕВО
Рис.2. Таблица нечетких правил.
Большинство нечетких систем используют продукционные правила для описания зависимостей между лингвистическими переменными. Типичное продукционное правило состоит из антецедента (часть ЕСЛИ …) и консеквента (часть ТО …). Антецедент может содержать более одной посылки. В этом случае они объединяются посредством логических связок И или ИЛИ.
Процесс вычисления нечеткого правила называется нечетким логическим выводом и подразделяется на два этапа: обобщение и заключение.
На первом шаге логического вывода необходимо определить степень принадлежности всего антецедента правила. Для этого в нечеткой логике существуют два оператора: MIN(…) и MAX(…). Первый вычисляет минимальное значение степени принадлежности, а второй - максимальное значение. Когда применять тот или иной оператор, зависит от того, какой связкой соединены посылки в правиле. Если использована связка И, применяется оператор MIN(…). Если же посылки объединены связкой ИЛИ, необходимо применить оператор MAX(…). Ну а если в правиле всего одна посылка, операторы вовсе не нужны.
Допустим, терм БЛИЗКО лингвистической переменной ДИСТАНЦИЯ имеет степень принадлежности 0,7, а терм ЛЕВОЕ переменной НАПРАВЛЕНИЕ – 0,4. Т.к. использована связка И, применим оператор MIN():
MIN(0,7;0,4)=0,4
Следовательно, степень принадлежности терма РЕЗКО ВПРАВО лингвистической переменной РУЛЕВОЙ УГОЛ будет равна 0,4.
Оператор MIN()/MAX() применяется для каждого правила.
Если окажется, что сразу несколько нечетких правил дают ненулевой выходной результат, то выбирается максимальное из полученных значений.
Результат нечеткого вывода, конечно же, будет нечетким. Для исполнительного устройства это ровно ничего не значит. Поэтому необходима дефаззификация. Для устранения нечеткости окончательного результата часто используются следующие методы дефаззификации:
1) COG (Center Of Gravity) — "центр тяжести". Физическим аналогом этой формулы является нахождение центра тяжести плоской фигуры, ограниченной осями координат и графиком функции принадлежности нечеткого множества.
2) MOM (Mean Of Maximums) — "центр максимумов". При использовании метода центра максимумов требуется найти среднее арифметическое элементов универсального множества, имеющих максимальные степени принадлежностей.
3) First Maximum — "первый максимум" — максимум функции принадлежности с наименьшей абсциссой.
Пакет Fuzzy Logic Toolbox
Широкому распространению фаззи-систем управления в немалой степени способствует программная система MATLAB, в составе которой имеется пакет программ по фаззи-логике.
Fuzzy Logic Toolbox позволяет создавать и редактировать фаззи-системы управления с нечеткой логикой, называемые в терминах программной системы MATLAB – Fuzzy Inference System или FIS. Эти системы можно создавать, используя как графические инструменты, так и команды рабочего окна MATLAB.
Fuzzy Logic Toolbox также позволяет управлять созданными программами и непосредственно без Simulink. Это осуществляется с помощью автономного Fuzzy Inference Engine, который работает с нечеткими системами, сохранёнными в MATLAB. Можно также настраивать Fuzzy Logic Toolbox, используя его для совместной работы с другими пакетами типа Control System (Системы управления), Neural Network (Нейросети) или Optimization Toolbox (Оптимизация).
Одна из целей пакета Fuzzy Logic Toolbox состоит в облегчении понимания и создания фаззи-систем управления. Фаззи-систему можно создавать, используя командную строку главного окна MATLAB. Однако намного проще сделать это графически с помощью инструментов графического интерфейса пользователя (GUI или ГИП), имеющихся в Fuzzy Logic Toolbox. Имеются пять инструментов GUI для создания, редактирования и наблюдения фаззи-систем в среде Fuzzy Logic Toolbox (рис. 3). Это Fuzzy Inference System Editor или FIS Editor – Редактор фаззи-инференционной системы, Membership Function Editor - Редактор функций принадлежности, Rule Editor - Редактор правил, Rule Viewer - Просмотр правил и Surface Viewer - Просмотр поверхности (пространства управления). Эти инструменты GUI динамически связаны между собой: используя один из них в FIS и производя изменения, можно затем увидеть их действия в других инструментах GUI. В дополнение к этим пяти инструментам Fuzzy Logic Toolbox включает в себя графический редактор GUI ANFIS, который используется для создания и анализа Sugeno-типа адаптивных нейросистем с нечеткой логикой – adaptive neuro-FIS (ANFIS).
FIS редактор решает проблемы верхнего уровня системы: сколько входных и выходных переменных и каковы их имена?
Fuzzy Logic Toolbox не имеет ограничений по числу входов фаззи-системы – все зависит от доступной памяти компьютера.
Рис. 3. Структура фаззи-инференционной системы – FIS
Membership Function Editor используется для того, чтобы определить виды всех функций принадлежности, связанных с каждой переменной.
Rule Editor используется для редактирования списка правил, который определяет функционирование фаззи-системы.
Rule Viewer и Surface Viewer используются только для просмотра результатов, но не редактирования фаззи-системы. Rule Viewer показывает диаграмму функционирования. Используя его в качестве диагностического средства, можно увидеть, например, какие правила активны, или как индивидуальные функции принадлежности влияют на результаты. Surface Viewer используется для показа зависимости выхода от одного или двух из входов системы, то есть показывается диаграмма поверхности пространства управления системы. Все пять инструментов GUI могут взаимодействовать и обмениваться информацией между собой. Любой из них может считывать и сохранять данные в рабочем пространстве MATLAB и на жестком диске компьютера.
Указания по выполнению лабораторной работы в Matlab
Рассмотрим процесс построения нечеткой экспертной системы, которая должна помочь пользователю с ответом на вопрос: сколько дать «на чай» официанту за обслуживание в ресторане?
Качество обслуживания и еды будем оценивать по 11-балльной системе (0 – наихудшая оценка, 10 – наилучшая). Предположим, что средние чаевые составляют 15% от стоимости обеда, малые – 5% и большие – 25%.
Основываясь на каких-то устоявшихся обычаях и интуитивных представлениях, примем, что задача о чаевых может быть описана следующими предложениями:
1. Если обслуживание плохое и еда подгоревшая, то чаевые малые
2. Если обслуживание хорошее и еда подгоревшая, то чаевые малые
3. Если обслуживание плохое и еда вкусная, то чаевые средние
4. Если обслуживание хорошее и еда вкусная, то чаевые средние
5. Если обслуживание превосходное, то чаевые большие
Заметим, что представленной информации, в принципе, достаточно для проектирования нечёткой экспертной системы. Такая система будет иметь 2 входа (которые условно можно назвать «сервис» и «еда»), один выход («чаевые»), три правила типа «если… то» (в соответствии с тремя приведёнными предложениями) и по три значения (соответственно, 0 баллов, 5 баллов, 10 баллов и 5%, 15%, 25%) для центров функций принадлежности входов и выхода. Построим данную систему, используя алгоритм вывода Mamdani.
Запустите Matlab и выберите пакет Fuzzy Logic. Запустите FIS Editor.
На экране появится окно FIS-редактора.
По умолчанию, исходный алгоритм вывода – типа Mamdani (о чём говорит надпись в центральном белом блоке) и здесь никаких изменений не требуется, но в системе должно быть два входа, поэтому через пункт меню Edit/Add Variable…►Input добавляем в систему этот второй вход (в окне редактора появляется второй жёлтый блок с именем input2). Делая далее однократный щелчок левой кнопкой мыши по блоку input1, меняем в поле имени его имя на «service» (обслуживание), завершая ввод нового имени нажатием клавиши Enter. Аналогичным образом устанавливаем имя «food» (еда) блоку input2 и «tips»(чаевые) – выходному блоку (справа вверху) output1. Присвоим сразу же и имя всей системе, например «Tips» (по-английски это и есть чаевые), выполнив это через пункт меню File/Export ► To Workspace… (Сохранить в рабочем пространстве как…).
Зададим теперь функции принадлежности переменных. Программу-редактор функций принадлежности можно открыть тремя способами:
· через пункт меню Edit/Membership Functions…,
· двойным щелчком левой кнопки мыши по иконке, отображающей соответствующую переменную,
· нажатием клавиш Ctrl+2.
Любым из приведённых способов перейдём к данной программе.
Задание и редактирование функций принадлежности начнём с переменной «service».
Сначала в полях Range и Display Range установим диапазон изменения и отображения этой переменной – от 0 до 10 (баллов), подтверждая ввод нажатием клавиши Enter. Затем через пункт меню Edit/Add MFs… перейдём к диалоговому окну и зададим в нём функции принадлежности треугольного типа (trimf) c общим числом 3. Нажмём кнопку ОК и возвратимся в окно редактора функций принадлежности. Не изменяя размах и положение заданных функций, заменим только их имена на «bad» (плохой), «good» (хороший), «excellent» (отличный).
Будем считать плохим обслуживание в диапазоне значений 0 – 5, хорошим в диапазоне 1 – 9, превосходным в диапазоне 5 – 10.
Зададим функцию принадлежности для переменной «еда»:
Зададим функцию принадлежности для переменной «чаевые».
Зададим правила:
Сохраним результаты своей работы:
Теперь можно опробовать построенную систему в работе: