CUPRINS CUPRINS...................................................................................1 PARTEA I – ALGORITMI GENETICI.................................................2 Capitolul 1: Probleme de optimizare.........................................................2 1.1. Noţiuni introductive.........................................................................2 1.2. Clase de metode de optimizare.......................................................5 Capitolul 2: Algoritmi genetici...................................................................7 2.1. Definirea conceptului......................................................................7 2.2. Structura algoritmilor genetici......................................................10 2.3. Operatori genetici.........................................................................13 2.4. Oportunitatea aplicării algoritmilor genetici..................................17 PARTEA a II- a – PROBLEMA PLANIFICĂRII RESURSELOR..............18 Capitolul 3: Prezentarea problemei.........................................................18 3.1. Modelul problemei de planificare..................................................18 3.2. Metode clasice de rezolvare..........................................................24 3.3. Algoritmi genetici pentru rezolvarea problemei de planificare ....31 3.4. Aplicaţie........................................................................................34 Bibliografie.............................................................................37
PARTEA I – ALGORITMI GENETICI Capitolul 1: Probleme de optimizare
1.1. Noţiuni introductive
Problema optimizării Creşterea extraordinară a complexităţii sistemelor concepute în ultimele decenii a impus, în proiectarea acestora, utilizarea aproape exclusivă a calculatoarelor. Un număr mare de metode de calcul au fost dezvoltate şi implementate în acest domeniu, metode care acoperă astăzi toate etapele muncii de proiectare, de la studiul cerinţelor, până la stabilirea detaliilor tehnologice. Evident, toate aceste activităţi stau sub semnul
maximizării
performanţelor,
iar
intrarea
lor
sub
incidenţa
optimizărilor (de orice fel) este inerentă, conducând la apariţia unor algoritmi de proiectare din ce în ce mai sofisticaţi şi performanţi. Optimizarea reprezintă disciplina din domeniul matematicii care se ocupă cu găsirea minimei sau maximei unei funcţii. Optimizarea cuprinde o arie foarte mare de tehnici din cadrul cercetării, inteligenţei artificiale, sau din informatică şi este folosită pentru a îmbunătăţi diverse procese, indiferent de domeniul de care aparţin (sănătate, afaceri, financiar, industrial, etc.). [1] Modelarea Un model este reprezentarea abstractă sau matematică a unei probleme şi este o parte esenţială în procesul de rezolvare optimă a acelei probleme. Luând în considerare faptul că problemele din lumea reală sunt foarte complexe şi depind de multe variabile, este dificilă dezvoltarea unui model matematic care să conţină toate aspectele problemei. Din acest motiv cercetătorii încearcă fie să formuleze un model simplificat, fie să facă numeroase presupuneri şi aproximări cu privire la problema studiată. Pentru că modelarea în acest caz este simplificată şi/sau aproximată, de
cele mai multe ori există discrepanţe majore între rezultatele obţinute şi soluţia optimă reală la problema respectivă. Aceste discrepanţe pot duce la decizii nepotrivite dacă acestea sunt luate doar după soluţia problemei simplificate, iar acest lucru se întâmplă des în procese decizionale sau de proiectare. Modelul matematic este numele dat unui set de instrumente proiectate pentru a rezolva probleme manageriale, de planificare şi proiectare unde factorul decizional trebuie să aloce resurse limitate unor activităţi variate pentru a optimiza un scop măsurabil. Caracteristica de bază a unei probleme ce poate fi rezolvată prin modelare matematică este aceea de a dezvolta un model matematic foarte bine definit. Modelele
matematice
au
3
componente
majore:
variabilele
decizionale, funcţiile obiectiv şi constrângerile (restricţiile). [1] Variabilele decizionale Variabilele
decizionale
depind
de
tipul
problemei
şi
pot
fi
reprezentate de cantităţile de resurse ce urmează să fie alocate sau de numărul de unităţi ce trebuie produse, sau char de către ambele variante. Factorul decizional caută setul de valori necunoscute care poate oferi o soluţie optimă a problemei. De obicei, variabilele decizionale se notează matematic cu: x1, x2 … xn sau cu x, y, z. [1] Funcţia obiectiv Funcţiile obiectiv reprezintă scopul/obiectivele problemei în termenii variabilelor decizionale. Fie o funcţie ƒ, definită astfel: , pentru o mulţime A de numere reale. •
Se caută elementul
(problema se
numeşte problemă de minimizare) •
Se caută elementul
(problema se
numeşte problemă de maximizare) A este o submulţime a spaţiului Euclidian
, des specificat ca un set
de limitări de posibilităţi, egalităţi sau inegalităţi pe care membrii lui A trebuie să le satisfacă (restricţii). Elementele lui A se numesc soluţii admisibile, iar funcţia ƒ se numeşte funcţie obiectiv sau funcţie cost. O
soluţie admisibilă care minimizează sau maximizează (în funcţie de tipul funcţiei) funcţia obiectiv se numeşte soluţie optimă.[2] Constrângerile (Restricţiile) Constrângerile sunt cunoscute ca şi restricţii sau limitări ale problemei ce urmează a fi optimizate. O constrângere are două componente, de obicei o funcţie şi o constantă, asociată unei egalităţi sau inegalităţi. Definirea problemei Faza definirii problemei este faza din care trebuie să rezulte o enunţare
clară
si
concisă
a
acelei
probleme,
rezultată
în
urma
observaţiilor, precum şi identificarea şi clarificarea stadiului în care se află aceasta. Din această definire clară a problemei trebuie să rezulte obiectivele urmărite. Tot în această etapă sunt elaborate ipotezele, sunt determinate restricţiile şi sunt stabilite rezervele, precum şi posibile informaţii cu privire la resurse şi paramatri implicaţi în problemă. Practica arată că definirea eronată a problemei, este cauza majoră a eşecului. Formularea problemei necesită numeroase încercări sau rafinare. Procesele de formulare încep cu încercări de formulări urmate de reformulări progresive şi modificări pe măsură ce proiectul se desfăşoară şi problema devine tot mai clară. Dezvoltarea modelului matematic Odată ce problema care trebuie analizată este definită, următorul pas este acela de a dezvolta un model matematic. El este o reprezentare matematică a sistemului real şi reprezintă inputurile importante ale problemei, într-o formă uşor de interpretat. Modelul matematic este testul experimental unde pot fi testate noi decizii alternative şi impactul asupra sistemului existent fără a deregla sistemul real. Scopul unui model este acela de a explica, prezice sau controla comportamentul entităţii modelate.
1.2. Clase de metode de optimizare
Dimensiunea problemelor O
măsură
a
complexităţii
problemei
de
programare
este
dimensiunea acesteia exprimată prin numărul de necunoscute şi de restricţii. Dimensiunea problemelor care pot fi rezolvate a crescut o dată cu dezvoltarea teoriei şi a tehnicilor de calcul. Se pot distinge acum trei categorii de probleme: de dimensiune redusă (cu cel mult 5 variabile sau restricţii), de dimensiune medie (între 5 şi 100 de variabile sau restricţii) şi de dimensiuni mari (cu peste 100 de variabile şi restricţii). Această clasificare reflectă nu numai diferenţe de dimensiuni, dar şi de abordare. Astfel problemele de dimensiuni mici pot fi rezolvate de mână sau cu un calculator de buzunar. Problemele de dimensiuni medii pot fi rezolvate pe un calculator, folosind programe matematice generale. Problemele de dimensiuni mari necesită programe sofisticate care exploatează caracteristicile particulare ale problemei şi de obicei se rulează pe calculatoare de mare capacitate. Teoria
iniţială
a
optimizării
s-a
concentrat
asupra
obţinerii
rezultatelor teoretice ignorând aspectele de calcul ale metodelor propuse. Abordările
recente
se
axează
pe
exploatarea
caracteristicilor
calculatoarelor, obţinând soluţia prin metode iterative. Algoritmi iterativi şi convergenţă Cea mai importantă caracteristică a calculatoarelor este capacitatea lor de a efectua operaţii repetitive într-un mod eficient şi din această cauză majoritatea algoritmilor de rezolvare a problemelor de optimizare sunt iterativi. În căutarea unei soluţii se alege un vector iniţial x0 şi algoritmul determină un vector x1 care conduce la o valoare mai bună a funcţiei obiectiv; procesul se repetă obţinându-se un şir de vectori x0, x1, … , xk, … , fiecare îmbunătăţind valoarea funcţiei obiectiv, faţă de precedentul. Acest şir converge către x*, soluţia problemei. În problemele de programare liniară soluţia se obţine după un număr finit de paşi. În probleme de programare neliniară şirul nu atinge niciodată soluţia, dar
converge către ea. Practic, algoritmul se opreşte când s-a obţinut un punct suficient de aproape de soluţie. Teoria algoritmilor iterativi poate fi împarţită în trei părţi. Prima parte se ocupă cu crearea de algoritmi. A doua parte, numită şi analiza convergenţei globale, analizează convergenţa unui algoritm către soluţia optimă atunci când se iniţializează cu un punct depărtat de soluţia optimă. Cea de-a treia componentă se numeşte analiza convergenţei locale şi studiază rata de convergenţă a şirului către soluţia optimă. Este esenţial când se recomandă un algoritm să se menţioneze şi o estimare a timpului necesar pentru obţinerea soluţiei. [3] Clasificarea metodelor de optimizare În funcţie de numărul şi tipul variabilelor, de numărul de restricţii, sau de tipul funcţiei ce trebuie optimizată, modelele şi metodele de optimizare se împart în mai multe categorii. Tabelul de mai jos ilustrează principalele categorii de metode de optimizare: Metoda Programare liniară Determinarea drumului
minim
(Dijkstra) Minimum spanning tree Algoritmul Ford/Fulkerson PERT şi gestionea resurselor Branch and Bound Algoritmul Balas (cu valiabile binare) Algoritmi genetici Algoritmul Hooke şi Jeeves Metoda Lagrange Metode GRG Programare quadrică Programare liniară secvenţială Programare quadrică secvenţială
Funcţie obiectiv Liniară Liniară
Restricţii Liniare Liniare
Liniară Liniară
Liniare Liniare
Liniară
Liniare
Neliniară Neliniară Neliniară Quadrică Neliniară Neliniară
Fără restricţii Egalităţi neliniare Neliniare Liniare Liniare
Capitolul 2: Algoritmi genetici
2.1. Definirea conceptului
Algoritmii genetici sunt tehnici adaptive de căutare euristică, bazate pe principiile geneticii și ale selecției naturale, enunțate de Darwin ("supraviețuiește cel care e cel mai bine adaptat"). Mecanismul este similar procesului biologic al evoluției. Acest proces posedă o trăsătură prin care numai speciile care se adaptează mai bine la mediu sunt capabile să supraviețuiască și să evolueze peste generații, în timp ce acelea mai puțin adaptate nu reușesc să supraviețuiască și cu timpul dispar, ca urmare a selecției naturale. Probabilitatea ca specia să supraviețuiască și să evolueze peste generații devine cu atât mai mare cu cât gradul de adaptare crește, ceea ce în termeni de optimizare înseamnă că soluția se apropie de optim. Un algoritm genetic este un model informatic care folosește modelul biologic evoluționist pentru a rezolva probleme de optimizare ori căutare. [4] Algoritmii genetici codifică soluţiile posibile ale unor probleme specifice într-o structură de date de tip cromozom şi aplică acestor structuri operatori de recombinare, pentru a păstra informaţia utilă. Un cromozom este un vector sau un şir de gene. Poziţia unei gene este numită locusul ei. Valorile pe care le poate lua o genă sunt numite alele şi sunt mulţimi finite de numere intregi, intervale de numere reale, sau chiar structuri complexe de date. Alelele (genă de un anumit tip de pe acelaşi cromozom) variază de la un locus la altul. Sarcina unui algoritm genetic e să descopere cromozomi din ce în ce mai buni, până la atingerea unei valori a raportului dintre evaluarea asociată unui şir şi evaluarea medie a tuturor şirurilor populaţiei (fitness) despre care se ştie că este optimală, sau până când algoritmul genetic nu mai poate aduce îmbunătăţiri.
Implementarea unui algoritm genetic începe cu o populaţie de cromozomi aleasă aleator. Se evaluează aceste structuri şi apoi se alocă facilităţi reproductive astfel încât acei cromozomi care reprezintă o soluţie mai bună pentru problema ţintă să aibă mai multe șanse de a se reproduce decât acei cromozomi care sunt soluții mai puțin bune. Definirea unei soluţii bune se face în raport cu populaţia curentă. Într-un sens mai larg, algoritm genetic este orice model bazat pe ideea de populaţie şi care foloseşte selecţie şi operatori de recombinare pentru a genera noi puncte într-un spaţiu de căutare. Ei sunt recomandaţi pentru aflarea soluţiilor neliniare ale unor probleme atunci cănd nu este posibilă modelarea matematică şi nici euristică în domeniu. Ideea de bază a unui algoritm genetic constă în a începe cu o populație de soluții, fiecare mai performantă decât precedentele. Fazele ciclului prin care operează un asemenea algoritm sunt: 1. Creearea unei populații de „membri”, (soluții candidat la rezolvarea unei probleme); 2. Selecția membrilor care s-au adaptat cel mai bine necesităților problemei de rezolvat; 3. Reproducerea (se folosesc operatorii genetici de încrucișare și mutație, pentru a obține noi membri); 4. Evaluarea gradului în care noii membrii corespund mai bine soluționării problemei; 5. Abandonarea populației vechi prin înlocuirea ei cu populația nouă din noua generație. Abandonarea
Populația
Evaluarea
Selecția
Reproducerea
Un asemenea ciclu se repetă până când este identificată cea mai bună soluție la problema în cauză. [5]
2.2. Structura algoritmilor genetici Algoritmii genetici încep, ca și alți algoritmi de optimizare, cu definirea variabilelor, a funcției obiectiv și a costurilor și se termină de asemenea ca orice alt algoritm de optimizare, cu testarea convergenței. Însă, între acești doi pași, algoritmul este diferit. O structură generală a unui algoritm genetic este prezentată mai jos: Definirea funcției obiectiv, a costurilor, a variabilelor Alegerea parametrilor AG Generarea populației inițiale Evaluarea cromozomilor Determinarea costului pentru fiecare cromozom Selectarea cromozomilor care vor participa la formarea noii generații Selectarea cromozomilor care vor participa la formarea noii generații Încrucișare Mutație Testarea convergenței Final
Definirea funcției obiectiv, a costurilor, a variabilelor. Alegerea parametrilor AG.
Algoritmul genetic începe prin a defini cromozomii sau o colecție de valori variabile care vor fi optimizate. Dacă un cromozom are N variabile (o problemă de optimizare N – dimensională), date de p1, p2, . . . , pN, atunci cromozomul va fi scris ca un vector linie de N elemente: cromozom = [p1, p2, . . . , pN]. Cromozomii utilizaţi au lungime constantă, pe tot parcursul algoritmului. Fiecare cromozom are un cost, determinat prin evaluarea funcției obiectiv – f – în p1, p2, . . . , pN: cost = f (cromozom) = f (p1, p2, . . . , pN). [6] Parametrii Operatorii introduşi mai sus se aplică unei populaţii care are iniţial anumite caracteristici (parametri) ce conferă zestrea genetică a populaţiei respective. Aceşti parametri joacă, deseori, un rol esenţial în reuşita algoritmilor genetici. Principalii parametri sunt: mărimea (dimensiunea) populaţiei, N; lungimea stringului asociat fiecărui individ (cromozom), l şi probabilităţile de încrucişare şi, respectiv, mutaţie, pc şi pm . Dacă mărimea (dimensiunea) populaţiei, N este foarte mare atunci timpul de calcul necesar AG creşte foarte mult, iar dacă N este prea mic, atunci AG poate converge rapid către un individ (cromozom) care nu reprezintă soluţia optimală. Ca o regulă empirică, N se alege egal cu l3. Probabilităţile ps , pc şi pm se aleg în funcţie de forma funcţiei de fitness. Alegerea este, în general, euristică. Cu cât aceste probabilităţi sunt mai mari, cu atât populaţia suferă schimbări mai importante. Pentru pc valorile general admise sunt între 0,5 şi 0,9. Dacă se alege un pc prea mic atunci există riscul ca încrucişări să nu aibă loc, ceea ce duce la odificarea foarte lentă a populaţiei şi, deci, la creşterea timpului de calcul necesar AG. În ceea ce priveşte probabilitatea de mutaţie, pm aceasta se alege între 0,01 şi 0,05. O probabilitate de mutaţie prea ridicată riscă să conducă la determinarea unei politici suboptimale. De multe ori, AG sunt realizaţi în aşa fel încât o parte a sa determină individul optimal iar o altă parte stabileşte valorile optime ale parametrilor. Aceste două operaţii pot fi efectuate simultan sau secvenţial, evident cu creşterea corespunzătoare a timpului de calcul.
Generarea populației inițiale Se inițializează aleator populația p(t), unde t = 0 (momentul inițial). Întotdeauna populaţia (generaţia) P(t+1) de la momentul t+1 se obţine reţinând toţi descendenţii populaţiei P(t) şi ștergând ulterior cromozomii generaţiei precedente (P(t)). De asemenea, numărul cromozomilor rămâne constant. Evaluarea cromozomilor Se evaluează cromozomii populaţiei P(t). În acest scop se utilizează o funcţie de performanţă ce depinde de problemă. Cât timp nu este îndeplinită condiţia de terminare se execută paşii următori: → Se selectează cromozomii din P(t) care vor contribui la formarea noii generaţii. Fie P1 mulţimea cromozomilor selectaţi (P1 reprezintă o populaţie intermediară). → Se determină costurile pentru fiecare cromozom. → Se aplică cromozomilor din P1 operatorii genetici. Cei mai utilizaţi sunt operatorii de mutaţie şi încrucişare. Fie P2 populaţia astfel obţinută (descendenţii populaţiei P(t)). Se şterg din P1 părinţii descendenţilor obţinuţi. Cromozomii rămaşi în P1 sunt incluşi în populaţia P2. → Se construieşte noua generaţie, astfel: P(t+1) ← P2; se şterg toţi cromozomii din P(t); se execută atribuirea t ← t+1; se evaluează P(t). Condiţia de terminare se referă, de regulă, la atingerea numărului de generaţii specifice. Dacă numărul maxim admis de generaţii este N, atunci condiţia de oprire este t>N. Se admite că rezultatul algoritmului este dat de cel mai promiţător individ din ultima generaţie. În realitate, nimic nu ne garantează că un individ mai performant nu a fost obţinut într-o generaţie anterioară. De aceea, este normal ca la fiecare pas (la fiecare generaţie t) să reţinem cel mai promiţător individ care a fost generat până atunci. Acest proces poartă numele de elitism.
2.3. Operatori genetici Operatorii genetici joacă cel mai important rol în cadrul AG. Există trei tipuri principale de operatori: operatorul de selecţie, operatorul de încrucişare și operatorul de mutaţie. Operatorul de selecţie (numit uneori şi operatorul de reproducere) este cel mai important operator genetic deoarece permite indivizilor dintro populaţie să supravieţuiască, să se reproducă sau să moară. Ca regulă generală, probabilitatea de supravieţuire a unui individ este legată direct de eficienţa relativă a acestuia în cadrul populaţiei respective. Există mai multe metode de reproducere (selecţie). Metoda cea mai cunoscută este, desigur, cea a loteriei întâmplătoare (aleatoare). Conform acestei metode, fiecare individ (cromozom) va fi duplicat în noua populaţie, proporţional cu valoarea sa de adaptare. Se efectuează, de câteva ori, extrageri cu revenire din cadrul mulţimii de indivizi ai populaţiei respective. În cazul codificării binare, se determină pentru fiecare individ (cromozom) extras ci, fitnessul acestuia, f(d(ci)). Atunci probabilitatea ca cromozomul ci să fie reintrodus în noua populaţie, a cărei mărime este N, va fi:
Indivizii (cromozomii) care determină o valoare a funcţiei de fitness mare au o probabilitate de selecţie ps mare, deci şanse mai mari de a fi selecţionaţi (de a se reproduce). Un astfel de tip de selecţie se mai numeşte şi selecţie proporţională şi este foarte uşor de efectuat. Inconvenientul major în utilizarea unei astfel de metode constă în faptul că un individ care nu este cel mai bun din populaţia respectivă poate ajunge totuşi să domine selecţia. Se înregistrează astfel o pierdere de diversitate prin dominaţia unui individ, denumit şi superindivid sau dictator. Un alt inconvenient este şi performanţa slabă a metodei către sfârşitul selecţiei, când mulţimea indivizilor devine mai omogenă. În acest caz, majoritatea cromozomilor are un fitness ridicat, dar nu optimal sau apropiat de cel optimal. În procesul de selecţie, acest grup poate ajunge
să domine populaţia, astfel încât algoritmul genetic nu va mai evolua şi optimul nu va mai putea fi găsit. Acest fenomen se numeşte „convergenţă prematură” şi este una dintre problemele care apar cel mai frecvent la utilizarea algoritmilor genetici. O soluţie a acestei probleme nu constă neapărat din utilizarea unei alte metode de selecţie, ci din introducerea unei funcţii de fitness modificată. Astfel, putem utiliza o schimbare de scală pentru a creşte ecartul (diferenţa) relativ dintre valorile de fitness ale indivizilor. Există şi alte metode de selecţie, de exemplu selecţia de tip turneu, în care se extrag de fiecare dată câte doi indivizi din populaţie şi se reproduce (selectează) cel mai bun dintre cei doi în noua populaţie. Se repetă această procedură până când noua populaţie este completă (deci ajunge la acelaşi număr de indivizi N ca şi populaţia iniţială). Totodată, se urmăreşte ca în faza de selecţie să nu se creeze noi indivizi în populaţie. Acesta este rolul următorului operator genetic. [7] Operatorul de încrucişare permite crearea unui nou individ (cromozom) şi includerea sa în populaţia nou generată. Acest lucru se face printr-o procedură foarte simplă care permite schimbul de informaţie între indivizi (cromozomi). Astfel, doi indivizi, formând o pereche, sunt extraşi din cadrul populaţiei rezultată prin selecţie (reproducere). Apoi se determină aleator unul sau mai multe puncte de încrucişare (o cifră între 1 şi l−1). În sfârşit, cu o probabilitate pc ca încrucişarea să aibă loc în acel punct, segmentelor finale (în cazul unui singur punct de încrucişare) ale celor doi părinţi, cum se numesc indivizii extraşi, se schimbă între ele, ducând astfel la apariţia a doi noi indivizi (cromozomi). Exemple de încrucișări sunt în figurile de mai jos: Încrucișare simplă
Punct
de
încrucișare
Părinți
Rezultat
Încrucișare multipunct Puncte de încrucișare
Părinți
Rezultat
Trebuie spus că un individ selecţionat pentru reproducere nu suferă neapărat şi o operaţie de încrucişare. Acest lucru nu are loc decât cu o anumită probabilitate, pc . Cu cât pc este mai mare, cu atât populaţia va suferi schimbări mai mari. Acţiunea conjugată a celor doi operatori, de selecţie şi de încrucişare, este insuficientă însă pentru a asigura reuşita unui AG. Acest lucru se întâmplă deoarece, în cazul codificării binare, anumite informaţii (de exemplu caractere ale alfabetului) pot să dispară din populaţie. De exemplu, dacă nici un individ din populaţia iniţială nu conţine 1 în ultima poziţie a stringului binar şi totuşi acest 1 face parte din stringul optimal ce trebuie determinat, orice operaţie posibilă de încrucişare nu permite să apară 1, care este iniţial necunoscut. În codificarea reală (zecimală), o astfel de situaţie se poate atinge dacă iniţial populaţia este cuprinsă, de exemplu, între 0 şi 40, în timp ce valoarea optimală este 50. Orice combinaţie posibilă de cifre între 0 şi 40 nu permite atingerea unei cifre de 50.
Operatorul
de
mutaţie
modifică
aleator,
cu
o
anumită
probabilitate pm, valoarea unei componente a individului. În cazul unei codificări binare, fiecare bit ai ∈ {0,1} din cadrul stringului este înlocuit cu probabilitatea pm de opusul său ai' = 1− ai. Aşa cum sunt posibile mai multe locuri de încrucişare, pot fi alese, în cazul unui string binar, mai multe poziţii în care pot apărea mutaţii. Operatorul de mutaţie conferă algoritmului genetic o anumită proprietate de ergodicitate (de exemplu toate punctele din spaţiul de căutare a soluţiilor pot fi atinse utilizând mutaţia). Prin aplicarea operatorului de mutaţie se conferă algoritmului genetic un caracter dual: pe de o parte se poate efectua o căutare locală în orice zonă a spaţiului de căutare a soluţiei (căutarea pe orizontală) şi, în acelaşi timp, se poate avansa, la fiecare mutaţie, cu o treaptă în procesul de căutare (căutarea în adâncime).
2.4. Oportunitatea aplicării algoritmilor genetici Încă de la apariţia lor, algoritmi genetici au trezit un interes deosebit cercetătorilor din domeniul economiei şi finanţelor care au văzut in această metodă o noua posibilitate de a aborda marile teme cu care se confrunta aceste domenii. În rezolvarea problemelor de optimizare şi previziune, se includ aplicaţii ale AG în trei domenii: rezolvarea numerică a problemelor de optim, econometrie și finanţe. Algoritmii genetici, spre deosebire de metodele clasice de rezolvare a problemelor de optim (de exemplu metodele de gradient) nu se bazează pe o metodă analitică, ci pe una iterativă şi euristică. Pentru aceasta, este necesară puţină informaţie pentru utilizator: spaţiul de căutare a soluţiilor posibile şi un criteriu de performanţă. Foarte repede s-a văzut potenţialul de utilizare a algoritmilor genetici ca mijloc de rezolvare numerică. Un mare potenţial au dovedit algoritmii genetici și în aplicaţiile lor econometrice. În acest domeniu, utilizarea algoritmilor genetici a fost făcută în diferite direcţii: căutarea unei forme funcţionale a modelului econometric, determinarea valorilor coeficienţilor de regresie ş.a. Aplicaţiile în domeniul finanţelor sunt foarte bine dezvoltate în ultimii ani, iar algoritmii genetici reprezintă o metodă validă pentru multe probleme practice din finanţe care pot fi complexe şi deci necesită utilizarea unor tehnici de optimizare robuste şi eficiente. Astfel de aplicaţii ale AG la probleme complexe pe pieţele financiare includ: prognoza veniturilor,
optimizarea
portofoliului,
descoperirea
regulilor
de
tranzacţionare şi optimizarea metodelor de tranzacţionare. [8] Această lucrare propune utilizarea algoritmilor genetici pentru rezolvarea problemei planificării resurselor și activităților unui proiect. Acest tip de problemă face parte din categoria problemelor de optimizare, unde algoritmii genetici pot determina o soluție apropiată de optim. Cu cât proiectul are mai multe activități și resurse de planificat, cu atât mai eficient este algoritmul, în comparație cu metodele clasice de rezolvare a problemei.
PARTEA a II- a – PROBLEMA PLANIFICĂRII RESURSELOR Capitolul 3: Prezentarea problemei
3.1. Modelul problemei de planificare
Elemente de teoria ordonanţei O problemă de ordonanţare constă în stabilirea unei ordini de efectuare
a
operaţiilor
(activităţilor)
unui
proiect,
astfel
ca
interdependenţele dintre ele să fie respectate în cadrul resurselor disponibile şi durata totală de execuţie a acestuia să fie minimă. Pentru a putea concretiza definiţia de mai sus, trebuie clarificate noţiunile de proiect, operaţii (activităţi) ale acestuia, interdependenţe între operaţii şi resursă a proiectului. Prin proiect vom înţelege o acţiune de mare amploare sau un proces complex destinat atingerii unui scop bine precizat. La un proiect deosebim următoarele caracteristici: un obiectiv (care poate fi un produs, o cantitate de informaţii sau un rezultat de natură organizatorică), un ansamblu de activităţi (subacţiuni, subprocese, operaţii), corelate logic şi tehnologic, a căror realizare permite atingerea scopului propus şi un proces tehnologic prin care se precizează intercondiţionărilor între activităţi, interesând în special ordinea de execuţie a acestora. Pentru a permite o analiză amănunţită a desfăşurării lui, o alegere a variantelor optime de execuţie şi un control continuu al evoluţiei sale, trebuie să descompunem proiectul în părţi componente la un nivel care să permită tratarea unitară a fiecărei părţi şi stabilirea conexiunilor între acestea. Aceste componente se numesc operaţii sau activităţi. O activitate este o parte distinctă dintr-un proiect, un subproces precis determinat, care consumă timp şi resurse. Vom presupune în continuare că activităţile au următoarele proprietăţi: fiecare activitate este
indivizibilă (nu se mai descompune în subactivităţi), fiecare activitate are o durată cunoscută şi, odată începută, nu mai poate fi întreruptă. Dintre intercondiţionările (interdependenţele) dintre activităţi, ne interesează, în special, cele temporale, numite relaţii de precedenţă, care pot fi de trei tipuri: 1. Relaţii de precedenţă de tip "terminare – început" – Acest tip este cel mai frecvent întâlnit şi spunem că o activitate A precede activitatea B printr-o interdependenţă de tip "terminare – început" dacă activitatea B nu poate începe decât după un interval de timp tAB de la terminarea activităţii A. Acest interval poate fi egal şi cu zero, caz în care spunem că activitatea A precede direct activitatea B. 2. De tip "început – început" – Acest tip este frecvent întâlnit şi spunem că o activitate A precede activitatea B printr-o interdependenţă de tip "început – început" dacă activitatea B nu poate începe decât după un interval de timp tAB de la începerea activităţii A. Acest interval poate fi chiar mai mare decât durata activităţii A, caz în care avem de fapt o dependenţă de tipul "terminare – început", putând chiar privi primul tip ca un caz particular al celui de-al doilea. 3. De tip "terminare – terminare". Spunem că o activitate A precede activitatea B printr-o interdependenţă de tip "terminare – terminare" dacă activitatea B nu se poate termina decât după un interval de timp tAB de la terminarea activităţii A sau că activitatea A trebuie terminată cu cel puţin tAB unităţi de timp înaintea terminării activităţii B. Prin durată totală de execuţie a unui proiect înţelegem intervalul de timp în care se efectuează toate activităţile acestuia, respectând toate interdependenţele dintre activităţi. A programa un proiect înseamnă a stabili termenele de începere pentru fiecare activitate în parte, ţinând seama de restricţiile impuse de procesul tehnologic, duratele activităţilor şi resursele disponibile. Pentru un proiect dat, există un număr enorm de programări admisibile. Un interes deosebit prezintă programul optim, adică acel program care, pe de o parte, satisface restricţiile impuse iar, pe de altă parte, optimizează un anumit criteriu de eficienţă economică.
Criteriul de optimizare nu este acelaşi pentru toate proiectele, el este stabilit pentru fiecare caz în parte şi defineşte obiectivele majore ale conducerii proiectului. În funcţie de aceste obiective, criteriul poate fi durata totală minimă, costul total minim, folosirea cât mai uniformă a resurselor sau o sinteză a acestora. Deci, programul optim este acea desfăşurare a proiectului, precizată prin termenele de începere ale activităţilor, care conduce la o eficienţă maximă. [9] Problema planificării implică utilizarea unui graf orientat, aciclic, care să conţină o colecţie de activităţi şi datele referitoare la relaţiile lor de precedenţă. Scopul planificării activităţilor este de a elimina momentele din proiect fără activităţi şi de a optimiza organizarea activităţilor, astfel încât relaţiile de precedenţă să se îndeplinească, iar timpul total de execuţie să fie minim. [10] În general, problema planificării resurselor este de două tipuri: statică şi dinamică. În planificarea statică, caracteristicile problemei, cum ar fi durata unei activităţi, legăturile, precedenţele sau sincronizarea sunt cunoscute înainte de a fi executate. Pe de altă parte, în planificarea dinamică, sunt cunoscute puţine activităţi şi deciziile cu privire la acestea sunt luate pe pacrurs. În continuare este prezentat modelul static de programare a resurselor. [11] Analiza resurselor Dacă din punct de vedere al condiţionărilor de tip precedenţă (temporale) existenţa activităţilor paralele este corectă din punct de vedere logic, putând exista oricâte activităţi care se desfăşoară în acelaşi timp, dacă nu se intercondiţionează între ele, neexistând nici o diferenţă între zilele proiectului, din punct de vedere practic, este clar că o zi în care se desfăşoară în acelaşi timp 10 activităţi este mult mai intensă din punct de vedere al organizării şi aprovizionării cu resurse decât o zi în care se desfăşoară o singură activitate. Deci, dacă se ţine cont doar de condiţionările
temporale
pot
apărea
dezechilibre
foarte
mari
în
desfăşurarea proiectului şi/sau pot apărea zile în care necesarul de resurse ar fi mai mare decât disponibilul acestora.
Din cele spuse mai sus, se desprinde faptul că există cel puţin două probleme importante legate de resursele unui proiect: − problema alocării resurselor, în care se încearcă programarea activităţilor în aşa fel încât în nici o zi să nu se depăşească disponibilul din nici o resursă; − problema nivelării resurselor, în care se încearcă programarea activităţilor în aşa fel încât în toate zilele să se folosească cam aceiaşi cantitate de resurse (sau, altfel spus, suma variaţiilor de la o zi la alta să fie minimă). Analiza în cele două probleme de mai sus se face în general pentru resurse refolosibile, care nu se consumă în timp, adică cele care, după terminarea activităţii la care au fost alocate, se pot folosi la altă activitate. Resursele de acest tip sunt în principal forţa de muncă şi maşinile şi utilajele. [9] Descrierea matematică a problemei Un proiect va consta într-un set de activități V = (1, 2, ..., n). Activitatea 1 și activitatea n reprezintă începutul proiectului, respectiv sfârșitul proiectului. Pentru fiecare activitate j vom nota cu Predj mulțimea activităților care trebuie să se finalizeze înainte ca j să înceapă. Elementele mulțimii Predj sunt numite predecesori direcți ai lui j. Astfel, este adevărată următoarea afirmație generalizată: O activitate i este numită predecesoare activității j dacă există . Activitatea i este un succesor imediat al activității j dacă j este un predecesor imediat al activității i. Mulțimea tuturor succesorilor o vom nota cu Sucj. Astfel, activitatea 1 va fi predecesor pentru toate activitățile, respectiv activitatea n va fi succesor pentru toate activitățile proiectului. Un alt tip de restricție se referă la resurse. Sunt definite un număr de K tipuri de resurse refolosibile. O cantitate limitată din k resurse, notată cu Rk, este disponibilă în fiecare unitate de timp. În timpul desfașurării unei activități j, sunt necesare rjk unități de resursă
, pe parcursul fiecărei
perioade te timp de durată dj (există un singur mod de desfățurare a activităților). Se consideră, de asemenea, ca activitățile nu pot fi oprite o dată de au început. Parametri Rk,, rk, dj se presupun a fi cunoscuți sau determinați, de tip întreg. De asemenea, r1k = rnk = 0 și d1j = dnj = 0, pentru toți
.
Problema planificării acivităților și resurselor se poate rezolva dacă timpul de început (sau timpul de sfârșit) a fiecărei activități satisface restricțiile de precedență și cele referitoare la resurse, astfel încât timpul total de desfășurare al proiectului să fie minim.[12] Un exemplu de proiect, definit pe baza notațiilor de mai sus, se regăsește în figura 3.1. Acest proiect are n = 7 activități și k = 1 resurse reutilizabile, cu 2 unități capacitate.
di/rj,1 2/ 1
1/ 2
i
3
2 0/ 0 Fig. 3.1
0/ 0
1
K = 1, R1 =2
7 1/ 1
1/ 2
2/ 1
4
5
6
În figura 3.2, o secvență posibilă este reprezentată cu o durată totală de 8 unități de timp, în timp ce în figura 3.3 este reprezentată o aranjare a activităților ce determină o durată totală de doar 5 unități de timp. Aceste secvențe sunt reprezentate cu ajutorul diagramei Gantt. Axa orizontală reprezintă timpul, iar axa verticală utilizarea resurselor. Dacă ar
fi existat mai multe tipuri de resurse, era necesară realizarea unei diagrame pentru fiecare resursă în parte. Fiecare dreptunghi reprezintă o activitate. Lungimea dreptunghiului reprezintă durata activității, iar înălțimea arată numărul de unități de resursă folosit pentru activitate.
4
5
2
3
6
Fig. 3.2
4
5
6 2
3
Fig. 3.3 Definiţii: Cu sj (fj) vom nota începutul (sfârşitul) activităţii j în secvenţa S,
astfel rezultând un vector de timpi de start (s1, s2, ..., sn), sau similar, un vector de timpi de final (f1, f2, ..., fn). s1 = 0, iar sn = max {
}. fn va
fi lungimea sau durata proiectului, în cazul în care nu este specificat altfel. Dacă o secvență va fi fezabilă, va fi notată cu T(s) și va fi definită ca soluție admisibilă, care îndeplinește toate restricțiile de precedență și constrângerile privind resursele. O
secvență
S
dată, , este o activitate
activă la momentul t. Conceptual, o problemă de planificare a activităților și resurselor unui proiect poate fi definită astfel:
Funcția obiectiv (3.1) minimizează timpul de finalizare a activităților proiectului, adică durata proiectului. Restricțiile (3.2) reprezintă relațiile de precedență, iar restricțiile (3.3) reprezintă limita utilizării fiecărei resurse k la momentul t. În final, restricțiile (3.4) definesc variabilele de decizie ca
fiind întregi, nenegative. [12]
3.2. Metode clasice de rezolvare Algoritmii genetici nu reprezinta metoda principala în rezolvarea problemelor de planificare a activităților și a resurselor unui proiect. Deoarece situaţiile din practică ce necesită rezolvarea unei probleme de ordonanţare sunt foarte variate, s-au propus numeroase modele pentru rezolvarea lor. În continuare vor fi prezentate câteva dintre modelele cele mai frecvent utilizate în practică. 1. Modele de analiză a drumului critic (ADC) Principiul analizei drumului critic constă în divizarea unui proiect (acţiuni complexe) în părţi componente, la un nivel care să permită corelarea logică şi tehnologică a acestora, adică să facă posibilă stabilirea interacţiunilor între părţile componente. Aceste părţi componente sunt activităţile acţiunii complexe. La definirea listei de activităţi specialistul sau specialiştii care participă la această operaţie folosesc experienţa lor pentru a răspunde pentru fiecare activitate la întrebările: ”ce alte activităţi succed sau preced în mod necesar această activitate?”; ”care este durata activităţii?”. Ia naştere în acest fel un tabel care conţine activităţile proiectului, intercondiţionările între activităţi şi duratele acestora. Un astfel de tabel trebuie să conţină cel puţin următoarele elemente: → activităţi: în această coloană se enumeră activităţile proiectului, fiind puse în evidenţă printr-o denumire sau printr-un simbol (codul activităţii); → condiţionări: se precizează, pentru fiecare activitate, activităţile imediat precedente, prin simbolurile lor; activităţile de start nu au activităţi precedente, în căsuţă fiind trecută o liniuţă; → durata: pentru fiecare activitate se precizează durata de execuţie, într-o anumită unitate de măsură. Durata unei activităţi este o constantă.
Modelele de analiză a drumului critic se bazează pe reprezentarea proiectului printr-un graf, elementele tabelului asociat acestuia fiind suficiente pentru a construi graful corespunzător. Există mai multe moduri de a reprezenta un proiect printr-un graf, cele mai cunoscute fiind prezentate mai jos: A. Metoda CPM (Critical Path Method) Metoda CPM este un procedeu de analiză a drumului critic în care singurul parametru analizat este timpul şi în reprezentarea graficului reţea se ţine seama de următoarele convenţii: → fiecărei activităţi i se asociază un segment orientat numit arc, definit prin capetele sale, astfel fiecare activitate identificându-se printr-un arc; → fiecărui arc i se asociază o valoare egală cu durata activităţii pe care o reprezintă; → condiţionarea a două activităţi se reprezintă prin succesiunea a două arce adiacente. Nodurile grafului vor reprezenta momentele caracteristice ale proiectului,
reprezentând
stadii
de
realizare
a
activităţilor
(adică
terminarea uneia sau mai multor activităţi şi/sau începerea uneia sau mai multor activităţi). Procedeul CPM se bazează pe existenţa unei corespondenţe bipartide
între
elementele
unui
proiect
(activităţi,
evenimente)
şi
elementele unui graf (arce şi noduri). Se obţine o relaţie model-obiect, care pune în evidenţă particularităţile de o mare însemnătate practică, în special, proprietăţile de succesiune temporală. Printre avantajele metodei CPM (şi în general ale analizei drumului critic) evidenţiem: → determinarea cu anticipaţie a duratei de execuţie a proiectelor complexe; → pe timpul desfăşurării proiectului permite un control permanent al
execuţiei acestuia;
→ explicitarea legăturilor logice şi tehnologice dintre activităţi;
→ evidenţierea activităţilor critice; → evidenţierea activităţilor necritice, care dispun de rezerve de timp; → permite efectuarea de actualizări periodice fără a reface graful; → oferă posibilitatea de a efectua calcule de optimizare a duratei unui
proiect, după criteriul costului;
→ reprezintă o metodă operativă şi raţională care permite programarea
în timp a activităţilor ţinând seama de resurse.
Dezavantajele acestei metode sunt în principal: → greutatea desenării grafului, fiind foarte greu de reprezentat exact
toate condiţionările din proiect, în condiţiile în care acestea sunt foarte complicate iar desenul trebuie să fie destul de simplu şi clar încât să fie inteligibil şi deci util;
→ chiar dacă se respectă toate regulile de construire a grafului, rămân
încă destule variante de desenare astfel încât două reprezentări ale aceluiaşi proiect făcute de doi indivizi pot să nu semene aproape deloc.
→ din cele de mai sus se vede că reprezentarea este greoaie chiar dacă
toate condiţionările ar fi de tipul "terminare – început" cu precedenţă directă, încercarea de a forma graful în condiţiile existenţei şi a celorlalte tipuri de interdependenţe ducând foarte repede la un desen extrem de încărcat şi greu de folosit.
B. Metoda MPM (Metro Potenţial Method) Metoda potenţialelor sau MPM este un procedeu de analiză a drumului critic care încearcă să depăşească neajunsurile metodei CPM, în care, ca şi în metoda CPM, se analizează parametrul timp, diferenţa constând în felul în care se construieşte graful reţea: → fiecărei activităţi A i se asociază un nod A; → fiecărui nod i se asociază o valoare dată de durata activităţii pe care o reprezintă; → condiţionarea (succesiunea) a două activităţi se reprezintă printr-un arc, orientat de la o activitate la alta; → fiecărui arc dintre două activităţi A şi B i se asociază un număr reprezentând valoarea tAB. Reprezentarea activitate – nod permite ca între activităţile unui proiect să avem mai multe tipuri de legături de precedenţă (terminare – început, început – început, terminare – terminare).
2. Grafuri ADC integrate şi condensate În practica managementului acţiunilor economice complexe prim metodele ADC, nivelul de detaliere în activităţi a proiectelor depinde de scopul urmărit (coordonare de ansamblu sau conducere de detaliu), de timpul avut la dispoziţie pentru elaborarea grafurilor, de specialiştii disponibili etc. Dacă graful sumar care se întocmeşte pentru orientarea generală a echipei de conducere a acţiunii (graf director) este totdeauna necesar, când se face trecerea la conducerea de amănunt, sunt tot atât de necesare grafurilor detaliate. În general grafurile detaliate se fac pe părţi din acţiunea complexă, numite obiective sau obiecte. Astfel, dacă ne referim de exemplul la un proiect de construcţii, graful corespunzător întregului proiect poate fi divizat în grafuri pe obiect, cum ar fi: → graful proiectării; → graful organizării şantierului; → unul sau mai multe grafuri pentru lucrări de drumuri; → mai multe grafuri pentru lucrări de reţele (apă, canal abur, electrice etc.); → mai multe grafuri pentru lucrări de construcţii-montaj (câte unul pentru fiecare hală sau clădire) etc. Grafurile pe obiect au individualitatea lor şi se tratează ca entităţi de programare distincte; în acelaşi timp însă, trebuie gândită coordonarea lor în cadrul acţiunii complexe din care fac parte. În acest scop, după întocmirea separată a grafurilor pe obiect apare necesitatea asamblării lor într-un tot, care constituie graful integrat. În foarte multe cazuri din practică, numărul activităţilor care rezultă prin integrarea mai multor grafuri pe obiect este considerabil, putând ajunge la zeci de mii, ceea ce depăşeşte de multe ori posibilitatea de a le calcula şi urmări, chiar cu ajutorul calculatoarelor puternice. Cu atât mai puţin ar fi posibilă cuprinderea sintetică a unui asemenea graf la nivelul conducerii întregii acţiuni. Pentru aceste motive a fost necesară găsirea unui mijloc de a reduce graful integrat, păstrându-i în acelaşi timp principalele caracteristici.
Această operaţie poartă numele de condensare iar rezultatul aplicării acesteia asupra unui graf se numeşte graf condensat. 3. Actualizarea grafurilor ADC În practica realizării acţiunilor complexe, sunt numeroase cazurile când estimările iniţiale de durată ale activităţilor nu pot fi respectate. Apare astfel necesitatea ca, periodic, să se examineze modul cum se realizează termenele calculate, în scopul punerii în evidenţă a eventualelor întârzieri şi a luării măsurilor de recuperare a acestora. Această activitate poartă numele de actualizare a grafurilor iar noul graf se numeşte graf actualizat. 4. Optimizări cost-durată Estimarea duratelor acţiunilor complexe (problema ADC/TIMP) prin metodele expuse mai înainte, deşi reprezintă o problemă deosebit de importantă din punct de vedere economic, nu este nici pe departe singurul aspect care poate fi urmărit cu ajutorul acestor metode. O altă problemă în care pot fi utilizate instrumentele ADC sunt cele de analiză a costului execuţiei acţiunilor complexe, în funcţie de durata de execuţie a acesteia. Este evident că, în funcţie de pregătirea celor care efectuează lucrarea, de tehnologia folosită, de oportunităţile momentului etc, durata de execuţie a unei acţiuni complexe poate varia, existând totuşi o durată minimă posibilă Tmin şi una maximă Tmax acceptabilă. Evident, durata lucrării are numeroase implicaţii asupra costului, drept pentru care prezintă un deosebit interes determinarea acelei durate de execuţie, intermediare lui Tmin şi Tmax, căreia îi corespunde costul minim. 5. Graficul Gantt Un instrument de mare utilitate în analiza drumului critic îl constituie graficul calendaristic tip Gantt, apărut la începutul secolului. Graficul (diagramă) Gantt exprimă la scara timpului, prin linii orizontale, durata activităţilor, şi prin linii întrerupte (de exemplu) rezervele de timp. Graficul
Gantt presupune divizarea acţiunii complexe pe care o reprezintă proiectul, în părţi componente (activităţi) şi eşalonarea acestora în timp, ţinând seama de succesiunea tehnologică, termene impuse, resurse etc. Dacă este întocmit în urma unei analize temeinice, graficul Gantt oferă informaţii bogate şi extrem de sugestiv prezentate, privind desfăşurarea lucrărilor, precum şi o serie de informaţii derivate, privind eşalonarea resurselor (forţă de muncă, materii prime, materiale, fonduri băneşti). Aceste avantaje scad dacă, datorită fie amplorii acţiunii considerate, fie nivelului de detaliere dorit, numărul activităţilor ce compun graficul Gantt creşte mult, ajungând la câteva sute sau mii. Graficul Gantt exprimă la scara timpului un program de ordonanţare. Astfel, avem graficul Gantt la termenele cele mai devreme sau graficul Gantt la termenele cele mai târzii.
6. Analiza resurselor Dacă din punct de vedere al condiţionărilor de tip precedenţă (temporale) existenţa activităţilor paralele este corectă din punct de vedere logic, putând exista oricâte activităţi care se desfăşoară în acelaşi timp, dacă nu se intercondiţionează între ele, neexistând nici o diferenţă între zilele proiectului, din punct de vedere practic, este clar că o zi în care se desfăşoară în acelaşi timp 10 activităţi este mult mai intensă din punct de vedere al organizării şi aprovizionării cu resurse decât o zi în care se desfăşoară o singură activitate. Deci, dacă se ţine cont doar de condiţionările
temporale
pot
apărea
dezechilibre
foarte
mari
în
desfăşurarea proiectului şi/sau pot apărea zile în care necesarul de resurse ar fi mai mare decât disponibilul acestora.Din cele spuse mai sus, se desprinde faptul că există cel puţin două probleme importante legate de resursele unui proiect: problema alocării resurselor, în care se încearcă programarea activităţilor în aşa fel încât în nici o zi să nu se depăşească disponibilul din nici o resursă – și problema nivelării resurselor, în care se încearcă programarea activităţilor în aşa fel încât în toate zilele să se folosească cam aceiaşi cantitate de resurse (sau, altfel spus, suma variaţiilor de la o zi la alta să fie minimă).
Trebuie făcută şi observaţia că analiza în cele două probleme de mai sus se face în general pentru resurse refolosibile, care nu se consumă în timp, adică cele care, după terminarea activităţii la care au fost alocate, se pot folosi la altă activitate. Resursele de acest tip sunt în principal forţa de muncă şi maşinile şi utilajele. 7. Metoda PERT Metodele CPM şi MPM analizate anterior furnizează, aşa cum s-a văzut, informaţii care sunt utile în procesul de conducere, însă ele nu ţin seama de posibilele variaţii ale duratelor de execuţie ale activităţilor. Metoda PERT încearcă să corecteze acest lucru. În acest scop metoda permite calcularea timpului mediu de terminare a unui proiect, identificarea activităţilor critice, precum şi estimarea probabilităţilor de realizare a termenelor planificate. Pentru că în practică, în foarte multe programe din domeniul cercetării şi dezvoltării, duratele activităţilor sunt insuficient cunoscute sau chiar incerte prin considerarea conceptelor statistice, duratele activităţilor sunt considerate variabile aleatoare caracterizate prin media şi dispersia lor. [9]
3.3.
Algoritmi
genetici
pentru
rezolvarea
problemei
de
planificare Această lucrare propune un algoritm genetic pentru Problema Planificării
Activităților
și
Resurselor.
Resursele
proiectului
sunt
regenerabile și există un singur mod de a realiza activitățile. Algoritmul propus va minimiza timpul dintre începutul și sfârșitul proiectului, luând în considerare restricțiile de precedență și disponibilitatea resurselor. Deși algoritmii genetici nu sunt folosiți în metodele clasice de rezolvare, aceștia sunt foarte utili, rezolvând într-un mod rapid problema și determinând o soluție apropiată de optim. 3.3.1 Schema de Planificare Se construiește o secvență pațială care inițial setează la 0 începutul activității 1. O secvență parțială este o secvență unde numai un subset de n activități a fost planificat. Se va folosi o schemă de planificare serială, unde se mărește numărul de activități pentru a parcurge pașii proiectului. Fie g = 1, 2, ... n-2 etape, unde n este numărul de ativități. În fiecare etapă este selectată o activitate și este programată cât mai devreme posibil, respectând relațiile de precedență și restricțiile resurselor. Sunt două mulțimi asociate fiecărei etape g. Mulțimea Secg conține activitățile deja programate, iar mulțimea Dg conține activitățile selectabile. Fg este mulțimea timpului de finalizare pentru fiecare element al mulțimii Dg. O activitate va fi selectabilă dacă nu a fost programată și dacă toți predecesorii ei au fost programați. Exemplu: Reuniunea acestor mulțimi nu est eechivalentă cu mulțimea V (mulțimea activităților), întrucțt aceasta poate să aibă și activități neprogramate neeligibile. Se definește
ca fiind contitatea disponibilă de resursa de tipul k la
momentul t. Algoritmul va fi următorul:
1. Start: s1 = f1 = 0, Sev1 = {1}. 2. De la cu g = 2 până la n-1 execută: 2.1.
Calculează Dg, Fg,
2.2.
Selectează
2.3.
ESj =
,
2.4.
2.5. fj = sj + dj 2.6. Secg = Secg-1 3. fn = În prima etapă 0 este atribuit ca timp de început și sfârșit pentru o activitate fictivă j, și este inclusă într-o secvență parțială. La începutul fiecărei etape g, se determină mulțimea de elemente selectabile Dg, mulțimea timpilor de sfârșit Fg, și elementele rămase disponibile
.
După ce o activitate j este selectată din mulțimea activităților eligibile Dg, timpul său de început este calculat, prin determinarea ESj (Earliest Starting Time j), luând în considerare relațiile de precedență și predecesorii activității indicați prin h în secvența parțială. Apoi se calculează ESj asociat resurselor. Timpul de sfârșit este calculat adăugând dj la sj. 3.3.2 Reprezentarea cromozomilor Reprezentarea problemei se va baza pe conceptul unei liste de activități. Într-o listă de activități
fiecare activitate nefictivă j
apare exact o singură dată. Sunt luate în considerare doar listele de activități care au restrângeri de precedență. O listă de activități poate fi creată dacă activitățile predecesoare sunt executate întotdeauna înaintea oricărei
activități
din
listă. .
Formal,
poate
fi
exprimat
astfel:
Un individ este reprezentat astfel:
.
În secvența de activități, se presupune că sunt îndeplinite restricțiile de precedență; acest aspect se poate exprima astfel: și Fiecărui cromozom i se aplică algoritmul definit mai devreme, iar nodul inițial care corespunde unei activități fictive ăâîncepe la timpul 0. Următoarele activități sunt planificate într-o ordine definită de lista . [12] 3.3.3 Operatori de încrucișare Pentru lista de activități se va lua în considerare operatorul de încrucișare cu un singur punct de încrucișare. Doi indivizi, numiți părinți, sunt selectați: Parinte 1: Parinte 2:
și
. Apoi se selectează aletor un număr q de la 1 la J,
pentru a obține doi indivizi noi, fiu 1 (h1) și fiu 2 (h2). Poziția i = 1, ...., q, din h1 este preluată din
astfel:
din h1 sunt preluate din
, astfel:
indice (activitățile deja luate din
. Pozițiile de la i = q+1, ..., J , unde k este cel mai mic nu mai pot fi luate în considerare).
3.3.4 Mutații Pentru lista de activități se va alege o probabilitate cu care se vor interschimba activitățile ji și ji+1, pentru fiecare pozitie i = 1, ..., j-1. Condiția ca relațiile de precedență să se respecte se va lua în considerare la fiecare mutație.
3.4. Aplicaţie
Problema alocării resurselor – studiu comparativ 1. Enunț Se dorește să se programeze un proiect care conține n activități A (sarcini) care trebuie să fie alocate unei mulțimi P de p procesori paraleli (resurse),
având
ca
obiectiv
minimizarea
timpului
de
alocare
al
activităților. Se consideră că fiecare activitate Ai trebuie să fie procesată de procesorul Pj până la finalizare. De asemenea, fiecare sarcină poate fi procesată de către cel mult un procesor odată, iar fiecare procesor poate să procesezecel mult o sarcină odată. În funcție de probabilitățile de aplicare a operatorilor genetici (selecția, încrucițarea și mutația) se va realiza o analiză comparativă a rezultatelor. Aplicația va realiza programarea activităților, va construi o diagramă Gantt asociată activităților, va aloca fiecare activitate unui procesor și va realiza analiza algoritmilor genetici și a operatorilor acestora.
2. Modul de abordare al problemei Problema propusă are 225 activități, cu cost și durată constante. Numărul activităților, costul sau durata se pot modifica, pentru una sau mai multe activități, în funcție de opțiunea utilizatorului. De asemenea, există opțiunea introducerii unui set nou de date pentru problemă. Programarea activităților și diagrama Gantt s-au realizat cu ajutorul metodei clasice PERT/CPM (Critical Path Method). S-au calculat, pentru fiecare activitate valorile: EST (Earliest Start Time), EFT (Earliest Finish Time), LST (Latest Start Time) și LFT (Latest Finish Time). Cu ajutorul acestor valori s-a construit diagrama Gantt. Pentru
alocarea procesorilor (implicit 5, însă cu posibilitatea
modificării numărului acestora) s-a realizat cu ajutorul rezultatelor PERT/CPM și a algoritmilor genetici.
Resursele acestei probleme sunt procesorii (maşinile paralele), care aparţin unei clase speciale de resurse. Această clasă are caracteristicile următoare: fiecare activitate are alocat un singur procesor, iar fiecare procesor poate să proceseze o singură activitate.
3. Algoritmul genetic propus Un cromozom va fi reprezentat de un vector de n elemente, unde n este numărul de activități. Fiecare element i din acest vector va reprezenta procesorul căruia i-a fost alocată activitatea i. Se va începe cu o populație de cromozomi generați aleator, de la 1 la N, unde N reprezintă numărul de procesori din sistem. Luând în considerare că obiectivul este minimizarea timpului de planificare,
funcția
de
fitness
va
avea
forma
următoare:
, unde max (LFT) este timpul maxim de finalizare al planificării. Funcția de fitness va trebui să fie cât mai mare. Pentru operații se vor folosi funcțiile mutație și crossover, cu probabilitățile definite de utilizator. Pentru cazul 1, operatorul crossover se va aplica cu o probabilitate de 0.2, iar cel de mutație cu probabilitatea de 0.1. Pentru cazul 2, operatorul crossover se va aplica cu o probabilitate de 0.5, iar cel de mutație cu probabilitatea de 0.15. Pentru ambele cazuri, modificarea minimă a funcției fitness este de 0.0001. Pe lângă modificarea minimă a funcției fitness și probablități, se ține cont și de numărul maxim de iterații, stabilit la 100 pentru ambele cazuri.
4. Rezultate Analiza comparativă a celor două cazuri scoate în evidență importanța alegerii probabilităților de aplicare a operatorilor. Ca și în natură, indivizii cu probabilitate mai mare de selecție au performanțe mai ridicate.
Rezultatele obținute arată că pentru o probabilitate de încrucișare mai mare, timpul maxim de alocare este mai mic, iar funcția fitness este mai mare. Pe de altă parte, atunci când probabilitatea de aplicare a operatorilor crește, scade numărul de iterații necesar găsirii valorii potrivite. Rezultatele obţinute privind planificarea procesorilor pentru fiecare activitate este prezentată în tabelul de rezultate al algoritmului genetic. Pentru exemplul dat, datele de intrare sunt mai jos:
Unul dintre seturile de date de ieșire este prezentat mai jos. Se observă diferențele menționate mai sus.
Pentru aceleași valori s-a repetat algoritmul de 10 ori. Rezultatele se regăsesc în diagramele de mai jos:
Concluzii privind algoritmii genetici
Bibliografie [1] Ioan RUS, Călin-Adrian COMES, Veronica DEAC – Optimizarea fluxurilor informatice
în
timp
real
–
element
al
restructurării
informatice,
Universitatea “Petru Maior” din Tîrgu–Mureş 2010 [2] http://ro.wikipedia.org/wiki/Optimizare [3] Romică Trandafir, Modele şi algoritmi de optimizare, Ed. AGIR, Bucureşti, 2004 [4] http://ro.wikipedia.org/wiki/Algoritm_genetic [5] Claudia Mihaela Mark – Seria informatică – Algoritmi Genetici, Timișoara, 2010 [6] Randy L. Haupt, Sue Hellen Haupt – Practical Genetic Algorithms, John Wiley & Sons, Inc., Hoboken, New Jersey, 2004 [7] Emil Scarlat, Nora Chirita - Cibernetica sistemelor economice, Editura ASE, Bucureşti,. 2003 [8] Henri Luchian, Mihaela Breaban – Algoritmi Genetici, Universitatea „Al. I Cuza”, Iași, 2006 [9] E. Ţigănescu, D. Mitruţ – Bazele cercetării operaţionale, Ed. ASE, Bucureşti 1999 [10] A. Abraham, A.E.Hassanien, P. Siarry, A. Engelbrecht - Foundations of Computational Intelligence Volume 3 [11] F.A. Omara and M.M. Arafa - Genetic Algorithms for Task Scheduling Problem [12] E.G. Franco, F.T. Zurrita, G.M. Delgadillo – A Genetic Algorithm for the Resource Constrained Project Scheduling Problem, Bogota