В данной работе для реализации системы NNFLC выбрана среда MATLAB, так как ее встроенные возможности и
удобная обработка данных упрощают процесс разработки. Более того, в MATLAB уже реализована нечеткая нейронная
сеть типа ANFIS, что позволяет провести сравнительный
анализ результатов двух моделей.
3.2 Программная реализация
Для каждого из этапов работы с сетью написаны отдельные функции, так как такие методики не используются во встроенных системах MATLAB (Рис.3.1). Важным этапом перед работой с сетью является ее обучение
На входе имеется набор обучающих данных вида (
), где n1 - количество входных переменных, n2 - количество выходных переменных, k=1..K - номер примера.
Этап 1. Настройка параметров
· центров функций принадлежности с помощью конкурентного
обучения до стабилизации
где
- монотонно убывающий уровень обучения, k=
.
·
где r - параметр перекрытия.
Этап 2. Нахождение базы правил
После того, как параметры функций принадлежности настроены, становится
возможным посчитать значения первого и третьего слоев. С их помощью
определяется база правил. Для этого рассчитываем их веса.
,
где
· Для каждого правила выбираем следствие с наибольшим весом. Если все веса для данного правила очень маленькие, то это правило удаляется.
· Комбинация схожих правил.
Этап 3. Обучение с учителем
Алгоритм обратного распространения ошибки позволяет окончательно
настроить параметры.

