Gráfszínezés adaptív evolúciós algoritmusokkal



Hasonló dokumentumok
Szakdolgozat. Miskolci Egyetem. A genetikus algoritmus alkalmazási lehetőségei. Készítette: Biró Szilárd 5. Programtervező informatikus

Parciális differenciálegyenletek numerikus módszerei számítógépes alkalmazásokkal Karátson, János Horváth, Róbert Izsák, Ferenc

Szakdolgozat. Pongor Gábor

8. Mohó algoritmusok Egy esemény-kiválasztási probléma. Az esemény-kiválasztási probléma optimális részproblémák szerkezete

gyógypedagógus, SZT Bárczi Gusztáv Egységes Gyógypedagógiai Módszertani Intézmény 2

Szakmai zárójelentés

TARTALOM. Bekezdések Bevezetés A jelen Nemzetközi Könyvvizsgálati Standard hatóköre 1 Hatálybalépés időpontja 2 Cél 3 Fogalmak 4 Követelmények

Mesterséges Intelligencia MI

OPERÁCIÓKUTATÁS, AZ ELFELEDETT TUDOMÁNY A LOGISZTIKÁBAN (A LOGISZTIKAI CÉL ELÉRÉSÉNEK ÉRDEKÉBEN)

MATEMATIKA JAVÍTÁSI-ÉRTÉKELÉSI ÚTMUTATÓ

TERMELÉSMENEDZSMENT. Gyakorlati segédlet a műszaki menedzser szak hallgatói számára. Összeállította: Dr. Vermes Pál főiskolai tanár 2006.

Hosszú élettartamú fényforrások megbízhatóságának vizsgálata Tóth Zoltán. 1. Bevezetés

Gráfokkal megoldható hétköznapi problémák

NYILVÁNOS KÖNYVTÁRI KATALÓGUSOK

Miskolci Egyetem. Részbenrendezés maximális kompatibilis kiterjesztéseir l ütemezéselméleti vonatkozásokkal. PhD értekezés

Load-flow jellegű feladat a villamos rendszerirányításban

Kutatói tájékoztató Útmutató a KSH kutatószobai környezetében folyó kutatómunkához

Általános statisztika II. Kriszt, Éva Varga, Edit Kenyeres, Erika Korpás, Attiláné Csernyák, László

Matematikai logika Arisztotelész Organon logika feladata Leibniz Boole De Morgan Frege dedukció indukció kijelentésnek

Nagy hálózatok előfeldolgozása gyorsabb útvonalkereséshez

A meteorológia az időjárás tudománya

DIPLOMAMUNKA Bir o P eter

II. Halmazok. Relációk. II.1. Rövid halmazelmélet. A halmaz megadása. { } { } { } { }

Minőségérték. A modellezés céljának meghat. Rendszer elemzés. Módszer kiválasztása. Modell megfelelőség elemzés. Működés szimuláció

Alkalmazott modul: Programozás

Három dimenziós barlangtérkép elkészítésének matematikai problémái

Az enyhe értelmi fogyatékos fővárosi tanulók 2009/2010. tanévi kompetenciaalapú matematika- és szövegértés-mérés eredményeinek elemzése

Programozás I. Metódusok C#-ban Egyszerű programozási tételek. Sergyán Szabolcs

Dualitás Dualitási tételek Általános LP feladat Komplementáris lazaság 2015/ Szegedi Tudományegyetem Informatikai Tanszékcsoport

Mesterséges Intelligencia I. (I602, IB602)

Vállalati integrált kockázatkezelés (II. rész)

0653. MODUL TÖRTEK. Szorzás törttel, osztás törttel KÉSZÍTETTE: BENCZÉDY LACZKA KRISZTINA, MALMOS KATALIN

Darts: surranó nyilak, gondolkodtató problémák Kombinatorika 6. feladatcsomag

DELTA (Δ) ÉS DÉ (d) Hegedűs János Leőwey Klára Gimnázium, Pécs az ELTE Természettudományi Kar PhD hallgatója

Vállalkozás alapítás és vállalkozóvá válás kutatás zárójelentés

Diplomamunka. Készítette: Ceglédi Róbert. Debrecen

Kvantumkriptográfia III.

TERMÉK FEJLESZTÉS PANDUR BÉLA TERMÉK TERVEZÉSE

Mátrixaritmetika. Tartalom:

SZÉCHENYI ISTVÁN EGYETEM MŰSZAKI TUDOMÁNYI KAR RENDSZERELEMZÉS I.

EGÉSZSÉGÜGYI DÖNTÉS ELŐKÉSZÍTŐ

A programozás alapfogalmai

Leggyakrabban használt adatbányászási technikák. Vezetői információs rendszerek

Következõ: Lineáris rendszerek jellemzõi és vizsgálatuk. Jelfeldolgozás. Lineáris rendszerek jellemzõi és vizsgálatuk

IFJÚSÁG-NEVELÉS. Nevelés, gondolkodás, matematika

INFORMATIKAI ALAPISMERETEK

A közlekedés társadalmi költségei és azok általános és közlekedési módtól függő hazai sajátosságai

hatására hátra lép x egységgel a toll

Független tanulmány a médiapluralizmus mutatóiról az Európai Unió tagállamaiban egy kockázat-alapú megközelítés felé

DIGITÁLIS TECHNIKA I Dr. Lovassy Rita Dr. Pődör Bálint

3. Gyakorlat Ismerkedés a Java nyelvvel

SCORECARD ALAPÚ SZERVEZETIRÁNYÍTÁSI MÓDSZEREK BEMUTATÁSA

Működési kockázati önértékelések veszteségeloszlás-alapú modellezése

FRAKTÁLOK ÉS A KÁOSZ

Corel PHOTO-PAINT X5 Maszkolástól nyomtatásig

II. Szabályalapú következtetés

Üzemeltetési kézikönyv. Távirányító BRC1D528

Csövek belső felületének vizsgálata

Járási népesség-előreszámítás 2051-ig

MINŐSÉGIRÁNYÍTÁS (PQM) ÉS MONITORING ISMERETEK

Gyakorlatok. P (n) = P (n 1) + 2P (n 2) + P (n 3) ha n 4, (utolsó lépésként l, hl, u, hu-t léphetünk).

Szeminárium-Rekurziók

Matematika évfolyam

2. MÉRÉSELMÉLETI ISMERETEK

A Nemzeti Névtér megvalósításának néhány kérdése

6. AZ EREDMÉNYEK ÉRTELMEZÉSE

noannb Számítógépek automatizált tervezése

Számítógépes döntéstámogatás. Genetikus algoritmusok

