zmeuldumy
Colorarea Grafurilor
 
  Colorarea grafurilor folosind un algoritm genetic
Aspecte generale. In cele ce urmeaza voi prezenta un algoritm genetic pentru problema colorarii grafurilor. Am preferat o abordare bazata pe ordonarea varfurilor: imi propun sa gasesc, pentru un graf dat, o permutare a varfurilor sale pornind de la care sa pot construi o colorare cu numar minim de culori.

Reprezentare. Un cromozom reprezinta o ordonare a varfurilor grafului de intrare; il voi codifica printr-o permutare. Spre exemplu, pentru un graf G cu 4 varfuri, urmatorii 2 cromozomi sunt valizi: X = (4 2 3 1), Y = (1 3 2 4). Populatia initiala este generata aleator: sunt considerate permutari aleatoare.

Operatori genetici. Am experimentat un singur operator de incrucisare si doi operatori de mutatie. In continuare voi descrie fiecare operator in parte, urmand ca in sectiunea Parametri sa specific ratele acestora.

Operatori genetici. Incrucisarea. Fie X si Y doi cromozomi. Aleg aleator un punct de taiere cx in interiorul lui X si un punct de taiere cy in interiorul lui Y. In urma incrucisarii lui X cu Y vor rezulta doi cromozomi V si W care vor lua locul parintilor in populatie. Cromozomul V se obtine un modul urmator: se copie varfurile din X de pana la pozitia cx, dupa care se adauga varfurile ramase in ordinea in care acestea apar in cromozomul Y. In mod similar se obtine cromozomul W. Iata si un exemplu:
X = (3 1 6 | 2 5 4), Y = (5 2 | 4 1 3 6), V = (3 1 6 | 5 2 4), W = (5 2 | 3 1 6 4)

Operatori genetici. Order Mutation. Operatorul mutatie defineste pentru o solutie cadidat o vecinatate. Doi cromozomi X si Y sunt "vecini" relativ la operatorul Order Mutation daca din X putem obtine pe Y in urma unui numar k de interschimbari de varfuri (sau viceversa). Numarul k de interchimbari depinde de numarul de varfuri din graful de intrare si este stabilit inaintea rularii algoritmului (vezi Parametri pentru mai multe detalii). Iata si un exemplu, pentru k=1: X = (3 1 6 2 5 4), Y = (3 1 4 2 5 6).

Operatori genetici. Block Mutation. Acest operator realizeaza translatii de blocuri de k varfuri consecutive. Lungimea k a unui bloc depinde de numarul varfurilor din graful de intrare si este stabilita inaintea rularii algoritmului (vezi Parametri pentru mai multe detalii). Iata si un exemplu, pentru k=2:
X = (1 2 3 4 5 6 7 8 9 | 10 11 12), Y = (1 4 5 6 7 8 9 2 3 10 11 12).

Evaluare. Pentru a evalua o ordonare a varfurilor grafului de intrare, construiesc o colorare pornind de la aceasta. Numarul de culori necesare obtinut va dicta calitatea ordonarii. Am experimentat doua modalitati de construire a unei colorari pornind de la o ordonare data a varfurilor. In continuare le voi descrie pe amandoua.

Evaluare. Multimi stabile maximale consecutive. Dupa cum sugereaza si numele, o ordonare este evaluata la numarul de multimi stabile maximale consecutive. Avand in vedere faptul ca varfurile dintr-o multime stabila pot fi colorate cu aceeasi culoare, putem spune ca aceasta evaluare ofera numarul de culori necesare. Iata si un exemplu:
X = (2 4 | 1 6 5 | 3 7) este evaluat la 3, daca (2 4), (1 6 5) si (3 7) sunt multimi stabile, iar (2 4 1) si (1 6 5 3) nu.

Evaluare. Euristica. Am aplicat urmatorul algoritm:
Intrare: o ordonare X a varfurilor grafului de colorat G;
Iesire: o aproximare a numarului cromatic al grafului G;
Algoritm:
Viz <- {} // multimea varfurilor vizitate
nCulori <- 0 // numarul de culori
// G = (V, E)
while (Viz != V) do{
varfStart <- primul varf nevizitat, in ordinea X
B <- bfs(G, varfStart, Viz) // vecinii sunt considerati in ordinea X
S <- multimea stabila maximala obtinuta din B (considerand vf. in ordinea B)
nCulori++ // varfurile din S sunt colorate cu o noua culoare
Viz <- Viz reunit S
}

