В этом примере показано, как построить систему нечеткого вывода (FIS) для примера опрокидывания, описанного в разделе Основная проблема опрокидывания, с помощью инструментов интерфейса пользователя Fuzzy Logic Toolbox™. Эти инструменты поддерживают только нечеткие системы типа 1.
Для построения, редактирования и просмотра нечетких систем вывода используются следующие инструменты:
Fuzzy Logic Designer для решения проблем высокого уровня в системе - сколько входных и выходных переменных? Как их зовут?
Программное обеспечение нечеткой логики не ограничивает количество входов. Однако количество входов может быть ограничено доступной памятью компьютера. Если количество входов слишком велико, или количество функций членства слишком велико, то также может быть трудно проанализировать FIS с помощью других инструментов.
Редактор функций членства для определения форм всех функций членства, связанных с каждой переменной
Редактор правил для редактирования списка правил, определяющих поведение системы.
Средство просмотра правил для просмотра нечеткой схемы вывода. Используйте это средство просмотра как средство диагностики, например, чтобы увидеть, какие правила активны или как отдельные формы функций членства влияют на результаты
Просмотр поверхности для просмотра зависимости одного из выходов от одного или двух входов; то есть он генерирует и строит карту выходной поверхности для системы.
Эти пользовательские интерфейсы динамически связаны, так как изменения, вносимые в FIS с помощью одного из них, влияют на то, что вы видите на любом из других открытых пользовательских интерфейсов. Например, при изменении имен функций членства в редакторе функций членства изменения отражаются в правилах, показанных в редакторе правил. Пользовательские интерфейсы можно использовать для чтения и записи переменных как в рабочую область MATLAB ®, так и в файл (доступные только для чтения средства просмотра по-прежнему могут обмениваться графиками с рабочей областью и сохранять их в файл). Можно открыть любую или все из них для любой заданной системы или открыть несколько редакторов для любого количества нечетких систем.

На следующем рисунке показано, как основные компоненты FIS и трех редакторов сочетаются друг с другом. Два зрителя изучают поведение всей системы.

В дополнение к этим пяти основным ИП, инструментарий включает графический Neuro-Fuzzy Designer, который используется для построения и анализа адаптивных нейро-нечетких систем вывода Sugeno-типа.
Пользовательские интерфейсы панели инструментов нечеткой логики не поддерживают построение FIS с использованием данных. Если требуется использовать данные для построения FIS, используйте один из следующих методов:
genfis для генерации FIS Sugeno-типа. Затем выберите File > Import in Fuzzy Logic Designer, чтобы импортировать FIS и выполнить нечеткий вывод, как описано в Fuzzy Logic Designer.
Нейро-адаптивные методы обучения для моделирования FIS, как описано в Neuro-Adaptive Learning и ANFIS.
Если требуется использовать переменные рабочего пространства MATLAB, используйте интерфейс командной строки вместо конструктора нечеткой логики. Пример см. в разделе Создание нечетких систем в командной строке.
В этом примере создается система нечеткого вывода Мамдани, использующая проблему опрокидывания с двумя входами и одним выходом на основе практики опрокидывания в США. В то время как в примере создается FIS Мамдани, методы, используемые для создания систем Sugeno, также применяются.
Учитывая число от 0 до 10, которое представляет качество обслуживания в ресторане (где 10 - отлично), и другое число от 0 до 10, которое представляет качество питания в этом ресторане (опять же, 10 - отлично), какой должна быть подсказка?
Отправной точкой является запись трех золотых правил опрокидывания:
Если обслуживание плохое или еда прогорклая, то чаевые дешевые.
Если услуга хорошая, то чаевые средние.
Если обслуживание отличное или еда вкусная, то чаевые щедрые.
Предположим, что средний чаевые составляет 15%, щедрый - 25%, а дешевый - 5%.

Числа и форма кривой подчинены местным традициям, культурному уклону и так далее, но три правила в целом универсальны.
Теперь, когда вы знаете правила и имеете представление о том, как должны выглядеть выходные данные, используйте инструменты пользовательского интерфейса для построения нечеткой системы вывода для этого процесса принятия решения.
В приложении Fuzzy Logic Designer отображается информация о системе нечеткого вывода. Чтобы открыть конструктор нечеткой логики, введите следующую команду в подсказке MATLAB:
fuzzyLogicDesigner
Конструктор нечеткой логики открывает и отображает диаграмму системы нечеткого вывода с именами каждой входной переменной слева и каждой выходной переменной справа, как показано на следующем рисунке. Примеры функций членства, показанные в полях, являются просто значками и не отображают фактические формы функций членства.

