exponenta event banner

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

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

Похожие темы