OSTVARENJE GENETSKIH ALGORITAMA U MATLABU

kazalo:
1. POZIVANJE FUNKCIJA ZA GENETSKE ALGORITME IZ LINIJE NAREDBI (engl. command line)
    1.1 Pokretanje genetskih algoritama s pretpostavljenim postavkama

   
1.2 Postavljanje mogućnosti za genetske algoritme
   
1.3 Pojašnjenja postavki
       
1.3.1 Postavke crtanja
       
1.3.2 Postavke populacije
        1.3.3 Postavke selekcije
        1.3.4 Postavke reprodukcije
        1.3.5 Postavke mutacije
       
1.3.6 Postavke križanja

        1.3.7 Postavke migracije
        1.3.8 Postavke za zaustavljanje genetskog algoritma
2. KORIŠTENJE OPTIMIZATION TOOLA

Sustav Matlab uz mnoge svoje alate sadrži i alat za genetske algoritme. U ovom ću poglavlju opisati kako koristiti taj alat.

1. Pozivanje funkcija za genetske algoritme iz linije naredbi (engl. command line)
Za pokretanje genetskih algoritama iz linije naredbi treba pozvati funkciju za genetske algoritme sa sintaksom:

[x fval] = ga(@fitnessfun, nvars, options),

gdje je:
• @fitnessfun – handle za funkciju cilja,
• nvars – broj nezavisnih ulaznih varijabli u funkciju cilja, a
• options – struktura koja sadrži postavke za GA. Ako se ovaj argument izostavi, koriste se pretpostavljene postavke.
S ciljem dobivanja detaljnijih informacija, možete koristiti sljedeću sintaksu:

[x fval exitflag output population scores] = ga(@fitnessfcn, nvars, options).

Rezultat je dan s:
• x – trenutak kada je dostignuta konačna vrijednost funkcije cilja,
• fval – konačna vrijednost funkcije cilja,
• exitflag – opisuje razlog zašto je GA prekinut,
• output – struktura sadrži informacije o obavljanju GA u svakoj generaciji,
• population – konačna populacija,
• scores – konačna rješenja.

1.1 Pokretanje genetskih algoritama s pretpostavljenim postavkama
Za pokretanje genetskih algoritama s pretpostavljenim mogućnostima, funkciju za genetske algoritme možemo pozvati u kraćem obliku, tj.

[x fval] = ga(@fitnessfun, nvars).

Značenje argumenata objašnjeno je na početku poglavlja.

1.2 Postavljanje mogućnosti za genetske algoritme
Kroz strukturu options u funkciju ga prenose se sve postavke.
Za pregled svih varijabli strukture options i vrijednosti koje one mogu poprimiti u liniji naredbi treba upisati gaoptimset bez argumenata ili pogledati tablicu.
Prije korištenja strukture options kao argumenta funkcije ga, strukturu treba stvoriti. To se radi s naredbom:

options = gaoptimset(@ga).

Ovim će pozivom biti generirana struktura options s pretpostavljenim vrijednostima, tj:

PopulationType: 'doubleVector'
PopInitRange: [2x1 double]
PopulationSize: 20
EliteCount: 2
CrossoverFraction: 0.8000
ParetoFraction: []
MigrationDirection: 'forward'
MigrationInterval: 20
MigrationFraction: 0.2000
Generations: 100
TimeLimit: Inf
FitnessLimit: -Inf
StallGenLimit: 50
StallTimeLimit: Inf
TolFun: 1.0000e-006
TolCon: 1.0000e-006
InitialPopulation: []
InitialScores: []
InitialPenalty: 10
PenaltyFactor: 100
PlotInterval: 1
CreationFcn: @gacreationuniform
FitnessScalingFcn: @fitscalingrank
SelectionFcn: @selectionstochunif
CrossoverFcn: @crossoverscattered
MutationFcn: {[1x1 function_handle] [1] [1]}
DistanceMeasureFcn: []
HybridFcn: []
Display: 'final'
PlotFcns: []
OutputFcns: []
Vectorized: 'off'
UseParallel: 'never'.