Ниже на диаграмме представлено имя системы и тип используемого вывода.

В этом примере используется вывод типа Мамдани по умолчанию. Также доступен другой тип вывода, называемый выводом Sugeno-типа. Дополнительные сведения см. в разделе Системы нечеткого вывода Mamdani и Sugeno.
В конструкторе нечеткой логики:
Раскрывающиеся списки позволяют изменять функции нечеткого вывода.
В области Текущая переменная (Current Variable) отображается имя входной или выходной переменной, ее тип и диапазон по умолчанию.
В строке состояния внизу отображается информация о последней операции.
Чтобы создать систему нечеткого вывода, описанную в разделе Основная проблема опрокидывания с нуля, введите следующую команду в подсказке MATLAB:
fuzzyLogicDesigner
Откроется универсальный конструктор нечеткой логики без названия с одним входом 1 и одним выходом 1.

Совет
Открытие конструктора нечеткой логики с предустановленной системой нечеткого вывода, сохраненной в tipper.fis, введите
fuzzyLogicDesigner('tipper.fis')Однако при загрузке предустановленной системы не будут создаваться правила или функции членства.
В этом примере создается система с двумя входами и одним выходом. Двумя входными элементами являются обслуживание и питание. Один выход - наконечник.
Чтобы добавить вторую входную переменную и изменить имена переменных для отражения следующих обозначений:
Выберите меню «Редактирование» > «Добавить переменную» > «Ввод».
Появится вторая желтая рамка с меткой input2.
Щелкните на желтой рамке input1. Это поле выделяется красным контуром.
Изменить поле «Имя» из input1 кому serviceи нажмите Enter.
Щелкните по желтой рамке input2. Это поле выделяется красным контуром.
Изменить поле «Имя» из input2 кому foodи нажмите Enter.
Щелкните на синем поле output1.
Изменить поле «Имя» из output1 кому tipи нажмите Enter.
Выберите меню «Файл» > «Экспорт» > «В рабочую область».

Введите имя переменной рабочего пространства tipperи нажмите кнопку «ОК».
Диаграмма обновляется для отражения новых имен входных и выходных переменных. В рабочей области появилась новая переменная с именем tipper содержит всю информацию об этой системе. При сохранении в рабочую область с новым именем также переименовывается вся система. Окно выглядит примерно так, как показано на следующей схеме.

Оставьте опции вывода в левом нижнем углу в позициях по умолчанию. Введена вся необходимая информация для данного пользовательского интерфейса. Затем определите функции членства, связанные с каждой из переменных. Для этого откройте редактор функций членства.
Редактор функций членства можно открыть одним из трех способов:
В приложении Fuzzy Logic Designer выберите Изменить > Функции членства.
В приложении Fuzzy Logic Designer дважды щелкните синий значок, называемый подсказкой.
В командной строке введите mfedit.
Редактор функций членства - это инструмент, позволяющий отображать и редактировать все функции членства, связанные со всеми входными и выходными переменными для всей системы нечеткого вывода. Редактор функций членства совместно использует некоторые функции с конструктором нечеткой логики, как показано на следующем рисунке. Фактически, все пять основных инструментов пользовательского интерфейса имеют аналогичные опции меню, строки состояния и кнопки «Справка» и «Закрыть».


