Documente Academic
Documente Profesional
Documente Cultură
INTRODUCERE ÎN CALCULUL
EVOLUTIV
Procedure AE
begin
t := 0
iniţializare P (t )
evaluare P (t )
while (not condiţie terminare) do
begin
t := t + 1
selectare P (t ) din P (t − 1)
modificare P (t )
evaluare P (t )
end
end.
24
( )
u i = ⎣vi ⋅ 2 r − 1 ⎦ ,
31
unde ⎣ ⎦ reprezintă partea întreagă. Valoarea astfel obţinută se
reprezintă în baza 2.
Reprezentarea clasică
0 1 2 3 4 5 6 7
Codificarea Gray
0 1 2 3 4 5 6 7
b−a n
∂(s1,……,sn)= a + ∑ s j 2 j −1
2 n − 1 j =1
b−a n j
∂(s1,……,sn)= a + ∑ ( ⊕ s k )2 n− j .
2 n − 1 j =1 k =1
• dacă { }
p ia valori în mulţimea 0, 1, L, 2n − 1 atunci el poate fi
reprezentat ca un şir binar b0b1 Lbn cu bi ∈ {0, 1}, 0 ≤ i ≤ n .
{ }
• dacă p ∈ m, m + 1, L, m + 2 n − 1 atunci se codifică p − m ca în
cazul anterior
bi − ai
xi = ai + zecimal(string2 ) ⋅
2li − 1
(2, 4, 8, 3, 9, 7, 1, 5, 6 )
reprezintă traseul
1→ 2 → 4 → 3 → 8 → 5 → 9 → 6 → 7 .
Unele liste de adiacenţă pot reprezenta trasee ilegale, ca de exemplu
(2, 4, 8, 1, 9, 3, 5, 7, 6 )
care duce la
1 → 2 → 4 → 1,
36
adică la o ciclare (prematură) obţinută înainte de terminarea traseului.
L = (1, 2, 3, 4, 5, 6, 7, 8, 9 ) ,
traseul
1→ 2 → 4 → 3 → 8 → 5 → 9 → 6 → 7
va fi codificat ca o listă
l = (1, 1, 2, 1, 4, 1, 3, 1, 1)
interpretată astfel:
• primul număr din lista l este 1, aşa că primul oraş din lista L este
luat ca prim oraş al traseului şi este şters din lista L ; traseul parţial
este (1)
• următorul oraş din lista l este 1, aşa că se ia primul oraş din lista
curentă L ca oraşul următor al traseului şi se sterge din lista L ;
rezultă traseul parţial (1 → 2 )
• următorul număr din lista l este 2, deci se alege al doilea oraş din
lista curentă L ca următorul oraş al traseului şi se şterge din listă; în
acest moment traseul parţial este (1 → 2 → 4 ) .
37
În final rezultă traseul
1→ 2 → 4 → 3 → 8 → 5 → 9 → 6 → 7 .
5 → 1→ 7 → 8 → 9 → 4 → 6 → 2 → 3
este codificat simplu ca
(5, 1, 7 , 8 , 9 , 4 , 6 , 2 , 3) .
3 → 1→ 2 →8 → 7 → 4 → 6 → 9 → 5
este reprezentat prin matricea de mai jos.
1 2 3 4 5 6 7 8 9
1 0 1 0 1 1 1 1 1 1
2 0 0 0 1 1 1 1 1 1
3 1 1 0 1 1 1 1 1 1
4 0 0 0 0 1 1 0 0 1
5 0 0 0 0 0 0 0 0 0
6 0 0 0 0 1 0 0 0 1
7 0 0 0 1 1 1 0 0 1
8 0 0 0 1 1 1 1 0 1
9 0 0 0 0 1 0 0 0 0
1 2 3 4 5 6 7 8 9
1 0 1 0 0 0 0 0 0 0
2 0 0 0 1 0 0 0 0 0
3 0 0 0 0 0 0 0 1 0
4 0 0 1 0 0 0 0 0 0
5 0 0 0 0 0 0 1 0 0
6 0 0 0 0 1 0 0 0 0
7 0 0 0 0 0 0 0 0 1
8 0 0 0 0 0 1 0 0 0
9 1 0 0 0 0 0 0 0 0
1 2 3 4 5 6 7 8 9
1 0 1 0 0 0 0 0 0 0
2 0 0 0 1 0 0 0 0 0
3 0 0 0 0 0 0 0 1 0
4 0 0 0 0 1 0 0 0 0
5 0 0 0 0 0 0 1 0 0
6 0 0 0 0 0 0 0 0 1
7 1 0 0 0 0 0 0 0 0
8 0 0 0 0 0 1 0 0 0
9 0 0 1 0 0 0 0 0 0
41
unde
42
⎧u 2 u <0
ϕ (u ) = ⎨
⎩0 u ≥0
iar a şi b sunt parametri pozitivi care reflectă importanţa relativă a
încălcării restricţiilor (cu cât a şi b sunt mai mari cu atât restricţia
este mai importantă şi încălcarea ei este penalizată mai mult). Dacă se
fac diferenţieri între restricţii atunci se pot utiliza mai multe valori
( a1 , L, a k1 şi b1 , L, bk2 în loc de a si respectiv b ).
⎧ n
⎪ ∑ wi si dacă s este admisibil
⎪
F ( s ) = ⎨ i =n1
⎪− ∑ w s dacă s nu este admisibil
⎪⎩ i =1 i i
• orice soluţie admisibilă este mai bună decât o soluţie care nu este
admisibilă;
• dintre două soluţii admisibile este mai bună cea care are adecvarea
mai mare (în cazul problemei submulţimii aceasta înseamnă că suma
valorilor elementelor submulţimii este mai mare)
• dintre două soluţii neadmisibile cea mai bună este cea care încalcă
mai puţin restricţiile (în cazul acestei probleme înseamnă că suma
elementelor este mai mică, adică depăşeşte cu mai puţin pragul M ).
⎧ n n
⎪ ∑v js j dacă ∑wjs j ≤ C
⎪ j =1 j =1
F (s) = ⎨ n n n
⎪ v s − b( w s − C ) dacă
⎪∑ j j ∑ j j ∑wjs j > C
⎩ j =1 j =1 j =1
⎧ d
⎪1 − pentru d < a
p(d ) = ⎨ a
⎪⎩0 pentru d ≥ a
unde a este diametrul nişei, adică distanţa maximă dintre doi
cromozomi.
Distanţa dintre doi cromozomi se poate defini în mai multe
feluri:
vi = ∑ p (d (xi , x j ))
n
j =1
3.1. Introducere
• liniară: pi = a ⋅ i + b , cu a < 0
• exponenţială: pi = a ⋅ e b⋅i +c .
Avantajele selecţiei după rang constă în faptul că nu duce la
convergenţă prematură şi nici la stagnare.
Fie notaţiile:
• SP – presiunea selecţiei
• aranjarea liniară:
Fitness( Pos ) = 2 − SP + 2( SP − 1 )( Pos − 1 ) /( Nind − 1 )
Aranjarea liniară permite valori ale parametrului SP în intervalul
[1.0, 2.0] .
• aranjarea neliniară:
50
Nind
Fitness( Pos ) = Nind ⋅ x Pos −1 / ∑ x i −1
i =1
nr 4 nr 2 nr 6 nr 5 nr 1 nr 3
individ
Număr 1 2 3 4 5 6 7 8 9 10
individ
Fitness 2.0 1.8 1.6 1.4 1.2 1 0.8 0.6 0.4 0.2
Proba- 0.18 0.16 0.15 0.13 0.11 0.09 0.07 0.06 0.03 0.02
bilitate
selecţie
f =
∑f i
n
• individul i este selectat pentru reproducere cu probabilitatea
fi fi
pi = = .
∑ fi n⋅ f
• dacă trebuie selectaţi N indivizi, numărul N i al indivizilor ce vor fi
selectaţi cu probabilitatea pi va fi apoximativ egal cu N ⋅ pi .
Metoda fitnessului proporţionat poate fi implementată cu ajutorul
algoritmului ruletei.
număr aleator
dimensiunea 1 2 3 5 10 30
turneului
intensitatea 0 0.56 0.85 1.15 1.53 2.04
selecţiei
56
grup complet
grup incomplet
57
• bidimensională : cruce completă sau cruce incompletă
distanţa
structura
grup complet
grup incomplet
cruce completă
cruce incompletă
stea completă
stea incompletă
nπ
• selecţia după rang: GenConv Rang =
2(PresSel Rang − 1)
π n
• selecţia trunchiată: GenConvTtrunc =
2 ∗ IntSelTrunc
• selecţia turneu:
π n
GenConvTur =
2 2 log(Tur ) − log 4.14 ∗ log(Tur )
4.1. Încrucişarea
părinţi descendenţi
Figura 4.1
p1: 01110011010
p2: 10101100101
Rezultă descendenţii :
d1: 0 1 1 1 0| 1 0 0 1 0 1
d2: 1 0 1 0 1| 0 1 1 0 1 0
părinţi descendenţi
Figura 4.2
De exemplu, indivizii
p1: 01110011010
p2: 10101100101
cu 3 puncte de încrucişare date de poziţiile : 2, 6, 10
generează descendenţii
d1: 0 1| 1 0 1 1| 0 1 1 1| 1
d2: 1 0| 1 1 0 0| 0 0 1 0| 0
masca 1: 0 1 1 0 0 0 1 1 0 1 0
masca 2: 1 0 0 1 1 1 0 0 1 0 1
d1: 11101111111
d2: 00110000000
Algoritmul
P1. Pentru fiecare individ din P s :
• se generează un număr aleator q ∈ 0, 1[ ]
• dacă q < p c atunci individul respectiv este reţinut pentru
încrucişare; în caz contrar nu participă la această operaţie.
perechile.
Observaţie
p1: 12 25 5
67
p2: 123 4 34
Pentru fiecare variabilă, părintele care contribuie cu variabilă la
generarea descendenţilor, este ales aleator cu probabilitate egală; de
exemplu
alegere pentru descendentul 1: 2 2 1
alegere pentru descendentul 2: 1 2 1
descendent posibil
variabila 1
părinţi
variabila 2
Figura 4.3
68
părinte 1 părinte 2
aria părinţilor
zona posibilă a descendeţilor
Figura 4.4
69
p1: 12 25 5
p2: 123 4 34
şi următoarele valori ale lui α corespunzătoare celor doi descendenţi:
exemplul 1: 0.5 1.1 - 0.1
exemplul 2: 0.1 0.8 0.5
zona descendentilor
posibil descendent
variabila 2
părinte
variabila 1
Figura 4.5
70
p1: 12 25 5
p2: 123 4 34
şi α corespunzător celor doi descendenţi dat de
exemplul 1: 0.5
exemplul 2: 0.1
posibil descendent
variabila 2 părinte
Figura 4.6
71
p1: 2 3 8 7 9 4 1 5 6
p2: 7 5 1 6 9 2 8 4 3
1− 2 − 3 − 8 − 5 − 9 − 6 − 4 − 7
şi respectiv
1− 7 − 8 − 4 − 6 − 2 − 5 − 9 − 3
se obţine descendentul
72
d1: 2 5 8 7 9 1 6 4 3
1− 2 − 5 − 9 − 3 − 8 − 4 − 7 − 6 .
compară cele două muchii (din cei doi părinţi) care pleacă din acest
oraş şi selectează pe cea mai bună (scurtă). Oraşul de la celălalt capăt
al muchiei selectate va deveni punct de start pentru selectarea
următoarei muchii. Dacă la un anumit moment, o muchie nouă
introduce un ciclu în traseul parţial atunci aceasta se va înlocui cu alta
aleasă aleator din cele rămase şi care nu introduce cicluri.
În [49] se modifică încrucişarea euristică astfel: dacă cea mai
scurtă muchie a unui părinte introduce un ciclu în traseul
descendentului atunci se alege următoarea muchie mai scurtă dintre
cele rămase; dacă aceasta nu introduce cicluri se acceptă în vederea
extinderii traseului iar în caz contrar se selectează cea mai scurtă
muchie dintre q muchii selectate aleator, unde q este un parametru al
metodei. Efectul acestui operator constă în “alipirea” drumurilor
scurte din traseele părinţilor. Totuşi, această metodă poate duce la
încrucişări nedorite; de aceea, în [88] a fost introdus un operator
euristic suplimentar care acţionează astfel:
• selectează aleator două muchii (i, j ) şi (k, l )
• dacă
d (i, j ) + d (k , l ) > d (i, l ) + d (k , j )
atunci muchiile (i, j ) şi (k, l ) se înlocuiesc cu muchiile (i, l ) şi
(k, j ) .
1→ 2 → 4 → 3 → 8 → 5 → 9 → 6 → 7
5 → 1→ 7 → 8 → 9 → 4 → 6 → 3 → 2
75
dau descendenţii
d1: 1 1 2 1 5 3 3 2 1
d2: 5 1 5 5 4 1 3 1 1
1→ 2 → 4 → 3 → 9 → 7 → 8 → 6 → 5
5 → 1→ 7 → 8 → 6 → 2 → 9 → 3 → 4
ordinea şi poziţia a cât mai multe oraşe din celălalt părinte. Subtraseul
este selectat prin alegerea a două puncte aleatoare de taietură care
definesc frontierele operaţiei de interschimbare. De exemplu, părinţii
p1: 1 2 3 | 4 5 6 7 | 8 9
şi
p2: 4 5 2 |1 8 7 6 | 9 3
d1: ∗ ∗ ∗ |1 8 7 6 | ∗ ∗
şi
d2: ∗ ∗ ∗ | 4 5 6 7 | ∗ ∗
1 ↔ 4 , 8 ↔ 5 , 7 ↔ 6 şi 6 ↔ 7 .
d1: 4 2 3 |1 8 7 6 | 5 9
şi
d2: 1 8 2 | 4 5 6 7 | 9 3
4.1.5.2. Încrucişarea OX
p1: 1 2 3 | 4 5 6 7 | 8 9
şi
p2: 4 5 2 |1 8 7 6 | 9 3
9 − 3 − 4 − 5 − 2 − 1 − 8 − 7 − 6;
9 − 3 − 2 − 1 − 8
d1: 2 1 8 | 4 5 6 7 | 9 3.
d2: 3 4 5 | 1 8 7 6 | 9 2.
p1: 1 2 3 4 5 6 7 8 9
p2: 4 1 2 8 7 6 9 3 5.
d1: 1 ∗ 3 4 ∗ ∗ 7 ∗ 9.
d1: 1 2 3 4 8 6 7 5 9.
d2: 3 1 2 8 7 4 6 9 5.
m
dacă numărul mediu al punctelor de încrucişare este (unde m este
2
numărul oraşelor), cei doi operatori vor avea aceleaşi performanţe.
4.1.5.4. Încrucişarea CX
p1: 1 2 3 4 5 6 7 8 9
p2: 4 1 2 8 7 6 9 3 5
d1: 1 ∗ ∗ 4 ∗ ∗ ∗ ∗ ∗
În continuare, valoarea 8 aflată pe poziţia 4 în p2 determină
introducerea elementului aflat pe poziţia 8 în p1:
d1: 1 ∗ ∗ 4 ∗ ∗ ∗ 8 ∗
81
d1: 1 2 3 4 ∗ ∗ ∗ 8 ∗
d2: 4 1 2 8 5 6 7 3 9.
3 − 1 − 2 − 8 − 7 − 4 − 6 − 9 − 5
definit de părintele
(3, 1, 2, 8, 7, 4, 6, 9, 5),
muchiile sunt
82
(3 1) , (1 2) , (2 8) , (8 7 ) , (7 4) , (4 6) , (6 9) , (9 5) şi (5 3) .
Direcţia dată de o muchie nu este importantă; de exemplu, muchiile
(3 1) şi (1 3) semnalează faptul că oraşele 1 şi 3 sunt conectate
direct.
Ideea metodei este de a utiliza pentru fiecare oraş o listă a
oraşelor conectate cu el, aflate în cel puţin unul din părinţi. Evident, o
listă conţine cel puţin două şi cel mult patru oraşe. De exemplu,
pentru părinţii
p1: 1 2 3 4 5 6 7 8 9
p2: 4 1 2 8 7 6 9 3 5
1 2 3 4 5 6 7 8 9 1 2 3 4 5 6 7 8 9
1 0 1 0 0 0 0 0 0 0 1 0 0 0 1 0 0 0 0 0
2 0 0 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 1 0
3 0 0 0 0 0 0 0 1 0 3 0 0 0 0 0 1 0 0 0
4 0 0 1 0 0 0 0 0 0 4 0 0 1 0 0 0 0 0 0
5 0 0 0 0 0 0 1 0 0 5 0 0 0 0 0 0 1 0 0
6 0 0 0 0 1 0 0 0 0 6 0 0 0 0 1 0 0 0 0
7 0 0 0 0 0 0 0 0 1 7 0 1 0 0 0 0 0 0 0
8 0 0 0 0 0 1 0 0 0 8 0 0 0 0 0 0 0 0 1
9 1 0 0 0 0 0 0 0 0 9 1 0 0 0 0 0 0 0 0
şi reprezintă traseele
(1 2 4 3 8 6 5 7 9)
şi
(1 4 3 6 5 7 2 8 9) .
1 2 3 4 5 6 7 8 9 1 2 3 4 5 6 7 8 9
1 0 1 0 1 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0
2 0 0 0 0 0 0 0 0 0 2 0 0 0 1 0 0 0 1 0
3 0 0 0 0 0 1 0 1 0 3 0 0 0 0 0 0 0 0 0
4 0 0 1 0 0 0 0 0 0 4 0 0 1 0 0 0 0 0 0
5 0 0 0 0 0 0 1 0 0 5 0 0 0 0 0 0 1 0 0
6 0 0 0 0 1 0 0 0 0 6 0 0 0 0 1 0 0 0 0
7 0 0 0 0 0 0 0 0 1 7 0 1 0 0 0 0 0 0 0
8 0 0 0 0 0 0 0 0 0 8 0 0 0 0 0 1 0 0 1
9 1 0 0 0 0 0 0 0 0 9 1 0 0 0 0 0 0 0 0
(1 6 5 7 2 8 9 ) şi (3 4 ) .
4.2. Mutaţia
pm (t ) = p0 e − βt .
88
⎧ xi dacă q ≥ p 'm
x 'i = ⎨
⎩1 − xi dacă q < p 'm
unde
89
1
p' i = , i ∈ {1, 2 , L , l}.
1 − pi −γ ⋅Ni (0 ,1)
1+ e
pi
• mutaţia multiplicativă:
91
cu β parametru real.
h : {0, 1, L , T } → [0, 1)
cu proprietăţile
1) h este descrescătoare
2) h(T ) = 0
unde T este numărul maxim de iteraţii.
Un exemplu de astfel de funcţie este
92
b
⎛ t ⎞
⎜1− ⎟
h(t ) = 1− r⎝ T ⎠ ,
unde r este un parametru aleator din [0, 1] iar b ≥ 1 este un parametru
ce determină gradul de neuniformitate. În acest tip de mutaţie gena i
se transformă astfel:
x'i = xi + ( xmax − xi ) ⋅ h(t ) dacă p = 1
x'i = xi − ( xi − xmin ) ⋅ h(t ) dacă p = −1
unde x max şi xmin reprezintă cea mai mare şi respectiv cea mai mică
componentă a lui x .
(1 2 3 4 5 6 7 8 9)
94
(1 2 7 4 5 6 3 8 9)
• mutaţia prin inserare: se aleg aleator două gene şi apoi una dintre
ele se inserează lângă cealaltă; de exemplu, din
(1 2 3 4 5 6 7 8 9)
şi poziţiile 3 şi 7 se obţine
(1 2 3 7 4 5 6 8 9) .
(1 2 3 4 5 6 7 8 9)
se poate obţine
(1 2 5 3 6 4 7 8 9) .
(1 2 3 4 5 6 7 8 9)
şi poziţiile 3 şi 6 se obţine
(1 2 6 5 4 3 7 8 9) .
95
4.3. Reinserţia
010001001011010000111110010100010 .
Primii 18 biţi
010001001011010000
reprezintă pe
12.1 − (− 3.0)
x1 = −3.0 + zecimal (010001001011010000 2 ) ⋅ =
218 − 1
15.1
= −3.0 + 70352 ⋅ = −3.0 + 4.052426 = 1.052426 .
262143
Următorii 15 biţi
111110010100010
reprezintă pe
5.8-4.1
x2 = 4.1 + zecimal (111110010100010 2 ) =
215 -1
1.7
= 4.1 + 31906 = 4.1 + 1.655330 = 5.75533.
32767
106
Astfel cromozomul
010001001011010000111110010100010
corespunde valorilor
( x1 , x 2 ) = (1.052426 , 5.755330) .
v1 = (100110100000001111111010011011111)
v 2 = (111000100100110111001010100011010)
v3 = (000010000011001000001010111011101)
v 4 = (100011000101101001111000001110010)
v5 = (000111011001010011010111111000101)
v6 = (000101000010010101001010111111011)
v7 = (001000100000110101111011011111011)
v8 = (100001100001110100010110101100111)
v9 = (010000000101100010110000001111100)
v10 = (000001111000110000011010000111011)
v11 = (011001111110110101100001101111000)
v12 = (110100010111101101000101010000000)
107
v13 = (111011111010001000110000001000110)
v14 = (010010011000001010100111100101001)
v15 = (111011101101110000100011111011110)
v16 = (110011110000011111100001101001011)
v17 = (011010111111001111010001101111101)
v18 = (011101000000001110100111110101101)
v19 = (000101010011111111110000110001100)
v20 = (101110010110011110011000101111110)
Se observă că cromozomul v15 este cel mai bun iar v 2 este cel
mai neperformant. Utilizăm metoda ruletei pentru selecţie. Fitnessul
total al populaţiei este
20
F = ∑ eval (vi ) = 387.776822
i =1
Primul număr a = 0.513870 satisface relaţia q10 < a < q11 , deci
cromozomul v11 este selectat pentru noua populaţie. Pentru al doilea
număr a = 0.175741 avem q3 < a < q 4 , deci se selectează
cromozomul v 4 , etc.
În final, noua populaţie va conţine indivizii
v'1 = v11 , v' 2 = v 4 , v'3 = v7 , v' 4 = v11 , v'5 = v19 , v' 6 = v 4 , v' 7 = v15 ,
v'8 = v5 , v'9 = v11 , v'10 = v3 , v'11 = v15 , v'12 = v9 , v'13 = v6 , v'14 = v8 ,
v'15 = v 20 , v'16 = v1 , v'17 = v10 , v'18 = v13 , v'19 = v15 , v' 20 = v16 .
111
Acum putem aplica operatorul de încrucişare indivizilor din
noua populaţie. Luăm probabilitatea de încrucişare pc = 0.25 .
Procedăm astfel:
v'1 , v"2 , v'3 , v' 4 , v'5 , v' 6 , v' 7 , v'8 , v'9 , v'10 , v"11 , v'12 ,
v"13 , v'14 , v'15 , v'16 , v'17 , v"18 , v'19 , v' 20 .
v1 = (011001111110110101100001101111000 )
v 2 = (100011000101110000100011111011110 )
v3 = (001000100000110101111011011111011)
v4 = (011001111110 | 0 | 10101100001101111000 )
114
v5 = (000101010011111111110000110001100)
v6 = (100011000101101001111000001110010)
v7 = (111011101101110000100011111011110)
v8 = (000111011001010011010111111000101)
v9 = 011001111110110101100001101111000
v10 = (000010000011001000001010111011101)
v11 = (111011101101101001 | 0 | 11000001110010 )
v12 = (010000000101100010110000001111100 )
v13 = (000101000010010101000 | 1 | 0000100011 | 1 |)
v14 = (100001100001110100010110101100111)
v15 = (101110010110011110011000101111110)
v16 = (100110100000001111111010011011111)
v17 = (000001111000110000011010000111011)
v18 = (111011111010001000111010111111011)
v19 = (11101110 | 0 | 101110000100011111011110)
v 20 = (110011110000011111100001101001011)
unde biţii cuprinşi între linii verticale sunt cei care au rezultat în urma
mutaţiei. S-a încheiat o iteraţie a algoritmului, putându-se trece la
următoarea.
115
Reprezentarea problemei:
Funcţia de evaluare:
Vom lua ca funcţie de evaluare suma distanţelor euclidiene dintre
două oraşe consecutive:
N
Fitness = ∑ ( xi − xi −1 )2 + ( y i − y i −1 )2
i =1
Reprezentarea datelor:
116
O reprezentare a traseului este cea în care oraşele sunt listate în
ordinea în care ele sunt vizitate; de exemplu
3, 0, 1, 4, 2, 5 sau 0, 5, 1, 4, 2, 3 .
Operatori genetici:
Încrucişarea
1 2 3 4 5 0 şi 2 0 5 3 1 4
1 2 3 3 1 4 şi 2 0 5 4 5 0.
Vom folosi o încrucişare de tip euristic, inventată de Grefenstette în
1985 [38].
Fie doi părinţi
123450 şi 413205
• pentru a genera un descendent utilizând al doilea părinte ca şablon
selectăm primul oraş din şablon ca prim oraş al descendentului şi
obţinem 4 x x x x x
• din oraşul 2 pleacă muchiile (2, 3) şi (2, 0). Dacă distanţa dintre
oraşul 2 şi oraşul 0 este mai scurtă, selectăm oraşul 0: 4 1 2 0 x x
Mutaţia
.
lungimea
modelul ruletei
generaţii
şi obţinem
1 1
eval (v1 ) = = = 0.011904
114 − 30 84
1 1
eval (v 2 ) = = = 0.041666
54 − 30 24
1 1
eval (v3 ) = = = 0.038461
56 − 30 26
121
1 1
eval (v 4 ) = = = 0.007518
163 − 30 133
1 1
eval (v5 ) = = = 0.035714 .
58 − 30 28
eval (v5 )
p5 = = 0.264 .
F
Exemplu
• NrC = 40 ; 40 de clase - acestea ar putea fi clasele 9A, ..., 9J, 10A,
..., 10J, 11A, ..., 11J, 12A, ..., 12J;
• NrO = 6 (şase ore pe zi);
• NrZ = 5 (cinci zile pe săptămână);
124
• NrP = 80 (80 de profesori - se păstrează şi o listă cu numele lor:
Aldea, Andrei, ..., Voicu);
Un exemplu de informaţie conţinută de o linie a matricei
încadrărilor este: profesorul Aldea are: 5 ore la 10B, 4 ore la 11A, 3
ore la 12 C, 3 ore la 12D, 3 ore la 12E.
Orarul de funcţionare se poate modela printr-o matrice cu NrP
linii şi 2 ∗ NrO ∗ NrZ coloane. Indicele liniei reprezintă codul
profesorului, iar indicele coloanei reprezintă un anumit moment de
timp (zi şi oră). Un element al acestei matrice va fi codul unei clase. O
linie a matricei va indica programul pe zile al unui profesor, iar o
coloană va indica profesorii ce au ore la momentul respectiv.
Condiţiile pe care trebuie să la îndeplinească un orar sunt
următoarele:
• trebuie să fie conform cu încadrarea (linia de orar trebuie să
exprime exact încadrarea profesorului);
• la un anumit moment de timp (zi şi oră), la o anumită clasă trebuie
să predea cel mult un profesor;
• un profesor nu poate preda simultan la mai multe clase;
• elevii nu vor avea ferestre (ore libere între două ore la care li se
predă).
Vom numi un astfel de orar ca fiind un orar valid. Pe lângă
cele patru condiţii absolut necesare ar fi de dorit ca profesorii să aibă
un număr cât mai mic de ferestre, iar elevii să aibă cel mult două ore
la aceeaşi disciplină în aceeaşi zi. Un orar valid cu număr mic de
125
ferestre pentru profesori va fi numit un orar bun. Vom prezenta o
posibilitate de întocmire a orarului folosind algoritmi genetici [91].
Pentru început va trebui să găsim un orar valid de pornire.
Vom prefera o variantă de generare aleatoare a unui asemenea orar de
pornire. Pentru fiecare linie se utilizează un algoritm de generare a
unui aranjament aleator de ore conform cu matricea încadrărilor.
După generarea orarului de pornire, acesta trebuie optimizat în
raport cu numărul de ferestre. Un orar valid poate fi considerat ca
fiind o matrice B cu NrP linii şi 2 ∗ NrO ∗ NrZ coloane. Pentru
exemplul considerat vor fi 80 de linii şi 60 de coloane; 30 dintre
coloane vor reprezenta ore de dimineaţă iar celelalte 30 ore de după-
amiază. Un element al acestei matrice va fi codul unei clase (de la 1 la
NrC ) sau valoarea 0 dacă pe linia profesorului p , la timpul t nu este
planificată desfăşurarea unei ore.
O linie a matricei B va fi considerată cromozom. Pentru
exemplul ales, lungimea cromozomului este 60. O genă va putea lua
valori cuprinse între 0 şi NrC . Vor putea fi 41 de valori distincte
pentru gene. Dimensiunea populaţiei este egală cu NrP . În cazul
acestui exemplu, valoarea este 80.
Ca operator de evoluţie se foloseşte mutaţia încrucişată. Fie
profesorii p1 şi p 2 care la timpii t1 şi t 2 au ore la clasele c1 şi c 2 ;
cu alte cuvinte avem B( p1, t1) = B( p 2, t 2) = c1 şi B( p1, t 2) = B( p 2 , t1) = c 2 ;
cromozomii corespunzători liniilor p1 şi p 2 se vor încrucişa
interschimbând genele de pe poziţiile t1 şi t 2 ; operaţia poate fi
reprezentată grafic astfel:
126
⎛ πd 2 ⎞
f (d , h ) = c⎜⎜ + πdh ⎟⎟
⎝ 2 ⎠
πd 2 h
g (d , h ) = ≥ 300 ,
4
Reprezentarea soluţiei
Lungimea unui cromozom fiind 10, există 210 soluţii posibile ale
129
problemei.
Funcţia fitness
Selecţia
Operatori de evoluţie
110 111
011
010
100 101
000 001
Figura 6.1
0110
0111
1110 1111
0010
0011
1010 1011
1100 1101
1000 1001
0100 0101
0000 0001
Figura 6.2
136
Etichetarea punctelor se face astfel: punctele cubului interior şi
punctele cubului exterior se reprezintă ca în cazul 3-dimensional apoi
punem 1 în faţa fiecărui şir din cubul interior şi 0 în faţa fiecărui şir
din cubul exterior. În felul acesta, două şiruri adiacente diferă printr-
un bit. Cubul interior aparţine schemei “ 1 ∗ ∗ ∗ ”, în timp ce cubul
exterior corespunde schemei “ 0 ∗ ∗ ∗ ”. Este uşor de văzut că “ ∗ 0 ∗ ∗ ”
corespunde planului din faţă al fiecărui cub iar schema “ 10 ∗ ∗ ”
corespunde planului din faţă al cubului interior.
S 2 = (∗ ∗ ∗ ∗00 ∗ ∗0 ∗)
S 3 = (11101 ∗ ∗001)
avem θ (S1 ) = 6, θ (S 2 ) = 3, θ (S 3 ) = 8 ; deci S 3 este cea mai specifică.
δ (S1 ) = 10 − 4 = 6 , δ (S 2 ) = 9 − 5 = 4 şi δ (S 3 ) = 10 − 1 = 9 .
t := t + 1
recombină P (t )
evaluează P (t )
v1 = (100110100000001111111010011011111)
v2 = (111000100100110111001010100011010 )
v3 = (000010000011001000001010111011101)
v4 = (100011000101101001111000001110010 )
v5 = (000111011001010011010111111000101)
v6 = (000101000010010101001010111111011)
139
v7 = (001000100000110101111011011111011)
v8 = (100001100001110100010110101100111)
v9 = (010000000101100010110000001111100)
v10 = (000001111000110000011010000111011)
v11 = (011001111110110101100001101111000 )
v12 = (110100010111101101000101010000000 )
v13 = (111011111010001000110000001000110)
v14 = (010010011000001010100111100101001)
v15 = (111011101101110000100011111011110)
v16 = (110011110000011111100001101001011)
v17 = (011010111111001111010001101111101)
v18 = (011101000000001110100111110101101)
v19 = (000101010011111111110000110001100)
v20 = (101110010110011110011000101111110)
S 0 = (∗ ∗ ∗ ∗111∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗)
140
ξ (S 0 , t ) = 3 deoarece v13 , v15 şi v16 se potrivesc cu schema S 0 .
∑ eval (v )
p
ij
eval (S , t ) =
j =1
.
p
PopSize
F (t ) = ∑ eval (vi ) ,
i =1
eval (vi )
pi = .
F (t )
Deoarece
eval (S , t )
F (t )
141
• numărul indivizilor ce se potrivesc cu schema S la momentul t
este ξ (S, t )
ξ (S , t ) ⋅ PopSize ⋅ eval (S , t )
ξ (S , t + 1) = .
F (t )
F (t )
F (t ) = ,
PopSize
formula anterioară devine
ξ (S , t ) ⋅ eval (S , t )
ξ (S , t + 1) =
F (t )
eval (S , t ) = F (t ) + ε ⋅ F (t ) ,
atunci
ξ (S , t ) = ξ (S ,0 )(1 + ε ) t ,
142
adică schema aflată “deasupra mediei” duce chiar la o creştere
exponenţială a numărului de indivizi care se potrivesc cu ea în
generaţiile următoare.
∑ eval (v ) i
387.776822
F (t ) = i =1
= = 19.388841 .
PopSize 20
S 0 = (∗ ∗ ∗ ∗111∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗)
S1 = (111 ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗10 )
v'18 = (11101111101000100011|0000001000110 )
δ (S )
pd (S ) =
m −1
δ (S )
p s (S ) = 1− .
m −1
2 30 32
p d (S 0 ) = , p s (S 0 ) = , p d (S1 ) = = 1 , p s (S1 ) = 0 ,
32 32 32
δ (S )
p s (S ) = 1− pc
m −1
145
Pentru schema S 0 şi pc = 0.25 avem
2 63
p s (S 0 ) = 1 − 0.25 ⋅ = = 0.984375 .
32 64
δ (S )
p s (S ) ≥ 1− pc .
m −1
eval (S , t ) ⎛ δ (S ) ⎞
ξ (S , t + 1) ≥ ξ (S , t ) ⎜1 − p c ⎟
F (t ) ⎝ m −1 ⎠
eval (S 0 , t ) ⎛ δ (S ) ⎞
⎜1 − p c ⎟ = 1.396751 × 0.984375 = 1.374927
F (t ) ⎝ m −1⎠
şi deci
v'19 = (111011101101110000100011111011110) .
p s (S ) = (1 − pm )θ (S ) .
p s (S ) ≈ 1 − θ (S ) ⋅ pm .
p s (S 0 ) ≈ 1 − 3 × 0.01 = 0.97
eval (S 0 , t ) ⎛ δ (S ) ⎞
⎜1 − p c − θ (S 0 ) ⋅ p m ⎟ = 1.396751 × 0.954375 = 1.333024
F (t ) ⎝ m −1 ⎠
şi deci
6.3. Blocuri
S1 = (111 ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗)
S 2 = (∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗11)
S 3 = (111∗ ∗ ∗ ∗ ∗ ∗11)
S 4 = (000 ∗ ∗ ∗ ∗ ∗ ∗00) .
v0 = (11111111111) ,
(00011111100) .
Acest fenomen poartă numele de decepţie şi este strâns legat
de cel numit epistasis care, în termenii algoritmilor genetici, înseamnă
o interacţiune puternică între genele unui cromozom. O posibilitate de
a înlătura decepţia constă în folosirea altui operator genetic:
inversiunea, care va inversa biţii dintre două poziţii selectate aleator.
150
De exemplu, schema
S 3 = (111∗ ∗ ∗ ∗ ∗ ∗11)
S'3 = (11111 ∗ ∗ ∗ ∗ ∗ ∗) ,
s=
f (x )
152
unde
n
∑ f ( xi )
i =1
f(x)=
n
b) Corelaţia fitness-distanţă
c FD =
1 n
( )(
∑ fi − f di − d
n i =1
)
este covarianţa F − D , s F şi s D sunt deviaţiile standard iar f şi d
sunt mediile lui F şi respectiv D . Mărimea r măsoară dificultatea
rezolvării unei probleme de maximizare: o valoare a lui r apropiată
de − 1 (valoarea minimă) indică o problemă uşor de rezolvat folosind
algoritmi genetici iar o valoare apropiată de + 1 indică o problemă
foarte dificilă. Semnificaţiile lui r sunt inversate pentru probleme de
minimizare. Toate studiile experimentale au confirmat aceste ipoteze.
Diverşi autori au studiat problema convergenţei algoritmilor
genetici din diverse perspective. Majoritatea au utilizat lanţuri Markov
finite, alţii au definit probabilitatea de convergenţă.
algoritmul modGA
begin
t := 0
iniţializează P (t )
155
evaluează P (t )
while not (condiţie-terminare) do
begin
t := t + 1
selectează părinţii din P (t − 1)
selectează indivizii ce vor fi eliminaţi din P (t − 1)
formează P(t ) prin reproducerea părinţilor
evaluează P(t )
end
end
Se procedează astfel:
algoritmul hillclimbing
begin
t := 0
iniţializează P (t )
repeat
local:= FALSE
selectează aleator un individ curent ic
evaluează ic
157
repeat
generează L descendenţi ai lui ic prin mutaţia unui bit în ic
selectează dintre descendenţi individul in care are cea mai
mare valoare a funcţiei obiectiv
if f (ic ) < f (in )
then ic := in
else local:= TRUE
until local
t := t + 1
until t = MAX
end
⎧ f (i ) − f (ic ) ⎫
else if random[0, 1) < exp⎨ n ⎬
⎩ T ⎭
then ic := in
until (condiţie-terminare)
T := g (T , t )
t := t + 1
until (criteriu de oprire)
end
160
T := g (T , t ) unde g (T , t ) < T ∀t .
v 4 = (111000000100110111001010100000 )
cu 12 de 1, având evaluarea
f (v 4 ) = 11 ⋅ 12 − 150 = 18 .
Aşa cum am arătat anterior, algoritmul hillclimbing găseşte
maximul local
vl = (000000000000000000000000000000) .
⎛ f (i ) − f (ic ) ⎞ ⎛ 7 − 18 ⎞
p = exp⎜ n ⎟ = exp⎜ ⎟
⎝ T ⎠ ⎝ T ⎠
161
care, pentru temperatura T = 20 dă
⎛ 11 ⎞
p = exp⎜ − ⎟ = 0.57695
⎝ 20 ⎠
v5 = (111110000000110111001110100000)
şi
v6 = (000000000001101110010101111111) ,
fiecare având evaluarea 16, pot produce descendenţi mult mai buni
dacă încrucişarea are loc între a 5-a şi a 12-a genă:
v7 = (111110000001101110010101111111) .
Definiţia 7.1.
Dacă R este mulţimea numerelor reale, o mulţime X cu o aplicaţie
d : X × X → R este spaţiu metric, notat (X , d ) , dacă următoarele
162
condiţii sunt verificate pentru orice x, y ∈ X :
i) d (x, y ) ≥ 0 şi d (x, y ) = 0 ⇔ x=y
ii) d (x, y ) = d ( y, x )
iii) d (x, y ) + d ( y, z ) ≥ d ( x, z ) .
Definiţia 7.2.
Fie ( X , d ) un spaţiu metric. O aplicaţie f : X → X este contracţie
dacă şi numai dacă există o constantă c ∈ (0, 1) astfel încât pentru
orice
x, y ∈ X : d ( f ( x ) , f ( y )) ≤ c ∗ d ( x , y ) .
Definiţia 7.3.
Şirul x0 , x1 ,L de elemente din spaţiul metric ( X , d ) este şir Cauchy
dacă şi numai dacă pentru orice ε > 0 există k astfel încât pentru
orice m, n > k , d (x m , x n ) < ε . Un spaţiu metric este complet dacă
orice şir Cauchy x0 , x1 , L, x n ,L are o limită x = lim x n .
n →∞
Teorema 7.1.
Fie ( X , d ) un spaţiu metric complet şi f : X → X o contracţie de
constantă c . Atunci:
i) f are un punct fix unic x * : f x * = x * ( )
ii) dacă x0 este un element oarecare din X atunci şirul
aproximaţiilor succesive x0 , x1 = f (x0 ), L, x n = f ( x n−1 ), L este
( )
d xn , x * ≤
cn
1− c
d ( x0 , x1 )
1 n
Eval (P ) = ∑ eval ( pi ) .
n i =1
Teorema 7.2.
Fie X mulţimea tuturor populaţiilor P şi aplicaţia d : X × X → R
definită prin
⎧0, pentru P1 = P2
d (P1 , P2 ) = ⎨
⎩ 1 + M − Eval (P1 ) + 1 + M − Eval (P2 ) , pentru P1 ≠ P2
164
unde M este limita superioară a funcţiei eval în domeniul de interes.
Atunci ( X , d ) este spaţiu metric complet.
Demonstraţie.
Din eval ( x) ≤ M pentru orice individ x , rezultă Eval ( P) ≤ M pentru
orice populaţie P . Proprietăţile de spaţiu metric se verifică imediat:
• d (P1 , P2 ) ≥ 0 pentru orice populaţii P1 şi P2 ; în plus,
d ( f (P1 (t )), f (P2 (t ))) = 1 + M − Eval ( f (P1 (t ))) + 1 + M − Eval ( f (P2 (t ))) <
Înseamnă că funcţia
P(t ) ⎯⎯→
f
P(t + 1)
P * = lim f i (P(0)) ,
i →∞
algoritmul C-GA
begin
t := 0
iniţializează P (t )
evaluează P (t )
while not (condiţie-terminare) do
begin { se construieşte contracţia}
t := t + 1
selectează P (t ) din P (t − 1)
recombină P(t )
evaluează P(t )
if Eval (P(t − 1)) ≥ Eval (P(t ))
then t := t − 1
end
end
Alte abordări pot fi găsite în [46, 47].
167
AuxPopSize(t ) = PopSize(t ) ∗ ρ ,
168
unde ρ este un parametru al algoritmului, numit rată de reproducere.
Toţi indivizii unei generaţii au aceeaşi probabilitate de a fi selectaţi
pentru reproducere.
Deoarece fitnessul nu influenţează selecţia, vor fi folosiţi alţi
parametri: VÂRSTA şi VIAŢ A . VÂRSTA reprezintă numărul de
generaţii în care un individ a supravieţuit iar VIAŢ A se atribuie o
singură dată unui individ, după iniţializare sau după recombinare, şi
păstrează o valoare constantă. Un individ este menţinut în populaţie
atâta timp cât VÂRSTA nu depăşeşte VIAŢ A .
algoritmul AG-DVP
begin
t := 0
iniţializează P (t )
evaluează P (t )
while not (condiţie-terminare) do
begin
t := t + 1
VÂRSTA := VÂRSTA + 1 pentru fiecare individ din populaţie
recombină P(t )
elimină din P (t ) toţi indivizii pentru care
VÂRSTA > VIAŢ A
169
evaluează P(t )
end
end
şi
n
P ( x ) = ∑ x[i ]⋅ P[i ]
i =1
Algoritmii Ap [i ]
În cadrul acestor algoritmi soluţia este reprezentată printr-un şir
binar de lungime n . Funcţia de evaluare a unui şir x este
n
eval( x) = ∑ x[i ]⋅ P[i ] − Pen( x )
i =1
173
unde functia de penalizare Pen(x) are valoarea zero pentru soluţiile
realizabile x , adică pentru soluţiile care satisfac relaţia
n
∑ x[i]⋅W [i] ≤ C ,
i =1
(
• metoda liniară Ap [2] : )
⎛ n ⎞
Pen(x ) = ρ ⎜⎜ ∑ x[i ]⋅W [i ] − C ⎟⎟
⎝ i =1 ⎠
⎝ i =1 ⎠
În toate cazurile,
⎧ P[i ] ⎫
ρ = max⎨ ⎬.
i =1, n ⎩W [i ]⎭
174
Algoritmii Ar [i]
Algoritm repar ( x )
begin
rucsac-plin:= false
x':= x
n
if ∑ x'[i]⋅W [i] > C
i =1
then rucsac-plin:=true
while (rucsac-plin) do
begin
i = un obiect selectat din rucsac
schimbă valoarea obiectului selectat: x' [i ] := 0
175
n
if ∑ x'[i]⋅W [i] ≤ C
i =1
then rucsac-plin:=false
end
end
Algoritmii Ad [i]
Algoritm decod (x )
begin
construct lista de obiecte L
i := 1
SumProfit := 0
SumPonderi := 0
while i ≤ n do
begin
j := x[i ]
elimină elementul aflat pe poziţia j în lista L
if SumPonderi + W [ j ] ≤ C then
begin
SumPonderi := SumPonderi + W [ j ]
SumProfit := SumProfit + P[ j ]
end
i := i + 1
end
end
c = (1 0 0 1 0 )
Algoritmul VEGA
begin
iniţializare
repeat
selecţie
încrucişare
mutaţie
infecţie virală
înlocuire
until (condiţie terminare)
end.
184
SELECTIE
INDIVIZI GAZDA
INFECTIE
CALCULEAZA fitvi
DA NU
IF fitv i > 0
CALCULEAZA lifei
CALCULEAZA lifei
NU
DA
IF life i
Algoritmul delta
begin
• se iniţializează o populaţie de soluţii potenţiale
while (not condiţie terminare) do
186
begin
• se foloseşte un algoritm genetic (notat AGS) pentru a obţine o
soluţie x*
• se iniţializează o populaţie de perturbaţii aleatoare
• se foloseşte un algoritm genetic (notat AGP) pentru a obţine
perturbaţia optimă δ *
• se actualizează soluţia x* : x1* = x * + δ *
• se compară x * cu x1* şi se reţine soluţia mai performantă
end
end
Prima direcţie implică studiul unor statistici ale uneia sau mai
multor variabile aleatoare, care dau informaţii cu privire la valoarea
medie a soluţiei optimale şi la robusteţea sa (constanţa aproximării în
rulări diferite). Generaţia n a unui algoritm genetic poate fi
interpretată ca fiind un eşantion al unei variabile aleatoare X n , pentru
care se pot lua în calcul diferite statistici t ( X n ) : fitnessul celui mai
bun cromozom, fitnessul mediu al populaţiei, etc. După k rulări ale
algoritmului (în condiţii identice) se obţin k valori (Y1 , L, Yk ) ale
variabilei Y = t ( X n ) . Pentru aceste valori se pot calcula:
k
∑Y i
• media: M = i =1
=Y
k
k
∑ (Y − M )
2
i
• dispersia: D 2 = i =1
k −1
• deviaţia standard: s = D 2
• intervalul de încredere pentru medie
• intervalul de încredere pentru dispersie.
Intervalul de încredere pentru medie se calculează cu statistica
Student cu k − 1 grade de libertate: intervalul de încredere pentru
media μ cu nivelul de încredere α este
⎡ a⋅s a⋅s⎤
⎢Y − ,Y + ⎥
⎣ k k⎦
188
unde a se obţine din tabelele distribuţiei Student astfel încât să fie
îndeplinită condiţia
⎛ Y −μ ⎞
P⎜⎜ − a < < a ⎟⎟ = α .
⎝ s k ⎠
Intervalul de încredere pentru dispersie se calculează cu
statistica χ k2−1 : pentru nivelul de încredere α şi valorile a şi b extrase
din tabelele distribuţiei χ k2−1 astfel încât
1−α 1−α
( )
P χ k2−1 > a =
2
(
şi P χ k2−1 < b =) 2
intervalul de încredere pentru dispersie este
⎡ (k − 1)D 2 (k − 1)D 2 ⎤
⎢ b
,
a ⎥.
⎣ ⎦
∑Xi ∑Y i
X= i =1
, Y= i =1
,
k1 k2
SX =
1 k1
∑
k1 − 1 i −1
(
Xi −X )2
, SY =
1 k2 i
∑ Y −Y
k 2 − 1 i −1
( )
2
S X −Y =
(k 1 )
− 1 S X2 + (k 2 − 1)SY2 1 1
+ .
k1 + k 2 − 2 k1 k 2
Asupra mediei, se verifică ipotezele: