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.