При открытии редактора функций членства для работы с нечеткой системой вывода, которая еще не существует в рабочей области, отсутствуют функции членства, связанные с переменными, определенными с помощью конструктора нечеткой логики.
В левой верхней части области графика в редакторе функций членства находится палитра переменных, которая позволяет задать функции членства для данной переменной.
Чтобы настроить функции членства, связанные с входными или выходными переменными для FIS, выберите переменную FIS в этой области, щелкнув ее.
Затем выберите раскрывающееся меню Edit и выберите Add MF.. Появится новое окно, в котором можно выбрать тип функции членства и количество функций членства, связанных с выбранной переменной. В правом нижнем углу окна находятся элементы управления, позволяющие изменить имя, тип и параметры (форму) функции членства после ее выбора.
Функции членства из текущей переменной отображаются на главном графике. Этими функциями членства можно манипулировать двумя способами. Сначала можно с помощью мыши выбрать определенную функцию членства, связанную с заданным качеством переменной (например, плохое, для переменной, службы), а затем перетащить функцию членства из стороны в сторону. Это действие влияет на математическое описание качества, связанного с данной функцией членства для данной переменной. Выбранная функция членства также может быть помечена для расширения или сокращения путем щелчка по небольшим квадратным точкам перетаскивания на функции членства, а затем перетаскивания функции мышью наружу, для расширения или внутрь, для сокращения. Это действие изменяет параметры, связанные с этой функцией членства.
Под палитрой переменных находится некоторая информация о типе и имени текущей переменной. В этой области имеется текстовое поле, которое позволяет изменять пределы диапазона текущей переменной (вселенной дискурса) и другое, которое позволяет устанавливать пределы текущего графика (что не оказывает реального влияния на систему).
Процесс задания функций членства для примера с двумя входами, tipper, является следующим:
Дважды щелкните по входной переменной service , чтобы открыть редактор функций членства.

В редакторе функций членства введите [0 10] в полях Диапазон и Диапазон отображения.
Создание функций членства для входной переменной service.
Выберите меню «Редактирование» > «Удалить все MF», чтобы удалить функции членства по умолчанию для входной переменной service.
Выберите «Редактирование» > «Добавить MF», чтобы открыть диалоговое окно «Функции членства».
В диалоговом окне «Функции членства» выберите gaussmf в качестве типа MF.

Убедитесь, что 3 выбирается в качестве количества MF.
Нажмите кнопку ОК, чтобы добавить три гауссовы кривые во входную переменную service.
Переименование функций членства для входной переменной serviceи укажите их параметры.
Щелкните кривую с именем mf1 чтобы выбрать его и указать следующие поля в области Текущая функция членства (щелкните MF, чтобы выбрать):
В поле Имя введите poor.
В поле Параметры введите [1.5 0].
Два входа Params представляют стандартное отклонение и центр для гауссовой кривой.
Совет
Чтобы настроить форму функции членства, введите требуемые параметры или используйте мышь, как описано выше.
Щелкните кривую с именем mf2 чтобы выбрать его и указать следующие поля в области Текущая функция членства (щелкните MF, чтобы выбрать):
В поле Имя введите good.
В поле Параметры введите [1.5 5].
Щелкните кривую с именем mf3и укажите следующие поля в области Текущая функция членства (щелкните MF для выбора):
В поле Имя введите excellent.
В поле Параметры введите [1.5 10].
Окно Редактор членских функций выглядит аналогично следующему рисунку.

В области FIS Variables щелкните по входной переменной. food чтобы выбрать его.
Войти [0 10] в полях Диапазон и Диапазон отображения.
Создание функций членства для входной переменной food.
Выберите меню «Редактирование» > «Удалить все MF», чтобы удалить функции членства по умолчанию для входной переменной food.
Выберите «Редактирование» > «Добавить MF», чтобы открыть диалоговое окно «Функции членства».
В диалоговом окне «Функции членства» выберите trapmf в качестве типа MF.
Выбрать 2 в выпадающем списке Количество MF.
Нажмите кнопку ОК, чтобы добавить две трапециевидные кривые к входной переменной food.
Переименование функций членства для входной переменной foodи укажите их параметры:
В области FIS Variables щелкните по входной переменной. food чтобы выбрать его.
Щелкните кривую с именем mf1и укажите следующие поля в области Текущая функция членства (щелкните MF для выбора):
В поле Имя введите rancid.
В поле Параметры введите [0 0 1 3].
Щелкните кривую с именем mf2 чтобы выбрать его, и введите delicious в поле Имя.
При необходимости сбросьте соответствующие параметры.
Щелкните по выходной переменной tip чтобы выбрать его.
Войти [0 30] в полях Диапазон и Диапазон отображения, чтобы охватить диапазон вывода.
Входные сигналы находятся в диапазоне от 0 до 10, но выходной сигнал составляет от 5% до 25%.
Переименование треугольных функций членства по умолчанию для выходной переменной tipи укажите их параметры.
Щелкните кривую с именем mf1 чтобы выбрать его и указать следующие поля в области Текущая функция членства (щелкните MF, чтобы выбрать):
В поле Имя введите cheap.
В поле Параметры введите [0 5 10].
Щелкните кривую с именем mf2 чтобы выбрать его и указать следующие поля в области Текущая функция членства (щелкните MF, чтобы выбрать):
В поле Имя введите average.
В поле Параметры введите [10 15 20].
Щелкните кривую с именем mf3 чтобы выбрать его и указать следующее:
В поле Имя введите generous.
В поле Параметры введите [20 25 30].
Редактор членских функций выглядит так же, как на следующем рисунке.

