EGY HEURISZTIKA A CARP MEGOLDÁSÁRA A HEURISTIC FOR THE CARP Borgulya István Pécsi Tudományegyetem Közgazdaságtudományi Kar Összefoglaló A CARP (Capacitated Arc Routing Problem) esetén egy úthálózat kijelölt útszakaszait végig kell járni valamilyen szolgáltatást teljesítve (pl. téli utak sózása). A szolgáltatást adott számú, egyenlő kapacitású jármű hajtja végre, melyek egy telephelyről indulnak és oda térnek vissza. Minden útszakasz bejárásához adott költség tartozik, és az útszakasz akárhányszor bejárható. A CARP célja olyan útvonalak meghatározása a járműveknek, hogy minden kijelölt útszakaszt csak egy jármű szolgáljon ki, az útszakaszokra szállított szükséges anyagok mennyisége ne lépje túl az egyes járművek kapacitását, és a járművek össz útvonal költsége minimális legyen. A CARP megoldására egy heurisztikát, egy evolúciós algoritmust (EA) mutatunk be. Az EA egy hibrid, steady-state algoritmus. A szülőt truncation szelekcióval választja ki, és az utód kialakítására csak mutáció műveletet alkalmaz. A mutáció az EVL technikán, egy memória alapú módszeren alapul. Az algoritmust benchmark problémákon ellenőriztük. Első eredményeink jobbak, mint a CARPET módszer eredményei. Kulcsszavak evolúciós algoritmus, kombinatorikus optimalizálás, CARP Abstract In the CARP (Capacitated Arc Routing Problem) there is an undirected network of streets, and on a subset of streets we have to make services (e.g. winter gritting). A fleet of identical vehicles of limited capacity make the services; the fleet is based at a depot and each trip starts and ends at the depot. Each street can be traversed any number of times, with a known reversal cost. The CARP consists of determining a set of vehicle trips of minimum total cost, such that each required street is serviced by one single trip, and the total demand processed by a trip fits vehicle capacity. We present for the CARP a heuristic, an evolutionary algorithm (EA). The EA is a hybrid steady-state algorithm. It uses truncation selection and it uses only mutation for the eration of the descendants. The mutation is based on the EVL technique, that is a memory based method. The algorithm was tested on benchmark problems. Our first results are better than the results of the method CARPET. Keywords evolutionary algorithm, combinatorial optimization, CARP 1
1. Bevezetés A CARP (Capacitated Arc Routing Problem) esetén egy úthálózat kijelölt útszakaszait végig kell járni valamilyen szolgáltatást teljesítve (pl. téli utak sózása, iskolabusz szervezés, postai küldemények kivitele). A szolgáltatást adott számú, egyenlő kapacitású jármű (személy) hajtja végre, melyek egy telephelyről indulnak és oda térnek vissza. Minden útszakasz bejárásához adott költség tartozik, és az útszakasz akárhányszor bejárható. A CARP célja olyan útvonalak meghatározása a járműveknek, hogy minden kijelölt útszakaszt csak egy jármű szolgáljon ki, az útszakaszokra szállított szükséges anyagok mennyisége ne lépje túl az egyes járművek kapacitását, és a járművek össz útvonal költsége, beleértve a köztes, összekötő útvonalak költségét is, minimális legyen. A CARP-ot egy G=(V,EA) gráfon definiáljuk, ahol V a csúcsok halmaza, E az irányítatlan élek, A pedig az irányított élek halmaza. A szolgáltatást m egyenlő C kapacitású jármű hajtja végre, melyek egy telephelyen találhatók (s csúcsban). A szolgáltatást egy R EA részhalmazon kell végrehajtani. Minden (v i, v j ) élhez tartozik egy c ij >0 költség/ úthossz és q i 0 szükséges anyag. Egy útvonalat egy (v 1, v 2,,v k ) vektor ír le, ahol v 1 =v k =s és minden (v i,v i+1 )EA. Az R halmaz választásától függően a CARP különböző változatai léteznek, pl.: ha R=EA, akkor kapacitással adott kínai postás probléma, ha REA, akkor kapacitással adott vidéki postás probléma. Mi a továbbiakban olyan CARP változatot tekintünk, amelyben az A halmaz üres, és R E. A CARP NP-teljes probléma. Megoldására különböző egzakt módszerek léteznek. Ilyenek pl. az egészértékű lineáris programozás, a korlátozás és szétválasztás módszere. Mivel az egzakt módszerek csak kisméretű feladatokon gazdaságosak (élek száma <30), a nagyobb méretű feladatoknál heurisztikákat alkalmaznak. Gyakori heurisztikák a különböző konstrukciós heurisztikák, kereső eljárások és a meta-heurisztikák, mint szimulált hűtés, tabu keresés (TS), evolúciós algoritmus (EA) változatok (etikus algoritmus, hangya kolónia optimalizálás, memetikus algoritmus). Tanulmányunkban egy újabb EA-t mutatunk be a CARP megoldására. Az új EA egy memetikus algoritmus (MA), amelyben egy explicit kollektív memória technikát, az EVL-t adaptáltuk a CARP számára, és használtunk fel a mutációnál (részletesebben Borgulya, 2006, 2008). Az új algoritmus főbb jellemzői: nem használ rekombináció műveletet, speciális mutáció műveletet alkalmaz kétféle változatban: az első esetben a transzformáció valószínűségét az EVL alapján határozza meg, míg a második esetben egy véletlen transzformációt alkalmaz. hatféle különböző sztochasztikus 2-opt helyi kereső eljárás változattal javítja a megoldások minőségét. Az algoritmus működését CARP tesztfeladatokon ellenőriztük. Összehasonlító vizsgálatokhoz a három legjobb eredményt elérő módszert választottuk, és eredményeink jók: második-harmadik legjobb eredményt érte el az új algoritmus. 2
A tanulmány hátralévő részében először a probléma kiválasztásához kapcsolódó motivációról szólunk. Az új algoritmust a 3. fejezet mutatja be. A 4. fejezet a tesztelési eredményeket részletezi, összehasonlítva különböző módszerek eredményét. Az 5. fejezet az összefoglaló. 2. Motiváció A CARP témakörrel feleségem egy kérése kapcsán kezdtem el foglalkozni. Rendszeresen teniszezünk. A játék végén le kell húzni a pályát, és utána a fehér műanyag csíkokból készült vonalakat egy kefével szintén meg kell tisztítani. Ilyenkor a műanyag csíkokon lépkedünk, hogy ne tapossuk össze a már lehúzott salakos pályát. Feleségem régóta kér, hogy számoljam ki a legrövidebb utat a műanyag csíkok tisztításához, hogy ne bolyongjunk feleslegesen a csíkokon. Végül hozzáláttam, hogy megkeressem a matematikai modellt a teniszcsíkok tisztítása mögött. Kiderült, hogy a teniszháló mellett további kis sétáló út engedélyezésével, valamint abból a feltevésből, hogy a kefe a háló közelében van, és oda is kell visszavinni, a tisztítási útvonal meghatározása egy kapacitás nélküli vidéki postás probléma megoldása (legalábbis egy térfelet figyelembe véve). A problémát vizsgálva végül az általánosabb CARP megoldását választottam, melyre egy EA-t fejlesztettem. A kész algoritmus speciális eseteként kaptam végül a teniszpálya vonalak tisztításának útvonalát. Ezt feleségem rafinált megoldásnak találta. 3. Az újalgoritmus Az algoritmus struktúrája Az új memetikus algoritmus (jelölés: B_MA) két fázisból áll. Mindkét fázis egy hibrid EA. Az első fázis egy gyors előkészítő rész, amely az induló populáció minőségét javítja. A második fázis mutációval alakítja ki az utódokat. A B_MA főbb lépései: Procedure B_ MA(t, itt, kn, limit, opt, optp) Kezdő populáció. ECM kezdőértéke /* Első fázis: Do itt -szer Szelekció, helyi keresés, visszahelyezés. Minden kn-ik iterációban: ECM aktualizálás, Duplikált elemek törlése. od. /* M ásodik fázis: Repeat Do kn -szer Szelekció, mutáció, helyi keresés, visszahelyezés. od. ECM aktualizálás, Duplikált elemek törlése, Restart. optp= a legjobb egyed, opt=f(optp) until limit < erációszám end Az alkalmazott paraméterek a következők: 3
t a populáció mérete, itt az első fázis eráció száma, kn minden kn-edik erációban ellenőrizzük az algoritmust, limit maximális erációszám. B_ MA jellemzők A főbb funkciók és jellemzők a két fázisban a következők: Input adatok. Az algoritmus először a V, R, E-R számosságokat, majd a járművek számát és C kapacitását olvassa be. Utána az R, majd E-R halmaz élei következnek. Az éleket folyamatosan sorszámozza 1-től R-ig: a sorszámok tehát csak azon éleket azonosítják, amelyeken szolgáltatást kell teljesíteni. Ha egy él csúcsait felcseréljük, azaz inverz irányban használjuk az élt, akkor a sorszám+1000 kóddal jelöljük az inverz élt. Egyedek. Egy egyed m féle útvonalat ír le. Ez egyes útvonalak kezdete a telephelyről indul, ezt egy további határolóval, a nulla sorszámmal jelöljük. Az útvonal vége ismét a telephely, de ez egyben azonos a következő útvonal kezdetével, így nem jelöljük külön nulla sorszámmal. Az R éleinek eléréséhez szükségesek lehetnek további számozatlan élek az E-R halmazból: ezeket nem jelöljük az útvonalakon, csak figyelembe vesszük az útvonal költségénél. (Ehhez Floyd (1962) algoritmusával kiszámoljuk a legrövidebb útvonalat minden csúcs közt és egy mátrixban tároljuk). Az egyed tehát egy permutációja lesz az R éleinek, valamint a nulla kezdőjelnek m-szer (a ciklikus permutációkat azonosnak tekintjük). Pl. egy három útvonalból álló 10 élt érintő szolgáltatás esetén egy lehetséges egyed: 0 10 3 4 0 5 7 9 0 1 2 6 1008 (ahol 1008 a 8. él inverzét jelöli). Minden útvonal egy járműhez tartozik, melynek kapacitása C. A szállított anyag ellenőrzéséhez így minden járműnél feltételeket kell megfogalmazni: g i (az i-dik útvonalon szükséges anyag C) 0 (i=1, 2,, m). Kezdő populáció. A kezdőpopulációt véletlenszerűen eráljuk, de a populáció első néhány egyedét (kb. 30 egyedet) a következő kép eráljuk. R minden éléhez meghatározzuk a többi él távolságát (csúcsaikat figyelembe véve) és növekvő sorrendbe rendezzük a szomszédos éleket a távolság alapján. E szomszédsági lista alapján választjuk rendre a következő élt e néhány elemnél. Az első élüket véletlenszerűen választjuk, de a következőket már a szomszédsági lista alapján, kiválasztva a legközelebbi, még nem érintett élt. Ha elkészül az él sorozat, útvonalakat vágunk egymás után az él sorozatból figyelembe véve a C kapacitást (végül lehetséges, hogy lesznek üres járművek, vagy lesz egy jármű túl sok anyaggal). Fitnesz függvény. Az algoritmus fitnesz függvénye relatív sorrendet határoz meg az egyedek közt. E fitnesz meghatározásához az f célfüggvényt, amely az útvonalak összköltségét adja, valamint a g i feltételeket használjuk. Mérje D(x) a g i (j=1,2,,m) feltételek megszegésének mértékét: 1/ 2 m 2 D ( x) max{ ( ),0} g j x j 1 4
(Ha egy x egyed lehetséges megoldás, akkor D(x)=0). Jellemezze D(x) és f(x) az x egyedet a következő kép: x jobb egyed y-nál, ha D(x)<D(y). Ha D(x)=D(y), x akkor jobb y-nál, ha f(x)< f(y). Szelekció. Az első fázisban nincs szelekció, az egyedek véletlenszerűen eráljuk. A második fázisban csonkolásos szelekciót alkalmazunk. Mutáció. A mutációt a második fázisban alkalmazzuk. Kétféle transzformáció változat közt választ az algoritmus: a transzformáció valószínűségét az EVL alapján határozza meg (lásd a mellékletben), vagy egy véletlen transzformációt alkalmaz. Mindkét esetben a következő transzformációk valamelyikét alkalmazza: csere, beszúrás, két útvonal egy-egy részletét kicseréli, vagy az él inverzét veszi. ECM aktualizálás. Az ECM az R sorszámozott éleinek, ezen élek inverzeinek, valamint a nulla előfordulási gyakoriságát gyűjti, tanulja a permutáció különböző pozícióin a sikertelen egyedek alapján. Periodikusan a populáció 20 %-t használja fel e célra. Helyi keresés. Az algoritmus hatféle változatát alkalmazza a 2-opt helyi kereső eljárásnak egymás után. A kiválasztott két útszakasz (él) alapján az egyes változatok különböző transzformációkat alkalmaznak. Így a két útszakasz által megadott permutációrészben megfordítja a szakaszok sorrendjét, kicseréli a két útszakaszt, beszúrja a második szakaszt az első után, az útszakasz inverzét veszi, ha az útszakaszok különböző útvonalak részei, akkor az útszakaszokkal induló befejező részét az útvonalaknak kicseréli, ha az útszakaszok különböző útvonalak részei, akkor az útszakaszokkal végződő, induló részét az útvonalaknak kicseréli. Minden 2-opt változat sztochasztikus: ha nem tudja javítani a megoldást, kis valószínűséggel elfogadja a rossz transzformációt. Visszahelyezés. Mindkét fázisban az algoritmus a leghasonlóbb egyeddel hasonlítja össze az utódot (Hamming távolság alapján). Ha az utód jobb, a korábbi egyed helyére kerül. Ha az egyedek száma kevesebb, mint a populáció mérete, akkor az utódot beszúrja új egyedként (restart után). Restart. Ha több mint 300 eráció alatt nem javult a legjobb egyed minősége, akkor a második fázist új populációval folytatja az algoritmus: csak a legjobb egyedek 30%-át tarja meg, a többit törli. Megállási feltétel. Az algoritmus megáll, ha a eráció szám nagyobb, mint limit. 4. Teszteredmények A különböző benchmark feladatok közül DeArmon és Englese 23, 24 feladatát választottuk tesztelésre (http://www.uv.es/~belengue/carp.html). DeArmon feladatai (gdb feladatok) a kapacitással adott kínai postás, míg Englese feladatai (egl feladatok) a kapacitással adott vidéki postás probléma körébe tartoznak. DeArmon feladatai kisméretűek (7-27 csúcs, 11-55 él), Englese feladatai pedig már közepes méretűek 77-140 csúccsal és 98-190 éllel. Az algoritmust Visual Basic-ben programoztuk és Intel Core Duo CPU 2.2 GHz processzoron, 2 GB RAM memóriával, Windows Vista Business operációs rendszer alatt futott. A paraméterek beállításánál komoly segítséget jelentett a járatszervezési problémára fejlesztett algoritmusunk (Borgulya, 2008), melynek több paraméter értékét át lehetett venni. Így a populáció mérete t=90, az első fázis hossza itt=50, az ellenőrzések gyakorisága kn=10. 5
A maximális erációszám függ a probléma nehézségétől, így limit=10000, vagy 20000 értéket használtunk. 1.t áblázat. B_MA eredmények. név AK Hiba % Idő név AK Hiba % Idő LJ LR AT LJ LR AT gdb1 316 0.00 0.00 0.00 0.40 egl-e1-a 3548 0.00 0.00 0.00 45 gdb2 339 0.00 0.00 0.00 2.40 egl-e1-b 4498 0.00 0.60 0.50 246 gdb3 275 0.00 0.00 0.00 0.42 egl-e1-c 5566 0.52 0.98 0.95 203 gdb4 287 0.00 0.00 0.00 0.25 egl-e2-a 5018 0.00 0.17 0.08 264 gdb5 377 0.00 0.00 0.00 5.52 egl-e2-b 6305 0.67 0.73 0.70 340 gdb6 298 0.00 0.00 0.00 0.54 egl-e3-c 8243 1.12 1.84 0.50 1650 gdb7 325 0.00 0.00 0.00 0.46 egl-e3-a 5898 0.00 0.22 0.11 2210 gdb10 344 1.16 2.61 1.70 175.00 egl-e3-b 7704 1.26 1.51 1.34 2360 gdb11 303 0.00 2.64 0.82 251.00 egl-e3-c 10163 1.40 1.92 1.70 1850 gdb12 275 0.00 0.00 0.00 1.30 egl-e4-a 6408 1.19 1.91 1.46 2100 gdb13 395 0.00 0.00 0.00 16.00 egl-e4-b 8884 1.71 2.08 1.88 2820 gdb14 450 1.78 2.66 2.19 12.00 egl-e4-c 11427 3.13 3.75 3.42 7726 gdb15 536 0.00 0.00 0.00 50.00 egl-s1-a 5018 0.00 1.31 1.20 140 gdb16 100 0.00 0.00 0.00 0.35 egl-s1-b 6384 0.47 1.98 1.03 350 gdb17 58 0.00 0.00 0.00 0.19 egl-s1-c 8493 0.29 1.78 0.62 1540 gdb18 127 0.00 0.00 0.00 3.45 egl-s2-a 9824 2.70 2.75 2.71 5297 gdb19 91 0.00 0.00 0.00 0.14 egl-s2-b 12968 4.17 7.43 4.59 12010 gdb20 164 0.00 0.00 0.00 0.51 egl-s3-c 16353 1.85 2.79 2.43 13210 gdb21 55 0.00 0.00 0.00 0.07 egl-s3-a 10143 1.70 2.79 2.29 8055 gdb22 121 0.00 0.00 0.00 5.11 egl-s3-b 13616 2.75 3.42 3.09 13149 gdb23 156 0.00 0.00 0.00 15.23 egl-s3-c 17100 2.33 2.66 2.41 9400 gdb24 200 0.00 0.00 0.00 34.21 egl-s4-a 12143 3.11 4.13 3.55 12561 gdb25 316 0.00 0.85 0.21 81.00 egl-s4-b 16093 2.23 2.29 2.23 3521 egl-s4-c 20375 7.46 10.58 9.42 31030 Átlag 0.13 0.38 0.21 28.50 1.67 2.48 2.01 5503 A B_MA eredményeit az 1. táblázat tartalmazza. A tábla átlagos eredményeket mutat: a kisebb feladatokat hússzor, a közepes méretűeket tízszer futtattuk. A tábla tartalmazza a 6
feladatok nevét (név), az ismert alsó korlátot (AK), az AK-tól való relatív eltérés százalékát (Hiba %) három értéknél: a legjobb megoldásnál (LJ), a legrosszabb megoldásnál (LR) és az átlagos megoldásnál (AT). Végül a legjobb eredmény eléréséhez szükséges átlagos futási idő látható CPU másodpercbe n (Idő). A táblázatban félkövér számok jelzik azon legjobb értékeket, ahol az érték azonos az ismert legjobb megoldással. 2. táblázat. Összehasonlító eredmények. Módszer DeArmon feladatok Hiba % Englese feladatok LJ AT LJ AT CARPET 0.48 3.63 - B_MA 0.13 0.21 1.67 2.01 LPR_MA 0.13 0.15 1.32 1.74 BE_TS 0.13 0.29 1.03 1.54 Végül a 2. táblázat összehasonlító eredményeket tartalmaz. Összehasonlításra a B_MA mellett két TS módszert: CARPET (Hertz et al., 2000) és BE_TS (Brandăoa és Eglese 2008), valamint egy memetikus algoritmust: LPR_MA (Lacomme et al., 2004) választottunk. A táblázat a legjobb eredmények, valamint az átlagos eredmények hibáit mutatja a különböző módszereknél. Megállapítható, hogy a B_MA a DeArmon feladatokon a legjobb módszerek közé tartozik. Az Englese feladatokon a harmadik a rangsorban (de több esetben jobb az eredménye az LPR_MA-nál (lásd Lacomme et al., 2004)). 5. Összefoglalás Tanulmányunkban a CARP megoldására egy heurisztikát, egy memetikus algoritmust (B_MA) mutattunk be. Algoritmusunkat a korábbi módszerektől eltérő megoldás jellemzi: egy memória alapú technikát (EVL) alkalmaz mutációnál és több féle sztochasztikus kereső eljárással javítja az eredményeket. A bemutatott eredmények az algoritmus fejlesztés eső stádiumába tartoznak. A kutatás következő részében célunk az algoritmus minőségének és futási idejének a javítása. A helyi kereső eljárások, valamint a programkód egyszerűsítésével, gyorsításával jobb eredményeket kívánunk elérni. 6. Köszönetnyilvánítás A kutatás az OTKA K 68137 támogatásával készült. 7. Melléklet. Az EVL alapgondolata a következő (Borgulya, 2006, 2008). Tekintsünk egy EA-t, és tegyük fel, hogy az egyed minden változója ugyanazon m diszkrét értéket veheti fel. Tárolja az ECM m x n es mátrix a változók különböző értékeinek gyakoriságát. E mátrixot a populáció néhány legrosszabb egyede alapján aktualizáljuk periodikusan. 7
ECM ij Jelölje a j-dik változó i-dik értékének gyűjtött és tanult gyakoriságát a -ik erációig. Az ECM mátrixot a következő képlettel aktualizálhatjuk: 1 ECMij (1 ) ECMij ECMij ( e. g. 0.2) ECM ahol ij a j-dik változó i-dik értékének gyakorisága a -ik erációban a legrosszabb egyedeket figyelembe véve, és egy relaxációs faktor. Az X utód j-dik változójának mutációs valószínűsége a következő: ECM x j j p j 1 a n j ECM kj k 1 ahol B a legjobb egyedek egyike és If Xj = B j then a j = 1 else a j = 0. Az EVL alapú mutáció a CARP esetén a következő. Legyen X utód és legyen B a legjobb egyedek egyike. Válasszunk véletlenszerűen egy (X j, X j+1) párt, és keressünk jobb értéket a j+1-dik változónak. Jelölje U az X i szomszédsági listájának néhány első elemét (pl. első n/3 élt). Válasszuk az első X z U élt p j+1 valószínűséggel (ha nincs ilyen, akkor egy véletlen X z U élt) : p j1 1 n k1 ECM z ECM z j1 k, j1 a j1 Ezután pl. kicseréljük X j+1 és X z értékeit. Irodalomjegyzék [1] Borgulya I. (2006) An Evolutionary Algorithm for the biobjective QAP. In: Reusch B. (Editor): Computational Intellice, Theory and Applications Advances in Soft Computing, Springer series. pp. 577-586. [2] Borgulya, I. (2008) An Algorithm for the Capacitated Vehicle Routing Problem with Route Balancing. Central European Journal of Operation Research (In print) [3] Brandăoa J, Eglese R. (2008) A deterministic tabu search algorithm for the capacitated arc routing problem Computers & Operations Research 35 1112 1126 [4] Floyd R.W (1962) Algorithm 97, Shortest path, Commun. ACM 5, 345. [5] Hertz A., Laporte G., Mittaz M. (2000). A Tabu Search Heuristic for the Capacitated Arc Routing Problem. Operations Research, 48(1), 129-135 [6] Lacomme P, Prins C, Ramdane-Cherif W.(2004) Competitive memetic algorithms for arc routing problems. Annals of Operational Research 131(1 4):159 85. 8