Методы дефаззификации

Этот пример описывает встроенные методы для дефузификации выхода нечеткого набора системы нечеткого вывода 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])

Figure contains an axes. The axes contains an object of type line.

Программное обеспечение Fuzzy Logic Toolbox™ поддерживает пять встроенных методов вычисления единственного четкого выходного значения для такого нечеткого набора.

  • Средняя точка

  • Средняя линия

  • Середина максимума

  • Наименьший из максимальных

  • Наибольшее из максимальных

Можно также задать свой собственный пользовательский метод дефаззификации. Для получения дополнительной информации см. «Создание нечетких систем с использованием пользовательских функций».

Средняя точка

Центробежная дефаззификация возвращает центр тяжести нечеткого множества вдоль оси X. Если вы думаете о площади как о пластине с равномерной толщиной и плотностью, центроид является точкой вдоль оси X, вокруг которой нечеткое множество будет балансировать. Центроид вычисляется по следующей формуле, где μ(xi) - значение принадлежности для точки xi во вселенной дискурса.

xCentroid=iμ(xi)xiiμ(xi)

Вычислите центроид нечеткого набора.

xCentroid = defuzz(x,mf,'centroid');

Укажите результат дефаззификации центроида на исходном графике.

hCentroid = line([xCentroid xCentroid],[-0.2 1.2],'Color','k'); 
tCentroid = text(xCentroid,-0.2,' centroid','FontWeight','bold');

Figure contains an axes. The axes contains 3 objects of type line, text.

Средняя линия

Метод 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;

Figure contains an axes. The axes contains 5 objects of type line, text.

Средний, наименьший и самый большой из максимальных

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;

Figure contains an axes. The axes contains 11 objects of type line, text.

Выбор метода дефаззификации

В целом использование метода 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;

Figure contains an axes. The axes contains 11 objects of type line, text.

Похожие темы