Теперь, когда переменные были названы, а функции членства имеют соответствующие формы и имена, можно ввести правила. Чтобы вызвать редактор правил, перейдите в меню Правка и выберите Правила или введите ruleedit в командной строке.

Построение правил с помощью графического интерфейса Rule Editor совершенно очевидно. На основе описаний входных и выходных переменных, определенных с помощью конструктора нечеткой логики, редактор правил позволяет создавать операторы правил автоматически. Вы можете:
Создайте правила, выбрав элемент в каждом поле переменной ввода и вывода, выбрав один элемент подключения и щелкнув Добавить правило. Вы можете выбрать none как одно из качеств переменной, чтобы исключить эту переменную из данного правила и выбрать not под любым именем переменной, чтобы свести на нет связанное качество.
Удалите правило, выбрав правило и щелкнув Удалить правило.
Измените правило, изменив выбор в поле переменной и щелкнув Изменить правило (Change Rule).
Укажите вес для правила, введя требуемое число между 0 и 1 в весе. Если вес не указан, предполагается, что он равен единице (1).
Аналогично конструктору нечеткой логики и редактору функций членства, редактор правил имеет строку меню и строку состояния. Пункты меню позволяют открывать, закрывать, сохранять и редактировать нечеткую систему с помощью пяти основных инструментов пользовательского интерфейса. В меню можно также:
Задайте формат отображения, выбрав Опции > Формат.
Задайте язык, выбрав Параметры > Язык.
Чтобы получить доступ к информации об редакторе правил, щелкните Справка (Help) и закройте пользовательский интерфейс с помощью команды Закрыть (Close).
Чтобы вставить первое правило в редактор правил, выберите следующее:
poor в переменной службе
rancid под переменной едой
Переключатель или в блоке Соединение
cheap, под выходной переменной, наконечник.
Затем щелкните Добавить правило.
Результирующее правило:
| 1. Если (услуга плохая) или (еда прогорклая) то (чаевые дешевые) (1) |
Числа в скобках представляют веса.
Выполните аналогичную процедуру, чтобы вставить второе и третье правила в редактор правил, чтобы получить
Если (услуга плохая) или (еда прогорклая) то (чаевые дешевые) (1)
Если (услуга хорошая) то (чаевые средние) (1)
Если (обслуживание отличное) или (еда вкусная) то (чаевые щедрые) (1)
Совет
Чтобы изменить правило, сначала щелкните правило, которое требуется изменить. Затем внесите необходимые изменения в это правило и нажмите кнопку Изменить правило. Например, чтобы изменить первое правило на
| 1. Если (обслуживание не бедное) или (питание не прогорклое) то (чаевые недешевые) (1) |
Установите флажок «Не» под каждой переменной и нажмите кнопку Изменить правило.
Всплывающее меню Формат (Format) в меню Опции (Options) показывает, что просматривается подробная форма правил. Попробуйте изменить его на symbolic. Вы увидите
| 1. (сервис = бедный) | (еда = = прогорклый) = > (чаевые = дешевый) (1) |
| 2. (сервис = хороший) = > (совет = средний) (1) |
| 3. (сервис = = отлично) | (еда = = вкусно) = > (чаевые = щедро) (1) |
В дисплее на самом деле нет большой разницы, но он чуть более языковой нейтральен, потому что не зависит от терминов типа если и потом. При изменении формата на индексированный отображается чрезвычайно сжатая версия правил.
| 1 1, 1 (1) : 2 |
| 2 0, 2 (1) : 1 |
| 3 2, 3 (1) : 2 |
Это версия правил, которыми занимается машина.
Первый столбец в этой структуре соответствует входным переменным.
Второй столбец соответствует выходной переменной.
В третьем столбце отображается вес, применяемый к каждому правилу.
Четвертый столбец является кратким и указывает, является ли это правилом ИЛИ (2) или правилом И (1).
Числа в первых двух столбцах относятся к индексу функции членства.
Буквенная интерпретация правила 1: «Если вход 1 является MF1 (первая функция членства, связанная с входом 1) или если вход 2 является MF1, то выход 1 должен быть MF1 (первая функция членства, связанная с выходом 1) с весом 1».
Символический формат не учитывает термины, если, то, и так далее. Индексированный формат не беспокоит даже имена переменных. Очевидно, что функциональность вашей системы не зависит от того, насколько хорошо вы назвали переменные и функции членства. Весь смысл именования переменных описательно заключается, как всегда, в упрощении интерпретации системы. Таким образом, если у вас нет какой-то особой цели, вам, вероятно, будет проще продолжить работу с подробным форматом.
На этом этапе система нечеткого вывода была полностью определена, так как переменные, функции членства и правила, необходимые для вычисления подсказок, уже установлены. Теперь посмотрите на нечеткую схему вывода, представленную в конце предыдущего раздела, и убедитесь, что все ведет себя так, как вы думаете. Вы можете использовать средство просмотра правил, следующее средство пользовательского интерфейса, которое мы рассмотрим. В меню Вид выберите Правила.