Ove će postavke biti korištene i ako u funkciji GA izostavite argument options.
Do svake pojedine postavke u skupu postavki (options) možemo doći tako da upišemo

options.tražena_postavka.

Primjerice, ako napišemo option.PopulationSize, na ekranu će se ispisati vrijednost varijable PopulationSize (ako to pokrenemo kad su pohranjene pretpostavljene vrijednosti, ispisat će se 20). Želimo li unijeti novu vrijednost za npr. veličinu populacije, valja u liniji naredbi u Matlabu upisati:

Option.PopulationSize=nova_vrijednost.

Ukoliko pri generiranju postavki genetskih algoritama želite većinu postavki postaviti na pretpostavljene vrijednosti, no neke ipak želite promijeniti, to možete učiniti pozvavši funkciju:

options = gaoptimset('varijabla1', vrijednost1, ‘varijabla2’, vrijednost2,…).

Primjerice, options = gaoptimset('PopulationSize', 300, 'Vectorized', 'on'). Nakon izvođenja ove naredbe sve varijable strukture options poprimit će pretpostavljene vrijednosti osim varijabli PopulationSize i Vectorized koje će biti inicijalizirane s 300 i 'on'.

options = gaoptimset(oldopts,newopts)

kombinira postojeću strukturu mogućnosti, oldopts, s novom strukturom mogućnosti, newopts. Svaki parametar u newopts s nepraznim vrijednostima pohranjuje se umjesto odgovarajućeg argumenta u oldopts.
Savjetujem vam da na kraj naredbe kojom mijenjate sadržaj strukture options ne stavljate znak „;“ (točka zarez) kako bi vam se, odmah nakon promjene, na zaslonu ispisale nove postavke.
Varijable strukture options, kratki opis i moguće vrijednosti nalaze se ovdje.

1.3 Pojašnjenja postavki
1.3.1 Postavke crtanja

Postavke crtanja omogućuju vam crtanje podataka iz genetskog algoritma za vrijeme njegova izvođenja. Kada izaberete funkciju crtanja i pokrenete genetski algoritam, u prozoru za crtanje prikazuje se graf s dvije osi. Klikom na subplot otvara se veća inačica grafa u novom prozoru. Pritiskom na gumb stop u prozoru crtanja možete prekinuti izvođenje algoritma.
PlotInterval određuje svakih koliko generacija se vrši ispis.
Postavka OutputFcns prihvaća polje koje se sastoji od 0, 1 ili svih sljedećih funkcija:
@gaplotbestf crta najbolje vrijednosti po generacijama,
@gaplotexpectation crta očekivani broj djece s obzirom na rezultat pojedine generacije,
@gaplotscorediversity crta histogram rezultata pojedine generacije,
@plotstopping crta kriterije zaustavljanja,
@gaplotbestindiv crta karakteristike najboljih jedinki u generacijama,
@gaplotgenealogy crte genealogiju jedinki. Crte iz jedne generacije u drugu su označene različitim bojama s različitim značenjima:
• Crvene crte označavaju djecu nastalu mutacijom,
• Plave crte označavaju djecu nastalu križanjem,
• Crne crte označavaju elitne jedinke,
@gaplotscores crta rezultate jedinki u pojedinim generacijama,
@gaplotmaxconstr crta najveće nelinearno prekoračenje ograničenja u pojedinoj generaciji,
@gaplotdistance crta prosječnu udaljenost jedinki u pojedinoj generaciji,
@gaplotrange crta minimum, maksimum i prosječnu vrijednost funkcije cilja u pojedinim generacijama,
@gaplotselection crta histogram roditelja.
Možete napisati i vlastitu funkciju za crtanje.
Prvi redak funkcije za crtanje koju pišete mora imati oblik:

function state = plotfun(options, state, flag).

