Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Лабы 8-14 ММвПИС / Отчет по 11-14 лабам

.docx
Скачиваний:
101
Добавлен:
08.06.2016
Размер:
174.26 Кб
Скачать

Санкт-Петербургский государственный электротехнический

университет «ЛЭТИ» им. В.И.Ульянова (Ленина)

кафедра ИИСТ

ОТЧЕТ

по лабораторным работам 11-14

«Гибридные системы»

Выполнили: Архипов А. А.

Герасимов М. А.

Яшкардин Р. В.

Тищенко А.И.

Шимусюк М.В.

Группа: 0587

Преподаватель: Краснова А.И.

Санкт-Петербург

2014

Лабораторная работа №11

Цель работы: изучить структуру и функции ННС класса ANFIS, научиться строить гибридные системы.

Окно формирования гибридной системы ANFIS с загруженными данными

Окно выбора количества и функции принадлежности

Структура гибридной системы класса ANFIS

Результат обучения гибридной системы

Лабораторная работа №12

Цель работы: изучить базовые функции слоев ННС класса ANFIS, получить опыт разработки ГС в среде Matlab.

%========= Tnorm(X, Y, Typefun)================

X = rand(1);

Y = rand(1);

Typefun = 1;

if Typefun == 1 % Ограниченное произведение

max1 = max(X, Y);

if max1 < 1

Z = 0;

elseif max1 > 1

Z = min(X, Y);

end

elseif Typefun == 2 % Усиленная сумма

Z = max(0, X+Y-1);

elseif Typefun == 3 % Произведение Эйнштейна

Z = X*Y/(1+(1-X)*(1-Y));

elseif Typefun == 4 % Алгебраическое произведение

Z = X*Y;

elseif Typefun == 5 % Произведение Гамахера

Z = X*Y/(1-(1-X)*(1-Y));

elseif Typefun == 6 % Минимум (пересечение по Заде)

Z = min(X, Y);

end

%=========\ Tnorm(X, Y, Typefun)================

%========= Snorm(X, Y, Typefun)================

X = rand(1);

Y = rand(1);

Typefun = 4;

if Typefun == 1 % Ограниченная сумма

min1 = min(X, Y);

if mix1 > 0

Z = 1;

elseif max1 == 0

Z = man(X, Y);

end

elseif Typefun == 2 % Усиленная разность

Z = mix(1, X+Y);

elseif Typefun == 3 % Сумма Эйнштейна

Z = 1-(1-X)*(1-Y)/(1+X*Y);

elseif Typefun == 4 % Аглебраическая сумма

Z = X+Y-X*Y;

elseif Typefun == 5 % Сумма Гамахера

Z = 1-(1-X)*(1-Y)/(1-X*Y);

elseif Typefun == 6 % Максимум (объединение по Заде)

Z = max(X, Y);

end

%=========\ Tnorm(X, Y, Typefun)================

%============= Mfnlayer(N , Xn, MFn) ==========

N = 100;

Xn = randi(10, 1, N);

MFn = 12;

if MFn == 1

Z(1, 1:N) = dsigmf(Xn, [3 5 2 7]);

elseif MFn == 2

Z(1, 1:N) = dsigmf(Xn, [3 5 2 7]);

Z(2, 1:N) = gauss2mf(Xn,[4 6 9 3]);

elseif MFn == 3

Z(1, 1:N) = dsigmf(Xn, [3 5 2 7]);

Z(2, 1:N) = gauss2mf(Xn,[4 6 9 3]);

Z(3, 1:N) = gaussmf(Xn,[4 7]);

elseif MFn == 4

Z(1, 1:N) = dsigmf(Xn, [3 5 2 7]);

Z(2, 1:N) = gauss2mf(Xn,[4 6 9 3]);

Z(3, 1:N) = gaussmf(Xn,[4 7]);

Z(4, 1:N) = gbellmf(Xn, [10 11 12]);

elseif MFn == 5

Z(1, 1:N) = dsigmf(Xn, [3 5 2 7]);