Средство просмотра правил отображает маршрутную карту всего процесса нечеткого вывода. Он основан на нечеткой схеме вывода, описанной в предыдущем разделе. Появится окно с одной фигурой, в которое вложено 10 графиков. Три графика в верхней части фигуры представляют собой предшествующее и последующее первое правило. Каждое правило является строкой графиков, а каждый столбец - переменной. Номера правил отображаются слева от каждой строки. Для просмотра правила в строке состояния можно щелкнуть по номеру правила.
Первые два столбца графиков (шесть желтых графиков) показывают функции членства, на которые ссылается предшествующий элемент, или if-часть каждого правила.
Третий столбец графиков (три синих графика) показывает функции членства, на которые ссылается последующее, или затем часть каждого правила.
Обратите внимание, что под едой имеется пустой график. Это соответствует характеристике none для переменной пищи во втором правиле.
Четвертый график в третьем столбце графиков представляет совокупное взвешенное решение для данной системы вывода.
Это решение будет зависеть от входных значений для системы. Выходные данные по умолчанию отображаются на этом графике полужирным вертикальным шрифтом.
Переменные и их текущие значения отображаются поверх столбцов. В левом нижнем углу находится текстовое поле Ввод, в котором можно ввести определенные значения ввода. Для системы с двумя входами вводится вектор ввода, [9 8]Вы также можете настроить эти входные значения, щелкнув любой из трех графиков для каждого ввода. При этом красная линия индекса будет перемещена горизонтально в точку, в которой был выполнен щелчок. Можно также щелкнуть и перетащить эту строку, чтобы изменить входные значения. При деблокировании строки (или после задания ввода вручную) выполняется новый расчет, и можно увидеть весь процесс нечеткого вывода:
Если строка индекса, представляющая услугу, пересекает строку членской функции «услуга плохая» на верхнем левом графике определяет степень активации правила 1.
Желтый фрагмент цвета под кривой фактической функции членства используется, чтобы сделать нечеткое значение членства визуально очевидным.
Каждая из характеристик каждой из переменных определяется по отношению к строке входного индекса таким образом. Если следовать правилу 1 в верхней части диаграммы, можно увидеть, что последующий «наконечник дешев» был усечен точно в той же степени, что и (композитный) предшествующий процесс - это импликационный процесс в действии. Агрегация происходит вниз по третьему столбцу, и результирующий совокупный график отображается в одном графике, появляющемся в правом нижнем углу поля графика. Дефазифицированное выходное значение отображается толстой линией, проходящей через агрегатный нечеткий набор.
Можно сдвинуть графики влево, вправо, вниз и вверх. Пункты меню позволяют сохранять, открывать или редактировать нечеткую систему с помощью любого из пяти основных инструментов пользовательского интерфейса.
Средство просмотра правил позволяет интерпретировать весь процесс нечеткого вывода одновременно. Средство просмотра правил также показывает, как форма определенных функций членства влияет на общий результат. Поскольку он строит график каждой части каждого правила, он может стать громоздким для особо крупных систем, но для относительно небольшого количества входов и выходов он работает хорошо (в зависимости от того, сколько экранного пространства вы уделяете ему) с 30 правилами и до 6 или 7 переменных.
Средство просмотра правил показывает один расчет за один раз и очень подробно. В этом смысле он представляет некий микро-вид нечеткой системы вывода. Для просмотра всей выходной поверхности системы - всего диапазона выходного набора на основе всего диапазона входного набора - необходимо открыть средство просмотра поверхностей. Это средство просмотра является последним из пяти основных инструментов пользовательского интерфейса нечеткой логики. Чтобы открыть Просмотр поверхностей (Surface Viewer), выберите Поверхность (Surface) в меню Вид (View).

