Этот пример описывает встроенные методы для дефузификации выхода нечеткого набора системы нечеткого вывода Mamdani типа 1.
Рассмотрим следующий выход нечеткий набор, который является агрегацией трех масштабированных функций трапеций.
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');
Метод bisector находит вертикальную линию, которая делит нечеткое множество на две подрайоны равной площади. Она иногда, но не всегда, совпадает с осевой линией.
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;
В целом использование метода centroid по умолчанию достаточно хорошо для большинства приложений. Как только вы создали свою начальную систему нечеткого вывода, можно попробовать другие методы дефаззификации, чтобы увидеть, улучшают ли какие-либо результаты вывода.
Выделите результат центроида и затрите результаты 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;