Chương 2. Giải thuật di truyền và ứng dụng đối với bài toán vận tải
2.7. Thuật toán di truyền mã hóa số thực (RCGA)
2.7.2. Các toán tử của RCGA
a. Toán tử chọn lọc
Trong RCGA, toán tử chọn lọc vẫn được áp dụng như trong GA kinh điển bao gồm: Chọn lọc tỷ lệ, chọn lọc xếp hạng hoặc chọn lọc cạnh tranh.
b. Toán tử lai ghép
RCGA cũng áp dụng các toán tử lai ghép như GA kinh điển bao gồm: lai ghép một điểm, lai ghép nhiều điểm, lai ghép mặt nạ. Ngoài ra, do cách mã hóa quần thể, người ta còn nghiên cứu và đề xuất nhiều dạng khác nhau của toán tử lai ghép. Phần này sẽ giới thiệu một số dạng toán tử lai ghép thường dùng với giả thiết cặp cá thể cha mẹ chọn để tiến hành lai ghép là:
X = (x1, ..., xm) và Y = (y1, ..., ym) + Lai ghép một điểm
Với cặp cha mẹ X, Y là các véc tơ m chiều, toán tử lai ghép một điểm chọn ngẫu nhiên một vị trí k (1 ≤ k ≤ m) rồi sinh ra cá thể con theo công thức:
X0 = (x1, ..., xk, yk+1, ..., ym) Y0 = (y1, ..., yk, xk+1, ..., xm) + Lai ghép đa điểm
Chọn ngẫu nhiên k điểm j1, ..., jk (1≤ j1 < j2 < ... < jk < m)
Lai ghép đa điểm tạo ra cặp (X0, Y0) bằng cách đánh số các đoạn [jt, jt+1] từ 0 trở đi, sau đó lấy:
x0i bằng xi tại những đoạn có số hiệu chẵn và bằng yi tại những đoạn có số hiệu lẻ.
y0i bằng xi tại những đoạn có số hiệu lẻ và bằng yi tại những đoạn có số hiệu chẵn.
+ Lai ghép mặt nạ hoặc lai ghép đều
Chọn ngẫu nhiên k vị trí 1 < i1 < i2 < ... < ik < m Các các thể con X0, Y0 được sinh ra như sau:
Xi0 =
( xi i ∈ {i1, ..., ik}
yi i /∈ {i1, ..., ik} Yi0 =
( yi i ∈ {i1, ..., ik} xi i /∈ {i1, ..., ik} + Lai số học (Arithmetic Crossover)
Chọn một số thực a (0 < a <1).
Các cá thể X0 và Y0 được tính bởi:
x0i = a∗xi + (1−a)∗yi; yi0 = a∗yi + (1−a)∗xi; + Lai ghép Heuristic
Với cặp cha mẹ (X, Y) đã chọn, trong đó cá thể X có độ thích nghi tốt hơn cá thể Y thì toán tử này tạo ra một cá thể con duy nhất X0 từ cặp (X, Y) được xác định bởi:
x0i = r∗(xi −yi) + xi với 0< r < 1 + Lai ghép BLX- α (Blend Crossover)
Với cặp cha mẹ được chọn lai ghép:
X = (x1, ..., xk, yk+1, ..., ym) Y = (y1, ..., yk, xk+1, ..., xm) Đặt I = max(xi, yi)−min(xi, yi)
Khi đó thành phần thứ i của cá thể con tạo ra là một số ngẫu nhiên chọn trong khoảng [min(xi, yi)−I ∗α,max(xi, yi) +I ∗α].
Toán tử BLX-α thông qua kết quả thực nghiệm đã khẳng định tính hiệu quả tốt nhất khi giá trị α là 0,5.
+ Lai ghép UNDX (Unimodal Normal Distributed Crossover)
Trong UNDX-m, (m+ 2) cha mẹ được chọn ngẫu nhiên từ quần thể, trong đó (m + 1) cá thể đầu được dùng để tính một véc tơ trung bình.
Cá thể cuối cùng được sử dụng để định hướng cá thể con sẽ sinh ra.
Thuật toán được mô tả như sau:
1. Chọn (m+ 1) cá thể cha mẹ x1, x2, ..., xm+1 một cách ngẫu nhiên từ quần thể ban đầu.
2. Tính véc tơ trung bình của các cá thể đã chọn : u = 1 m+ 1
m+1
X
i=1
xi. Tính dj = xj −u.
3. Chọn ngẫu nhiên cá thể cha xm+2 từ quần thể.
4. Tính độ dài d của dm+2 = (xm+2−u) trực giao với d1, ..., dm+1. 5. Lấy một cơ sở trực giao em+2, ..., en của không gian con trực giao với không gian sinh bởi d1, ..., dm+1.
6. Sinh ra các con theo công thức:
xc1 = u+
m+1
X
i=1
widi +
n
X
j=m+2
vjdej
xc2 = u−
m+1
X
i=1
widi −
n
X
j=m+2
vjdej
trong đó wi và vj là các biến ngẫu nhiên tương ứng với các phân phối chuẩn N(0, ση2) và N(0, σξ2).
Các nhà toán học Kita và Yamamura đã sử dụng thành công với các giá trị
σξ = 1
√m và ση = 0,35
√n−m + Lai ghép CMX (Center of Mass Crossover)
Giả sử quần thể đang xét là {X1, ..., XN}. Mỗi cá thể là một véc tơ trong Rn.
Thuật toán được mô tả như sau:
1. Chọn ngẫu nhiên m cá thể từ quần thể (1< m < N) . Xpi = (xpi1 , ..., xpin) i = 1, ..., m
2. Tính XCMp = 1 m
m
X
i=1
Xpi.
3. Với mỗi i = 1, ..., m tính các véc tơ "cha mẹ ảo" Xvi đối xứng với Xpi qua XCMp
Xvi = 2XCMp −Xpi
4. Với mỗi cặp Xvi và Xpi tạo ra một cá thể con Xci bằng cách sử dụng BLX-α.
Như vậy với m cá thể cha mẹ sẽ sinh ra được m cá thể con.
Mô phỏng lai ghép CMX được biểu diễn bởi hình 2.2.
Hình 2.2: Mô phỏng lai ghép CMX
Với cách lai ghép này, các cá thể con sinh ra sẽ phân bố gần với tâm của “đám đông” các cá thể cha mẹ.
+ Lai ghép MFX (Multi-parent Feature-wise Crossover)
Thuật toán này chọn từ mỗi cá thể cha mẹ một tính chất đặc trưng nào đó rồi thực hiện tiến hoá sử dụng thông tin đặc trưng này.
Thuật toán được mô tả như sau:
1. Chọn ngẫu nhiên m cá thể từ quần thể (1< m < N) Xpi = (xpi1 , ..., xpin) i = 1, ..., m
2. Cá thể con Xci = xci1 , ..., xcin được sinh ra như sau:
Với mỗi j, j = 1, ..., n chọn ngẫu nhiên một số tự nhiên k trong khoảng (1, m) sao cho k 6= i. Sau đó xcij được sinh ra từ xpij và xpkj là một số ngẫu nhiên được chọn trong khoảng (xpij −αl, xpkj +αl) trong đó l là khoảng cách xpij và xpkj .
Hình 2.3: Phân bố của xcij
Bằng cách nêu trên, nếu cố định một cá thể cha Xpi sẽ sinh ra một cá thể con Xci tương ứng mà mỗi thành phần của véc tơ được kế thừa một thông tin đặc trưng nào đó của cá thể cha Xpi và một cá thể mẹ Xpk.
+ Lai ghép SX (Seed Crossover)
Thuật toán này thực hiện lai ghép đôi một cá thể, cá thể con sinh ra lại tiếp tục lai ghép với cá thể cha mẹ có độ thích nghi tăng dần.
Thuật toán được trình bày như sau:
1. Chọn ngẫu nhiên m cá thể từ quần thể (1< m < N) Xpi = (xpi1 , ..., xpin) i = 1, ..., m
2. Xếp hạng các cá thể cha mẹ giảm dần theo độ thích nghi.
3. Xc = Blx(Xpm, Xpm−1)
4. Cho j chạy từ (m−2) đến 1 thực hiện Xc = Blx(Xc, Xpj).
Trong đó Blx(X, Y) là toán tử lai ghép hai cha mẹ dạng BLX-α.
Như vậy với cách này, tại mỗi bước lặp, cá thể tạo được có khả năng kế thừa những đặc trưng của cá thể cha mẹ với độ thích nghi tăng dần.
Toán tử này chỉ sinh ra một cá thể con từ m cá thể cha mẹ đã chọn.
Hình 2.4: Toán tử lai ghép SX
c. Toán tử đột biến + Đột biến đều
Với một gen i được chọn ngẫu nhiên để đột biến từ cá thể b = (x1, x2, ..., xN), thành phần xi được thay thế bởi một số ngẫu nhiên trong khoảng xác định [li, ui] của xi.
+ Đột biến biên
Từ cá thể cha mẹ đã chọn đột biến x và vị trí chọn đột biến k, thành phần thứ k(xk) của x được thay bởi lk hay uk, trong đó [lk, uk]là khoảng xác định của xk.
Trong các bài toán biên của các biến không lớn và giải pháp cần tìm nằm gần biên thì phép đột biến biên tỏ ra rất hữu ích.
+ Đột biến không đều
Giả sử tmax là một số cực đại được định nghĩa trước. Thành phần xi được thay thế bởi một trong hai giá trị theo công thức:
x0i = xi+ ∆(t, bi −xi) x00i = xi−∆(t, xi−ai)
Việc chọn giá trị nào được tiến hành tùy theo giá trị ngẫu nhiên khởi tạo với xác suất 12. Biến ngẫu nhiên ∆(t, x) xác định một bước đột biến
trong khoảng [0, x] theo công thức:
∆(t, x) = x∗(1−λ)(1−tmaxt )τ
λ - thường là số ngẫu nhiên phân bố đều trong khoảng đơn vị.
τ - tham số xác định ảnh hưởng của lần tạo sinh thứ t trên phân bố của đột biến trong miền [0, x.].