You also want an ePaper? Increase the reach of your titles
YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.
148 Paralelizacija GA za rešavanje nekih NP-kompletnih problema<br />
⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯<br />
rednog broja l ostaju na svojim mestima, sve one koje su posle rednog broja l<br />
se kompletno razmenjuju, dok se 32-bitna reč na mestu l delimično razmenjuje.<br />
Pri delimičnoj razmeni, se formira maska, koja sadrži vrednost 0 na mestima<br />
bitova koji ostaju nepromenjeni, a sadrži vrednost 1 na mestima bitova koje<br />
treba razmeniti. Zbog efikasnosti sve operacije se izvode kao bitovske.<br />
TwoPointCrossover()<br />
Kao i kod prethodnog jednopozicionog ukrštanja privremeni genetski kodovi<br />
svih jedinki ga->pop[i]->tmpgencode se kopiraju u genetske kodove ga->pop[i]-<br />
>gencode. Takođe se na slučajan način biraju jedinke itm1 i itm2 i slučajan<br />
broj iz intervala [0, 1]. I u ovom slučaju se vrši poređenje sa nivoom ukrštanja<br />
ga->cross.prob, što određuje, da li se jedinke ukrštaju, ili ne.<br />
Ako se date jedinke ukrštaju, dve pozicije za ukrštanje site1 i site2 se biraju<br />
kao slučajani celi brojevi iz intervala [0, nbits]. Ako je site1 > site2, oni<br />
razmenjuju mesta, pa site1 dobija vrednost site2, i obratno. Na taj način u<br />
daljem postupku uvek važi da je prva pozicija za ukrštanje site1 pre druge<br />
pozicije site2 u genetskom kodu (site1 ≤ site2). Slično kao i u slučaju<br />
jednopozicionog ukrštanja vrši se celobrojno deljenje pozicija za ukrštanje site1<br />
i site2. Količnici l1 i l2 predstavljaju redne brojeve 32-bitnih reči koje sadrže<br />
pozicije ukrštanja, a ostaci site1 i site2 je redne brojeve bitova unutar datih 32-<br />
bitnih reči.<br />
Sve 32-bitne reči pre rednog broja l1 i posle rednog broja l2 ostaju na svojim<br />
mestima, sve one koje su između l1 i l2 se kompletno razmenjuju, dok se 32-<br />
bitne reči l1 i l2 delimično razmenjuju. Pri delimičnoj razmeni na mestu l1, se na<br />
isti način kao u slučaju jednopozicionog ukrštanja, formira maska, koja sadrži<br />
vrednost 0 na mestima bitova koji ostaju nepromenjeni, a sadrži vrednost 1 na<br />
mestima bitova koje treba razmeniti. Kao i u prethodnim slučajevima, se zbog<br />
efikasnosti sve operacije izvode kao bitovske.<br />
UniformCrossover()<br />
Kao i kod prethodnih operatora ukrštanja privremeni genetski kodovi ga-<br />
>pop[i]->tmpgencode se kopiraju u genetske kodove ga->pop[i]->gencode.<br />
Takođe se na slučajan način biraju jedinke (itm1 i itm2) i slučajan broj iz<br />
intervala [0, 1]. Ukoliko je taj slučajan broj manji od nivoa ukrštanja ga-<br />
>cross.prob jedinke se ukrštaju, inače ostaju nepromenjene.<br />
Ako se date jedinke ukrštaju za svaku 32-bitnu reč se generiše odgovarajuća<br />
maska ukrštanja. Ona se generiše na slučajan način, tako da je verovatnoća<br />
pojavljivanja bita čija je vrednost 1 jednaka p unif (ga->cross.probunif), a 0 je 1 -<br />
p unif .<br />
U ovom slučaju se ukrštanje mora efektivno primeniti na svaku 32-bitnu reč,<br />
za razliku od prethodnih operatora ukrštanja (jednopozicionog i dvopozicionog),<br />
gde se efektivno primenjuje samo na jednu (odnosno dve) 32-bitne reči u<br />
genetskom kodu, dok su se ostale direktno kopirale. Zbog toga je operator<br />
uniformnog ukrštanja nešto sporiji od prethodnih, ali je to uglavnom<br />
zanemarljivo u odnosu na vreme izvršavanja vrednosne funkcije.