Selectie. Am utilizat o selectie bazata pe clasament. Cromozomii sunt clasificati in functie de fitness-ul asociat. Vom obtine atatea clase cate valori distincte ale functiei fitness, pentru populatia curenta, avem. Clasele rezultate sunt sortate crescator in functie de fitness-ul reprezentantilor. Construim un camp de probabilitate, dupa formula:
// pi -> probabilitatea asociata clasei i (dupa sortarea claselor)
// n -> numarul de clase obtinute
// sp -> presiunea selectiei (vezi sectiunea Parametri)
// i = 0, .., n-1
pi = 2 - sp + 2 * (sp - 1) * (n - i) / n
O clasa este aleasa utilizand motoda "Roulette Wheel"; dintr-o clasa se alege aleator un cromozom.

Parametri. In continuare voi enumera parametrii algoritmului genetic impreuna cu valorile cel mai des folosite in testele mele:
dimensiunea populatiei = 100
numarul de generatii = 500
probabilitatea incrucisarii = 0.6
probabilitatea mutatiei = 0.15
presiunea selectiei = 2 (dar, 1.0 ≤ sp ≤ 2.0)
order mutation: numarul de interschimbari este cuprins intre 0.05 si 0.1 din numarul de varfuri
block mutation: lungimea unui bloc este cuprinsa intre 0.05 si 0.2 din numarul de varfuri