Ulazni argumenti u funkciju su:
• options – struktura sadrži sve trenutne postavke
• state – struktura sadrži informacije o trenutnoj populaciji
• flag – string koji nam govori koji se dio algoritma trenutno izvodi.

1.3.2 Postavke populacije
Postavke populacije omogućuju vam postavljanje postavki populacije koje onda GA koristi.
PopulationType određuje tip ulaznih podataka u funkciju cilja. PopulationType može biti:
'doubleVector' – koristiti ovu postavku ako su jedinke u populaciji tipa double. (ovo je ujedno i pretpostavljena postavka),
'bitstring' – koristite ovu postavku ako su jedinke u populaciji mali stringovi,
'custom' - koristite ovu postavku za kreiranje populacije čiji tip nije jedan od prethodno navedenih.
Ukoliko ste se odlučili koristiti vlastiti tip populacije ('custom'), morate napisati vlastite funkcije za mutaciju (MutationFcn), križanje (CrossoverFcn) i kreiranje početne populacije (CreationFcn) i postavkama navedenim u zagradi pridružiti te novo napisane funkcije. Primjerice:

options.MutationFcn=@moja_funkcija_za_mutaciju.

Kako napisati vlastite funkcije za mutaciju križanje i kreiranje početne populacije objašnjeno je kasnije u poglavljima posvećenim tim postavkama.
PopulationSize određuje koliko će jedinki biti u pojedinoj generaciji. Što je PopulationSize veći broj, genetski algoritam rješenje traži temeljitije čime se smanjuje mogućnost da algoritam vrati lokalni minimum koji ujedno nije i globalni, ali se i povećava vrijeme traženja.
Ukoliko ste za PopulationSize umjesto obične konstante postavili vektor, genetski algoritam će kreirati toliko podpopulacija kolika je duljina vektora. Veličina pojedine podpopulacije određena je pripadajućim elementom vektora. Npr. ako za ulazni vektor postavite [4 5 7 6] kreirat će se 4 podpopulacije (vektor ima 4 elementa) od kojih će prva podpopulacija imati 4 jedinke, druga 5, treća 7, a četvrta 6.
InitialPopulation određuje početnu generaciju u genetskom algoritmu. Pretpostavljena vrijednost je [] i u tom slučaju GA koristi ranije postavljenu funkciju za generiranje populacija (CreationFcn) za generiranje početne populacije. Ukoliko ste se odlučili sami zadati početnu populaciju, to možete učiniti tako da postavci InitialPopulation pridružite neprazan vektor. Pri tome valja paziti da broj redaka u tom vektoru ne smije biti veći o veličine populacije (PopulationSize), a broj stupaca mora biti jednak broju ulaznih varijabli u funkciju cilja. Ukoliko unesete manje jedinki početne populacije nego što je veličina populacije, preostale jedinke će generirati funkcija za kreiranje početne populacije (CreationFcn).
PopInitRange određuje domet vektora u početnoj populaciji koji su generirani u funkciji za kreiranje početne populacije (CreationFcn). PopInitRange možete postaviti kao matricu s dva retka i stupaca koliko ima varijabli funkcija cilja gdje svaki stupac ima oblik [dg, gg] . dg je donja granica, a gg gornja granica.

