neuro-mreza i genetski algoritam za funkciju

12
ДЕО А.2 У Matlabu креирати неуро мрежу која апроксимира функцију две променљиве на опсегу [-3,3] за обе променљиве. Податке за обучавање мреже креирати тачним израчунавањем вредности функције на задатом опсегу са кораком променљивих 0.2. Описати поступак и добијено решење (3 стране). За исту функцију и на истом опсегу генетским алгоритмом у Matlabu пронаћи глобални минимум функције, па описати поступак и добијено решење (3 стране). Функција: z = x.*cos(x).*sin(y) У Matlab програмском пакету користићемо се скриптама (.м фајловима) како би лакше манипулисали програмским кодом. На почетку креирамо скрипту за извршење задате функције (слика 2.1). Програмским кодом дефинишемо да функција има две улазне и једану излазну променљиву. Потребно је скрипту снимити у радни фолдер, под екстензијом „.m“, и на даље ће се све скрипте и варијабле снимати у исти фолдер, како би се могле позивати из командног прозора Matlabа. Креирану функцију позивамо укуцавањем имена функције, и уношењем улазних параметара у загради (нпр. z= lazar(2,1); где z представља решење функције за улазне параметре 2 и 1).

Upload: lazar-lazarevic

Post on 12-Feb-2016

248 views

Category:

Documents


1 download

DESCRIPTION

Postupak izrade neuro- mreze i genetskog algoritma u MATLAB-u

TRANSCRIPT

Page 1: Neuro-mreza i Genetski Algoritam Za Funkciju

ДЕО А.2

У Matlabu креирати неуро мрежу која апроксимира функцију две променљиве на опсегу [-3,3] за обе променљиве. Податке за обучавање мреже креирати тачним израчунавањем вредности функције на задатом опсегу са кораком променљивих 0.2. Описати поступак и добијено решење (3 стране). За исту функцију и на истом опсегу генетским алгоритмом у Matlabu пронаћи глобални минимум функције, па описати поступак и добијено решење (3 стране).

Функција: z = x.*cos(x).*sin(y)

У Matlab програмском пакету користићемо се скриптама (.м фајловима) како би лакше манипулисали програмским кодом.

На почетку креирамо скрипту за извршење задате функције (слика 2.1). Програмским кодом дефинишемо да функција има две улазне и једану излазну променљиву.

Потребно је скрипту снимити у радни фолдер, под екстензијом „.m“, и на даље ће се све скрипте и варијабле снимати у исти фолдер, како би се могле позивати из командног прозора Matlabа.

Креирану функцију позивамо укуцавањем имена функције, и уношењем улазних параметара у загради (нпр. z= lazar(2,1); где z представља решење функције за улазне параметре 2 и 1).

Како бисмо имали појам о изгледу стварне функције на задатом опсегу променљивих, пожељно је да генеришемо графички приказ функције. То ћемо урадити тако што ћемо креирати квадратну матрицу, чија ће величина бити једнака броју променљивих на задатом опсегу (-3 до 3) са кораком 0,2, а то је 31, a њени елементи ће бити решења функције „lazar“ за адекватне улазне променљиве.

Page 2: Neuro-mreza i Genetski Algoritam Za Funkciju

Креирамо нову скрипту која садржи код као на слици 2.2, и снимимо је у радни фолдер под жељеним именом са екстензијом „.m“.

Покретањем кода скрипте притиском на дугме “Run“, извршиће се више акција:

- Дефинисаћемо помоћне матрице „pom1“ i „pom2“, на опсегу од -3 до 3 са кораком 0,2,

- дефинисаћемо помоћну матрицу за цртање графика, и - позваћемо функцију „surf“ која служи за 3D приказ функција.

Задата функција на дефинисаном опсегу треба да изгледа као на слици 2.3.

Page 3: Neuro-mreza i Genetski Algoritam Za Funkciju

У радном простору Matlaba („workspace“) појавиће се дефинисане матрице (слика 2.4).

Пошто смо видели како задата функција треба да изгледа на задатом опсегу са задатим кораком променљивих, можемо приступити креирању неуро мреже.

Да би обучили неуро мрежу, потребно је да дефинишемо матрицу, која ће се састојати из скупа парова улаза и излаза задате функције (функције „lazar“), на опсегу од -3 до 3, са кораком 0,2.

Креирамо нову скрипту, којом ћемо дефинисати жељене променљиве. Скрипта треба да садржи код као на слици 2.5.

Покретањем скрипте добијамо матрицу „trening“ коју ћемо користити за тренирање неуро-мреже (слика 2.6).

Page 4: Neuro-mreza i Genetski Algoritam Za Funkciju

Варијабла „trening“ је матрица од 961х3, код које су прве две колоне улазне променљиве, а трећа колона је решење функције lazar за вредности улазних променљивих из истог реда. Овако дефинисаном матрицом можемо обучити неуро-мрежу да апроксимира задату функцију.

ANFIS editor се користи за креирање, тренинг и тестирање Сугено фази система. Типично фази правило код Сугено фази модела има форму:

„Ако је х исто што и А, и у исто што и В, онда је z=f(x,y).“

Дакле, ANFIS (Adaptive Neuro Fuzzy Inference) је тип неуронске мреже која користи дефинисане улазно/излазне податке како би ,комбинацијом метода најмањег квадрата и градијента пропагације уназад, тренирала функције које припадају ФИС (Fuzzy Interface System) систему, и на тај начин моделовала сет улазно/излазних података.

ANFIS editor се отвара тако што се у командном прозору укуца наредба „anfisedit“.

