Create successful ePaper yourself
Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.
88 Paralelizacija GA za rešavanje nekih NP-kompletnih problema<br />
⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯<br />
Početna implementacija zasnovana na prostom GA za rešavanje SPLP je u<br />
praksi pokazala dobre rezultate, ali ne i dovoljno dobre da može da se uporedi<br />
sa najboljim rezultatima dobijenim pomoću ostalih metoda. Zbog toga se<br />
pristupilo postepenom poboljšanju osnovne implementacije, koje je redom<br />
opisano u <strong>rad</strong>ovima [Kra98b], [Kra99a], [Kra99c], kao i u ovom poglavlju.<br />
5.3 GA implementacija<br />
5.3.1 GA reprezentacija<br />
Za rešavanje problema (SPLP) izabrano je binarno kodiranje potencijalnih<br />
lokacija snabdevača. Svaki bit u genetskom kodu jedinke, čija je vrednost 1<br />
označava da je na datoj lokaciji postavljen snabdevač, a vrednost 0 da nije.<br />
Genetski kod jedinke je alociran kao niz 32-bitnih reči, <strong>rad</strong>i bržeg izvršavanja,<br />
pri primeni genetskih operatora.<br />
Primer 5.2.<br />
Za m=5, genetski kod jedinke 01011⏐000000010000000010001110101<br />
1. - 5. 6. - 32.<br />
označava da:<br />
• su na lokacijama 2, 4 i 5 su postavljeni snabdevači;<br />
• na lokacijama 1 i 3 nisu postavljeni snbdevači;<br />
• se ignorišu bitovi 6-32.<br />
Iz genetskog koda se direktno nalazi niz indikatora y i (i=1, 2, ... , m) koji<br />
kazuju da li je na odgovarajućoj potencijalnoj lokaciji postavljen snabdevač ili<br />
ne. Pošto za snabdevača na određenoj lokaciji ne postoji ograničenje u<br />
kapacitetu lokacije i pošto je poznato na kojim su sve lokacijama postavljeni<br />
snabdevači a na kojima nisu (niz y i ), svaki korisnik može da izabere sebi<br />
najbližeg snabdevača. Primetimo da se, u slučaju kada su snabdevači fiksirani,<br />
minimizacijom troškova za svakog korisnika ujedno dobija i minimum ukupnih<br />
troškova.<br />
5.3.2 Vrednosna funkcija<br />
Vrlo važan deo koji garantuje brzu implementaciju funkcije za računanje<br />
vrednosti jedinke (vrednosne funkcije - objective value function) je izbor prave<br />
strukture podataka. Radi ubrzanja pri računanju vrednosne funkcije, koristimo<br />
dodatni memorijski prostor za memorisanje rednih brojeva potencijalnih lokacija.<br />
Za svakog korisnika lista indeksa potencijalnih lokacija je uređena u<br />
neopadajućem poretku troškova transporta.<br />
Pri inicijalizaciji programa, formiramo listu indeksa za svakog klijenta, i to<br />
korišćenjem ugrađene qsort() funkcije. Pri tome je zauzeće memorije oko 50%<br />
veće, ali je nekoliko puta brže izvršavanje programa.<br />
Zavisno od broja postavljenih lokacija za snabdevanje e i izračunate<br />
vrednosti e 0 = c⋅<br />
m, predloženo je korišćenje dve različite strategije za<br />
računanje vrednosne funkcije. Konstanta c je eksperimentalno određena na<br />
nivou 0.4 - 0.5, jer su tada dobijeni najbolji rezultati u praksi.