Rezultate. Am efectuat teste pe o parte din grafurile de test DIMACS (mi-am procurat fisierele de test de la adresa http://mat.gsia.cmu.edu/COLOR02/). Prezint in continuare tabelul cu rezultate:
Numele Grafului |V| |E| X(G) k min k min (euristica)
2-Insertions_4.col (CAR) 149 541 ≤4 8 5
fpsol2.i.1.col (REG) 496 11654 ≤65 75 65
homer.col (SGB) 561 1629 ≤13 20 13
inithx.i.1.col (REG) 864 18707 ≤54 74 54
le450_15d.col (LEI) 450 16750 ≤15 76 26
le450_25d.col (LEI) 450 17425 ≤25 80 32
le450_5d.col (LEI) 450 9757 ≤5 52 7
mugg100_25.col (MIZ) 100 166 ≤4 5 4
mulsol.i.1.col (REG) 197 3925 ≤49 49 49
myciel7.col (MYC) 191 2360 ≤8 10 8
qg.order30.col (GOM) 900 26100 ≤30 98 31
queen13_13.col (SGB) 169 6656 ≤13 33 16
zeroin.i.1.col (REG) 211 4100 ≤49 50 49

Concluzii. Algoritmul se comporta bine, insa nu se compara cu rezultatele obtinute de alti algoritmi ce folosesc alte metaeuristici, sau imbina algoritmul genetic cu o alta metaeuristica. Algoritmul este deficitar si din cauza ca functia fitness aleasa are prea putine valori distincte fata de numarul mare de cromozomi (pentru un graf cu N varfuri avem N! solutii candidat - cromozomi - si doar maxim N valori distincte ale functiei fitness aleasa).
 
  Colorarea grafurilor folosind metaeuristica Tabu Search
Aspecte generale. In cele ce urmeaza imi propun sa prezint o varianta a metaeuristicii Tabu Search pentru problema colorarii grafurilor. Am abordat problema colorarii ca si in cazul algoritmului genetic: imi propun sa gasesc, pentru un graf dat, o permutare a varfurilor sale pornind de la care sa pot construi o colorare cu numar minim de culori.

Reprezentare. O solutie reprezinta o ordonare a varfurilor grafului de intrare; codificarea unei solutii va fi o permutare. Asadar spatiul de cautare este multimea permutarilor de ordin N, unde N este numarul de varfuri. Dimensiunea spatiului de cautare este, bineinteles, N!. Solutia initiala este o permutare aleasa aleator.

Vecinatate. Am definit vecinatatea V a unei solutii candidat X in modul urmator: V(X) = multimea solutiilor candidat ce se pot obtine din X prin translarea unui singur varf. Spre exemplu, daca X = (1 2 3 4 5 6) si Y = (1 3 4 5 6 2) atunci X si Y sunt vecini (X este in V(Y) si Y este in V(X)). Spunem ca Y s-a obtinut din X prin translarea varfului 2 de pe pozitia 2 pe pozitia 6. Acest mod de a defini vecinatatea unei solutii candidat ma asigura ca exista un drum, in graful indus de spatiul de cautare si notiunea de vecinatate prezentata, de la solutia initiala (aleasa aleator) la solutia optima cautata. De cele mai multe ori, dat fiind ca numarul de varfuri N din graful de intrare este mare, vecinatatea unei solutii date este de cardinalitate foarte mare. Din aceasta cauza, in algoritm, vor fi luati in considerare un numar limitat de vecini (alesi aleator).

Evaluare. Solutiile sunt evaluate in acelasi mod in care erau evaluati cromozomii in algoritmul genetic prezentat in prima parte.

Lista Tabu. O intrare in lista Tabu este o pereche de forma (v, i); rolul sau este de a impiedica varful v de a mai ajunge pe pozitia i (in solutia curenta), cel putin pe parcursul a unui numar de iteratii. Spre exemplu, daca in iteratia curenta a algoritmului s-a efectuat o trecere de la solutia X = (3 1 5 2 6 4) la solutia vecina Y = (3 5 2 6 1 4) atunci se va adauga in lista Tabu intrarea (1, 2) ce va impiedica intoarcerea varfului 1 pe pozitia 2.

Aspiratie. Accept o solutie vecina celei curente, interzisa de catre lista Tabu, doar daca ea atinge sau depaseste nivelul de aspiratie din iteratia curenta a algoritmului. Am considerat ca nivel de aspiratie numarul minim de culori gasit de algoritm pana la iteratia curenta.

Repornire. Daca algoritmul stationeaza prea mult pe un platou al functiei obiectiv (numarul de culori asociat unei ordonari) atunci il repornesc: aleg o solutie candidat aleatoare si golesc lista Tabu.

Parametri. In continuare voi enumera parametrii algoritmului impreuna cu valorile cel mai des folosite in testele mele:
numarul de iteratii = 30000
numarul de vecini considerati = 30
capacitatea listei Tabu = 500
numarul maxim de iteratii fara actualizarea numarului minim de culori = 5000

Rezultate. Am efectuat teste pe o parte din grafurile de test DIMACS (mi-am procurat fisierele de test de la adresa http://mat.gsia.cmu.edu/COLOR02/). Prezint in continuare tabelul cu rezultate:
Numele Grafului |V| |E| X(G) k min k min (euristica)
2-Insertions_4.col (CAR) 149 541 ≤4 6 5
fpsol2.i.1.col (REG) 496 11654 ≤65 67 65
homer.col (SGB) 561 1629 ≤13 17 13
inithx.i.1.col (REG) 864 18707 ≤54 62 54
le450_15d.col (LEI) 450 16750 ≤15 50 27
le450_25d.col (LEI) 450 17425 ≤25 52 32
le450_5d.col (LEI) 450 9757 ≤5 31 9
mugg100_25.col (MIZ) 100 166 ≤4 5 4
mulsol.i.1.col (REG) 197 3925 ≤49 49 49
myciel7.col (MYC) 191 2360 ≤8 8 8
qg.order30.col (GOM) 900 26100 ≤30 62 31
queen13_13.col (SGB) 169 6656 ≤13 24 17
zeroin.i.1.col (REG) 211 4100 ≤49 49 49

Concluzii. Algoritmul se comporta sensibil mai bine decat cel genetic, insa nu extraordinar. Prezinta aceeasi deficienta legata de modul de alegere a functiei obiectiv.
 
  Colorarea grafurilor folosing o colonie de furnici (metaeuristica Ant Colony Optimisation)
Aspecte generale. In cele ce urmeaza imi propun sa prezint o varianta a metaeuristicii ACO (Ant Colony Optimisation - Optimizare folosind colonii de furnici) pentru problema colorarii grafurilor. Am preferat sa abordez problema ca si in cazul algoritmului genetic sau a metaeuristicii Tabu Search: imi propun sa gasesc, pentru un graf dat, o permutare a varfurilor sale pornind de la care sa pot construi o colorare cu numar minim de culori.

Reprezentare. O furnica artificiala construieste o solutie candidat pas cu pas. Solutia candidat, in forma sa finala reprezinta o ordonare a varfurilor grafului de intrare, si o voi codifica printr-o permutare. Furnica artificiala parcurge, de fapt, un drum euclidian intr-un graf orientat complet, cu acelasi numar de varfuri ca si graful de intrare. Din acest punct de vedere o solutie candidat reprezinta ordinea de parcurgere a varfurilor grafului orientat complet considerat.

Constructia solutiei. Furnica parcurge graful considerat in sectiunea anterioara dupa un algoritm Best-First Traversal. Varful de start este ales aleator. In drumul sau ea lasa pe arce "urme" de feromon (ca urmare arcele vor fi ponderate). Am considerat un graf orientat deoarece pe arcele ij si ji pot fi concentratii de feromon diferite. La fiecare pas, furnica trebuie sa aleaga pe "cel mai bun" dintre varfurile nevizitate inca. Selectia urmatorului varf se face dupa procedeul "Roulette Wheel". Fiecarui varf v nevizitat inca i se asociaza o valoare falfa * hbeta unde f reprezinta concentratia de feromon pe arcul de la ultimul varf vizitat la v, h este valoarea data de o euristica, iar alfa si beta sunt parametri ai algoritmului. Probabilitatea asociata varfului v se calculeaza dupa formula: pv = valoarev / valoare_totala. Euristica amintita a fost prezentata in sectiunea "Evaluare. Multimi stabile maximale consecutive." la descrierea algoritmului genetic.

Actualizare feromon. Concentratia de feromon de pe arcele grafului considerat poate fi actualizata in mai multe feluri: actualizare individuala pas cu pas, actualizare individuala intarziata, actualizare globala. In implementarea mea am utilizat doar ultimele doua modalitati de actualizare. In plus, dupa fiecare iteratie (dupa ce intreaga colonie de furnici a parcurs graful considerat) concentratia de feromon descreste cu o anumita rata, numita rata de evaporare. Pentru a evita restrangerea spatiului de cautare, pe parcursul rularii algoritmului, am decis sa impun o limita inferioara a concentratiei de feromon pe arce.

Actualizare feromon. Actualizare individuala intarziata. Dupa ce o furnica termina de construit o solutie, ea actualizeaza concentratia de feromon de pe arcele pe unde a trecut. Valoarea adaugata este 1 / cost_drum, unde cost_drum este numarul de culori asociat drumului (drumul este o ordonare a varfurilor grafului de intrare si are prin urmare asociat un numar de culori). Costul unui drum este calculat si actualizat de furnica in timp ce il parcurge.

Actualizare feromon. Actualizare globala. Dupa fiecare iteratie (dupa ce toata colonia de furnici a parcurs graful orientat complet considerat) actualizez concentratia de feromon de pe arcele drumurilor de cost minim (printre drumurile parcurse de furnici). Actualizarea se face dupa aceeasi formula ca in actualizarea individuala intarziata.

Parametri. In continuare voi enumera parametrii algoritmului impreuna cu valorile cel mai des folosite in testele mele:
numarul de furnici = 100
numarul de iteratii ale algoritmului = 50
concentratia de feromon initiala pe arce = 5.0
concentratia minima de feromon = 1.0
rata de evaporare = 0.95
alfa = 2
beta = 4

Rezultate. Am efectuat teste pe o parte din grafurile de test DIMACS (mi-am procurat fisierele de test de la adresa http://mat.gsia.cmu.edu/COLOR02/). Prezint in continuare tabelul cu rezultate:
Numele Grafului |V| |E| X(G) k min
2-Insertions_4.col (CAR) 149 541 ≤4 5
fpsol2.i.1.col (REG) 496 11654 ≤65 68
homer.col (SGB) 561 1629 ≤13 15
inithx.i.1.col (REG) 864 18707 ≤54 61
le450_15d.col (LEI) 450 16750 ≤15 50
le450_25d.col (LEI) 450 17425 ≤25 55
le450_5d.col (LEI) 450 9757 ≤5 31
mugg100_25.col (MIZ) 100 166 ≤4 4
mulsol.i.1.col (REG) 197 3925 ≤49 49
myciel7.col (MYC) 191 2360 ≤8 9
qg.order30.col (GOM) 900 26100 ≤30 58
queen13_13.col (SGB) 169 6656 ≤13 23
zeroin.i.1.col (REG) 211 4100 ≤49 49

Concluzii. Algoritmul se comporta sensibil mai bine decat Tabu Search, insa nu extraordinar. Deficienta provine din cauza timpului de executie mare, relativ la timpii de executie ai celorlalti doi algoritmi prezentati.
 
  Referinte
A New Genetic Graph Coloring Heuristic. Cornelius Croitoru, Henri Luchian, Ovidiu Gheorghies, and Adriana Apetrei. University "Al. I. Cuza" Iasi, Romania. Faculty of Computer Science.

A Tutorial On Tabu Search. Alain Hertz, Eric Taillard, Dominique de Werra.

Metaheuristics in Combinatorial Optimization: Overview and Conceptual Comparison. CHRISTIAN BLUM, Universite Libre de Bruxelles, and ANDREA ROLI, Universita degli Studi di Bologna.

autor: florea marius dumitru  |  inapoi sus