Лабы 8-14 ММвПИС / Отчет по 11-14 лабам
.docxСанкт-Петербургский государственный электротехнический
университет «ЛЭТИ» им. В.И.Ульянова (Ленина)
кафедра ИИСТ
ОТЧЕТ
по лабораторным работам 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)]);