Z(2, 1:N) = gauss2mf(Xn,[4 6 9 3]);

Z(3, 1:N) = gaussmf(Xn,[4 7]);

Z(4, 1:N) = gbellmf(Xn, [10 11 12]);

Z(5, 1:N) = pimf(Xn, [3 7 14 8]);

elseif MFn == 6

Z(1, 1:N) = dsigmf(Xn, [3 5 2 7]);

Z(2, 1:N) = gauss2mf(Xn,[4 6 9 3]);

Z(3, 1:N) = gaussmf(Xn,[4 7]);

Z(4, 1:N) = gbellmf(Xn, [10 11 12]);

Z(5, 1:N) = pimf(Xn, [3 7 14 8]);

Z(6, 1:N) = psigmf(Xn, [1 2 4 8]);

elseif MFn == 7

Z(1, 1:N) = dsigmf(Xn, [3 5 2 7]);

Z(2, 1:N) = gauss2mf(Xn,[4 6 9 3]);

Z(3, 1:N) = gaussmf(Xn,[4 7]);

Z(4, 1:N) = gbellmf(Xn, [10 11 12]);

Z(5, 1:N) = pimf(Xn, [3 7 14 8]);

Z(6, 1:N) = psigmf(Xn, [1 2 4 8]);

Z(7, 1:N) = sigmf (Xn, [4 7]);

elseif MFn == 8

Z(1, 1:N) = dsigmf(Xn, [3 5 2 7]);

Z(2, 1:N) = gauss2mf(Xn,[4 6 9 3]);

Z(3, 1:N) = gaussmf(Xn,[4 7]);

Z(4, 1:N) = gbellmf(Xn, [10 11 12]);

Z(5, 1:N) = pimf(Xn, [3 7 14 8]);

Z(6, 1:N) = psigmf(Xn, [1 2 4 8]);

Z(7, 1:N) = sigmf (Xn, [4 7]);

Z(8, 1:N) = smf(Xn, [5, 12]);

elseif MFn == 9

Z(1, 1:N) = dsigmf(Xn, [3 5 2 7]);

Z(2, 1:N) = gauss2mf(Xn,[4 6 9 3]);

Z(3, 1:N) = gaussmf(Xn,[4 7]);

Z(4, 1:N) = gbellmf(Xn, [10 11 12]);

Z(5, 1:N) = pimf(Xn, [3 7 14 8]);

Z(6, 1:N) = psigmf(Xn, [1 2 4 8]);

Z(7, 1:N) = sigmf (Xn, [4 7]);

Z(8, 1:N) = smf(Xn, [5, 12]);

Z(9, 1:N) = trapmf(Xn, [2, 6, 8, 15]);

elseif MFn == 10

Z(1, 1:N) = dsigmf(Xn, [3 5 2 7]);

Z(2, 1:N) = gauss2mf(Xn,[4 6 9 3]);

Z(3, 1:N) = gaussmf(Xn,[4 7]);

Z(4, 1:N) = gbellmf(Xn, [10 11 12]);

Z(5, 1:N) = pimf(Xn, [3 7 14 8]);

Z(6, 1:N) = psigmf(Xn, [1 2 4 8]);

Z(7, 1:N) = sigmf (Xn, [4 7]);

Z(8, 1:N) = smf(Xn, [5, 12]);

Z(9, 1:N) = trapmf(Xn, [2, 6, 8, 15]);

Z(10, 1:N) = trimf(Xn, [4, 8, 10]);

elseif MFn == 11

Z(1, 1:N) = dsigmf(Xn, [3 5 2 7]);

Z(2, 1:N) = gauss2mf(Xn,[4 6 9 3]);

Z(3, 1:N) = gaussmf(Xn,[4 7]);

Z(4, 1:N) = gbellmf(Xn, [10 11 12]);

Z(5, 1:N) = pimf(Xn, [3 7 14 8]);

Z(6, 1:N) = psigmf(Xn, [1 2 4 8]);

Z(7, 1:N) = sigmf (Xn, [4 7]);

