Материал: Нейро-нечеткие сети

Внимание! Если размещение файла нарушает Ваши авторские права, то обязательно сообщите нам

В данной работе для реализации системы 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.

2. Zhenfeng Wang, Dongming Jin, and Zhijian Li. Single-Chip Realization of a Fuzzy Logic Controller with Neural Network Structure (NNFLC) // ISMVL IEEE Computer Society, pp. 68-73, 1993

3. Бегман Ю.В. Нейросетевая экспертная система на основе прецедентов для решения проблем абонентов сотовой сети, 2009, 216 с.

4. Леоненков А.В. Нечеткое моделирование в среде MATLAB и fuzzyTECH, СПб.: БХВ-Петербург, 2005, 736c.

] Осовский С. Нейронные сети для обработки информации, М.: Финансы и статистика, 2002, 344 с.

. Рутковская Д., Пилиньский М., Рутковский Л. Нейронные сети, генетические алгоритмы и нечеткие системы, М.: Горячая линия - Телеком, 2006, 452 с.

.Борисов В.В., Круглов В.В., Федулов А.С. Нечеткие модели и сети, М.: Горячая линия - Телеком, 2007, 284 с.

. Ярушкина Н.Г. Основы теории нечётких и гибридных систем, М.: Финансы и статистика, 2004, 320 с.

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