Page 5: Neuro-mreza i Genetski Algoritam Za Funkciju

Након уношења команде, отвара се прозор као на слици 2.7. У овом прозору уносимо параметре, тако што селектујемо training i worksp. па онда кликнемо на Load Data... У новоотвореном прозору унесемо име варијабле trening па кликнемо ОК.

Након ове акције, у ANFIS едитору ће се приказати 2D апроксимација функције која је направљена на основу података из матрице trening (слика 2.8 a)).

Page 6: Neuro-mreza i Genetski Algoritam Za Funkciju

Затим треба формирати структуру неуро мреже тако што генеришемо ФИС. Оптимални резултати се постижу ако се селектује Sub. clustering и након клика на Generate FIS... у новоотвореном прозору оставимо подразумеване параметре (слика 2.8 б)).

Генерисањем ФИС-а на овај начин, добијамо структуру неуро-мреже дату на слици 2.9.

Пошто смо креирали структуру, сада можемо да тренирамо неуро мрежу. Приликом тренирања, дефинишемо параметре – одступање од резултата, и број епоха тренирања. Желимо да нам грешка буде што ближа 0 (у идеалном случају једнака 0), а већим бројем епоха постижемо све мање одступање. Приказаћемо два случаја, са поређењем изгледа реалне функције и добијене апроксимације неуро мреже.

У првом случају ћемо за број епоха ставити 2, и добијени резултати су приказани на сликама 2.10 а) б) в) и г)

Page 7: Neuro-mreza i Genetski Algoritam Za Funkciju

Видимо да је код тренинга остварена грешка од 0,3311 (а), што је у овом случају значајна грешка, што се може видети код изгледа апроксимиране функције (в) у поређењу са изгледом реалне функције (г). Грешка приликом тестирања неуро мреже је била 0,32975, што се може видети на слици б), где црвени маркери означавају резултате тестирања неуро мреже у односу на плаве маркере, који представљају вредности реалне функције.

У другом случају повећавамо број епоха на 300, и добијени резултати су приказани на сликама 2.11 а), б), в) и г).

Page 8: Neuro-mreza i Genetski Algoritam Za Funkciju

Са слика можемо да закључимо да су резултати код другог случаја знатно бољи, и да је функција скоро верно апроксимирана. Грешка код тренинга је свега 0,012258, што би се повећањем епоха тренинга незнатно смањило, грешка тестирања је 0,012238, и видимо да су плави маркери готово идеално покривени црвеним, и на крају, изглед апроксимиране функције је много приближнији изгледу реалне функције. На овај начин смо успешно креирали неуро мрежу, која апроксимира реалну функцију.

Са слике 2.11 а) можемо видети како се креће крива грешке у односу на број епоха. Приметимо да тежи нули, и да тежи засићењу. Међутим, извршавање 700 епоха тренирања, захтева доста времена, па, уколико нам резултати нису толико битни, можемо одабрати било који мањи број епоха, ако нам је остварена грешка допустива. На овај начин штедимо временски ресурс.

Креирану неуро мрежу снимимо у радни простор тако што из менија file одаберемо опцију „export“, па онда „tо workspace“. У новоотвореном прозору доделимо неуро мрежи жељено име, и кликнемо ОК (слика 2.12).

Page 9: Neuro-mreza i Genetski Algoritam Za Funkciju

Сада у радном простору имамо варијаблу „neunet“ коју можемо користити даље у програму.

Један од начина на који можемо да користимо сачувану неуро мрежу јесте, да проверимо вредности за жељене улазне величине, и упоредимо их са вредностима реалне функције.

На слици 2.13 видимо вредности неуро мреже и реалне функције за различите улазне параметре, и колика је разлика у решењима.

Налажење глобалног минимума функције на датом опсегу, извршићемо ограниченом оптимизацијом помоћу генетског алгоритма. Како би ово урадили, потребно је претходно да раније генерисану функцију „lazar“ променимо тако што ћемо уместо улазних варијабли х и у писати х(1) и х(2), и на тај начин генерисати нову функцију „lazar1.m“ (слика 2.14).

Page 10: Neuro-mreza i Genetski Algoritam Za Funkciju

За покретање програма за оптимизацију помоћу генетског алгоритма, у командном пољу куцамо „optimtool('ga')“ након чега се отвара нови прозор као на слици 2.15. У новоотвореном прозору уносимо име функције са префиксом @, a за број варијабли уносимо 2. Унесемо границе у којима ће се вршити оптимизација, и у пољу Options, пронађемо plot functions, па штиклирамо опцију Best fitness.

Након што смо унели параметре, оптимизацију покрећемо кликом на дугме Start. Као резултат ове акције, добијамо вредност глобалног минимума која се аутоматски исписује у

Page 11: Neuro-mreza i Genetski Algoritam Za Funkciju

пољу испод дугмета Start, и та вредност је изражена као Objective function value. У пољу испод овог (Final point) налазе се вредности променљивих за које се добија глобални минимум функције.

Број у пољу current iteration означава из колико итерација је генетски алгоритам нашао глобални минимум, а на графику који се генерисао могу се видети резултати после сваке итерације. Црним тачкама су означена решења под најбољим условима, а плавим резултати под најгорим. Број итерација код налажења глобалног минимума зависи од постављених услова. У овом случају оптимизација се зауставила када је просечна промена вредности из услова постала мања од промене вредности из опција. Могуће је да се догоди да генетски алгоритам при сваком покретању да различите резултате. То се дешава јер генетски алгоритам користи генератор произвољних бројева при итерацијама.