Этот пример показывает, как создать систему нечеткого вывода (FIS) для примера чаевых, описанного в Базовая задача расчета чаевых, с помощью инструментов Fuzzy Logic Toolbox™ UI. Эти инструменты поддерживают только нечеткие системы типа 1.
Для создания, редактирования и просмотра систем нечеткого вывода используются следующие инструменты:
Fuzzy Logic Designer для решения проблем высокого уровня для системы - Сколько входных и выходных переменных? Как их зовут?
Программное обеспечение Fuzzy Logic Toolbox не ограничивает количество входов. Однако количество входов может быть ограничено доступной памятью вашей машины. Если количество входов слишком велико, или количество функций членства слишком велико, тогда также может быть трудно проанализировать FIS с помощью других инструментов.
Membership Function Editor для определения форм всех функций членства, связанных с каждой переменной
Rule Editor для редактирования списка правил, определяющих поведение системы.
Rule Viewer для просмотра схемы нечеткого вывода. Используйте это средство просмотра в качестве диагностики, чтобы увидеть, например, какие правила активны или как формы отдельных функций членства влияют на результаты
Surface Viewer для просмотра зависимости одного из выходов от любого одного или двух входов; то есть он генерирует и строит график карты выхода поверхности для системы.
Эти пользовательские интерфейсы динамически связаны, поскольку изменения, которые вы вносите в FIS с помощью одного из них, влияют на то, что вы видите в любом из других открытых пользовательских интерфейсов. Для примера, если вы изменяете имена функций принадлежности в редакторе функций принадлежности, изменения отражаются в правилах, показанных в редакторе правил. Можно использовать пользовательские интерфейсы для чтения и записи переменных в MATLAB® рабочая область и в файл (средства просмотра только для чтения могут по-прежнему обмениваться графиками с рабочей областью и сохранять их в файл). Вы можете открыть любую или все из них для любой данной системы или иметь несколько редакторов, открытых для любого количества нечетких систем.
Следующий рисунок показывает, как объединяются основные компоненты FIS и трех редакторов. Два средств просмотра исследуют поведение всей системы.
В дополнение к этим пяти первичным пользовательским интерфейсам, тулбокс включает графические Neuro-Fuzzy Designer, которые вы используете для создания и анализа адаптивных нейро-нечетких систем вывода типа Sugeno.
Пользовательские интерфейсы Fuzzy Logic Toolbox не поддерживают создание FIS с использованием данных. Если необходимо использовать данные для создания FIS, используйте один из следующих методов:
genfis
для генерации FIS типа Sugeno. Затем выберите File > Import в Fuzzy Logic Designer, чтобы импортировать FIS и выполнить нечеткий вывод, как описано в Fuzzy Logic Designer.
Нейроадаптивные методы обучения для моделирования FIS, как описано в Neuro-Adaptive Learning и ANFIS.
Если вы хотите использовать переменные рабочего пространства MATLAB, используйте интерфейс командной строки вместо Fuzzy Logic Designer. Для получения примера смотрите Сборка нечетких систем в командной строке.
Этот пример создает систему нечеткого вывода Mamdani, использующую на задачу расчета чаевых с двумя входами и одним выходом, основанную на методах чаевых в США. В то время как пример создает FIS Mamdani, используемые методы применяются и к созданию систем Sugeno.
Учитывая значение от 0 до 10, которое представляет качество сервиса в ресторане (где 10 превосходно) и другое число от 0 до 10, которое представляет качество еды в этом ресторане (снова 10 превосходно), каковы должны быть советы?
Начальная точка состоит в том, чтобы записать три золотых правила чаевых:
Если сервис плохой, или еда - тухлая, то чаевые будут маленькими.
Если сервис хороший, то чаевые средние.
Если сервис превосходен, или еда восхитительна, тогда чаевые будут большими
Предположим, что средний чаевые 15%, щедрые советы 25%, и дешевые советы 5%.
Цифры и форма кривой подчинены местным традициям, культурной предвзятости и так далее, но три правила в целом универсальны.
Теперь, когда вы знаете правила и имеете представление о том, как должен выглядеть выход, используйте инструменты UI, чтобы создать систему нечеткого вывода для этого процесса принятия решения.
Приложение Fuzzy Logic Designer отображает информацию о системе нечеткого вывода. Чтобы открыть Fuzzy Logic Designer, введите следующую команду в подсказке MATLAB:
fuzzyLogicDesigner
Fuzzy Logic Designer открывает и отображает схему системы нечеткого вывода с именами каждой входной переменной слева и каждой выходной переменной справа, как показано на следующем рисунке. Примеры функций членства, показанные в полях, являются просто значками и не отображают фактические формы функций членства.
Ниже приведено имя системы и тип используемого вывода.
В этом примере вы используете вывод типа Мамдани по умолчанию. Также доступен другой тип вывода, называемый выводом типа Sugeno. Для получения дополнительной информации см. Mamdani и Sugeno Fuzzy Inference Systems.
В Fuzzy Logic Designer:
Раскрывающиеся списки позволяют изменять функции нечеткого вывода.
В области Current Variable отображается имя входа или выходной переменной, ее тип и область значений по умолчанию.
В линии состояния внизу отображается информация о последней операции.
Чтобы создать систему нечеткого вывода, описанную в Базовой задаче расчета чаевых с нуля, введите следующую команду в подсказке MATLAB:
fuzzyLogicDesigner
Откроется типовой Fuzzy Logic Designer без названия с одним входным входом 1 и одним выходным выходом 1.
Совет
Чтобы открыть Fuzzy Logic Designer с предварительно созданной системой нечеткого вывода, сохраненной в tipper.fis
, введите
fuzzyLogicDesigner('tipper.fis')
Однако, если вы загружаете предварительно созданную систему, вы не будете создавать правила или создавать функции принадлежности.
В этом примере вы создаете систему с двумя входами и одним выходом. Два входа являются service и food. Выход один tip.
Чтобы добавить вторую входную переменную и изменить имена переменных, чтобы отразить эти обозначения:
Выберите Edit > Add variable > Input.
Появляется второй желтый прямоугольник с меткой input2.
Щелкните желтый прямоугольник input1. Этот флажок выделен красным контуром.
Отредактируйте поле Name из input1
на service
, и нажмите Enter.
Щелкните желтый прямоугольник input2. Этот флажок выделен красным контуром.
Отредактируйте поле Name из input2
на food
, и нажмите Enter.
Щелкните на синем поле output1.
Отредактируйте поле Name из output1
на tip
, и нажмите Enter.
Выберите File > Export > To Workspace.
Введите имя Workspace variable tipper
, и нажмите OK.
Схема обновляется, чтобы отразить новые имена входных и выходных переменных. Теперь в рабочей области есть новая переменная tipper
которая содержит всю информацию об этой системе. Сохраняя в рабочую область с новым именем, вы также переименовываете всю систему. Ваше окно выглядит примерно как следующая схема.
Пока оставьте опции вывода в нижнем левом углу в их положениях по умолчанию. Вы ввели всю информацию, необходимую для этого конкретного пользовательского интерфейса. Затем определите функции принадлежности, связанные с каждой из переменных. Для этого откройте Редактор функций членства.
Редактор функций членства можно открыть одним из трех способов:
В приложении Fuzzy Logic Designer выберите Edit > Membership Functions.
В приложении Fuzzy Logic Designer дважды кликните синий значок под названием советы.
В командной строке введите mfedit
.
Редактор функций принадлежности - это инструмент, который позволяет отображать и редактировать все функции принадлежности, связанные со всеми входными и выходными переменными для всей системы нечеткого вывода. Редактор функций принадлежности разделяет некоторые функции с Fuzzy Logic Designer, как показано на следующем рисунке. Фактически, все пять основных инструментов пользовательского интерфейса имеют одинаковые опции меню, линий состояния и Help и Close кнопки.
Когда вы открываете Редактор функций принадлежности для работы с системой нечеткого вывода, которая еще не существует в рабочей области, нет функций принадлежности, связанных с переменными, которые вы определили с Fuzzy Logic Designer.
В верхней левой части области графика в редакторе функций членства находится «Переменная Палитра», которая позволяет вам задать функции членства для заданной переменной.
Чтобы настроить функции принадлежности, связанные с входом или выходной переменной для FIS, выберите переменную FIS в этой области, щелкнув ее.
Затем выберите Edit раскрывающееся меню и выберите Add MFs .. Появится новое окно, в котором можно выбрать как тип функции членства, так и количество функций членства, сопоставленных с выбранной переменной. В правом нижнем углу окна находятся элементы управления, которые позволяют изменять имя, тип и параметры (фигура) функции принадлежности после ее выбора.
Функции принадлежности от текущей переменной отображаются на главном графике. Этими функциями членства можно манипулировать двумя способами. Можно сначала использовать мышь, чтобы выбрать конкретную функцию принадлежности, связанную с заданным качеством переменной (например, плохим, для переменной, службы), а затем перетащить функцию принадлежности из стороны в сторону. Это действие влияет на математическое описание качества, связанного с этой функцией принадлежности для заданной переменной. Выбранная функция принадлежности также может быть помечена расширением или сужением, нажав на маленькие квадратные точки перетаскивания на функции принадлежности, а затем перетаскивая функцию мышью наружу, для расширения или внутрь для сужения. Это действие изменяет параметры, связанные с этой функцией членства.
Под палитрой переменных находится некоторая информация о типе и имени текущей переменной. В этой области существует текстовое поле, которое позволяет вам изменить пределы области значений текущей переменной (вселенная дискурса) и другое, которое позволяет вам задать пределы текущего графика (что не оказывает реального эффекта на систему).
Процесс определения функций принадлежности для примера чаевых с двумя входами, tipper
, является следующим:
Дважды кликните переменный вход service
чтобы открыть Редактор функций членства.
В редакторе функций членства введите [0 10]
в полях Области значений и Display Области значений.
Создайте функции принадлежности для переменного входа service
.
Выберите Edit > Remove All MFs, чтобы удалить функции членства по умолчанию для переменного входа service
.
Выберите Edit > Add MFs, чтобы открыть диалоговое окно Функции принадлежности.
В диалоговом окне Membership Functions выберите gaussmf
как MF Type.
Проверьте, что 3
выбран в качестве Number of MFs.
Щелкните OK, чтобы добавить три Гауссовы кривые к переменному входу service
.
Переименуйте функции членства для переменного входа service
, и задайте их параметры.
Щелкните на кривой с именем mf1
чтобы выбрать его и задать следующие поля в области Current Membership Function (click on MF to select):
В Name поле введите poor
.
В Params поле введите [1.5 0]
.
Два входов Params представляют стандартное отклонение и центр для Гауссовой кривой.
Совет
Чтобы настроить форму функции принадлежности, введите требуемые параметры или используйте мышь, как описано ранее.
Щелкните на кривой с именем mf2
чтобы выбрать его и задать следующие поля в области Current Membership Function (click on MF to select):
В Name поле введите good
.
В Params поле введите [1.5 5]
.
Щелкните на кривой с именем mf3
, и укажите следующие поля в области Current Membership Function (click on MF to select):
В Name поле введите excellent
.
В Params поле введите [1.5 10]
.
Окно Membership Function Editor выглядит аналогично следующему рисунку.
В области FIS Variables щелкните переменный вход food
чтобы выбрать его.
Введите [0 10]
в полях Области значений и Display Области значений.
Создайте функции принадлежности для переменного входа food
.
Выберите Edit > Remove All MFs, чтобы удалить функции членства по умолчанию для переменного входа food
.
Выберите Edit > Add MFs, чтобы открыть диалоговое окно Функции принадлежности.
В диалоговом окне Membership Functions выберите trapmf
как MF Type.
Выберите 2
в раскрывающемся списке Number of MFs.
Щелкните OK, чтобы добавить две трапециевидные кривые к переменному входу food
.
Переименуйте функции членства для переменного входа food
, и определить их параметры:
В области FIS Variables щелкните переменный вход food
чтобы выбрать его.
Щелкните на кривой с именем mf1
, и укажите следующие поля в области Current Membership Function (click on MF to select):
В Name поле введите rancid
.
В Params поле введите [0 0 1 3]
.
Щелкните на кривой с именем mf2
чтобы выбрать его и ввести delicious
в поле Name.
При необходимости сбросьте соответствующие параметры.
Щелкните на переменном выходе tip
чтобы выбрать его.
Введите [0 30]
в полях Области значений и Display Области значений для покрытия выхода области значений.
Входы варьируются от 0 до 10, но выходы являются советами от 5% до 25%.
Переименуйте треугольные функции членства по умолчанию для переменного выхода tip
, и задайте их параметры.
Щелкните кривую с именем mf1
чтобы выбрать его и задать следующие поля в области Current Membership Function (click on MF to select):
В Name поле введите cheap
.
В Params поле введите [0 5 10]
.
Щелкните кривую с именем mf2
чтобы выбрать его и задать следующие поля в области Current Membership Function (click on MF to select):
В Name поле введите average
.
В Params поле введите [10 15 20]
.
Щелкните кривую с именем mf3
чтобы выбрать его и указать следующее:
В Name поле введите generous
.
В Params поле введите [20 25 30]
.
Редактор функций членства выглядит аналогично следующему рисунку.
Теперь, когда переменные были названы, а функции принадлежности имеют соответствующие формы и имена, можно ввести правила. Чтобы вызвать Редактор правил, перейдите в меню Edit и выберите Rules, или введите ruleedit
в командной строке.
Построение правил с помощью графического интерфейса Редактор довольно самоочевидно. Основываясь на описаниях входных и выходных переменных, определенных с Fuzzy Logic Designer, Редактор правил позволяет автоматически создавать операторы правил. Вы можете:
Создайте правила, выбрав элемент в каждом поле входных и выходных переменных, выбрав один Connection элемент и щелкнув Add Rule. Вы можете выбрать none
как одно из переменных качеств, чтобы исключить эту переменную из заданного правила и выбрать not
под любым именем переменной, чтобы отменить связанное качество.
Удалите правило, выбрав правило и нажав Delete Rule.
Отредактируйте правило, изменив выбор в поле переменной и щелкнув Change Rule.
Укажите вес для правила путем ввода необходимого числа между 0
и 1
в Weight. Если вы не задаете вес, это принято как единица (1)
.
Как и в Fuzzy Logic Designer и редакторе функций принадлежности, редактор правил имеет панель меню и линию состояния. Меню элементов позволить вам открывать, закрывать, сохранять и редактировать нечеткую систему с помощью пяти основных инструментов пользовательского интерфейса. Из меню можно также:
Установите формат отображения путем выбора Options > Format.
Установите язык путем выбора Options > Language.
Вы можете получить доступ к информации о редакторе правил, нажав Help и закрыть пользовательский интерфейс с помощью Close.
Чтобы вставить первое правило в Редактор правил, выберите следующее:
poor
под услугой переменной
rancid
под переменной еды
Переключатель или в блоке Connection
cheap
, под переменным выходом, советом.
Затем нажмите Add rule.
Получившееся правило является
1. Если (сервис плох) или (еда - тухлая) то (советы малы) (1) |
Числа в круглых скобках представляют веса.
Выполните аналогичную процедуру, чтобы вставить второе и третье правила в Редактор правил, чтобы получить
Если (сервис плох) или (еда - тухлая) то (советы малы) (1)
Если (сервис хорош) тогда (советы средние) (1)
Если (сервис превосходен) или (еда восхитительна) тогда (советы щедрые) (1)
Совет
Чтобы изменить правило, сначала щелкните правило, которое будет изменено. Затем внесите необходимые изменения в это правило и нажмите кнопку Изменить правило. Например, чтобы изменить первое правило на
1. Если (сервис не плохой) или (еда не тухлая) тогда (советы не малы) (1) |
Установите флажок not под каждой переменной и щелкните Изменить правило.
Всплывающее меню Формат (Format) из меню Опций (Options) указывает, что вы просматриваете подробную форму правил. Попробуйте изменить его на symbolic
. Вы увидите
1. (сервис = = бедный) | (еда = = прогорклый) = > (советы = дешевые) (1) |
2. (сервис = = хороший) = > (советы = средний) (1) |
3. (сервис = = превосходно) | (еда = = вкусно) = > (советы = щедро) (1) |
Особого различия в отображении действительно нет, но он чуть более языковой нейтральности, потому что не зависит от таких терминов, если и тогда. Если вы измените формат на индексированный, вы увидите чрезвычайно сжатую версию правил.
1 1, 1 (1) : 2 |
2 0, 2 (1) : 1 |
3 2, 3 (1) : 2 |
Это версия правил, которыми занимается машина.
Первый столбец в этой структуре соответствует входным переменным.
Второй столбец соответствует переменному выходу.
В третьем столбце отображается вес, примененный к каждому правилу.
Четвертый столбец является кратким и указывает, является ли это правилом OR (2) или правилом AND (1).
Номера в первых двух столбцах относятся к индексу номеру функции принадлежности.
Буквальная интерпретация правила 1 является «Если вход 1 MF1 (первая функция принадлежности, связанная со входом 1) или если вход 2, MF1, то выход 1 должен быть MF1 (первая функция принадлежности, связанная с выходом 1) с весом 1».
Символический формат не рассматривает термины, если, то, и так далее. Индексированный формат даже не беспокоит имена ваших переменных. Очевидно, что функциональность вашей системы не зависит от того, насколько хорошо вы назвали свои переменные и функции членства. Вся точка именования переменных в описании, как всегда, делает систему легче для вас интерпретировать. Таким образом, если вы не имеете в виду какую-то особую цель, вам, вероятно, будет легче продолжить с подробным форматом.
На данной точке система нечеткого вывода была полностью определена, поскольку существуют переменные, функции принадлежности и правила, необходимые для вычисления советов. Теперь посмотрите на нечеткую схему вывода, представленную в конце предыдущего раздела, и проверьте, что все ведет себя так, как вы думаете. Можно использовать Средство Просмотра, следующий из инструментов пользовательского интерфейса, которые мы рассмотрим. В меню View выберите Rules.
Rule Viewer отображает дорожную карту всего процесса нечеткого вывода. Он основан на схеме нечеткого вывода, описанной в предыдущем разделе. Вы видите одну фигуру окно с 10 вложенными в него графиками. Три графика в верхней части рисунка представляют собой предшествующее и последующее от первого правила. Каждое правило является строкой графиков, и каждый столбец является переменной. Номера правил отображаются слева от каждой строки. Для просмотра правила в линии состояния можно щелкнуть по номеру правила.
Первые два столбца графиков (шесть желтых графиков) показывают функции принадлежности, на которые ссылается предшествующее или if-часть каждого правила.
В третьем столбце графиков (три синих графика) показаны функции принадлежности, на которые ссылается последующее, или тогдашняя часть каждого правила.
Заметьте, что под едой есть график, который пуст. Это соответствует характеристике none
для переменной пищи во втором правиле.
Четвертый график в третьем столбце графиков представляет совокупное взвешенное решение для данной системы вывода.
Это решение будет зависеть от входных значений для системы. Дефузцифицированный выход отображается как полужирная вертикальная линия на этом графике.
Переменные и их текущие значения отображаются поверх столбцов. В нижнем левом углу расположено текстовое поле Input в которое можно ввести конкретные входные значения. Для системы с двумя входами вы вводите входной вектор, [9 8]
, для примера и затем нажмите Enter. Можно также настроить эти входные значения, нажав на любой из трех графиков для каждого входа. Это приведет к перемещению красного индекса линии по горизонтали в точку, в которой вы кликнули. Также можно щелкнуть и перетащить эту линию порядка, чтобы изменить значения входа. Когда вы отпускаете линию (или после ручного определения входа), выполняется новое вычисление, и вы можете увидеть, как происходит весь процесс нечеткого вывода:
Где индексная линия, представляющий услугу, пересекает функцию принадлежности линии «сервис плох» на левом верхнем графике определяет, в какой степени активируется правило.
Желтая закрашенная фигура цвета под фактической кривой функции принадлежности используется, чтобы сделать значение нечеткой принадлежности визуально очевидным.
Каждая из характеристик каждой из переменных задается относительно входной линии индекса таким образом. Если вы следуете правилу 1 в верхней части схемы, можно увидеть, что последующее «советы малы» было обрезано в точности до той же степени, что и (составной) предшествующий процесс - это подразумевающий процесс в действии. Агрегация происходит вниз по третьему столбцу, и результирующий совокупный график показан на одном графике, появляющемся в правом нижнем углу поля графика. Дефузорированное выходное значение показано толстой линией, проходящей через совокупный нечеткий набор.
Сдвигать графики можно с помощью left, right, down и up. Меню элементов позволить вам сохранять, открывать или редактировать нечеткую систему с помощью любого из пяти основных инструментов пользовательского интерфейса.
Rule Viewer позволяет вам интерпретировать весь процесс нечеткого вывода сразу. Rule Viewer также показывает, как форма определенных функций принадлежности влияет на общий результат. Поскольку он строит графики каждой части каждого правила, он может стать громоздким для особенно больших систем, но, для относительно небольшого количества входов и выходов, он работает хорошо (в зависимости от того, сколько экрана вы пространство ему посвятить) с 30 правилами и целых 6 или 7 переменных.
Rule Viewer показывает одно вычисление за раз и очень подробно. В этом смысле он представляет своего рода микровидение системы нечеткого вывода. Если вы хотите увидеть всю выходную поверхность системы - весь диапазон выходного набора на основе всего диапазона входного набора - вам нужно открыть Средство Просмотра. Это средство просмотра является последним из пяти основных инструментов UI Fuzzy Logic Toolbox. Чтобы открыть Просмотр поверхности (Средство Просмотра), выберите в меню Вид (View) команду Поверхность (Surface).
При открытии Средство Просмотра вы видите трехмерную кривую, которая представляет отображение качества еды и обслуживания с количеством чаевых. Поскольку эта кривая представляет случай с двумя входами с одним выходом, вы можете увидеть полное отображение на одном графике. Когда мы выходим за пределы трёх размерностей в целом, мы начинаем сталкиваться с проблемами отображения результатов.
Соответственно, Средство Просмотра оснащено раскрывающимися меню X (input), Y (input) и Z (output), которые позволяют выбрать любые два входа и любой один выход для графического изображения. Ниже этих меню находятся два входных поля и Y grids X grids которые позволяют вам задать, сколько линий сетки осей X и Y необходимо включить. Эта возможность позволяет вам сохранить время вычисления разумным для сложных задач.
По умолчанию объемная поверхностная диаграмма обновляется автоматически при изменении входа или выходных переменных или количества точек сетки. Чтобы отключить автоматическое обновление графика, в меню Options очистите опцию Always evaluate. Когда эта опция отключена, чтобы обновить график, нажмите Evaluate.
Если вы хотите создать более плавный график, используйте поле Plot points, чтобы задать число точек, на которых функции принадлежности оцениваются в диапазоне входных или выходных областей значений. Это поле по умолчанию соответствует минимальному количеству графиков, 101
. Если вы задаете меньше точек графика, значение поля автоматически сбрасывается на 101
. Когда вы задаете количество точек графика, объемная поверхностная диаграмма автоматически обновляется.
Нажимая на оси графика и перетаскивая мышь, можно манипулировать поверхностью, чтобы можно было просмотреть ее с разных углов.
Поле Вход используется в ситуациях, когда в системе требуется больше входов, чем отображает поверхность. Можно редактировать это поле, чтобы явным образом задать входы, не указанные на объемной поверхностной диаграмме.
Предположим, что у вас есть система с четырьмя входами с одним выходом, и вы хотели бы увидеть выходную поверхность. Средство просмотра может сгенерировать трехмерную выходную поверхность, где любые два входов варьируются, но два входов должны оставаться постоянными, потому что компьютерные мониторы не могут отображать пятимерную форму. В таком случае вход является четырехмерным вектором с NaN
s удерживает место меняющихся входов, в то время как числовые значения указывают на те значения, которые остаются фиксированными.
Меню элементов позволить вам открывать, закрывать, сохранять и редактировать нечеткую систему с помощью пяти основных инструментов пользовательского интерфейса. Доступ к информации о Средство Просмотра можно получить нажав Help и закрыв пользовательский интерфейс с помощью Close.
Когда вы сохраняете нечеткую систему в файл, вы сохраняете представление файла FIS текста ASCII этой системы с файловым суффиксом .fis
. Не редактировать содержимое .fis
вручную файл. Это может привести к неожиданным результатам при загрузке файла. Когда вы сохраняете свою нечеткую систему в рабочем пространстве MATLAB, вы создаете переменную, которая действует как объект MATLAB для нечеткой системы.
Примечание
Если вы не сохраняете FIS в файл, а сохраняете его только в рабочем пространстве MATLAB, вы не можете восстановить его для использования в новом сеансе работы с MATLAB.