1.3.3 Postavke selekcije
Postavke selekcije određuju kako GA odabire roditelje preko kojih stvara jedinke sljedeće generacije.
SelectionFcn – ovom postavkom možete odrediti koju će funkciju GA koristiti za selekciju. Možete izabrati:
@selectionstochunif – Pretpostavljena funkcija selekcije, stohastička uniformna selekcija, postavlja liniju u kojoj svaki roditelj odgovara dijelu linije duljine proporcionalne svojoj skaliranoj vrijednosti. Algoritam se pomiče uzduž linije u jednakim razmacima. U svakom koraku, algoritam alocira jednog roditelja iz sekcije koju očitava. Prvi korak jest da stvori proizvoljan broj manji od broja koraka.
@selectionremainder – pripisuje roditelje deterministički od cijelog dijela svake individualne skalirane vrijednosti i onda koristi rulet selekciju na ostalom decimalnom dijelu. Npr., ako je skalirana vrijednost nekog pojedinca 2.3, taj pojedinac se izlistava 2 puta kao roditelj jer je cijeli dio 2. Nakon što su roditelji pripisani prema njihovim cijelim dijelovima, ostatak roditelja se bira stohastički. Vjerojatnost da roditelj bude odabran u ovom koraku je proporcionalna parcijalnom dijelu njegove skalirane vrijednosti.
@selectionuniform – Uniformna selekcija odabire roditelje koristeći očekivanja i broj roditelja. Uniformna selekcija je korisna za testiranje i debagiranje, ali nije isplativa kod strategije pretraživanja.
@selectionroulette – Rulet selekcija odabire roditelje oponašajući vrtnju ruleta, u kojem područje dijela kotača ruleta koji odgovara jedinki proporcionalno s očekivanjem jedinke. Algoritam koristi slučajno odabrane brojeve za spajanje područja s odgovarajućom vjerojatnošću.
@selectiontournament – Turnirska selekcija bira svakog roditelja birajući igrače turnirske veličine nasumično i onda birajući najboljeg pojedinca od toga koji će postati roditelj. Turnirska veličina mora biti barem 2. Pretpostavljena turnirska veličina je 4.
Da biste promijeniti pretpostavljenu turnirsku veličinu, valja koristiti sljedeću sintaksu:

options = gaoptimset('SelectionFcn',...{@selecttournament, size}).

Moguće je napisati i vlastitu funkciju selekcije. Funkcija se poziva kao @ime_funkcije. Ta se funkcija postavlja kao funkcija selekcije naredbom:
options = gaoptimset('SelectionFcn', @ime_funkcije);
Vaša funkcija selekcije mora imati prototip:
function parents = myfun(expectation, nParents, options), gdje je
• Expectation – očekivani broj djece za svakog člana populacije,
• nParents – broj roditelja za odabir,
• options – GA options struktura.
Funkcija vraća roditelje, retčani vektor duljine nParents koji sadrži popis odabranih roditelja.

1.3.4 Postavke reprodukcije
Postavke reprodukcije određuju kako genetski algoritam stvara djecu za novu generaciju.
EliteCount određuje broj elitnih jedinki, tj. jedinki koje sigurno prelaze u novu generaciju. EliteCount treba postaviti na pozitivnu cjelobrojnu vrijednost koja je manja od veličine populacije (PopulationSize). Pretpostavljena vrijednost je 2.
CrossoverFraction određuje dio nove generacije (u koji ne ulaze elitne jedinke) koji nastaje križanjem. Postavite CrossoverFraction na vrijednost između 0 i 1. Pretpostavljena vrijednost je 0.8.