Рис. 3.1. Блок-схема обучения
В данной главе были представлены:
· обзор существующих программ и пакетов, которые предоставляют средства для моделирования и работы с нейронными сетями и нечеткими системами;
· описание компонентов для программной реализации
4. Примеры применения системы NNFLC
4.1 Задача определения давления звука
Данные, предоставленные Национальным управлением по воздухоплаванию и исследованию космического пространства (НАСА) [9], содержат описание авиационных профилей NACA 0012 крыла летательных аппаратов различных размеров и в различных аэродинамических туннелях. При столкновении профилей с потоками воздуха возникают возмущения, которые оказывают давление на профиль, при этом их скорость распространения равна скорости звука. Исследуется зависимость этого давления при различных параметрах [10].
Входные переменные Х1 Частота (Гц) Х2 Угол атаки (º) - угол между хордой и направлением скорости набегающего потока. Хорда - это условная линия, которая соединяет две наиболее удаленные друг от друга точки профиля.X3 Длина хорды (м) Х4 Скорость потока (м/c)Х5 Толщина замещения (м). Используется для определения параметра формы пограничного слоя - слоя, непосредственно прилегающего к поверхности летательного аппарата. Выходная переменная Y Уровень давления звука (дБ).
В качестве обучающей выборки взято 400 наборов входных переменных.
В результате обучения сетей на обучающих данных и проверки результатов работы на тестовой выборке (Приложение 1) были получены следующие результаты:
Рис. 4.1 Результат работы ANFIS
В системе NNFLC ошибка отличается не сильно 3.4, при этом относительная погрешность составляет 4%. При тестовых значениях ошибка равна 3.6.
Таким образом ошибки двух систем не имеют сильных отличий
· При данном количестве входных переменных в системе ANFIS можно задать только три функции принадлежности для каждой переменной. Если увеличить их количество, правил становится слишком много и для функционирования системы требуется много памяти, что перегружает процессор.
В системе NNFLC вследствие оптимизации базы правил при необходимости можно выбирать большее количество функций принадлежности.
· Рассмотрим изменение параметров функций принадлежности до и
после алгоритма обратного распространения ошибки на примере выходной переменной
(Рис. 4.2). После обучения с учителем функции лучше подстраиваются под данные.
(а)
(б)
Рис. 4. 2. Изменения параметров функции принадлежности переменной y до (а) и после (б) обучения с
учителем
· В результате двухэтапного обучения, удаления и комбинации слабо влияющих правил реализованная в данной работе система показывает лучшие временные показатели.
В данной главе на разработанная система была применена к задаче регрессионного анализа. По результатам можно сделать следующие выводы:
· система показала свою работоспособность;
· отклонение в ошибках является незначительным;
· некоторые характеристики NNFLC превосходят характеристики ANFIS.
·
Заключение
Основными теоретическими и практическими результатами данной выпускной квалификационной работы являются:
. Исследование преимуществ гибридных систем, в частности объединяющих нечеткую логику и нейронные сети.
2. Исследование способов интеграции этих технологий
. Определение структуры нечеткой нейронной сети типа NNFLC, количества слоев, нейронов, способа построения, отличительных особенностей.
. Определение этапов обучения нечеткого нейронного контроллера, отличающихся от обычно применимых.
5. Программная реализация исследуемой сети в среде MATLAB.
6. Применение системы для решения практической задачи регрессии.
В данной работе программная реализация нечеткого контроллера разработана
только для одного выходного значения. Этот недостаток может быть исправлен в
дальнейших работах.
Список литературы
1. C. T. Lin and C. S. G. Lee. Neural-network-based fuzzy logic control and decision system // IEEE Trans. on Computers, Vol. C-40, No. 12. pp. 1320-1336. Dec. 1991.
3. Бегман Ю.В. Нейросетевая экспертная система на основе прецедентов для решения проблем абонентов сотовой сети, 2009, 216 с.
9. Machine learning repository. Airfoil Self-Noise Data Set. URL: http://archive.ics.uci.edu/ml/datasets/Airfoil+Self-Noise (01.05.2016)
.
A. Tsanas, A. Xifara: 'Accurate quantitative estimation of energy performance
of residential buildings using statistical machine learning tools', Energy and
Buildings, Vol. 49, pp. 560-567, 2012
Приложение 1
Тестовые данные системы
0 0.3048 39.6 0.00310138 123.689
0 0.3048 39.6 0.00310138 121.399
0 0.3048 39.6 0.00310138 120.319
0 0.3048 39.6 0.00310138 119.229
0 0.3048 39.6 0.00310138 117.789
0 0.3048 39.6 0.00310138 116.229
0 0.3048 39.6 0.00310138 114.779
0 0.3048 39.6 0.00310138 112.139
1.5 0.3048 71.3 0.00336729 109.222
1.5 0.3048 71.3 0.00336729 106.582
1.5 0.3048 39.6 0.00392107 121.851
1.5 0.3048 39.6 0.00392107 124.001
1.5 0.3048 39.6 0.00392107 126.661
1.5 0.3048 39.6 0.00392107 128.311
1.5 0.3048 39.6 0.00392107 128.831
3 0.3048 55.5 0.00452492 118.689
3 0.3048 55.5 0.00452492 117.309
3 0.3048 55.5 0.00452492 115.679
3 0.3048 55.5 0.00452492 113.799
3 0.3048 55.5 0.00452492 112.169
3 0.3048 39.6 0.00495741 123.312
3 0.3048 39.6 0.00495741 125.472
3 0.3048 39.6 0.00495741 127.632
0 0.2286 31.7 0.0027238 120.595
0 0.2286 31.7 0.0027238 123.635
0 0.2286 31.7 0.0027238 126.675
0 0.2286 31.7 0.0027238 129.465
0 0.2286 31.7 0.0027238 130.725
0 0.2286 31.7 0.0027238 130.595
0 0.2286 31.7 0.0027238 128.805
5.3 0.2286 71.3 0.0051942 111.350
5.3 0.2286 39.6 0.00614329 127.011
5.3 0.2286 39.6 0.00614329 129.691
5.3 0.2286 39.6 0.00614329 131.221
5.3 0.2286 39.6 0.00614329 132.251
5.3 0.2286 39.6 0.00614329 132.011
7.3 0.2286 31.7 0.0132672 130.239
7.3 0.2286 31.7 0.0132672 130.269
7.3 0.2286 31.7 0.0132672 128.169
7.3 0.2286 31.7 0.0132672 126.189
7.3 0.2286 31.7 0.0132672 123.209
7.3 0.2286 31.7 0.0132672 119.099
7.3 0.2286 31.7 0.0132672 120.509
0 0.1524 39.6 0.00193287 123.453
0 0.1524 39.6 0.00193287 121.313
0 0.1524 39.6 0.00193287 120.553
0 0.1524 39.6 0.00193287 115.413
0 0.1524 31.7 0.00209405 121.617
0 0.1524 31.7 0.00209405 125.997
5.4 0.1524 55.5 0.00433288 121.587
5.4 0.1524 55.5 0.00433288 119.737
5.4 0.1524 55.5 0.00433288 118.757
5.4 0.1524 55.5 0.00433288 117.287
5.4 0.1524 55.5 0.00433288 114.927
5.4 0.1524 39.6 0.00485029 125.347
5.4 0.1524 39.6 0.00485029 127.637
5.4 0.1524 39.6 0.00485029 129.937
12.6 0.1524 39.6 0.0584113 115.910
12.6 0.1524 39.6 0.0584113 114.900
12.6 0.1524 39.6 0.0584113 116.550
12.6 0.1524 39.6 0.0584113 116.560
Приложение 2
Программа реализации в среде MATLAB.\
function paramreg()
%тестовые данныеoutputNuminputNumcxcydxdytxty=0;=dlmread('airfoiltrain.dat');=in';long=dlmread('airfoiltest.dat');=intest';=size(x);=sz(1);=1; %ввод с клавиатуры=varNum-outputNum;=sz(2); %количество тестовых пример
mfNum=[2 2 2 2 2 4]; %Количество фп для каждой входной и выходной переменной(1,1:inputNum)=mfNum(1,1:inputNum);=1;
cx=zeros(inputNum,max(mfNum(1:inputNum)));=zeros(outputNum,max(mfNum(inputNum+1:inputNum+outputNum)));
%начальный выбор центровi=1:inputNum
[~,q]=kmeans(x(i,1:end)',tx(1,i));(i,1:tx(1,i))=sort(q);
[~,q]=kmeans(x(i+inputNum,1:end)',ty(1,i));(i,1:ty(1,i))=sort(q);
% %настройка центров.=0;i=1:dataNum*3 %определяет тестовый пример
l=0.6-0.02*(i-1);l<0.02 l=0.02; end=rem(i,dataNum);i==0 i=dataNum; endi==1 g=0; end
%произвольный выбор данных=randi(dataNum);
while isempty(find(g==gg))==0=randi(dataNum);(1,i)=gg;
for k=1:inputNum %определяет настраиваемую переменную
x(k,gg);=abs(cx(k,1:tx(1,k))-x(k,gg));
[~,kmin]=min(v);=cx(k,kmin);(k,kmin)=cx(k,kmin)+l*(x(k,gg)-cx(k,kmin));(abs(m-cx(k,kmin))<0.01)=pp+1;pp=0;pp==inputNum*3 break; end=abs(cy(1,:)-x(1+inputNum,gg));
[~,kmin]=min(v);(1,kmin)=cy(1,kmin)+l*(x(inputNum+1,gg)-cy(1,kmin));
%настройка ширины=zeros(inputNum,max(mfNum(1:inputNum)));=zeros(outputNum,max(mfNum(inputNum+1:inputNum+outputNum)));
h1=2; %параметр перекрытияk=1:inputNum %определяет настраиваемую переменную (x1,x2,...)j=1:tx(1,k)=abs(cx(k,1:tx(1,k))-cx(k,j));(:,j)=[];(k,j)=min(v)/h1;=2; %параметр перекрытияj=1:ty=abs(cy(1,1:ty)-cy(1,j));(:,j)=[];(1,j)=min(v)/h2;
end
%НАСТРОЙКА ВЕСОВ=prod(tx'); %подсчет количества правил
%начальный выбор весов=rand(rulesNum,sum(ty));=rem(w1,0.33);k=1:dataNum*5 %проход по всем обучающим векторам
l=0.5-0.02*(k-1);l<0.02 l=0.02; end=rem(k,dataNum);k==0 k=dataNum; endk==1 g=0; end
%произвольный выбор данных=randi(dataNum);
while isempty(find(g==gg))==0=randi(dataNum);(1,k)=gg;=layer1(x(1:inputNum,gg)) ;=layer2(l1);=layer3Down(x(1+inputNum,gg)); %СЛОЙ 3 (фп выходных переменных)=zeros(rulesNum,sum(ty));i=1:rulesNumj=1:ty(i,j)=l3(1,j)*(l2(1,i)-w(i,j));(i,j)=w(i,j)+l*dw(i,j);
end
%оставляем связи с максимальным весом
for i=1:rulesNum
[~,kmax]=max(w(i,1:end));(i,1:end)=0;(i,kmax)=1;
end
%обратное распространение ошибки
%рассчитываем выход сети для каждого входного примера('BP')=0.2;k=1:dataNum*4 %проход по всем обучающим векторам по порядку
h=h-0.005*(k-1);h<0.005 h=0.005; end=rem(k,8);(k==0) k=dataNum; end;
k;k==1 g=0; end
%произвольный выбор данных
gg=randi(dataNum);isempty(find(g==gg))==0=randi(dataNum);(1,i)=gg;;=layer1(x(1:inputNum,gg));;=layer2(l1);;=layer3Up(ty,l2,w);
l4=layer4(l3);;
%обратное распространение
%слой 4 (настройка параметров фп выходов)_du=0;_cdu=0;i=1:ty %посмотреть для нескольких выходов
summa_du=summa_du+l3(1,i)*dy(1,i);_cdu=summa_cdu+cy(1,i)*l3(1,i)*dy(1,i);
end
%посмотреть для нескольких выходовi=1:ty
cy(1,i)=cy(1,i)+h*(x(inputNum+1,gg)-l4)*( l3(1,i)*dy(1,i)/summa_du);(1,i)=dy(1,i)+h*(x(inputNum+1,gg)-l4)*((cy(1,i)*l3(1,i)*summa_du)-summa_cdu*l3(1,i))/(summa_du^2);
%параметры фп входов_du=zeros(1,inputNum);_cdu=zeros(1,inputNum);i=1:inputNum %!j=1:tx(1,i) %!_du(1,i)=summax_du(1,i)+dx(i,j)*l1(i,j);_cdu(1,i)=summax_cdu(1,i)+cx(i,j)*dx(i,j)*l1(i,j);_du;_cdu;=[];=zeros(1,length(l2));i=1:ty=l2'.*w(1:end,i);=find(pp==l3(1,i));(f~=0)=f';ff=1:length(fff)(1,length(ft)+1)=f(ff);(1,f(ff))=1;i=1:inputNumj=1:tx(1,i)=zeros(1,length(l2));=0;ff=1:length(ft)(l1(i,j)==l2(ft(1,ff)))=q1+1;=(x(inputNum+1,gg)-l4)*(cx(i,j)*dx(i,j)*summax_du(1,i)-summax_cdu(1,i)*dx(i,j))/(summax_du(1,i)^2);(i,j)=cx(i,j)-h*sum(q1.*q2)*sigma*exp(-((x(i,gg)-cx(i,j))^2)/(2*dx(i,j)^2))*((x(i,gg)-cx(i,j))/dx(i,j)^2);(i,j)=dx(i,j)-h*sum(q1.*q2)*sigma*exp(-((x(i,gg)-cx(i,j))^2)/(2*dx(i,j)^2))*((x(i,gg)-cx(i,j))^2/(dx(i,j)^3));=0;=0;
%ТЕСТii=1:length(testdata)=layer1(testdata(1:inputNum,ii));=layer2(l1);=layer3Up(ty(1,1),l2,w);=layer4(l3);=S+l4;(1,ii)=testdata(inputNum+1,ii)-l4;=error11+error1(1,ii)^2;=sqrt(error11/length(testdata))=S/dataNum=error11/Sq=layer1(xval)inputNumcxdxtxi=1:inputNumj=1:tx(1,i)(i,j)=exp(-((xval(i)-cx(i,j))^2)/(2*dx(i,j)^2));
end