Открыв Просмотр поверхности (Surface Viewer), вы увидите трехмерную кривую, которая представляет отображение от качества продуктов питания и услуг к количеству чаевых. Поскольку эта кривая представляет вариант с двумя входами и одним выходом, можно увидеть все отображение на одном графике. Когда мы выходим за рамки трех измерений в целом, мы начинаем сталкиваться с проблемами отображения результатов.
Соответственно, средство просмотра поверхностей имеет раскрывающиеся меню X (ввод), Y (ввод) и Z (вывод), которые позволяют выбрать любые два входа и один выход для печати. Под этими меню находятся два входных поля сетки X и сетки Y, которые позволяют указать, сколько линий сетки X и Y требуется включить. Эта возможность позволяет поддерживать разумное время расчета для сложных проблем.
По умолчанию график поверхности обновляется автоматически при изменении выбранных входных или выходных переменных или количества точек сетки. Чтобы отключить автоматическое обновление печати, в меню «Параметры» снимите флажок «Всегда вычислять». Если этот параметр отключен, для обновления графика нажмите кнопку «Вычислить».
Если требуется создать более гладкий график, используйте поле Точки графика (Plot points), чтобы указать количество точек, в которых функции членства вычисляются в диапазоне ввода или вывода. В этом поле по умолчанию указывается минимальное количество графиков, 101. При указании меньшего количества точек печати значение поля автоматически сбрасывается в значение 101. При указании количества точек графика график поверхности автоматически обновляется.
Щелчком по осям графика и перетаскиванием мыши можно управлять поверхностью таким образом, чтобы можно было просматривать ее под разными углами.
Поле Ссылочный ввод (Ref. Input) используется в ситуациях, когда для системы требуется больше входных данных, чем для отображения поверхности. Это поле можно изменить, чтобы явно задать входные данные, не указанные на графике поверхности.
Предположим, что имеется система с четырьмя входами и одним выходом, и требуется просмотреть поверхность вывода. Средство просмотра поверхностей может создавать трехмерную выходную поверхность, где любые два входа изменяются, но два входа должны поддерживаться постоянными, поскольку компьютерные мониторы не могут отображать пятимерную форму. В таком случае вход представляет собой четырёхмерный вектор с NaNs удерживает место изменяющихся входов, в то время как числовые значения указывают те значения, которые остаются фиксированными.
Пункты меню позволяют открывать, закрывать, сохранять и редактировать нечеткую систему с помощью пяти основных инструментов пользовательского интерфейса. Чтобы получить доступ к информации о средстве просмотра поверхностей, щелкните Справка (Help) и закройте пользовательский интерфейс с помощью команды Закрыть (Close).
При сохранении нечеткой системы в файл сохраняется текстовое представление этой системы в формате ASCII с суффиксом файла. .fis. Не изменять вручную содержимое .fis файл. Это может привести к неожиданным результатам при загрузке файла. При сохранении нечеткой системы в рабочей области MATLAB создается переменная, которая действует как объект MATLAB для нечеткой системы.
Примечание
Если FIS не сохраняется в файле, а сохраняется только в рабочей области MATLAB, его нельзя восстановить для использования в новой сессии MATLAB.