В модели типа Мамдани взаимосвязь между входами X=(x1,x2,...,xn) и выходом y определяется нечеткой базой знаний следующего формата:
ЕСЛИ | |
ИЛИ | |
... | |
ИЛИ | |
ТО |
где | ai,jp | - | лингвистический терм, которым оценивается переменная xi в строчке с номером jp (); |
kj | - | количество строчек-конъюнкций, в которых выход y оценивается лингвистическим термом dj; | |
- | весовой коэффициент правила с порядковым номером jp число из диапазона [0, 1], задающее относительный вес правила при нечетком логическом выводе; | ||
m | - | количество термов, используемых для лингвистической оценки выходной переменной. |
С помощью операций Y (ИЛИ) и I (И) нечеткую базу знаний перепишем в более компактном виде:
(1) |
Все лингвистические термы в базе знаний (1) представляются как нечеткие множества, заданные соответствующими функциями принадлежности. База знаний (1) может трактоваться как некоторое разбиение пространства влияющих факторов на подобласти с размытыми границами, в каждой из которых функция отклика принимает значение, заданное соответствующим нечетким множеством. Правило в базе знаний представляет собой "информационный сгусток", отражающий одну из особенностей зависимости "входы выход". Такие "сгусти насыщенной информации" или "гранулы знаний" могут рассматриваться как аналог вербального кодирования, которое, как установили психологи, происходит в человеческом мозге при обучении. Видимо поэтому, формирование нечеткой базы знаний в конкретной предметной области, как правило, не составляет трудностей для эксперта.
Введем следующие обозначения, необходимые для дальнейшего изложения материала:
- функция принадлежности входа xi нечеткому терму ai,jp, , т. е. ,
- функция принадлежности выхода нечеткому терму dj, т. е. .
Степень принадлежности входного вектора нечетким термам dj из базы знаний (2) определяется следующей системой нечетких логических уравнений:
, | (2) |
где - операция из s-нормы (t-нормы), т.е. из множества реализаций логической операций ИЛИ (И). Наиболее часто используются следующие реализации: для операции ИЛИ - нахождение максимума и для операции И - нахождение минимума.
Нечеткое множество , соответствующее входному вектору X*, определяется следующим образом:
,
где | imp | - | импликация, обычно реализуемая как операция нахождения минимума; |
agg | - | аггреатирование нечетких множеств, которое наиболее часто реализуется операцией нахождения максимума. |
Четкое значение выхода y, соответствующее входному вектору X* определяется в результате дефаззификации нечеткого множества . Наиболее часто применяется дефаззификация по методу центра тяжести:
,
где - символ интеграла
Будем предполагать, что существует выборка экспериментальные данных, связывающая входы X=(x1,x2,...,xn) с выходом y исследуемой зависимости:
, | (3) |
где | Xr=(xr,1,xr,2,...,xr,n) | - | Вектор входов и yr выход в r-паре; |
M | - | Объем выборки. |
Задача настройки состоит в нахождении нечеткой модели F, обеспечивающей минимальное значение среднеквадратической невязки:
, | (4) |
где F(Xr) - значение выхода нечеткой модели при значении входов, заданных вектором Xr.
Выход нечеткой модели зависит от ее структуры - правил базы знаний и параметров: функций принадлежностей, весовых коэффициентов правил, реализаций логических операций, метода дефаззификации. Нахождение параметров нечеткой модели, обеспечивающих минимальное значение критерия (4) и является задачей настройки. Обозначим через P - вектор параметров функций принадлежностей термов входных и выходной переменных нечеткой модели и через W - вектор весовых коэффициентов правил базы знаний. Тогда настройка нечеткой модели типа Мамдани сводится к следующей задаче математического программирования: найти такой вектор (P,W) чтобы:
.
В приведенной выше задаче оптимизации на управляемые переменные P обычно накладывают ограничения, обеспечивающие линейную упорядоченность элементов терм-множеств. Такие ограничения не позволяют алгоритмам оптимизации сделать, например, терм "Низкий" выше "Высокого". Кроме того, ядра нечетких множеств не должны выходить за пределы диапазонов изменения соответствующих переменных. Что касается вектора W, то его координаты должны находиться в диапазоне [0, 1].
Настройка моделей типа Мамдани в пакете Fuzzy Logic Toolbox не предусмотрена. Мы предлагаем для решения этой задачи использовать функции нелинейной оптимизации из матлабовского пакета Optimization Toolbox. Применение пакетов Fuzzy Logic Toolbox и Optimization Toolbox для настройки нечеткой модели типа Мамдани проиллюстрируем на примере идентификации нелинейной зависимости
(5) |
в диапазоне . Исходными данными для идентификации являются график функции (рис. 1a) и обучающая выборка в форме (3), приведенная в файле tr_set_mamdani.dat.
Входы и выход нечеткой модели будем рассматривать как лингвистические переменные, значения которых определяются из следующих терм-множеств: {"Низкий", "Средний", "Высокий"} для x1 и x2, и {"Низкий", "Ниже Среднего", "Средний", "Выше Среднего", "Высокий"} для y. Формализацию термов осуществим с помощью симметричной гауссовской функции принадлежности (gaussmf):
где | x | - | элемент универсального множества, |
h | - | параметр функции принадлежности координата максимума; | |
c | - | параметр функции принадлежности коэффициент концентрации. |
Выбор такого типа функции принадлежности обусловлен ее достаточной гибкостью и простотой - она задается лишь двумя параметрами. Это позволяет сократить размерность задачи оптимизации, возникающей на этапе настройки.
В результате визуального наблюдения графика идентифицируемой зависимости (рис. 8a) сформулируем семь правил базы знаний (табл. 1). Поверхность "входы-выход" исходной нечеткой модели показана на рис.8b. Как видно из рисунка до настройки нечеткая модель отражает основные особенности идентифицируемой зависимости.
Таблица 1 - Нечеткая база знаний для зависимости (5)
x1 | x2 | y |
Низкий | Низкий | Высокий |
Низкий | Средний | Низкий |
Низкий | Высокий | Высокий |
Средний | - | Средний |
Высокий | Низкий | Выше среднего |
Высокий | Средний | Ниже среднего |
Высокий | Высокий | Выше среднего |
Для настройки нечеткой модели будем использовать программу
global FIS TR_INP TR_OUT VLB VUB
FIS=readfis('mamdani_0.fis'); %загрузка исходной нечеткой модели
data=load('tr_set_mamdani.dat');%загрузка обучающей выборки
TR_INP=data(:, 1:2);%значения входных переменных обучающей выборки
TR_OUT=data(:, 3);%значения выходной переменной обучающей выборки
num_terms=[3 3 5];%количество термов
%=======УПРАВЛЯЕМЫЕ ПЕРЕМЕННЫЕ============================================
%-------Коэффициенты концентраций функций принадлежностей-----------------
%Первая входная переменная x1:
vlb_in1_con(1:num_terms(1))=0.2; %ограничения снизу
vub_in1_con(1:num_terms(1))=4; %ограничения сверху
x0_in1_con(1:num_terms(1))=2; %начальные значения
%Вторая входная переменная x2:
vlb_in2_con(1:num_terms(2))=0.15; %ограничения снизу
vub_in2_con(1:num_terms(2))=2.5; %ограничения сверху
x0_in2_con(1:num_terms(2))=1.35; %начальные значения
%Выходная переменная y:
vlb_out_con(1:num_terms(3))=0.15; %ограничения снизу
vub_out_con(1:num_terms(3))=4.0; %ограничения сверху
x0_out_con(1:num_terms(3))=1.0; %начальные значения
%-------Координаты максимумов функций принадлежностей некрайних термов------
vlb_center=[-6 -4 -4.5 -4.5 -4.5]; %ограничения снизу
vub_center=[2 1.3 4.5 4.5 4.5]; %ограничения сверху
x0_center=[-2 -1.35 -2.5 0 2.5]; %начальные значения
%-------Весовые коэффициенты праивл-----------------------------------------
vlb_w=zeros(1,7); %ограничения снизу
vub_w=ones(1,7); %ограничения сверху
x0_w=rand(1,7); %начальные значения
%Объединение управляемых переменных в один вектор:
VLB=[vlb_in1_con vlb_in2_con vlb_out_con vlb_center vlb_w];%вектор ограничений снизу
VUB=[vub_in1_con vub_in2_con vub_out_con vub_center vub_w];%вектор ограничений сверху
x0=[x0_in1_con x0_in2_con x0_out_con x0_center x0_w]; %начальная точка
%=======ЦЕЛЕВАЯ ФУНКЦИЯ=====================================================
funf='f=ob_fun_mamdani(x);'; %задание файла целевой функции
fung='g=[x(14)-x(15)+.5; x(15)-x(16)+.5];'; %условия линейной упорядоченности термов
fun=[funf fung]; %целевая функция + ограничения
%=======ПАРАМЕТРЫ АЛГОРИТМА ОПТИМИЗАЦИИ======================================
options(1)=1; %вывод промежуточных результатов
options(14)=1000; %максимальное количество итераций
options(16)=0.001; %минимальная длина шага для вычисления градиента
%=======ОПТИМИЗАЦИЯ==========================================================
[xopt options]=constr(fun, x0, options, VLB, VUB);
options(8) %вывод значения невязки на обучающей выборке после настройки
%=======ФОРМИРОВАНИЕ КОНТРОЛЬНОЙ ВЫБОРКИ=====================================
n=32;
check_data=zeros(n*n, 3);
a=-7:10/32:3;
b=-4.4:6.1/32:1.7;
ii=1;
for i=1:n
for j=1:n
y=a(i)^2*sin(b(j)-1);
check_data(ii,:)=[a(i) b(j) y];
ii=ii+1;
end
end
%=======РАСЧЕТ НЕВЯЗКИ НА КОНТРОЛЬНОЙ ВЫБОРКИ================================
test=evalfis(check_data(:, 1:2),FIS);
delta=sum((check_data(:, 3)-test).^2)/(n*n)
%=======ЗАПИС НЕЧЕТКОЙ МОДЕЛИ НА ДИСК========================================
writefis(FIS, 'mamdani_trained')
m-сценарий, вызывающий функцию нелинейной оптимизации constr и m-функцию
function delta=ob_fun_mamdani(x)
global TR_INP TR_OUT FIS
%*** Целевая функция для настройка нечеткой типа Мамдани. ***
num_terms=[3 3 5];
out=length(num_terms); %количество переменных модели
ii=1; %счетчик управляемых переменных
%=======УСТАНОВКА НОВЫХ ЗНАЧЕНИЙ ПАРАМЕТРОВ ФУНКЦИЙ ПРИНАДЛЕЖНОСТИ====
%-------Коэффициенты концентраци--------------------------------------
%Для входных переменных:
for j=1:out-1
for i=1:num_terms(j)
FIS.input(j).mf(i).params(1)=x(ii);
ii=ii+1;
end
end
%Для выходной переменной:
for i=1:num_terms(out)
FIS.output(1).mf(i).params(1)=10*x(ii);
ii=ii+1;
end
%-------Координаты максимумов----------------------------------------
%Для входных переменных:
for j=1:out-1
for i=2:num_terms(j)-1
FIS.input(j).mf(i).params(2)=x(ii);
ii=ii+1;
end
end
%Для выходной переменной:
for i=2:num_terms(out)-1
FIS.output(1).mf(i).params(2)=10*x(ii);
ii=ii+1;
end
%=======УСТАНОВКА НОВЫХ ЗНАЧЕНИЙ ВЕСОВ ПРАВИЛ ========================
for i=1:(length(x)-ii+1)
FIS.rule(i).weight=x(ii+i-1);
end
%=======НЕЧЕТКИЙ ЛОГИЧЕСКИЙ ВЫВОД=====================================
fis_out=evalfis(TR_INP, FIS);
%=======РАСЧЕТ НЕВЯЗКИ================================================
delta=sum((fis_out-TR_OUT).^2)/length(TR_OUT);
вычисляющую невязку на обучающей выборке при заданных значениях управляемых переменных. Количество управляемых переменных равно 23:
- 7 весовых коэффициентов правил базы знаний;
- 11 коэффициентов концентраций функций принадлежностей термов входных и выходной переменных;
- 2 координаты максимумов функций принадлежностей термов "Средний" входных переменных;
- 3 координаты максимумов функций принадлежностей не крайних термов выходной переменной (т.е. термов "Ниже Среднего", "Средний" и "Выше Среднего").
Координаты максимумов функций принадлежностей крайних термов ("Низкий" и "Высокий") не настраиваются, так как нет никаких логических оснований предполагать, что они будут отличаться от границ диапазонов изменения переменных.
В результате настройки получена новая нечеткая модель, записанная в файле tune.fis
[System]Name='mamdani_trained'Type='mamdani'Version=2.0NumInputs=2NumOutputs=1NumRules=7AndMethod='min'OrMethod='max'ImpMethod='min'AggMethod='max'DefuzzMethod='centroid' [Input1]Name='x1'Range=[-7 3]NumMFs=3MF1='Низкий':'gaussmf',[3.40007450960031 -7]MF2='Средний':'gaussmf',[1.6149698957499 -1.74660908527092]MF3='Высокий':'gaussmf',[2.52022434919263 3] [Input2]Name='x2'Range=[-4.4 1.7]NumMFs=3MF1='Низкий':'gaussmf',[1.02358100504453 -4.4]MF2='Средний':'gaussmf',[1.0601956271136 -0.265877871198082]MF3='Высокий':'gaussmf',[0.556809723775244 1.7] [Output1]Name='y'Range=[-50 50]NumMFs=5MF1='Низкий':'gaussmf',[24.1103617593646 -50]MF2='НижеСреднего':'gaussmf',[4.71043707102686 -9.20772294816213]MF3='Средний':'gaussmf',[19.3061674829102 -0.356831935198631]MF4='ВышеСреднего':'gaussmf',[2.32363129708594 7.54140512216623]MF5='Высокий':'gaussmf',[9.85328561017153 50] [Rules]1 1, 5 (0.992220771682195): 11 2, 1 (0.551099521555049): 11 3, 5 (0.927013208192148): 12 0, 3 (0.497892866014116): 13 1, 4 (0.0428013281451034): 13 2, 2 (0.141638922191091): 13 3, 4 (0.383155508162816): 1Оптимальные функции принадлежности нечетких термов и веса правил показаны на рис. 9 и в табл.2, соответственно. Поверхность "входы выход", соответствующая настроенной нечеткой модели типа Мамдани, показана на рис. 8c. Как видно из рисунка, настроенная нечеткая модель хорошо отражает поведение идентифицируемой зависимости, На это также указывает и малое значение средней квадратической невязки как на обучающей выборке 0.252, так и на контрольной выборке из 1024 точек, равное 4.61. Обратим внимание на то, обучающая выборка содержит всего 20 пар точек "входы выход", что меньше количества настраиваемых параметров (23). Несмотря на это, результаты настройки хорошие, что объясняется качественной базой знаний. Фактически, исходная нечеткая база знаний (табл. 1) уже является грубой моделью зависимости (5), и на этапе настройки модель лишь доучивается - значения её параметры незначительно изменяются.
Таблица 2 - Нечеткая база знаний для зависимости (5) после настройки
X1 | x2 | Y | |
Низкий | Низкий | Высокий | 0,992 |
Низкий | Средний | Низкий | 0,551 |
Низкий | Высокий | Высокий | 0,927 |
Средний | - | Средний | 0,498 |
Высокий | Низкий | Выше среднего | 0,043 |
Высокий | Средний | Ниже среднего | 0,142 |
Высокий | Высокий | Выше среднего | 0,383 |
Рисунок 8 - Поверхности " входы-выход" a) исходной зависимости (5); b) ненастроенной нечеткой модели; c) нечеткой модели после настройки. |
Рисунок 9 - Функции принадлежности после настройки |