08.03.2015 Views

Ceo rad - PDF (1.3 MB)

Ceo rad - PDF (1.3 MB)

Ceo rad - PDF (1.3 MB)

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

Dodatak B Detaljan opis implementacije 147<br />

⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯<br />

jedinki koji se biraju za narednu generaciju, pri čemu treba imati u vidu da je ga-<br />

>newgener.nelite jedinki direktno izabrano u narednu generaciju. Brojeve intNM<br />

i intNP nalazimo po formuli (B.1).<br />

intN = ga->nitem - ga->newgener.nelite;<br />

intNM = (int) (intN * (1 + intTFM - ga->select.fcompet));<br />

intNP = intN - intNM;<br />

(B.1)<br />

Detaljan opis fino g<strong>rad</strong>irane turnirske selekcije, uporedna analiza sa običnom<br />

turnirskom selekcijom kao i ostalim načinima selekcije se može videti u [Fil98].<br />

B.3 Ukrštanje<br />

Datoteka cross.c sadrži realizacije nekoliko operatora ukrštanja, gde se<br />

pokazivač na izabrani operator dodeljuje promenljivoj ga->cross.f, na osnovu<br />

podataka učitanih iz konfiguracione datoteke "GENET.CFG".<br />

Prilikom primene svakog od operatora ukrštanja, formiraju se parovi jedinki<br />

za ukrštanje, kojih ima (N pop - N elite )/2 (u programu je to (ga->nitem - ga-<br />

>newgener.nelite) / 2). Za svaki par jedinki se sa verovatnoćom p cross (ga-<br />

>cross.prob) vrši ukrštanje njihovih genetskih kodova, a u suprotnom oni ostaju<br />

nepromenjeni. Sve implementirane funkcije ukrštanja podrazumevaju da je<br />

dužina genetskog koda (ga->pop[i]->codelen) ista za sve jedinke u populaciji.<br />

Operator ukrštanja u ovoj implementaciji, privremene genetske kodove<br />

jedinki ukršta ili ostavlja iste, što zavisi od nivoa ukrštanja ga->cross.prob, i<br />

zatim ih smešta kao genetske kodove datih jedinki. Ako se ukrštaju jedinke i i j<br />

tada se postupak može šematski prikazati kao:<br />

ga->pop[i]->tmpgencode ----------------> ga->pop[i]->gencode<br />

ga->pop[j]->tmpgencode (ukrštanje) ga->pop[j]->gencode<br />

Vrednost lokalne promenljive nbits je broj bitova u genetskim kodovima jedinki,<br />

a ta vrednost se čuva i globalno u ga->cross.bits. Zbog toga se na početku<br />

svake funkcije koja realizuje neki operator ukrštanja ispituje da li je globalna<br />

promenljiva ga->cross.bits postavljena, inače u suprotnom prekida <strong>rad</strong> GA, i<br />

štampa odgovarajući izveštaj.<br />

Implementirani su sledeći operatori ukrštanja:<br />

OnePointCrossover()<br />

Na početku se kopira privremeni genetski kod ga->pop[i]->tmpgencode<br />

svake jedinke i u genetski kod te jedinke ga->pop[i]->gencode. Kasnije se<br />

eventualno samo razmenjuju delovi genetskog koda između jedinki.<br />

U svakom koraku se na slučajan način iz populacije biraju po dve jedinke za<br />

ukrštanje, čiji su indeksi itm1 i itm2, i slučajan broj iz intervala [0, 1]. Ukoliko je<br />

dobijeni slučajni broj manji od nivoa mutacije ga->cross.prob, vrši se ukrštanje<br />

između datih jedinki, a pozicija za ukrštanje site se bira kao slučajan ceo broj iz<br />

intervala [0, nbits]. U suprotnom promenljiva site uzima vrednost nbits, i nema<br />

ukrštanja između datih jedinki. Posle sledećih operacija l = site/32; site =<br />

site%32; promenljiva l predstavlja redni broj 32-bitne reči koja sadrži poziciju<br />

ukrštanja, a site je redni broj bita unutar 32-bitne reči. Sve 32-bitne reči pre

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!