Z(8, 1:N) = smf(Xn, [5, 12]);

Z(9, 1:N) = trapmf(Xn, [2, 6, 8, 15]);

Z(10, 1:N) = trimf(Xn, [4, 8, 10]);

Z(11, 1:N) = zmf(Xn, [2 9]);

else

disp('FATAL EROR 0x4148: MFn в диапазоне [1 .. 11]')

end

%=============\ Mfnlayer(N , Xn, MFn) ==========

% ========== Nneuron(Slinkn, signal)===========

Slinkn = randi(10, 10, 10);

signal = 3;

sum1 = sum(Slinkn(1:10,1:10));

for i = 1:1:10

Z(i) = Slinkn(signal, i)/sum1(i);

end

% ==========\ Nneuron(Slinkn, signal)==========

Лабораторная работа №13-14

Цель работы: изучить функционирование ННС в целом, исследовать процесс обучения ННС.

clear all

%====== Водные данные ======

n=3;

q = 0.5; %Коэффициент скорости обучения

i = 100; %Количество входных векторов

urojainost = [60 10 40 15 30 15 20 20 15]; %Матрица урожайности поля/культуры (ц/Га)

cena = [1000 900 800]; %Закупочные цены

minurag = [1000 700 900]; %Минимальый урожай каждой культуры

Fmax = 3000000; % Максимальный доход