1.3.5 Postavke mutacije
Postavke mutacije određuju kako genetski algoritam radi male slučajne promjene jedinki populacije s ciljem izrade mutirane djecu.
Mutacija omogućava genetsku raznolikost i genetskom algoritmu širi prostor traženja rješenja. Za odabir načina mutacije koristi se postavka MutationFcn. Postavka MutatioFcn može poprimiti sljedeće vrijednosti:
@mutationgausian – pretpostavljena funkcija za mutaciju, Gaussova, dodaje slučajan broj dobiven Gaussovom razdiobom s prosječnom 0 za svaki ulaz roditeljskog vektora. Standardno odstupanje (devijacija) raspodjele određeno je parametrima Scale and Shrink i preko postavke PopInitRange u strukturi options.
Paramerar Scale određuje standardno odstupanje u prvoj generaciji. Ako PopInitRange podesite da bude vektor v dimenzija 2×1, početno standardno odstupanje jednako je za sve koordinate roditeljskog vektora, a određeno je kao Scale*(v(2) - v(1)).
Ako postavite PopInitRange tako da bude vektor v s dva retka i stupaca koliko ima varijabli funkcija cilja, početno standardno odstupanje vektora roditelja u koordinati dano je izrazom Scale*(v(i,2) - v(i,1)).
Parametar Shrink nadzire kako se standardno odstupanje smanjuje s novim generacijama. Ako PopInitRange podesite da bude vektor dimenzija 2×1, standardno odstupanje k-te generacije, σk, jednako je za sve koordinate roditeljskog vektora i određeno je rekurzivnim izrazom: .
Ako postavite PopInitRange tako da bude vektor v s dva retka i stupaca koliko ima varijabli funkcija cilja, standardno odstupanje vektora roditelja u koordinati i u k-toj generaciji, σi,k dano je rekurzivnim izrazom: .
Ako za vrijednost parametra Shrink postavite 1, algoritam linearno smanjuje standardno odstupanje pojedine koordinate sve dok u posljednjoj generaciji standardno odstupanje ne postane 0. Negativna vrijednost parametra Shrink rezultira porastom standardnog odstupanja iz generacije u generaciju.
Vrijednosti parametara Scale i Shrink možete preko linije naredbi postavljati pomoću naredbe oblika:

options = gaoptimset('MutationFcn', ... {@mutationgaussian, scale, shrink}).

@mutationuniform – Uniformna ili jednostavna mutacija je dvostupanjski proces. Prvo, algoritam odabire dijelove vektora zapisa jedinki za mutaciju, gdje svaki zapis ima vjerojatni omjer mutacije. Pretpostavljena vrijednost omjera je 0.01. U drugom koraku, algoritam zamjenjuje pojedine označene zapise sa slučajno generiranim brojevima jednoliko odabranim unutar raspona zapisa.
Vrijednosti parametara Scale i Shrink možete preko linije naredbi postavljati pomoću naredbe oblika:

options = gaoptimset('MutationFcn', {@mutationuniform, omjer})

@mutationadaptfeasible – nasumično stvara upute koje su prilagodljive redom do zadnjeg uspješnog ili neuspješnog stvaranja generacije. Moguće područje je omeđeno ograničenjima i neujednačenim ograničenjima. Duljina koraka se bira uz svaku uputu tako da linearna ograničenja i granice budu zadovoljeni.
Kao i za sve do sada obrađene postavke, i način mutacije možete odrediti vlastitom M-funkcijom. Vaša funkcija za mutaciju treba imati ovakav prototip:

function mutationChildren = vaša_funkcija_za_mutaciju(parents, options, nvars, FitnessFcn, state, thisScore, thisPopulation),

pri čemu ulazni argumenti imaju sljedeća značenja:
parents – retčani vektor s roditeljima izabranim pomoću funkcije selekcije,
options – struktura options,
nvars – broj varijabli,
fitnessFcn – funkcija cilja,
state – struktura koja sadrži informacije o trenutnoj generaciji. Struktura state opisuje okruženje,
thisScore – vektor s bodovima za trenutnu populaciju,
thisPopulation – matrica s jedinkama trenutne populacije.
Naravno, vašu funkciju za mutaciju postavit ćete s naredbom:
options = gaoptimset('MutationFcn', @vaša_funkcija_za_mutaciju);

