Этот пример описывает встроенные методы для defuzzifying выходное нечеткое множество типа 1 Mamdani нечеткая система вывода.
Рассмотрите следующее выходное нечеткое множество, которое является агрегацией трех масштабированных трапециевидных функций принадлежности.
x = 0:0.1:20; mf1 = trapmf(x,[0 2 8 12]); mf2 = trapmf(x,[5 7 12 14]); mf3 = trapmf(x,[12 13 18 19]); mf = max(0.5*mf2,max(0.9*mf1,0.1*mf3)); figure('Tag','defuzz') plot(x,mf,'LineWidth',3) h_gca = gca; h_gca.YTick = [0 .5 1] ; ylim([-1 1])
Программное обеспечение Fuzzy Logic Toolbox™ поддерживает пять встроенных методов для вычисления одного четкого выходного значения для такого нечеткого множества.
Центроид
Биссектриса
Середина максимума
Самый маленький из максимума
Самый большой из максимума
Можно также задать собственный метод дефаззификации. Для получения дополнительной информации смотрите Сборку Нечеткие Системы Используя Пользовательские Функции.
Центроидная дефаззификация возвращает центр тяжести нечеткого множества вдоль оси X. Если вы думаете об области как о пластине с универсальной толщиной и плотностью, центроид является точкой вдоль оси X, о которой балансировалось бы нечеткое множество. Центроид вычисляется с помощью следующей формулы, где значение членства для точки во вселенной беседы.
Вычислите центроид нечеткого множества.
xCentroid = defuzz(x,mf,'centroid');
Укажите на центроидный результат дефаззификации на исходном графике.
hCentroid = line([xCentroid xCentroid],[-0.2 1.2],'Color','k'); tCentroid = text(xCentroid,-0.2,' centroid','FontWeight','bold');
Метод биссектрисы находит вертикальную линию, которая делит нечеткое множество на две подобласти равной области. Это иногда, но не всегда, совпадающее с центроидой.
xBisector = defuzz(x,mf,'bisector');
Укажите на результат биссектрисы на исходном графике и отобразите центроидный результат серым.
hBisector = line([xBisector xBisector],[-0.4 1.2],'Color','k'); tBisector = text(xBisector,-0.4,' bisector','FontWeight','bold'); gray = 0.7*[1 1 1]; hCentroid.Color = gray; tCentroid.Color = gray;
MOM, SOM и LOM обозначают средний, самое маленькое, и самый большой из максимума, соответственно. В этом примере, поскольку совокупное нечеткое множество имеет плато в своем максимальном значении, MOM, SOM, и результаты дефаззификации LOM имеют отличные значения. Если совокупное нечеткое множество имеет уникальный максимум, то MOM, SOM и LOM все производят то же значение.
xMOM = defuzz(x,mf,'mom'); xSOM = defuzz(x,mf,'som'); xLOM = defuzz(x,mf,'lom');
Укажите на MOM, SOM и результаты LOM на исходном графике, и отобразите результат биссектрисы серым.
hMOM = line([xMOM xMOM],[-0.7 1.2],'Color','k'); tMOM = text(xMOM,-0.7,' MOM','FontWeight','bold'); hSOM = line([xSOM xSOM],[-0.7 1.2],'Color','k'); tSOM = text(xSOM,-0.7,' SOM','FontWeight','bold'); hLOM = line([xLOM xLOM],[-0.7 1.2],'Color','k'); tLOM = text(xLOM,-0.7,' LOM','FontWeight','bold'); hBisector.Color = gray; tBisector.Color = gray;
В общем случае использование центроидного метода по умолчанию достаточно хорошо для большинства приложений. Если вы создали свою начальную нечеткую систему вывода, можно попробовать другие методы дефаззификации, чтобы видеть, улучшает ли кто-либо результаты вывода.
Подсветите центроидный результат и отобразите серым MOM, SOM и результаты LOM.
hCentroid.Color = 'red'; tCentroid.Color = 'red'; hMOM.Color = gray; tMOM.Color = gray; hSOM.Color = gray; tSOM.Color = gray; hLOM.Color = gray; tLOM.Color = gray;