III/1. Kisfeszültségű vezetékméretezés általános szempontjai (feszültségesés, teljesítményveszteség fogalma, méretezésben szokásos értékei.

Regressziószámítás alkalmazása kistérségi adatokon

MATEMATIKA Kiss Árpád Országos Közoktatási Szolgáltató Intézmény Vizsgafejlesztő Központ

Dr. Pétery Kristóf: Excel 2007 feladatok és megoldások 2.

4. LECKE: DÖNTÉSI FÁK - OSZTÁLYOZÁS II. -- Előadás Döntési fák [Concepts Chapter 11]

Térinformatikai alkalmazások 4.

Informatikus informatikus Térinformatikus Informatikus T 1/9

Karbantartás. Az ESZR Karbantartás menüjébentudjuk elvégezni az alábbiakat:

SZAKDOLGOZAT. Nagy Gábor

Útmutató a Matematika 1. tankönyv használatához

9. Áramlástechnikai gépek üzemtana

Harmadik országbeli kutatók Magyarországon

LEKÉRDEZÉSEK SQL-BEN. A relációs algebra A SELECT utasítás Összesítés és csoportosítás Speciális feltételek

Lineáris programozás. Modellalkotás Grafikus megoldás Feladattípusok Szimplex módszer

BUDAPESTI GAZDASÁGI EGYETEM PÉNZÜGYI ÉS SZÁMVITELI KAR

SZENT ISTVÁN EGYETEM A HÁZTARTÁSOK GAZDASÁGI SZEREPÉNEK FUNKCIONÁLIS VÁLTOZÁSA

Internet programozása. 3. előadás

A 3D képgenerálás komplexitása

Novák Nándor. Készletezés. A követelménymodul megnevezése: A logisztikai ügyintéző speciális feladatai

A FOGLAKOZÁS ADATAI: SZERZŐ. Vindics Dóra. Vezérelj robotot! A FOGLALKOZÁS CÍME A FOGLALKOZÁS RÖVID

XXI. Országos Ajtonyi István Irányítástechnikai Programozó Verseny

Digitális technika VIMIAA01

ProAnt Felhasználói Útmutató

CCI-szám: 2007HU16UPO001. EGYSÉGES SZERKEZETBE FOGLALT MÓDOSÍTÁS november

Önzetlenség az élővilágban. Készítette: Torkos Hanga Gödöllői Református Líceum 12. osztály 2012

Országos kompetenciamérés 2007 Feladatok és jellemzőik. matematika 10. évfolyam

Útmutató A szakdolgozat elkészítéséhez

Bírálat. Mastalir Ágnes: "Rétegszerkezetű és mezopórusos katalizátorok alkalmazása szerves kémiai reakciókban" című MTA doktori értekezéséről

Diplomaterv Portál. Elektronikus szakdolgozat és diplomaterv nyilvántartó és archiváló rendszer. Felhasználói útmutató v11

Mesterséges intelligencia 1 előadások

2. ALPROJEKT FELHASZNÁLÓI KÉZIKÖNYV

MÉLYFÚRÁSI GEOFIZIKAI ADATOK ÉRTELMEZÉSÉNEK MODERN INVERZIÓS MÓDSZEREI

Átírás:

Szegedi Tudományegyetem Informatikai Tanszékcsoport Gráfszínezés adaptív evolúciós algoritmusokkal Diplomamunka Készítette: Veress Krisztián programtervező matematikus szakos hallgató Témavezető: Dr. Blázsik Zoltán egyetemi tanársegéd Szeged 29

Tartalomjegyzék Feladatkiírás.................................... 4 Tartalmi összefoglaló............................... 5 1. Evolúciós számítások 6 1.1. Az evolúciós algoritmus.......................... 6 1.1.1. Az algoritmus működési elve.................... 6 1.1.2. Egyedek, fitnesszfüggvény és a génmódosítások......... 7 1.1.3. Az evolúciós algoritmusok gyenge pontjai............. 9 1.2. Egy új evolúciós keretalgoritmus...................... 1 1.2.1. Bővebb genetikai műveletkészlet támogatása........... 1 1.2.2. A természetes szelekció kontrollálása............... 11 1.2.3. A keresőműveletek alkalmazása.................. 13 1.2.4. Párhuzamosítási lehetőségek.................... 13 2. Gráfszínezés, ismert gráfszínező heurisztikák 14 2.1. A gráfszínezési probléma.......................... 14 2.2. Gráfok hatékony reprezentációja...................... 15 2.3. A mohó színezés algoritmusa........................ 16 2.3.1. Fokszámokon alapuló algoritmusok................ 17 2.3.2. A heurisztikák kombinálásának lehetőségei............ 17 2.3.3. MATLAB megvalósítások..................... 18 2.4. Maximális független csúcshalmazon alapuló szekvenciális algoritmus.. 19 3. Gráfszínezés evolúciós algoritmusokkal 2 3.1. Az egyedek kódolása és a fitnesszfüggvény................ 2 3.2. A javasolt genetikus keresőműveletek................... 21 3.2.1. Evolúciós algoritmusok a MATLAB-ban............. 22 3.3. A bővített eljárások verifikációja...................... 24 3.4. A heurisztikák és evolúciós módszerek összehasonlító elemzése..... 28 3.4.1. Közelítési pontosságok a kromatikus számra........... 28 3.4.2. Futásidők elemzése......................... 3 3.4.3. A kapott eredmények összefoglalása................ 31 4. A sík 1 színezésének vizsgálata EKG algoritmussal 34 4.1. A sík 1 színezésének problémája...................... 34 4.2. Akadályok keresése magasabb kromatikus számú gráfokban....... 35 4.2.1. Az EKG kromoszómái és genetikus keresőműveletei....... 35 4.2.2. Az EKG algoritmus megbízatósági vizsgálata........... 38 2

4.3. Akadálykeresés és elemzés......................... 39 4.3.1. A csúcsfokszámok és a közelítési pontosság összefüggése.... 41 4.3.2. Akadályok Mycielski 4 -ben.................... 43 Összefoglalás................................... 45 Nyilatkozat.................................... 46 Köszönetnyilvánítás................................ 47 Irodalomjegyzék................................. 48 3

Feladatkiírás Megoldandó feladat: Egy NP-teljes feladat ( pl. 3-SAT, gráfok színezése, maximális méretű független csúcshalmaz keresése gráfokban, TSP(C), hátizsák feladat, a ládapakolási feladat ) ismertetése és megoldása. Majd néhány heurisztikus algoritmus bemutatása, és összehasonlításuk a genetikus algoritmussal kapott megoldással. Elérendő cél: Különböző heurisztikus algoritmusok és a genetikus algoritmusok összehasonlító elemzése. A kiválasztott problémák mindegyikéhez meg kell írni többféle elven működő programot, amelyek eredményeinek jóságát össze akarjuk hasonlítani. A programnyelv szabadon megválasztható. A téma igényes kidolgozása esetén diákköri dolgozat is készülhet belőle. 4

Tartalmi összefoglaló Ezen dolgozatban a numerikus optimalizálás területén jól bevált genetikus illetve evolúciós algoritmusok teljesítményét fogjuk vizsgálni gráfszínezési problémák megoldása során. Az evolúciós algoritmusokat széles körben, az üzleti szférától az autógyártásig alkalmazzák. Immáron egyre több befektető jobban megbízik a szimulált evolúció túlélőiben, mint a pénzügyi szakértőkben. Fényt derítünk a sztenderd evolúciós stratégiák hiányosságaira, illetve bizonytalansági tényezőire, s olyan megoldásokat javasolunk, amelyekkel az algoritmus hatékonysága megnövelhető. A javasolt algoritmus számos újítást tartalmaz a sztenderd változatokhoz képest, s ezen újítások együttes alkalmazásától jelentős javulást remélünk. Tekintettel arra, hogy ezen algoritmust nagy méretű, nehéz problémák megoldására terveztük, a terheléselosztást és párhuzamosítási lehetőségeket a tervezés és implementálás minden szakaszában figyelembe vettük. Ismert számos gráfszínezési algoritmus, amelyek belátható időn belül megoldást szolgáltatnak, azonban ezek vagy csak speciális, általában kis méretű problémák esetén alkalmazhatóak, vagy a közelítéssel kapott megoldás igen messze van az optimálistól. Egy gráfszínezési feladatokat tartalmazó adatbázis elemein összehasonlítottuk a direkt módszereket a sztenderd evolúciós algoritmusokkal, illetve a továbbfejlesztett algoritmusunkkal. Ezután egy speciális, nagy méretű és igen bonyolult gráfszínezési problémát vizsgáltunk, amelyre nem ismert direkt módszer, így ez egy igen termékeny táptalaj az evolúciós algoritmusunknak. A probléma nyitott, így a pontos megoldás nem ismert. A dolgozatban elkészítettünk olyan evolúciós algoritmusokat, amelyek képesek ezen nyitott probléma vizsgálatára. A vizsgálatok során fontos megállapításokra jutottunk, amelyek támpontot adhatnak a későbbi kutatásokhoz. A tapasztalataink azt mutatják, hogy az evolúciós algoritmusok igen jól alkalmazhatóak a gráfszínezési problémakör számos problémájára, robusztusak, könnyen kezelhetőek és könnyen módosíthatóak, amely a heurisztikus megközelítés miatt igen fontos. Számos esetben szolgáltattak jobb megoldást, mint az ismert gráfszínezésre használt heurisztikák, nagyobb gráfméretek, illetve bonyolultabb struktúrák esetén mindenféleképpen hatékonyabbak. Kulcsszavak: gráfszínezés, heurisztikus eljárások, evolúciós módszerek, hibrid rendszerek, sík kromatikus száma 5

1. fejezet Evolúciós számítások 1.1. Az evolúciós algoritmus Nagyon sok olyan probléma létezik, amelyre nem ismert algoritmus, vagy ismert ugyan, de az nem hatékony, vagy éppen nem megbízható. Sok ilyen feladattal találkozhatunk a nemlineáris optimalizálás területén. Olyan feladatoknál, ahol nehéz meghatározni a globális optimumot, megelégszünk az optimális megoldás egy közelítésével, és ezekre a közelítésekre keresünk hatékony, megbízható algoritmust. Ilyenek az evolúciós algoritmusok, amelyek a természetben lejátszódó folyamatokat modellezik, mégpedig a genetikus öröklődést, az evolúciót, illetve a darwini küzdelmet az életben maradásért. A genetikus algoritmust először John Holland a michigani egyetem tudósa javasolta a 6-as évek elején. Az első eredményt 1975-ben érte el, az Adaptation in Natural and Artificial System c. publikációval (HOLLAND [11]), őtőle származik az alábbi definíció. 1.1.1. Definíció. [Evolúciós algoritmus] Az evolúciós algoritmus egy olyan keresőalgoritmus, amelynek alapja a természetes szelekció, és természetes géntechnológiák, eredménye pedig egy olyan hatékony keresőalgoritmus, amely az emberi keresési stratégia újító hajlamait tartalmazza. Az evolúciós algoritmusokat megalapozó hasonlat a természetes evolúció hasonlata. Az evolúció során az egyes fajok feladata az, hogy minél jobban alkalmazkodjanak egy bonyolult, ráadásul állandóan változó környezethez. A tapasztalat, melyet az egyes fajok az alkalmazkodás során szereznek, beépülnek a kromoszómákba, és azok tovább öröklődnek. 1.1.1. Az algoritmus működési elve Az EA a probléma megoldását iteratív módon keresi. Az eljárás ciklikusan működik, minden ciklusban egyidejűleg több egyeddel (megoldással) dolgozva. Az aktuális egyedek halmazából mint populációból válogatással, majd különböző kereső műveletek alkalmazásával állít elő újabb egyedeket, ún. utódokat. Az egyes egyedek rátermettségét a fitnesszfüggvénnyel méri, amely a rátermettebb egyedekhez nagyobb (kisebb) számot rendel, így előnyösebb helyzetbe juttatva azokat a következő ciklusban bekövetkező evolúciós szelekció során. A létrehozott utódok és szülők halmazából (általában) a legrátermettebb egyedeket választja ki a következő ciklus számára. Ez a rátermettség-alapú szelekció fogja eredményezni a célfüggvény minimalizálását, a problémára adott minél jobb 6

megoldás megtalálását. Az egyedeken végrehajtott génmanipulációk és az egyedek közötti géncserék biztosítják a problématér feltérképezését illetve a minél életképesebb e- gyedek kitenyésztését. A ciklusok azaz generációk addig ismétlődnek, amíg egy kívánt feltétel nem teljesül (pl. a generációk száma elér egy maximális értéket, vagy egy előre meghatározott szintnél jobb megoldásunk van). Az 1.1. ábrán az evolúciós algoritmus sematikus ábráját láthatjuk. Jól megfigyelhető a kereteljárás iteratív jellege, amely az újabb és újabb populációk létrehozását, az egyedek értékelését, illetve a megállási feltételek ellenőrzését foglalja magában. 1.1. ábra. Az általános evolúciós algoritmus sémája 1.1.2. Egyedek, fitnesszfüggvény és a génmódosítások Az egyed, vagy individuum mindig a problémának egy lehetséges megoldását jelöli. Formai szempontból igen változatos lehet: sztring, valós vektor, de akár összetett struktúra ( áramköri rajz, program, zenemű, stb. ) is lehet. Az egyedek szavakkal való leírását fenotípusnak nevezzük. A fenotípus a környezet számára észlelhető tulajdonságai az egyedeknek, amelyen érthetjük teljes fizikai megjelenését, vagy egy specifikus jelleg meglétét. Az algoritmusban az egyed reprezentációjára alkalmas struktúrát genotípusnak hívjuk. A genotípus egy egyed genetikai felépítése (lényegében maga a genom), ami az egyed fenotípusát kódolja. A populációt alkotó egyedek mint lehetséges megoldások értékelését is szükséges elvégeznünk, erre az ún. fitnessz-függvény hivatott. A fitnessz-függvény minden egyedhez egy értéket rendel, a hozzárendelt érték annál magasabb, minél jobb az adott egyed a feladat megoldása szempontjából. Az EA pilléreinek igen részletes bemutatása megtalálható a BORGULYA [2] könyvben. A populációt az egyedek, más néven kromoszómák alkotják. Minden populáció a lehetséges megoldások terét adja, az egyedek populációján végbemenő evolúció a potenciális megoldások halmazán történő keresésnek felel meg. A populációk egymásutánját generációknak hívjuk. Az EA generációk sorozatát állítja elő, jobb és jobb egyedeket létrehozva az új populációkban. 7

A szelekció felelős elvégezni a természetes szelekciót, azaz a gyenge egyedek elhagyását, és biztosítani az erősebb egyedek túlélését illetve szaporodását. Az evolúció során egy populáció egyedei közül a szelekció határozza meg, mely egyedek alkalmasak szülőknek, mely egyedeket hagyjunk el, és mely egyedeken módosítsunk. Az egyedeken végzett effajta szűrés olyan eljárásokkal történik, amelyek figyelembe veszik az egyedekhez tartozó életképességi tényezőket, így a rátermettebb egyedek nagyobb valószínűséggel lehetnek szülők. Az egyedeken végezhető génmódosításokat két csoportba sorolhatjuk: A mutáció egy egyed genotípusán végzett változtatás, amely az egyed spontán alkalmazkodását hivatott modellezni. Olyan kereső művelet, amely az utódot jellemző változókat kis értékkekkel (zajokkal) módosítja. A mutáció nagyon fontos szerepet tölt be a keresési tér szélesítésében, hiszen tetszőleges módon megváltoztathat egy egyedet, így új génállományt juttatva a populációba. Ezáltal a lokális szélsőértékeket könnyebben elkerülhetjük, illetve azokba kevésbé ragadhatunk be. A keresztezés két egyed génjeinek kicserélését jelenti, azaz a természetben előforduló szaporodást modellezni. A keresztezés a legfőbb motorja az evolúciós algoritmusoknak, hiszen több, számunkra értékes egyedből egy várhatóan még értékesebb egyedet azaz jobb megoldást próbál készíteni. A keresztezés nélkül a konvergencia nem lenne lehetséges, hiszen önmagukban a mutációs operátorok a keresési térben csupán oszcillálnának. Fontos továbbá megemlíteni, hogy az evolúciós algoritmusok nem véletlen algoritmusok. Az EA ugyanis determinisztikus lépések egymásutánját hajtja végre, nem az eljárás véletlenszerű, hanem a kereteljárásban használt műveletek végrehajtásának módja véletlenített. Az optimális megoldások megtalálása tehát nem egyszerűen a véletlen szerencsén, sokkal inkább a kereső műveletek minél pontosabb specifikációján, és az algoritmus paramétereinek jól átgondolt beállításán múlik. Az EA mint optimalizáló eljárás matematikai modelljének tekintsük a következőt. Keressük az y e = min (fit(e)) e F = arg min (fit(e)) e F értékeket, ahol fit : F R a fitnesszfüggvény és F a fenotípus, mint egyedek halmaza. Az evolúció modellezése során fellépő génváltoztatásokat a mutáció és keresztezés szolgáltatják: m(e) e F : G G, e = m(e) r(e 1,e 2 ) e1,e 2 F : G G G, e = r(e 1,e 2 ) ahol G a genotípus, mint kromoszómák halmaza. Az EA módszereket egyszerű célfüggvénnyel rendelkező, determinisztikus rendszerek esetén nem érdemes alkalmazni, hiszen ilyen problémák esetén a célfüggvény deriváltjai, és más segédinformációk ismeretében a direkt módszerek sokkal hatékonyabbak. Abban az esetben, amikor a célfüggvény ismert de bonyolult, esetleg egy black-box 1 függvény, az evolúciós algoritmus egy jó választás lehet. 1 black-box függvény: egy függvényt black-box függvénynek nevezünk, ha a viselkedését csak bemenetkimeneti párokkal tudjuk leírni és zárt képlete nem ismert 8

1.1.3. Az evolúciós algoritmusok gyenge pontjai Az evolúciós algoritmus egy igen skálázható kereteljárás, hasonlóan a korlátozás és szétválasztás módszerhez. Tekintettel arra, hogy egy probléma megoldásának elkészítése során a keretből egy konkrét algoritmust kell készítenünk, a tervezés több pontján is fontos döntéseket kell hoznunk. A korlátozás és szétválasztás módszernél ezen döntésekre vonatkozó korlátok egyértelműen le vannak fektetve, azonban az evolúciós algoritmusnál ez nincs így. A probléma egyedül a fenotípust és a célfüggvényt szolgáltatja, így döntenünk kell a következőkben: - Milyen genotípust használjunk, azaz milyen módon kódoljunk egy lehetséges megoldást? - Hogyan határozzuk meg a kezdőpopulációt, és mekkora legyen a populációnk mérete? A populáció mérete fix, vagy változtatható legyen? - Milyen szelekciós sémát alkalmazzunk? Milyen módon lehessen egy egyedet mutálni? Milyen típusú mutációt használjunk? - Milyen módon határozzuk meg két egyed keresztezésének eredményét, és hogyan válasszunk a keresztezés számára szülőket? - Milyen valószínűséggel alkalmazzuk az evolúciós operátorokat? - Kooperatív, vagy kompetitív sémát alkalmazzunk, azaz az egyedek egymás ellen küzdjenek a túlélésért, avagy egymást segítsék, hogy minél tovább éljenek? Ezen kérdésekre adott válaszok nagyban befolyásolják a leendő algoritmusunk minőségét, különös tekintettel annak konvergenciájára, megbízhatóságára és globalitására. Léteznek általános szabályok, azonban ezek alkalmazása pontosan az általánosság miatt nem feltétlenül vezet megfelelő eredményre. A legfontosabb probléma az, hogy az általános kereteljárás kizárólag egy-egy keresztezés, mutációs és szelekciós műveletet támogat. A valós helyzetekben azonban több-több változat is elképzelhető, amely egyrészt bővebb keresési teret eredményez, továbbá az evolúció különböző pontjain a különböző műveletek hatása más és más lehet. Ezen megfigyelés alapján elmondhatjuk, hogy valós igény van a kereteljárás olyan módosítására, amely egyszerre több műveletet is képes kezelni egy genetikai művelettípuson belül. A génmódosítások alkalmazása, azaz az egyedek evolválása egy valószínűségvektor alapján történik. A (P Xover, P Mutation ) = (.8,.2) vektor amely használatával a közel 5 egyedből 4 nemzőképes állapotot fejezzük ki általában jól használható. Azonban ezen vektor meghatározására nincs elfogadott módszertan tekintettel arra, hogy ez a modellekből nem származtatható, függ a genetikus műveletek megvalósításaitól, a keresési tértől, az aktuális populációktól, és az algoritmus aktuális állapotaitól is. A valószínűségvektor ilyen formában továbbá csak egyetlen egy szabadsági fokkal rendelkezik, hiszen fennáll a P Xover = 1 P Mutation ekvivalencia. A valószínűségvektoron azonban nagyon sok múlhat, hiszen ez vezérli az adott műveletek életbelépését, ha úgy tetszik a populáció sorsát. 9

1.2. Egy új evolúciós keretalgoritmus A sztenderd evolúciós algoritmus bővítésekor a célunk az volt, hogy egy olyan kereteljárást készítsünk, amely az evolúciós kereső műveletekből egy osztályon (mutáció, keresztezés) belül több művelet is támogatott és ezek paraméterei önadaptívak, konvergenciája összemérhető a sztenderd változatéval, mégis globalitási szempontból túlteljesíti azt, rendelkezik azzal az általánosítási képességgel, amely a sztenderd EA-nak is tulajdonsága, a fitnesszértékek számítása és a populáción végzett műveletek elosztott rendszereken végezhetőek, továbbá kooperatív és kompetitív séma alkalmazására is lehetőség van. Most sorra megvizsgáljuk a kitűzött célokra adott megoldásainkat. 1.2.1. Bővebb genetikai műveletkészlet támogatása Az EA a felhasználó által megadott kereső eljárások használatával keres mind jobb és jobb megoldásokat. Ez utóbbiakban szolgáltatjuk ugyanis a probléma leírását, azt, hogy milyen módon lehet jobb és jobb egyedeket kreálni. A genetikus műveletek bővítése nem jelent mást, mint több mutációs és több keresztezés művelet megadását. Amennyiben ez nem kívánt, vagy nem lehetséges, visszakapjuk a hagyományos 1-1 kereső művelettel dolgozó evolúciós algoritmust. 1.2.1. Példa. Adott áramköri kapcsolásban szereplő elektronikai elemeket úgy szeretnénk elhelyezni, hogy a vezetékek összhossza minimális legyen. Ez rádiófrekvenciás áramkörökben igen fontos, hiszen a vezetékek komoly zavart kelthetnek. Az egyedeket ekkor kódolhatjuk az áramköri elemek pozíciójának konkatenációjaként. Mutációs operátorokra a következőket javasolhatjuk: 1. Tetszőleges két áramköri elem pozíciójának felcserélése. 2. Két szomszédos áramköri elem pozíciójának felcserélése. 3. Tetszőleges n elem kiválasztása, majd ezek közül a passzív elemek (Ohmikus ellenállás, induktivitás, kondenzátor) minél közelebbi csoportosítása. Hasonlóan a keresztezés műveletre is megfogalmazhatnánk akár több módszert. Az evolúciós algoritmusunkat kiegészíthetjük továbbá egyéb speciális kereső műveletekkel, ilyenek lehetnek az elitista túlélés (elite survival), illetve hibernáció (hibernation) műveletek, amelyek általában a generációk közötti még bővebb géncserét biztosítják (lásd CHANG [3]). Tekintettel arra, hogy a bővebb műveletkészlettel dolgozó eljárás többféle módon tud keresni, várhatóan a keresési teret (az összes lehetséges megoldások halmazát) hatékonyabban be tuda járni. Minél változatosabb genetikus műveletekkel tudjuk felruházni az algoritmust, az annál gyorsabban és biztosabban konvergál az optimális megoldáshoz. 1

1.2.2. A természetes szelekció kontrollálása A hagyományos EA algoritmusokban használt szelekciós (másnéven kiválasztás) művelet a populáció átlagos minőségét hivatott javítani. A szelekció alapja az a megfigyelés, hogy jobb egyedeknek sokkal inkább lehetnek jobb utódaik, azaz a szülők és az utódok fitnessz-értékei közt korreláció mutatható ki. Számos szelekciós séma található a szakirodalomban, a műveletek egy része matematikai vizsgálatok eredménye, más része a természetben található szelekciókhoz hasonló. A szelekciós műveleteket a következőképpen csoportosíthatjuk: Fitnesszarányos szelekció, amely az egyedeket fitnessz értékük arányában választja ki a szűlők állományának elkészítéséhez. Ilyenek a rulett szelekció, sztochasztikus univerzális mintavétel illetve a csonkolásos szelekció (HAPP [6], POLI [23]). Sorrend alapú szelekció, amely az egyedeket fitnessz értékük alapján sorrendbe rendezi, és a sorrendiséget használja fel alapul. Ez a módszer biztosítja, hogy ne keletkezzenek szupermegoldások és hogy a populáció változatossága megmaradjon. Ilyen műveletek a versengő szelekció illetve a lineáris sorrend alapú szelekció (BLICKLE et al., 1997). Mivel a javasolt algoritmusunk bővebb műveletkészlettel rendelkezik, a szelekciós műveletnek nemcsak művelet típusra kell vonatkoznia, hanem konkrét műveletre. 1.2.2. Definíció. Egy P populáció egyedeit rendezzük sorba fitnesszértékük alapján csökkenő sorrendben. A legnagyobb fitnesszértékű egyed az 1., a következő a 2., a legkevésbé ígéretes egyed a legnagyobb sorszámot kapja. Az e i egyed rank(e i ) rangján az egyed sorszámát értjük. Az effajta rangsorolás biztosítja, hogy az egyedeket sorrendi-alapon, mégis fitnesszarányosan értékeljük, amely független a fitnesszértékek egymáshoz való viszonyától. 1.2.3. Definíció. Vegyünk (e 1,e 1)..., (e n,e n) egyedpárokat az evolúció bármely szakaszából úgy, hogy e i P k és e i P k+1 azaz egymás utáni generációkban szerepelnek és e i = M(e i) azaz e i az e i M típusú mutációja. Ekkor az M mutáció fittségén a fit(m) = 1 n n i=1 rank(e i ) rank(e i ) értéket értjük. 1.2.4. Definíció. Vegyünk (e 1 1,e2 1,e 1 )...,(e1 n,e2 n,e n ) egyed-hármasokat az evolúció bármely szakaszából úgy, hogy e 1 i,e2 i P k és e i P k+1 azaz egymás utáni generációkban szerepelnek, továbbá e i = C(e 1 i,e 2 i) azaz e i az e 1 i és e 2 i szülők keresztezésével áll elő. A C keresztezés fittségén ekkor a fit(c) = 1 n valós értéket értjük. n rank(e i ( ) rank(e 1 i ) + rank(e 2 i ) ) = 2 n i=1 2 n i=1 rank(e i ) rank(e 1 i ) + rank(e2 i ) 11

A genetikus műveletek fittségét tehát a művelet eredményeképpen kapott egyed illetve a kiindulási / szülő egyedek rangjának hányadosaként számíthatjuk. Mivel egy műveletet többször is alkalmazhatunk, a kapott hányadosokat átlagolni kell. Ez a számérték kifejezi, hogy az adott kereső művelet milyen hatással van az egyedek rangjára. Amennyiben egy O operátor (legyen az mutáció / keresztezés vagy egyéb művelet) fittsége kisebb, mint 1, várhatóan rosszabb egyedeket hoz létre, mint a kiindulási egyed(ek). Ha ez az érték jóval nagyobb, mint 1, a szóban forgó művelet a kiindulási egyedek rangját megnöveli, azaz várhatóan jobb egyedeket hoz létre. A genetikus operátorok fittségét minden új populáció készítésekor újra kell számolni az új adatok tükrében. A műveletek fittségének bevezetésével elérhető, hogy az evolúció minden egyes szakaszában a kereső műveletek is alkalmazkodjanak a változó kritériumokhoz azaz az algoritmus maga is adaptív legyen. Algoritmus. ( Evolúciókövető szelekció ) 1. Versengő szelekció (tournament selection, lásd WIKIPEDIA [28]) használatával határozzuk meg az X P, M P, E P halmazokat a P populáció egyedeinek fittsége alapján. Az X P szűlői állományba azon egyedek tartozzanak, amelyeken keresztezést kívánunk végrehajtani. M P illetve E P halmazok alkotják a mutációs állomány és egyéb állományt, amelyeken mutációt és egyéb kereső műveleteket hajtunk végre. 2. Az X P, M P, E P halmazokon belül hajtsunk végre sztochasztikus univerzális mintavételt (SUS, BAKER [1]), felhasználva az adott halmazokra vonatkozó kereső műveletek fittségét. A vázolt algoritmus helyét az evolúciós kereteljárásban a 1.2.ábra mutatja. 1.2. ábra. A bővített algoritmus evolúciókövető szelekciós sémája 12

1.2.3. A keresőműveletek alkalmazása Az evolúciókövető szelekció által meghatározott műveletek végrehajtása korántsem triviális. A szelekció során minden egyedhez hozzárendeltünk 1-1 keresőműveletet, az e i egyedhez jelölje ezt O l. Amennyiben O l egyoperandusú (pl. mutáció vagy törlés), azt minden további nélkül végrehajthatjuk. A művelet eredményeképpen kapott utódo(ka)t felhasználjuk az új populáció kialakítása során, majd az O l művelet fittségét újraszámítjuk. Ha O l keresztezés, működéséhez (legalább) 2 szülő szükséges, így az e i egyedhez szükséges további egyed(ek) kiválasztása. További szülőnek válasszunk véletlenszerűen olyan e j egyedet, amelyhez a szelekció ugyancsak az O l keresőműveletet rendelte. Nyilvánvalóan ez jó választás lesz, hiszen mindkét egyeden a kijelölt műveletet hajtjuk végre. Amennyiben nem található ilyen egyed ( az adott O l keresztezés műveletet csak az e i egyedhez rendeltük ), válasszunk véletlenszerűen olyan egyedet, amelyhez keresztezés műveletet rendeltünk. Ekkor a szülők bár nem egymásnak lettek kiválasztva, a szülői joguk megvan, így a keresztezés várhatóan sikeres lesz. Egyébként válasszunk tetszőleges egyedet az aktuális populációból. Természetesen több szülő választása esetén a választási stratégia triviálisan kiterjeszthető. 1.2.4. Párhuzamosítási lehetőségek A keretrendszer számos pontján lehetőség van a párhuzamosítás által elérhető gyorsítások alkalmazására. A keretrendszert úgy terveztük, hogy elosztott rendszereken, osztott memóriás programozási környezetben könnyen implementálható legyen. A megvalósítás során az ún. farmer-worker sémát javasoljuk, ahol a farmer a központi egység, amely a részproblémákat szétosztja a worker-k között, majd a kiszámított megoldásokat egyesíti. A kezdőpopuláció létrehozásakor minden egyed létrehozása független egymástól, így az tökéletesen párhuzamosítható. Megjegyezzük azonban, hogy egyszerű ( pl. uniform véletlen generálás ) egyedlétrehozás esetén ez nem ajánlott, hiszen a kommunikációs többlet akár lassíthatja is a feldolgozást. A genetikus operátorok alkalmazása ugyancsak független a többi egyeden végrehajtandó operátoroktól, így tökéletesen párhuzamosítható. Ez igen nagy sebességnövekedést jelenthet olyan esetekben, amikor a kereső műveletek nem egyszerű bitműveletek, hanem bonyolultabb algoritmusok. Az evolúciókövető szelekció során az ismertetett algoritmus 1. pontja által szolgáltatott X P, M P, E P halmazok elemeinek számításához kizárólag a P populációra van szükség, így tökéletesen párhuzamosítható. A 2. pont SUS eljárása pedig a halmazok egyedein függetlenül végrehajtható, így párhuzamosítható. Természetes módon minden egyed fitnesszértékének kiszámítása elvégezhető elosztott rendszereken, hiszen két különböző egyed fitnesszértéke független egymástól. A kereső műveletek fittségének kiszámítása definíció szerint ugyancsak az adott művelet szülő és utód egyedeitől függ, így elosztott rendszereken elvégezhető. Megjegyezzük, hogy abban az esetben, ha a genetikai műveletek száma nagyságrendekkel kisebb, mint az elosztott rendszerben rendelkezésre álló feldolgozó egységek száma, a párhuzamosítás lassíthatja a számítást. 13

2. fejezet Gráfszínezés, ismert gráfszínező heurisztikák 2.1. A gráfszínezési probléma 2.1.1. Definíció. Egy G = (V, E) gráf jó színezése alatt annak minden csúcsához egy nemnegatív egész szám (szín) hozzárendelését értjük, mégpedig úgy, hogy a szomszédos csúcsok színei különbözzenek. Ez egy F : V N leképezést jelent, amelyre az (u, v) E F(u) F(v) összefüggés fennáll. A továbbiakban feltesszük, hogy V = n és E = m. A gráfszínezés modellként szolgál a következő típusú feladatokban fellépő konfliktusok feloldására. Tegyük fel, hogy egy adott V halmazban bizonyos elemek páronként inkompatibilisek, a cél pedig nem más, mint minimális számú partícióra osztani V -t oly módon, hogy az egy partícióba eső elemek kompatibilisek egymással. A feladatot modellezhetjük egy G = (V, E) egyszerű gráf segítségével, ahol a csúcsok V halmaza a feladatban szereplő elemeknek felel meg, és az E élhalmaz az inkompatibilis elemeket összekötő éleket tartalmazza. Ekkor a V halmaz k számú partícióra bontása megfelel a G gráf legfeljebb k színt felhasználó jó csúcs-színezésének. Egy másik példa lehet egy cél eléréséhez szükséges részmunkák ütemezése is. Ekkor feltesszük, hogy bizonyos V részmunkák között ismert egy függőség reláció, amely megszabja, hogy egy v 1 V részmunkába csak u 1,...,u n részmunkák elvégzése után lehet belefogni. Ekkor ha elkészítjük a G = (V, E) gráfot, ahol E = {(u i, v i )} u i, v i V u i -tól függ v i, továbbá meghatározzuk a minimális k színt felhasználó csúcs-színezését, akkor az egy színt kapott részmunkákról elmondható, hogy egy időben elvégezhetőek. Egy általános gráf minimális színből álló jó színezésének megtalálása NP-nehéz probléma (GAREY [15]). Nemcsak hogy nehéz ilyen színezést találni, de még ennek megközelítése is igen költséges (CRES [19]). A gyakorlatban viszont a szekvenciális mohó heurisztikák elegendően hatékonynak bizonyultak (COLEMAN [25]). 14

2.2. Gráfok hatékony reprezentációja Az algoritmusainkat gráfokon szeretnénk futtatni, így szükséges megadni azt a struktúrát, amellyel tetszőleges irányított vagy irányítatlan gráfot számítógépeken reprezentálni tudunk. Gráfok reprezentálására több lehetőségünk is van, az egyik az ún. éllista használata. Ekkor minden csúcsot megszámozunk -tól V 1 -ig, majd létrehozunk minden csúcshoz egy-egy láncolt listát, amelyekben az adott csúcs szomszédait tároljuk. Szomszédsági mátrix használatával is le tudunk írni tetszőleges gráfot, ha azt a következőképpen definiáljuk: { } 1 ha(i, j) E I G (i, j) = ha(i, j) / E Ha G élsűrűsége magas, a szomszédsági mátrix, ritka gráfok esetén az éllista használata javallott a sebesség és memóriaigény alacsonyan tartása végett. Mindkét reprezentáció alkalmas irányított és irányítatlan gráfok megadására, hiszen külön kezeljük az (i, j) és (j, i) éleket, így mindkettőt felvehetjük (irányítatlan), vagy elhagyhatjuk az egyiket (irányított). Mivel gráfszínezési problémákat vizsgálunk, az irányítottság nem számít hiszen egy él - legyen az irányított vagy irányítatlan - két végpontja ígyis-úgyis különböző színű kell, hogy legyen. Ezért érdemes a következő, módosított szomszédsági mátrixot használni, amely mindig felső-trianguláris: { } ha i j I G (i, j) = 1 ha i < j és (i, j) E (j, i) E Az algoritmusainkat és teszteléseinket MATLAB környezetben gondoltuk megvalósítani, így a gráf reprezentációnkat is ezen környezeten belül szükséges megadnunk. Ritka mátrixok optimális tárolására a MATLAB sparse függvényét használjuk, amely gyors elérést biztosít, továbbá a felesleges memóriaigényt kiküszöböli. A gráfszínezési problémákat általában DIMACS formátumban prezentálják (lásd [5] DIMACS), így szükséges volt ezen formátumból való beolvasásra is. Az alábbi kód egy ilyen formátumú problémát olvas be, majd megjeleníti a reprezentációnkat. A kapott reprezentációt a display_graph függvénnyel grafikusan is megkaphatjuk. >> load_graph(../tests/homer.col ) Graph (V,E) : (561,3258) - undirected DIMACS #1 ans = Problem: homer.col D: [561x561 double] OptimalC: 13 Directed: >> display_graph(ans) A 2.1. ábrán Homérosz Iliász című művéből származó gráf reprezentációját láthatjuk. A gráf csúcsainak a műben szereplő személyeket definiálták, míg két személy között 15

homer.col 5 4 3 2 1 1 2 3 4 5 2.1. ábra. A homer.col problémát leíró gráf reprezentáció akkor és csakis akkor van él, ha a műben legalább egyszer találkoznak egymással. További hasonló, irodalmi művek - úgy mint Tolsztoj Anna Kareninája (anna.col), Mark Twain Hucleberry Finnje (huck.col) és Dicken David Copperfieldje (david.col) - által ihletett gráfokat készített Donald Knuth, amelyek ugyancsak megtalálhatóak abban az adatbázisban, amelyet később széleskörűen használni fogunk. 2.3. A mohó színezés algoritmusa A gráfszínezési problémákra alkalmazott mohó algoritmus a gráf csúcsait egy adott sorrendben színezi ki, megpedig úgy, hogy mindig a legkisebb érvényes színt használja. Algoritmus. (Mohó színezés) 1: Jelöljük a használható színeket 1,..., n számokkal 2: Tekintsük a csúcsok egy tetszőleges (v 1, v 2,...,v n ) sorrendjét 3: for i = 1 to n do 4: C i csúcs színezett szomszédainak színhalmaza 5: szin(i) min({1,..., n}\c) 6: end for Az algoritmus által szolgáltatott színezés minősége nagyban függ a csúcsok sorrendjétől. A mohó algoritmus általában nem ad optimális megoldást, sőt közelítő mértéke sem kielégítő, hiszen megadható olyan gráf és olyan csúcssorrend, hogy a használt színek száma a csúcsok számával megegyezik (pl. Crown-gráf), azonban tetszőleges gráfhoz megadható olyan csúcssorrend, amely esetén optimális megoldást kapunk (HAJNAL [8]). A mohó algoritmusra épülő heurisztikák kizárólag a csúcssorrend minél alkalmasabb megadására törekszenek. A csúcsok sorrendben való felsorolása (first fit - FFIT), illetve a csúcssorrend véletlen generálása (random vertex ordering - RANDO) a két triviális heurisztika. A két heurisztika időigénye O( V E ), hiszen minden csúcsra meg kell vizsgálni a szomszédok színeinek minimumát. 16

2.3.1. Fokszámokon alapuló algoritmusok 2.3.1. Definíció. Egy G = (V, E) gráf v V csúcsának fokszáma a v csúcs szomszédainak számával egyezik meg. A mohó algoritmus általában belefut olyan esetekbe, amikor egy nagyobb fokszámú csúcs minden szomszédja színezett. Ekkor előfordulhat, hogy olyan színt kell használni amely megnöveli a színezésben használt színek számát. Érdemes tehát először a nagyobb fokszámú csúcsokat kiszínezni. A csúcsok csökkenő fokszám szerinti rendezésével (largest degree ordering - LDO) jobb közelítő eredmények érhetőek el, mint azt majd látni is fogjuk. Az LDO heurisztika időigénye T = V E + V log V + V E = V (2 E +log V ) = O( V E ), amely a fokszámok kiszámításából, azok rendezéséből, majd a mohó algoritmus futtatásából tevődik össze. 2.3.2. Definíció. Egy G = (V, E) (nem feltétlenül teljesen) színezett gráf esetén egy v V csúcs incidencia fokát a v csúcs színezett szomszédainak számával definiáljuk. A színezés minden pontján szeretnénk biztosítani azt, hogy egy csúcs színezésére minél kevesebb korlátozó feltétel legyen érvényben, azaz minél kevesebb szomszédja legyen színezve. A fenti definíció használatával adódik a csúcsok csökkenő incidenciafok szerinti rendezésének (incidence degree ordering - IDO) használata. A színezés minden lépése után ki kell számítani a csúcsok incidenciafokát, amely a mohó színezéssel együtt T = V 2 E + V 2 log V + V E = O( V 2 E ) futásidőt eredményezne. A futásidőt lecsökkenthetjük O( V E ) -re, ha egy csúcs színezésekor a szomszédainak incidenciafokát eggyel növeljük, ahelyett, hogy minden iterációban azt minden csúcsra újraszámolnánk. Az IDO heurisztikát továbbfejleszthetjük, ha a korlátozó feltételeket jobban megvizsgáljuk. Egy csúcs színezését a szomszédainak színe korlátozza. Azonban külöbség van v i és v j csúcsok korlátai között, ha v i színezett szomszédainak színe ugyanaz, és v j színezett szomszédainak színe mind különböző. Nyilvánvaló, hogy v j -re erősebb korlátok vannak szabva, így a színezés során ezt a csúcsot szükséges előrébb venni. 2.3.3. Definíció. Egy G = (V, E) (nem feltétlenül teljesen) színezett gráf esetén egy v V csúcs szaturációs fokát a v csúcs különböző színekkel színezett szomszédainak számával definiáljuk. A szaturációs fokszám szerint csökkenő sorrendben vett mohó algoritmus ( saturation degree ordering - SDO ) futásideje O( V 2 E ). Ez sajnos nem csökkenthető, hiszen egy színezés alkalmával minden csúcsra újra kell számítani a szaturációs fokszámot. 2.3.2. A heurisztikák kombinálásának lehetőségei Az ismertetett heurisztikák (LDO, IDO, SDO) a csúcsokat adott szempont szerint monoton csökkenő rendezésben szolgáltatják. Mivel a monotonitás nem szigorú, előfordulhat olyan eset, hogy több csúcs fokszáma / incidenciafoka / szaturációs foka megegyezik. Ekkor a heurisztikák bejárási sorrend alapján választanak ezen csúcsok közül, azaz általában a csúcsok indexelése szerint növekvő sorrendben. A heurisztikákat ilyen ekvivalenciák esetén kombinálhatjuk egymással. Használhatjuk az LDO heurisztikát, majd mikor több csúcs fokszáma megegyezik, közülük IDO heurisztika alapján választunk. 17

Hasonló módon az IDO és SDO algoritmusokban fokszámegyezés esetén más és más heurisztikákat alkalmazhatunk. Későbbi tesztjeink során két kombinációt vizsgálunk: LIDO. Használjuk az LDO heurisztikát. Csúcsok fokszámának egyezése esetén incidencia-fok alapján válasszunk. Az algoritmus futásideje a használt heurisztikákból adódóan O( V E ). SLDO. Használjuk az SDO heurisztikát, majd a csúcsok szaturációs fokszámának egyezésekor nagyobb fokszám szerint válasszunk közülük. Mivel az SDO heurisztika dominál, a futásidőt is ez határozza meg, így az SLDO algoritmus O( V 2 E )-es futásidővel rendelkezik. 2.3.3. MATLAB megvalósítások A mohó algoritmuson alapuló heurisztikákat a color_heuristic függvényben valósítottuk meg. A függvénynek két paramétere van, a gráfszínezési probléma, illetve a használni kívánt heurisztika. A MATLAB eljárás egy struktúrát ad vissza, amelynek C mezője egy konkrét színezést, x mezője a visszaadott színezésben használt színek számát jelenti. >> P = load_graph(../tests/queen5_5.col ); Graph (V,E) : (25,32) - undirected DIMACS #1 >> R = color_heuristic(p, sdo ) R = x: 8 C: [1 2 3 4 5 3 4 1 2 6 2 5 6 3 1 6 1 2 5 4 4 7 8 1 2] >> A color_heuristic függvény második paramétereként az ffit, ldo, sdo, ido, lido, sldo és rando értékek használhatóak, amelyek a megfelelő heurisztikákat jelentik. A függvény pontosabb használatáról a help color_heuristic paranccsal kapunk bővebb tájékozatást. A színezés érvényességéről az is_valid_coloring eljárás segítségével bármikor meggyőződhetünk. Az eljárás igazat ad vissza, ha a színezés jó, egyébként hamisat: >> P = load_graph(../tests/mulsol.i.3.col ); Graph (V,E) : (184,3916) - directed >> R = color_heuristic(p, sldo ) R = x: 32 C: [1x184 double] >> is_valid_coloring(p.d,r.c) ans = 1 >> 18

2.4. Maximális független csúcshalmazon alapuló szekvenciális algoritmus 2.4.1. Definíció. Egy G = (V, E) gráf esetén egy H V csúcshalmaz független csúcshalmaz, ha minden u, v H csúcsra teljesül, hogy u nem szomszédja v-nek. Egy független csúcshalmaz méretét a H halmaz elemszámával definiáljuk. Egy H független csúcshalmaz maximális, ha bármely új csúcs hozzáadásával H már nem alkot független csúcshalmazt. Egy független csúcshalmaz definíciója alapján egyetlen színnel színezhető. Minél nagyobb az adott halmaz elemszáma, annál kevesebb csúcs marad a következő színekhez, így ezen megfigyelésekből felépíthetjük a következő algoritmust: Algoritmus. (Független csúcshalmazok törlése) 1: H V 2: col 1 3: while H nem üres do 4: Számítsunk ki egy H MF H minél nagyobb elemszámú maximális független csúcshalmazt 5: szin(v i ) col v i H MF 6: col col + 1 7: H H\H MF 8: end while Az algoritmus futásigénye nagyban függ a maximális független csúcshalmaz keresésének módszerétől. Keressük a halmazt x T {, 1} n vektorok formájában. Egy ilyen x vektor egyértelműen meghatároz egy halmazt, hiszen H MF = {i x i = 1}. Mostmár csak biztosítanunk kell, hogy x olyan koordinátáin legyenek egyesek, hogy azok által meghatározott pontok maximális független csúcshalmazt alkossanak, továbbá x minél több 1-est tartalmazzon. Az első feltétel biztosításához vegyük az élek egy sorrendjét e 1,...,e m. Az { } 1 ha A(i, j) {, 1} m n ei él egyik végpontja v = j egyébként mátrix bevezetésével egy bináris egészértékű lineáris programozási modellt állíthatunk fel: n min x i feltéve, hogy i=1 A x [1, 1,...1] T és x T {, 1} n A célfüggvény egyértelműen kifejezi azt, hogy minél több 1-est szeretnénk x-ben, a feltétel pedig garantálja, hogy páronként éldiszjunkt elemeket tartalmazzon, ellenkező esetben az A x oszlopvektor legalább egy koordinátáján 2-es állna, amely nem elégítené ki a korlátozó feltételt. A fenti LP feladatot az Optimization Toolbox által szolgáltatott bintprog eljárással oldottuk meg. A color_seqdel függvény pedig ezt felhasználva megoldja a paraméterében kapott gráfszínezési feladatot az ismertetett algoritmussal. 19

3. fejezet Gráfszínezés evolúciós algoritmusokkal Az evolúciós algoritmus egy általános kereteljárás, így egy adott probléma esetén szükséges megmondani az alkalmazott fitnesszfüggvényt, az egyedek kódolását, a mutációs és keresztezés műveleteket, illetve a futtatást befolyásoló egyéb paramétereket. 3.1. Az egyedek kódolása és a fitnesszfüggvény Egy gráf színezéséhez reprezentálnunk kell egy adott színezést minden egyedben, mégpedig úgy, hogy egy egyed egyértelműen azonosítson egy színezést, és egyértelműen el lehessen dönteni, hogy az adott gráfra nézve a színezés jó-e, vagy sem. Egy ilyen reprezentáció tökéletesen alkalmas jó színezés megtalálására, hiszen a fitnesszfüggvényt definiálhatjuk a színezésben előforduló hibák számaként. Minimális színt használó jó színezés keresésére azonban garantálnunk kell minden egyedre, hogy az jó színezést reprezentál. A következő algoritmusokban is ezt a megközelítést használtuk. Minden egyed a problémában szereplő gráf egy jó színezését jelenti. Az egyedeket egy n-dimenziós sorvektorként reprezentáljuk, egy e egyed 1 j n-edik komponense megadja a j-edik csúcs színét. A kezdőpopuláció kialakítására több módszer is lehetséges: 1. A kezdőpopulácó minden egyede az (1, 2,..., n) vektor egy véletlen permutációja lesz. Ez nyilván alkalmas hiszen minden csúcs színezett, továbbá a színezés is jó, hiszen minden csúcs színe különböző. Ez a módszer kellően diverz kezdőpopulációt hoz létre, így a globalitás szempontjából jó választás. Ugyanakkor valószínűsíthető, hogy az optimális megoldástól igen távoli egyedeket hoz létre, így a futásidőre és a konvergenciára nézve rossz hatással lehet. 2. A kezdőpopuláció minden egyedét egy véletlen csúcssorrendet használó mohó színezéssel (RANDO) generáljuk. Ez a módszer is lehetséges megoldásokat hoz létre, továbbá garantálja, hogy az evolúciós algoritmus legalább olyan jó eredményt fog adni, mint a RANDO eljárás. A fitnesszfüggvényt illetően a célunk az, hogy olyan egyedeket evolváljunk, amelyek minél kevesebb színt használnak. Ezt vizsgálhatjuk az egyedben előforduló maximális szín értékével: fit(e) = arg max i e i. 2

Ezen választás előnye, hogy a célfüggvényünk nagyon gyors, viszont garantálnunk kellene az algoritmus minden pontján, hogy minden e egyedben az 1, 2..., fit(e) színek előfordulnak. Ez igen nagy megkötés a genetikus kereső műveletekre nézve, így inkább definiáljuk fitnesszfüggvényünket a fit(e) = S, S = {k i : e i = k} összefüggés alapján, amely egy egyedhez a benne szereplő diszjunkt színek számát rendeli fitnesszértékként. 3.2. A javasolt genetikus keresőműveletek A keresztezés műveletekhez két eljárást készítettünk, a szükséges szülő egyedeket jelölje s 1,s 2. 1. Az első módszer véletlen sorrendben végighalad a gráf csúcsain, majd egy véletlen r változó alapján vagy s 1 vagy s 2 alapján színezi ki az adott csúcsot. Előfordulhat olyan eset, amikor egyik szülő adott csúcsra vonatkozó színe sem használható, ilyenkor a csúcs szomszédainak színezése alapján a legkisebb használható színt használjuk. Belátható, hogy ez az eljárás két jó színezésből egy harmadik jó színezést csinál, mégpedig úgy, hogy felhasznál bizonyos információkat a megadott két színezésből. 2. A második módszer elkészít egy H 1, H 2,...,H l halmaz-sorozatot, ahol H i = {v V s 1,v = i vagy s 2,v = i}, azaz H i halmaz azon csúcsokat tartalmazza, amely vagy s 1 vagys 2 szülőben i színű. A H i halmazokat sorrendben, azok elemeit véletlenszerűen végigvizsgálva, az adott csúcsokhoz a meghatározott színeket rendeljük, ha lehetséges. A végén előfordulhatnak olyan csúcsok, amelyek nem lettek színezve, ezekhez a legkisebb alkalmas színt rendeljük. Ez utóbbi eljárás előnyben részesíti a kis színnel színezett csúcsokat, ezáltal megpróbálva egy olyan egyedet kreálni, amely kisebb színeket használ, mint szülői. A mutációs műveletekre a következő eljárásokat használtuk: 1. A mutációra kiválasztott egyed bizonyos génjét (a gráf egy csúcsának színét) egy véletlen változó alapján vagy a legkisebb használható színre cseréljük, vagy nem változtatjuk. Nyilvánvaló, hogy így nem hozhatunk létre rosszabb egyedet, mint a kiindulási egyed, ezáltal ez egy igen hatékony kereső eljárás. Speciális esetben azonban a szülővel ekvivalens egyedet is létrehozhatunk, így ezen eljárás egyedüli használata nem biztos, hogy elegendő. 2. A második mutációra javasolt eljárás a következőképpen működik. Keressük meg a szülő egyed által leírt színezésben a legkevésbé használt szín(eke)t (a használt színek közül). Azokat a csúcsokat, amelyek ilyen színűek, próbáljuk meg a legkisebb használható színre színezni. 21

3. A harmadik eljárás igen egyszerű, mégis igen hasznos. Ha a kiindulási egyedben előforduló színek számát s n -el jelöljük, akkor az eljárás az egyed csúcsait újraszínezi oly módon, hogy az csak az 1, 2,..., s n színeket használja. Ez tulajdonképpen színek átalakítását jelenti, a színezés topológiáját nem változtatja meg, azonban a populációba új géntartalmat visz, így a diverzitásra igen jó hatással lehet. A populáció méretét tekintve a 2, 25, 3 illetve 4 értékekkel dolgoztunk, az elitek számát 2-nek, a keresztezés valószínűségét P xover =.8 -nek vettük. A sztenderd EA esetén sztochasztikus univerzális mintavételt használtunk szelekcióra, fitnesszérték-skálázásra pedig a rang függvényt (lásd HOPGOOD [9]) választottuk. A fent megadott eljárások tükrében az alábbi EA változatokat hoztuk létre: STEA. A kereteljárás a sztenderd evolúciós algoritmus, genetikus műveletekhez pedig a keresztezés és mutációs műveletek közül az 1. sorszámú eljárásokat használjuk. EKG1 - Bővített EA(1,1). Az evolúciókövető szelekciót, illetve az első keresztezés és mutációs műveletet használunk. Ezen algoritmus csak a szelekciós sémát illetően különbözik a sztenderd változattól, így jól megfigyelhetjük a módosításaink hatását az eredményekben. EKGN - Bővített EA(2,3). Az evolúciókövető szelekciót használjuk mindkét keresztezés és mindhárom mutációs művelettel együtt. Ezen algoritmus tartalmaz minden javasolt újítást. 3.2.1. Evolúciós algoritmusok a MATLAB-ban Ami a sztenderd változatot illeti, azt a MATLAB-hoz elérhető Genetic Algorithm and Direct Search Toolbox segítségével készítettük el. Ezen kiegészítő tartalmaz egy igen széleskörűen konfigurálható ga sztenderd EA-t, amely számos alkalmazásban bizonyította rátermettségét. Mivel ez egy kipróbált, sokak által tesztelt megvalósítás, jó alapot fog képezni későbbi összehasonlításainkhoz. Az általunk elkészített color_ga2 eljárás ez utóbbin alapul, használva az előzőekben ismertetett genetikus műveleteket és beállításokat. Mivel az evolúciós algoritmusok viselkedését is szeretnénk nyomonkövetni, statisztikai adatokat is gyűjtünk a futtatások során, ezt a ga2_output_fcn kiegészítő függvény végzi. A sztenderd változatnak opcionálisan paraméterül adhatjuk a kezdőpopuláció készítéséhez használandó függvényt, a maximum iterációk számát, a populáció méretét éppúgy mint a keresztezési rátát és elitek számát. Egy probléma megoldása: >> P = load_graph(../tests/queen6_6.col ); Graph (V,E) : (36,58) - undirected DIMACS #1 >> [R,S] = color_ga2(p,[1 1 2.8 3]) R = S = C: [1x36 double] x: 1 Fits: [2x51 double] 22

>> DVariance: [1x51 double] DMean: [1x51 double] D: [2x2 double] BestFits: [1x51 double] FVariance: [1x51 double] FMean: [1x51 double] ElapsedTime: 3.28 Generations: 51 FitCount: 14 Az S struktúrában megkapjuk az egyes iterációkban kiszámított statisztikai értékeket úgy mint a fitnesszértékek, azok minimuma, átlaga és varianciája, az egyedek távolságának átlaga és varianciája, az elvégzett iterációk száma, a célfüggvény-kiértékelése száma és a felhasznált processzoridő. Az evolúciókövető szelekciót használó bővített algoritmust az ekg.m fájlban található ekg eljárás valósítja meg. Az eljárásnak egyetlen beállításokat tartalmazó paramétere van, amelyet az ekgoptimset függvény használatával állíthatunk elő. A megvalósított algoritmust gráfszínezésre használja a color_ekg eljárás, amelynek két argumentuma a problémát leíró struktúra, illetve egy paremétervektor. Ez utóbbi a kezdőpopulációra használandó függvényt (1 vagy 2), az iterációk maximális számát, a populáció méretét, illetve azt tartalmazza, hogy 1-1 () vagy több (1) keresőműveletet szeretnénk használni: >> P = load_graph(../tests/myciel6.col ) Graph (V,E) : (95,755) - directed [R,S] = color_ekg(p,[2 1 3 1]); >> A futtatás során itt is statisztikai elemzést végzünk, a sztenderd változat által számított összes mutatót itt is számítjuk. Ha több keresőműveletet használunk, érdekes lehet tudni, hogy mikor, melyik műveletből mennyit használtunk, illetve a műveleteknek hogyan a- lakult a fitnesszértéke. Ezen információkat tartalmazza az eljárás által adott S struktúra OpsUsed és OpFits mezője. A mért értékeket ezután könnyen kirajzolhatjuk: 25 1 Müveletek alkalmazásának száma 2 15 1 5 Keresztezés 1 Keresztezés 2 Mutáció 1 Mutáció 2 Mutáció 3 2 4 6 8 Generációk Müveletek fitnesszértéke.8.6.4.2 2 4 6 8 Generációk 3.1. ábra. A kereső műveletek használati mértéke és fitnesszértékük a generációk során 23

3.3. A bővített eljárások verifikációja Az előző fejezetekben bemutatott módosított kereteljárás ellenőrzéséhez annak használhatóságát fogjuk összemérni a sztenderd evolúciós algoritmussal. Vizsgálataink során három algoritmust fogunk összehasonlítani: a sztenderd EA-t, a bővített kereteljárást 1-1 keresztezés és mutációs operátorral (ugyanazokat használva, mint a sztenderd kereteljárásban), valamint ez utóbbit több keresztezés és mutációs operátorral. Az evolúciós számításokban használt egyéb paramétereket (populációk száma, keresztezési ráta, elit egyedek száma, stb. lásd KOZA [12]) ugyanazon értékekre állítjuk, ezzel minimalizálva a vizsgálataink végeredményeinek hibáit. Tekintettel arra, hogy a dolgozat gráfszínezési problémák köré összpontosul, a verifikációt is ilyen témakörben végezzük. Az algoritmusokat ismert kromatikus számú gráfok színezése mellett vizsgáljuk. A tesztgráfokat egy ilyen célra kialakított adatbázisból nyertük ki (GRAPH COLORING TEST DATABASE [7]): # Probléma V E Élsűrűség (%) Kromatikus szám 1. myciel6.col 95 755 16 7 2. myciel5.col 47 236 2 6 3. queen8_12.col 96 1368 3 12 4. myciel7.col 191 236 13 8 5. mulsol.i.4.col 185 3946 23 31 6. miles5.col 128 117 14 2 7. le45_5a.col 45 5714 5 5 8. flat_3_26..col 3 21633 48 26 9. fpsol2.i.1.col 496 11654 9 65 1. le45_15b.col 45 8168 8 15 3.1. táblázat. A verifikációra használt gráfok tulajdonságai A verifikáció során szükséges ellenőrizni, hogy a bővített kereteljárás milyen megoldást ad, illetve azt mennyi idő alatt számítja ki. 7 Kromatikus szám 6 5 4 3 2 Optimális megoldás Sztenderd EA Bövített EA(1,1) Bövített EA(2,3) 1 1 2 3 4 5 6 7 8 9 1 Tesztadatok 3.2. ábra. Az algoritmusok által szolgáltatott legjobb megoldások A tesztgráfokon lefuttatuk mind a három evolúciós algoritmust. Az eredményként kapott kromatikus számokat és futásidőket az alábbi táblázatok tartalmazzák. 24

1 2 3 4 5 6 7 8 9 1 Optimális megoldás 7 6 12 8 31 2 5 26 65 15 Sztenderd EA 7 6 14 9 31 21 13 48 65 23 Bővített EA(1,1) 7 6 14 8 31 2 14 47 65 23 Bővített EA(2,3) 7 6 14 8 31 2 15 47 67 23 3.2. táblázat. Az algoritmusok által kiszámított megoldások A fenti táblázatból kiolvasható és a 3.2. ábráról leolvasható, hogy a sztenderd algoritmus háromszor adott rosszabb megoldást, és egyszer jobbat, mint a bővített algoritmus 1-1 operátorral használva. A többoperátoros esetben az algoritmus hasonlóan muzsikált, csupán három esetben adott rosszabb megoldást, mint a sztenderd EA. Ez nem feltétlenül tudható be az algoritmus helytelen működésének - hiszen más esetekben jobb megoldást is szolgáltatott, mint a többi megvalósítás. 1 2 3 4 5 6 7 8 9 1 Sztenderd EA 5.2 2. 9.8 21.9 29.6 8.1 77.7 377.4 196.4 117.8 Bőv. EA(1,1) 5.6 1.8 14.8 2.4 29.3 12.6 8.1 491.1 161.1 111.4 Bőv. EA(2,3) 1.9 4.9 44.9 51.6 45.6 23.4 96.8 58.8 257.9 197.5 3.3. táblázat. Az algoritmusok futásideje 1, 667 Ghz-es processzoron másodpercekben A futásidők összehasonlításához a 3.3. táblázatot vehetjük alapul. A sztenderd változat és a bővített változat futásideje egy nagyságrendű, míg a több keresőművelettel dolgozó algoritmus átlagosan másfélszer lassabb, mint társai. Ez a futásidőkülönbség a keresési tér nagyobb bejárásából adódik. 6 5 4 6 Sztenderd EA Bövített 5EA(1,1) Bövített EA(2,3) 4 CPU idö (s) 3 CPU idö (s) 3 2 2 1 1.5 1 1.5 2 2.5 E x 1 4.1.2.3.4.5 Elsürüség (%) 3.3. ábra. Az algoritmusok időigénye az élszám és élsűrűség függvényében A 3.3. ábrán a futásidők élszámtól és élsűrűségtől való viszonyát jelenítettük meg. Látható, hogy mindhárom algoritmus ugyanúgy viselkedik, az élszámtól lineárisan függnek a futásidők, éppen úgy, mint nagy élsűrűség esetén. Kis élsűrűség mellett pedig a csúcsszám határozza meg a futásidőt. 25