1.3.6 Postavke križanja
Postavke križanja određuju kako genetski algoritam križa dvije jedinke ili dva roditelja s ciljem izrade „križanac“ u novoj generaciji.
CrossoverFcn predstavlja funkciju koja provodi križanje. Možete izabrati jednu od sljedeći funkcija:
@crossoverscattered, pretpostavljena funkcija križanja, bira slučajni binarni vektor i tamo gdje vektor ima vrijednost 1 stavlja gene prvog roditelja, a gdje ima vrijednost 0, gene drugog roditelja. Primjerice, kada bi prvi roditelj bio zadan vektorom r1, drugi vektorom r2 i kada bi slučajni binarni vektor bio sbv, vektor djeteta bi bio d.
r1 = [a b c d e f g h]
r2 = [1 2 3 4 5 6 7 8]
sbv = [1 1 0 0 1 0 0 0]
d = [
a b 3 4 e 6 7 8]
@crossoversinglepoint bira slučajan cijeli broj n s intervala (1, broj ulaznih varijabli funkcije cilja) i nakon toga:
Označava zapise vektora prvog roditelja na pozicijama manjim ili jednakim n
Označava zapise vektora drugog roditelja na pozicijama većim od n
Spaja označene zapise u vektor dijete
Primjerice, ako je r1 prvi roditelj, r2 drugi, a n je poprimio vrijednost 3, dijete će biti d.
r1 = [a b c d e f g h]
r2
= [1 2 3 4 5 6 7 8]
d = [
a b c 4 5 6 7 8]
@crossovertwopoint odabire dva slučajna pozitivna cijela broja m i n s intervala (1, broj ulaznih varijabli funkcije cilja) i nakon toga:
Označava zapise vektora prvog roditelja na pozicijama manjim ili jednakim m te većim od n
Označava zapise vektora drugog roditelja na pozicijama većim od m, a manjim ili jednakim od n
Spaja označene zapise u vektor dijete
Primjerice, ako je r1 prvi roditelj, r2 drugi, m je poprimio vrijednost 3, a n 6, dijete će biti d:
r1 = [a b c d e f g h]
r2 = [1 2 3 4 5 6 7 8]
d = [
a b c 4 5 6 g h]
@crossoverintermediate kreira djecu uzimanjem težinskog prosjeka roditelja. Težine možete odrediti preko parametra omjer koji može biti skalar ili retčani vektor duljine broja ulaznih varijabli funkcije cilja. Pretpostavljeni vektro je s 1 na svim mjestima. Funkcija kreira dijete od roditelja1 i roditelja2 s formulom:
dijete = roditelj1 + rand * omjer * ( roditelj2 - roditelj1).
Ako sve vrijednosti parametra omjer leže na intervalu [0, 1], nastala djeca su unutar hiperkocke definirane poretkom roditelja na suprotnim vrhovima. Ako omjer nije unutar tog intervala, djeca se mogu nalaziti izvan hiperkocke. Ako je omjer skalar, onda sva djeca leže na bridu koji spaja dva roditelja.
Kako biste promijenili pretpostavljenu vrijednost parametra omjer, koristite sljedeću naredbu:

options = gaoptimset('CrossoverFcn', ... {@crossoverintermediate, ratio});

@crossoverheuristic vraća dijete koje leži na crti koja spaja dva roditelja. Dijete je bliže roditelju s boljim svojstvima. Preko parametra omjer možete odrediti koliko je dijete udaljeno od boljeg roditelja. Pretpostavljena vrijednost parametra omjer je 1,2. Ako su roditelj1 i roditelj2 roditelj pri čemu je roditelj1 roditelj s boljim svojstvima, dijete se dobiva pomoću formule:
Dijete = roditelj2 + omjer* (roditelj1-roditelj2).
Kako biste promijenili pretpostavljenu vrijednost parametra omjer, koristite sljedeću naredbu:

options=gaoptimset('CrossoverFcn',... {@crossoverheuristic, omjer});

@crossoverarithmetic stvara djecu koja su težinska aritmetička sredina roditelja. Djeca su uvijek ostvariva s obzirom na linearna ograničenja i granice.
Ukoliko ste odlučili napisati vlastitu funkciju križanja, ona mora imati prototip:

xoverKids = myfun(parents, options, nvars, FitnessFcn, unused, thisPopulation)