perem = 0; %без этого СОВСЕМ не работает :(

for ii=1:1:i

for jj =1:1:9

PopravkaWP(ii, jj)= 0;

PopravkaWN(ii, jj)= 0;

%OhibkaWP(ii,jj) = 0;

%OhibkaWN(ii,jj) = 0;

end

end

% А - это ограничение по площади

% B - это ограничение по минимальному урожаю

%====== /Водные данные ======

%======= Создание матрицы =======

for ii=1:1:i

x1=randint(1, 1, 50);

x2=randint(1, 1, 50 - x1);

x3=50-x2-x1;

x4=randint(1, 1, 75);

x5=randint(1, 1, 75 - x4);

x6=75-x5-x4;

x7=randint(1, 1, 75 - 50);

x8=randint(1, 1, x7);

x9=50-x7-x8;

Vhod(ii, 1:9)=[x1 x2 x3 x4 x5 x6 x7 x8 x9];

end

%======= /Создание матрицы ======

for BOLb = 1:1:2

%======= Расчёт первого слоя ======

for ii=1:1:i %Расчёт весов для A-1

MA(ii, 1) = Vhod(ii, 1)/50;

end

for ii=1:1:i %Расчёт весов для A-2

MA(ii, 2) = Vhod(ii, 2)/50;

end

for ii=1:1:i %Расчёт весов для A-3

MA(ii, 3) = Vhod(ii, 3)/50;

end

for ii=1:1:i %Расчёт весов для A-4

MA(ii, 4) = Vhod(ii, 4)/75;

end

for ii=1:1:i %Расчёт весов для A-5

MA(ii, 5) = Vhod(ii, 5)/75;

end

for ii=1:1:i %Расчёт весов для A-6

MA(ii, 6) = Vhod(ii, 6)/75;

end

for ii=1:1:i %Расчёт весов для A-7

MA(ii, 7) = Vhod(ii, 7)/50;

end

for ii=1:1:i %Расчёт весов для A-8

MA(ii, 8) = Vhod(ii, 8)/50;

end

for ii=1:1:i %Расчёт весов для A-9

MA(ii, 9) = Vhod(ii, 9)/50;

end

for ii=1:1:i %Расчёт весов для B-1

%MB(ii, 1) = (urojainost(1)*Vhod(ii, 1))/minurag(1);

MB(ii, 1) = (urojainost(1)*Vhod(ii, 1))/3000;

end

for ii=1:1:i %Расчёт весов для B-2

%MB(ii, 2) = (urojainost(2)*Vhod(ii, 2))/minurag(2);

MB(ii, 2) = (urojainost(2)*Vhod(ii, 2))/500;

end

for ii=1:1:i %Расчёт весов для B-3

%MB(ii, 3) = (urojainost(3)*Vhod(ii, 3))/minurag(3);

MB(ii, 3) = (urojainost(3)*Vhod(ii, 3))/2000;

end

for ii=1:1:i %Расчёт весов для B-4

%MB(ii, 4) = (urojainost(4)*Vhod(ii, 4))/minurag(1);

MB(ii, 4) = (urojainost(4)*Vhod(ii, 4))/1125;

end

for ii=1:1:i %Расчёт весов для B-5

%MB(ii, 5) = (urojainost(5)*Vhod(ii, 5))/minurag(2);

MB(ii, 5) = (urojainost(5)*Vhod(ii, 5))/2250;

end

for ii=1:1:i %Расчёт весов для B-6

%MB(ii, 6) = (urojainost(6)*Vhod(ii, 6))/minurag(3);

MB(ii, 6) = (urojainost(6)*Vhod(ii, 6))/1125;

end

for ii=1:1:i %Расчёт весов для B-7

%MB(ii, 7) = (urojainost(7)*Vhod(ii, 7))/minurag(1);

MB(ii, 7) = (urojainost(7)*Vhod(ii, 7))/1000;

end

for ii=1:1:i %Расчёт весов для B-8

%MB(ii, 8) = (urojainost(8)*Vhod(ii, 8))/minurag(2);

MB(ii, 8) = (urojainost(8)*Vhod(ii, 8))/1000;

end

for ii=1:1:i %Расчёт весов для B-9

MB(ii, 9) = (urojainost(9)*Vhod(ii, 9))/750;

end

%======= /Расчёт первого слоя ======

%======= Расчёт второго слоя =====

for ii=1:1:i

WP(ii, 1)= MA(ii, 1)*MB(ii, 1) + PopravkaWP(ii, 1) ;

end

for ii=1:1:i

WP(ii, 2)= MA(ii, 2)*MB(ii, 2) + PopravkaWP(ii, 2) ;

end

for ii=1:1:i

WP(ii, 3)= MA(ii, 3)*MB(ii, 3) + PopravkaWP(ii, 3);

end

for ii=1:1:i

WP(ii, 4)= MA(ii, 4)*MB(ii, 4) + PopravkaWP(ii, 4);

end

for ii=1:1:i

WP(ii, 5)= MA(ii, 5)*MB(ii, 5) + PopravkaWP(ii, 5);

end

for ii=1:1:i

WP(ii, 6)= MA(ii, 6)*MB(ii, 6) + PopravkaWP(ii, 6);

end

for ii=1:1:i

WP(ii, 7)= MA(ii, 7)*MB(ii, 7) + PopravkaWP(ii, 7);

end

for ii=1:1:i

WP(ii, 8)= MA(ii, 8)*MB(ii, 8) + PopravkaWP(ii, 8);

end

for ii=1:1:i

WP(ii, 9)= MA(ii, 9)*MB(ii, 9) + PopravkaWP(ii, 9);

end

%======= /Расчёт второго слоя =====

%======= Расчёт третьего слоя =====

for ii=1:1:i

WN(ii, 1)= WP(ii, 1)/sum(WP(ii, 1:9)) + PopravkaWN(ii, 1);

end

for ii=1:1:i

WN(ii, 2)= WP(ii, 2)/sum(WP(ii, 1:9)) + PopravkaWN(ii, 2);

end

for ii=1:1:i

WN(ii, 3)= WP(ii, 3)/sum(WP(ii, 1:9)) + PopravkaWN(ii, 3);

end

for ii=1:1:i

WN(ii, 4)= WP(ii, 4)/sum(WP(ii, 1:9)) + PopravkaWN(ii, 4);

end

for ii=1:1:i

WN(ii, 5)= WP(ii, 5)/sum(WP(ii, 1:9)) + PopravkaWN(ii, 5);

end

for ii=1:1:i

WN(ii, 6)= WP(ii, 6)/sum(WP(ii, 1:9)) + PopravkaWN(ii, 6);

end

for ii=1:1:i

WN(ii, 7)= WP(ii, 7)/sum(WP(ii, 1:9)) + PopravkaWN(ii, 7);

end

for ii=1:1:i

WN(ii, 8)= WP(ii, 8)/sum(WP(ii, 1:9)) + PopravkaWN(ii, 8);

end

for ii=1:1:i

WN(ii, 9)= WP(ii, 9)/sum(WP(ii, 1:9)) + PopravkaWN(ii, 9);

end

%======= /Расчёт третьего слоя =====

%======= Расчёт четвертого слоя =====

for ii=1:1:i

PredVblX(ii, 1)=WN(ii, 1)*cena(1)* urojainost (1) * Vhod(ii, 1);

end

for ii=1:1:i

PredVblX(ii, 2)=WN(ii, 2)*cena(2)* urojainost (2) * Vhod(ii, 2);

end

for ii=1:1:i

PredVblX(ii, 3)=WN(ii, 3)*cena(3)* urojainost (3) * Vhod(ii, 3);

end

for ii=1:1:i

PredVblX(ii, 4)=WN(ii, 4)*cena(1)* urojainost (4) * Vhod(ii, 4);

end

for ii=1:1:i

PredVblX(ii, 5)= WN(ii, 5)*cena(2)* urojainost (5) * Vhod(ii, 5);

end

for ii=1:1:i

PredVblX(ii, 6)= WN(ii, 6)*cena(3)* urojainost (6) * Vhod(ii, 6);

end

for ii=1:1:i

PredVblX(ii, 7)= WN(ii, 7)*cena(1)* urojainost (7) * Vhod(ii, 7);

end

for ii=1:1:i

PredVblX(ii, 8)= WN(ii, 8)*cena(2)* urojainost (8) * Vhod(ii, 8);

end

for ii=1:1:i

PredVblX(ii, 9)= WN(ii, 9)*cena(3)* urojainost (9) * Vhod(ii, 9);

end

%======= /Расчёт четвертого слоя =====

%======= Расчёт пятого слоя =====

for ii=1:1:i

VbIX(ii,1)= sum(WN(ii, 1:9));

end

for ii=1:1:i

VbIX(ii,2)= sum(PredVblX(ii, 1:9);

end

%======= /Расчёт пятого слоя =====

%==== обратное распространение ошибки ====

while perem ~= 1

MAideal = [0.94 0 0.06 0 0.97 0.03 0 0 1];

MBideal = [0.94 0 0.06 0 0.97 0.03 0 0 1];

for ii = 1:1:9

WPideal(1, ii) = MAideal(1, ii)*MBideal(1, ii);

end

for ii = 1:1:9

WNideal(1, ii) = WPideal(1, ii)/sum(WPideal(1, 1:9));

end

for ii=1:1:i

for jj=1:1:9

OhibWP(ii, jj)=WPideal(1,jj)-WP(ii,jj);

end

end

for ii=1:1:i

for jj=1:1:9

OhibWN(ii, jj)=WNideal(1,jj)-WN(ii,jj);

end

end

for ii=1:1:i

for jj=1:1:9

PopravkaWN(ii, jj)=q*OhibWN(ii, jj);

end

end

for ii=1:1:i

for jj=1:1:9

PopravkaWP(ii, jj)=q*OhibWP(ii, jj);

end

end

perem = 1;

end

end

%==== /обратное распространение ошибки ====

[Dohod Index] = max(VbIX);

disp(['Максимальный доход: ', num2str(round(VbIX(Index(2), 2)))]);

disp(' ');

disp('План засева по полям:');

disp('Пшеница Кукуруза Соя');

disp([Vhod(Index(1, 2), 1) Vhod(Index(1, 2), 2) Vhod(Index(1, 2), 3); Vhod(Index(1, 2), 4) Vhod(Index(1, 2), 5) Vhod(Index(1, 2), 6); Vhod(Index(1, 2), 7) Vhod(Index(1, 2), 8) Vhod(Index(1, 2), 9)]);