Keliaujančio pirklio uždavinys
Darbas su programa
|
1 pav. Java programa realizuojanti SA agoritmą pirklio kelio optimizavimui. (programos kodas: pirklys.java)
|
1. Šalia klavišo cities laukelyje įrašyti norimą miestų skaičių (maksimaliai programa palaiko 98 miestus, įvedus daugiau jokių įspėjimų nebūna, tačiau programa veikia neteisingai). 2. Paspausti klavišą cities. Tai padarius atsitiktinai sugeneruojami miestai. Kiekvieną kartą paspaudus sugeneruojamas vis kitas miestų išdėstymas. 3. Galima pakeisti SA algoritmo parametrus N, M, T, a (žr. toliau programos parametrai) 4. Pauspaudus vieną iš pradinio maršruto generavimo klavišų (bubble, nearest, random) sugeneruojamas pradinis miestų apėjimo maršrutas ir pagal SA algoritmo pagalba bandoma jį optimizuoti (žr. klavišų paskirtis). minėti klavišai tampa neaktyvūs. Vykdomas SA algoritmas, kol bus pasiektas maksimalus iteracijų skaičius. 5. Pabaigus optimizavimą klavišai paleidžiantys SA (bubble, nearest, random) tampa aktyvūs.
Pastaba: Java programa neveikia nes:
|
Programos parametrai
N - koeficientas, kuris apsprendžia T parametro kitimo greitį. T reikšmė keičiama po N sistemos būsenos pasikeitimų. Šis koeficientas turi būti sveikas skaičius, t.y. netrupmeninis.
M - koeficientas, kuris kaip ir N apsprendžia T parametro kitimo greitį. T.y. T reikšmė keičiama kas M sistemos būsenos pasikeitimų, kurie sumažina sistemos energiją arba optimizuojamąjį dydį, šiuo atveju maršruto ilgį. Šis parametras turi būti sveikas skaičius, t.y. netrupmeninis.
T - koeficientas apsprendžiantis su kokia tikimybe reikia pereiti į blogesnę (mažiau optimalią) būseną.
a - koeficientas, nuo kurio priklauso T keitimo greitis, nauja T reikšmė gaunama senąją dauginant iš a. Šis koeficientas turi paprastyai būna tarp 1 ir 0.7. Nenaudokite koeficiento sveikai daliai atskirti nuo trupmeninės "," (kablelio), tam reikia naudoti "."(taškas).
iter - nurodomas maksimalus teracijų skaičius. Patartina šį skaičių parinkti kuo mažesnį, ir įvertinus turimo kompiuterio spartą atitinkamai jį padidinti taip, kad skaičiavimai būtų užbaigiami per priimtiną laiko tarpą.
Klavišų paskirtis
cities - atsitiktinai sugeneruojamos miestų koordinatės. Miestų skaičius nurodomas gretimame laukelyje.
Kiti klavišai yra skirti pradinio maršruto generavimui:
random - sugeneruojamas atsitiktinis miestų apėjimo maršrutas.
nearest - pradedama nuo kokio nors miesto ir ieškomas artimiausias, po to kitas artimiausias ir taip tęsiama, kol visi miestai aplankomi po vieną kartą.
bubble - pradedama nuo trijų atsitiktinių miestų. Po to imamas naujas miestas ir ieškoma kurioje ankstesnius miestus jungiančioje kraštinėje geriausia įtraukti naująjį miestą. Taip tęsiama, kol visi miestai bus įtraukti į maršrutą.
Arnoldas Bagdonas RM 0/1gr.,
Kauno Technologijos universitetas
Telekomunikacijų ir elektronikos fak.