pri čemu ulazni argumenti imaju sljedeća značenja:
parents – retčani vektor s roditeljima izabranim pomoću funkcije selekcije
options – struktura options
nvars – broj varijabli
fitnessFcn – funkcija cilja
unused – rezervirano mjesto se ne korisit
thisPopulation – matrica s jedinkama trenutne populacije. Broj redaka jednak je PopulationSize, a broj stupaca broju ulaznih varijabli funkcije cilja
Funkcija vraća xoverKids – plod križanja – kao matricu čiji redci predstavljaju novonastalu djecu. Broj stupaca jednak je broju ulaznih varijabli funkcije cilja.

1.3.7 Postavke migracije
Postavke migracije određuju kako jedinke putuju među podpopulacijama. Naravno, da bi se migracija mogla dogoditi, nužno je ostvariti osnovne preduvjete za postojanje podpopulacija, tj. broj jedinki u populaciji (PopulationSize) mora biti veći od 1. Kada dođe do migracije, najbolje jedinke iz jedne podpolulacije zamjenjuju najlošije jedinke u drugoj podpopulaciji. Jedinke koje migriraju iz jedne podpopulacije u drugu samo su kopirane u drugu podpopulaciju, tj. nisu uklonjene iz vlaste podpolulacije.
Način na koji će se vršiti migracija možete odrediti postavljenjem sljedećih postavki:
MigrationDirection – omogućava određivanje smjera migracije. Migracija se može odvijati u 1 ili u oba smjera. MigrationDirection može poprimiti vrijednosti:
'forward' – migracija se odvija prema naprijed, tj. n-ta podpopulacija migrira u n+1. podpopulaciju,
'both' – n-ta podpopulacija migrira u n+1. i n-1. podpopulaciju.
Skup podpopulacija možemo si predstaviti kružnicom, tj. prva i zadnja podpopulacija su susjedne pa su moguće i migracije među njima.
MigrationInterval – određuje svakih koliko generacija dolazi do migracije. Npr. ako je MigrationInterval 20, migracija će nastupiti nakon svakih 20 generacija.
MigrationFraction – određuje koliko se jedinki putuje iz jedne u drugu podpopulaciju. Broj jedinki koje migriraju se određuje tako da se MigrationFraction pomnoži s brojem jedinki u manjoj od podpopulacija među kojima se odvija migracija. Primjerice, kada bi se migracija odvijala među populacijama od 50 i 100 jedinki, a MigrationFraction bio postavljen na 0.1, broj jedinki koje migriraju bio bi jednak 0,1*50=5.

1.3.8 Postavke za zaustavljanje genetskog algoritma
Generations – određuje najveći broj ponavljanja algoritma, tj. koliko najviše generacija može biti. Pretpostavljena vrijednost je 100.
TimeLimit – određuje maksimalno vrijeme u sekundama nakon kojeg GA prestaje s radom.


2. Korištenje Optimization toola
Optimization toolom možete napraviti sve što možete napraviti i pozivom funkcije ga iz linije naredbi. Postavke koje možete postavljati u Optimization toolu istovjetne su onima koje se u liniji naredbi postavljaju u strukturi options.
Za pokretanje Optimization toola valja u liniji naredbi upisati optimtool('ga').


slika 1 izgled Optimization toola

Prije početka korištenja Optimization toola trebate unijeti sljedeće podatke:
Funkciju cilja (Fitness function) – funkcija koju želimo minimizirati. Funkciju cilja treba unijeti u formatu @ime_funkcije_cilja, gdje je fitnessfun.m M-funkcija koja računa funkciju cilja.
Broj varijabli (Number of variables) – broj elemenata ulaznog vektora, tj. broj ulaznih varijabli u funkciju cilja.
U okviru Constraints moguće je unositi ograničenja ili linearnu funkciju ograničenja. Ako problem nije ograničen, polja navedenog okvira mogu se ostavitri prazna.
Za pokretanje genetskog algoritma valja pritisnuti gumb Start. Rezultati otpimizacije ispisuju se u okviru Run solver and view results.
U okviru Options možete mijenjati postavke.