CHƯƠNG 2 THUẬT TOÁN DI TRUYỀN
2.5. Khởi tạo quần thể ban đầu
Khởi tạo quần thể ban đầu là bước đầu tiên trong thuật toán di truyền. Thông thường để khởi tạo quần thể trong bài toán tối ưu, ta tạo ra một cách ngẫu nhiên các lời
giải có thể (thường là các lời giải thỏa mãn ràng buộc của bài toán nhưng chưa biết là đại lượng cần tối ưu đã là tối ưu hay chưa). Tùy vào từng bài toán cụ thể mà ta có các
phương pháp khởi tạo khác nhau. Chất lượng của quần thể ban đầu càng cao thì lời giải mà thuật toán di truyền đưa ra càng tốt. Do đó, trong nhiều thuật toán di truyền thường sử dụng các thuật toán đã có để giải bài toán mà cho kết quả khá tốt để khởi tạo quần thể ban đầu.
2.5.1. Hàm tính độ thích nghi
Theo các nghiên cứu và các thử nghiệm của nhiều nhà nghiên cứu về thuật toán di truyền thì hàm tính độ thích nghi là một trong hai yếu tố quan trọng nhất quyết định sự thành công hay thất bại của thuật toán di truyền.
Hàm thích nghi được xây dựng sao cho giá trị thích nghi phải phản ánh được giá trị thực của cá thể trong việc đáp ứng yêu cầu của bài toán.
2.5.2. Toán tử chọn lọc
Cơ chế lựa chọn được áp dụng khi chọn các cá thể từ quần thể ( ) để thực hiện việc lai ghép và đột biến để tạo ra quần thể ( + 1). Có nhiều phương pháp để
chọn lọc các cá thể tốt, ví dụ như chọn lọc theo bánh xe số (roulette wheel selection), chọn lọc xếp hạng (rank selection), chọn lọc cạnh tranh (tournament selection). Trước
- Cách biểu diễn các cá thể thứ là ;
- Hàm tính độ thích nghi của cá thể là ( ); - Kích thước quần thể là _ ;
- Số cá thể cần chọn là .
2.5.2.1.Chọn lọctheo nguyên lý bánh xe Roulette
Trước khi chọnlọc thì tính các giá trị sau: - Tính tổng độ thích nghi của cả quần thể:
= ( );
_
- Tính xác suất chọn cho mỗi cá thể : = ( )
- Tính vị trí xác suất lũy tích qi của mỗi cá thể: =
Phương pháp chọn lọc theo bánh xe Rouletteđược thực hiện bằng cách quay bánh xe Roulette _ lần. Mỗi lần chọn một cá thể từ quần thể hiện hiện vào quần thể mới bằng cách sau:
- Phát sinh ngẫu nhiên một số trong đoạn[0, 1].
- Nếu < thì chọn cá thể ; ngược lại thì chọn cá thể thứ với giá trị của (2 £ £ _ ) sao cho £ £ .
Để minh họa, ta xét một quần thể với 5 cá thể _ = 5, với các giá trị thích nghi được cho trong Bảng 2.1. Tổng độ thích nghi của cả quần thể = 28 + 18 + 14 + 9 + 26 = 95. Xác suất lựa chọn một cá thể và các xác suất tích lũy cũng được trình bày trong Bảng 2.1.
Cá thể 1 2 3 4 5
Độ thích nghi, 28 18 14 9 26
Xác suất, 0.295 0.189 0.147 0.095 0.274
Xác suất tích lũy, 0.295 0.484 0.631 0.726 1.000 Bảng 2.1: Độ thích nghi và xác suất và xác suất tích lũy của các cá thể
Bây giờ nếu chúng ta sinh một số ngẫu nhiên = 0.585 thì cá thể thứ 3 sẽ được chọn vì = 0.484 < 0.585 < = 0.631.
Với cơ chế lựa chọn như thế này thì có một số cá thể sẽ được chọn nhiều lần. Điều này phù hợp với lý thuyết các cá thể tốt nhất thì có nhiều bản sao, cá thể trung bình thì không đổi, cá thể kém thì chết đi.
2.5.2.2.Chọn lọcxếp hạng
- Sắp xếp các cá thể trong quần thể theođộ thích nghi từ thấp đến cao.
- Đặt lại độ thích nghi cho quần thể đã sắp xếp theo kiểu: cá thể thứ nhất có độ
thích nghi là 1, cá thể thứ hai có độ thích nghi là 2, ..., cá thể thứ pop_size có độ thích
nghi là _ .
Theo phương pháp này việc một cá thể được chọn nhiều lần như trong lựa chọn theo kiểu bánh xe Roulette đã giảm đi. Nhưng nó có thể dẫn đến sự hội tụ chậm và cá thể có độ thích nghi cao cũng không khác mấy so với các cá thể khác.
2.5.2.3. Chọn lọc cạnh tranh
a) Chọn lọc cạnh tranh 2 (2 - tournament selection)
Hai nhiễm sắc thể khác nhau được chọn ngẫu nhiên và được so sánh với nhau. Nếu cá thể không tốt hơn cá thể nghĩa là: ( ) ≤ ( ) thì cá thể chết đi và bị loại ra khỏi quần thể. Quá trình này lặp đến hết cá thể còn lại.
b) Chọn lọc cạnh tranh 3 (3 - tournament selection)
Giống như trên 3 cá thể được chọn ngẫu nhiên và được so sánh. Nếu chúng ta có ( ) ≤ ( ) và ( ) ≤ ( ) thì cá thể chết đi và bị loại ra khỏi quần thể. Quá trình này lặp đến hết cá thể còn lại.
Các toán tử di truyền của thuật toán di truyền là toán tử lai ghép và đột biến. Đây là hai toán tử có tác động lớn đến chất lượng của thuật toán. Các toán tử này được xây dựng phụ thuộc vào cách mã hoá các cá thể. Ở đây chỉ đưa ra toán tử lai ghép và đột biến trên một số cách mã hoá cá thể để chỉ ra được ý tưởng xây dựng toán tử lai ghép và đột biến trong thuật toán di truyền. Còn tuỳ thuộc vào các bài toán cụ thể và cách mã hoá cá thể mà ta xây dựng hai loại toán tử này.
2.5.3. Các toán tử lai ghép
2.5.3.1. Lai ghép ánh xạ từng phần (PMX-Partially Mapped Crossover)
Lai ghép ánh xạ từng phần có thể xem như một phép biển đổi của lai ghép hai điểm. Vì vậy, nó luôn sinh ra các cá thể con hợp lệ. Hai cha mẹ và hai điểm lai ghép được lựa chọn và sinh ra một cách ngẫu nhiên. PMX bao gồm các bước chính sau:
Bước 1.Chọn hai điểm cắt nhau cùng với một chuỗi một cách ngẫu nhiên. Chuỗi con được định nghĩa bởi hai điểm cắt được gọi là ánh xạ thành phần;
Bước 2. Hoán vị hai chuỗi con giữa các cá thể cha mẹ để tạo ra cá thể con; Bước 3. Xác định quan hệ ánh xạ giữa các phần ánh xạ;
Bước 4. Hợp thức cá thể con với các quan hệ ánh xạ. Ví dụ lai ghép ánh xạ từng phần
Bước 1. Chọn hai điểm cắt tại vị trí sau gien số 3 và sau gien số 6.Chuỗi con bắt đầu từ gien số 4 đến hết gien số 6 được gọi là ánh xạ thành phần.
4 5 6 7 1 2 3 10
8
Cha 9
Mẹ
Bước 2. Hoán vị giữa cá thể cha và mẹ ta được hai cá thể con proto-child (PC1)
và proto-child (PC2). Trong hai cá thể con có các gien chưa biết x (ẩn số cần tìm).
Bước 3. Hoán vị này, cũng định nghĩa một chuỗi ánh xạ 2 → 5, 3 → 6 và 7 → 10.
Bước 4. Chúng ta điền thêm các gien từ các cá thể cha mẹ ban đầu, mà không bị mâu thuẫn
“x” trong gien số 8 trong cá thể con thứ nhất có giá trị là 2 nhưng bị mâu thuẫn nên được thay thế bằng giá trị 5, tương tự với các ẩn x chưa biết ta được các cá thể con
Hình 2.10: Minh họa các bước của lai ghép từng phần (PMX)
2.5.3.2. Lai ghép có thứ tự (OX - Order Crossorver)
Lai ghép có thứ tự có thể được xem như là một biến thể của lai ghép ánh xạ từng phần. OX bao gồm các bước sau:
Bước 1. Chọn ngẫu nhiên một chuỗi con từ một cá thể cha mẹ;
Bước 2. Tạo ra một proto-childbằng cách sao chép chuỗi con vào những vị trí tương ứng như trong cá thể cha mẹ;
Bước 3. Xóa tất cả các ký hiệu từ cá thể cha mẹ thứ hai, lúc này đã có trong chuỗi con. Chuỗi còn lại chứa các ký hiệu mà proto-child cần;
Bước 4. Đặt những ký hiệu vào những vị trí không cố định của proto-child từ trái sang phải theo trật tự của chuỗi để tạo ra cá thể con.
Đầu tiên, phân đoạn giữa để cắt các điểm được sao chép vào cá thể con
x 5 6 7 x x x x x PC1 x 4 5 6 7 1 2 3 10 8 Cha 9 4 2 3 10 1 5 6 7 8 Con 9 4 2 3 10 1 x x x 8 Con 9 x 2 3 10 x x x x x PC1 x PC2 x x x 5 6 7 x x x x Con 8 x 1 5 6 7 9 x 4 x Con 8 10 1 5 6 7 9 2 4 3 Mẹ 8 7 1 2 3 10 9 5 4 6 PC2 x x x 2 3 10 x x x x
Chuỗi bắt đầu của điểm cắt thứ hai của cha mẹ thứ hai là: 9 → 5 → 4 → 6 → 8 → 7 → 1 → 2 → 3 → 10
Chuỗi sau khi loại bỏ các giá trị 5, 6 và 7, cũng ở trong cá thể con đầu tiên là: 9 → 4 → 8 → 1 → 2 → 3 → 10
Cuối cùng, chuỗi này được đặt trong PC1 để tạo ra cá thể con bắt đầu từ điểm cát thứ hai. Tương tự, ta có cá thể con thứ hai.
Hình 2.11: Minh họa các bước của lai ghép có thứ tự (OX)
2.5.3.3. Lai ghép dựa theo vị trí (POS - Position Based Crossover)
Lai ghép dựa theo vị trí được đưa ra bởi Syswerda thực chất là một loại lai ghép đồng nhất cho một miêu tả hoán vị cùng với một thủ tục sửa chữa. Nó cũng được xem như một kiểu biến đổi của OX với các vị trí được chọn một cách không liên tục.
POS bao gồm các bước sau:
Bước 1. Chọn ngẫu nhiên một tập hợp các vị trí từ một cá thể cha mẹ;
Bước 2. Tạo ra một proto-child bằng cách sao chép các ký hiệu trên các vị trí này vào trong các vị trí tương ứng của proto-child;
Bước 3. Xóa các ký hiệu, lúc này đã được chọn từ cá thể cha mẹ thứ hai. Chuỗi kết quả chỉ chứa các ký hiệu proto-child cần;
Bước 4. Đặt các ký hiệu vào những vị trí không cố định của proto-child từ trái qua phải tương ứng với trật tự của chuỗi để tạo ra một cá thể con.
Thủ tục này được minh họa trong Hình 2.11.
Các vị trí được chọn trong cá thể cha mẹ thứ nhất 2, 5, 6 và 9. Sao chép giá trị các gien tại vị trí này cho proto-child.
Hình 2.12: Minh họa các bước của lai ghép có thứ tự (POS)
Mẹ 5 4 6 3 1 9 2 7 8 x 2 x x 5 6 x x 9 PC1 3 4 5 6 7 8 9 2 Cha 1 10 5 6 7 9 4 8 1 3 Con 2 Con x x x 2 3 10 x x x x 4 2 3 1 5 6 7 8 9 Con
2.5.3.4. Lai ghép dựa trên thứ tự (Order Base Crossover)
Lai ghép dựa trên thứ tự cũng được đưa ra bởi Syswerda. Nó là một thay đổi nhỏ của lai ghép dựa trên vị trí (POS), trong đó, thứ tự của các ký hiệu được chọn trong cá thể cha thứ nhất được áp đặt bởi các ký hiệu tương ứng trên cá thể cha mẹ thứ hai.
Thủ tục này được minh họa trong Hình 2.13.
Các vị trí được chọn trong cá thể cha mẹ thứ nhất 2, 5, 6 và 9. Sao chép giá trị các gien tại vị trí này cho proto-child.
Các ký hiệu tại những vị trí này (theo thứ tự cho trước) trong cá thể cha mẹ thứ
hai là 4, 1, 9 và 8. Cá thể con là một bản sao của cá thể mẹ trên mọi vị trí ngoại trừ các
ký hiệu trên các vị trí 2, 5, 6 và 9 (tức là 4, 1, 9, và 8).
Hình 2.13: Minh họa các bước của lai ghép (POS)
2.5.3.2. Lai ghép có chu trình (CX - Cycle Crossover)
CX đước đưa ra bởi Oliver, Smith và Holland, nó giống lai ghép dựa trên vị trí, nó chọn một số ký hiệu từ cá thể cha hoặc mẹ và các ký hiệu còn lại được chọn từ cá thể cha hoặc mẹ khác. Điểm khác nhau là các ký hiệu lấy từ cá thể cha không được chọn một cách ngẫu nhiên và chỉ những ký hiệu được chọn mới xác định một chu trình tương ứng giữa các cá thể cha mẹ. CX bao gồm các bước sau:
Bước 1. Tìm một chu trình được xác định bởi những vị trí tương ứng của các ký hiệu giữa các cá thể cha mẹ;
Bước 2. Sao chép các ký hiệu trong chu trình vào cá thể con bởi những vị trí tương ứng trong một các thể cha mẹ;
Bước 3. Xác định các ký hiệu còn lại cho cá thể con bằng cách xóa những ký hiệu này, bây giờ đã là một chu trình từ một cá thể cha mẹ khác;
Bước 4. Điền cá thể con với các ký hiệu còn lại. Thủ tục này được minh họa trong Hình 2.14.
Bước 1. Tìm chu trình được định nghĩa bởi các ký hiệu giữa các cá thể cha mẹ.
Mẹ 5 4 6 3 1 9 2 7 8 x 4 x 3 1 x x 7 8 PC1 3 4 5 6 7 8 9 2 1 Cha 2 4 5 3 1 6 9 7 8 Con
Chu trình: 1 → 5 → 2 → 4 → 9 → 1
Bước 2. Sao chép các ký hiệu trong chu trình vào một cá thể con
Bước 3. Xác định các ký hiệu còn lại cho các cá thể con
Các ký hiệu còn lại 6, 3, 7, và 8
Bước 4. Điền đầu đủ các ký hiện còn lại trong cá thể con
Hình 2.14: Minh họa các bước của lai ghép (CX) 2.5.4. Toán tử đột biến
2.5.4.1. Đột biến đảo ngược (Inversion Mutation)
Chọn hai vị trí ngẫu nhiên trong một cá thể và sau đó, nghịch đảo chuỗi giữa hai vị trí này.
Hình 2.15: Minh họa đột biến ngược
2.5.4.2. Đột biến chèn (Insertion Mutation)
Chọn ngẫu nhiên một gien và sau đó chèn gien đó vào vị trí ngẫu nhiên.
Hình 2.16:Minh họa đột biến chèn
2.5.4.3. Đột biến thay thế (Displacement Mutation)
Chọn ngẫu nhiên một chuỗi con và chèn nó vào một vị trí ngẫu nhiên. Đột biến chèn có thể xem như là một trường hợp đặc biệt của đột biến thay thế, trong đó chuỗi con chỉ chứa một gien.
Con 1 2 5 3 4 6 7 8 9 3 4 5 6 7 8 9 2 1 Cha Con 1 2 6 5 4 3 7 8 1 3 4 5 6 7 8 9 2 1 Cha Mẹ 5 4 6 9 2 3 7 8 1 Mẹ 5 4 6 9 2 3 7 8 1 3 4 5 6 7 8 9 2 1 Cha 1 2 4 5 9 Proto-child 1 2 6 4 5 3 7 8 9 Proto-child
Hình 2.17. Minh họa đột biến thay thế
2.5.4.3. Đột biến hoán vị (Exchange Mutation)
Chọn ngẫu nhiên hai vị trí sau đó hoán vị gien giữa hai vị trí này
Hình 2.18: Minh họa đột biến hoán vị 2.6. Một thủ tục đơn giản cho thuật toán di truyền 2.6. Một thủ tục đơn giản cho thuật toán di truyền
Một quá trình tiến hóa được thực hiện trên một tập các lời giải hay còn gọi là
một quần thể với kích thước cỡ là cá thể ( tùy theo người dùng chọn). Mỗi cá thể
được đánh giá độ tốt xấu theo hàm thích nghi. Ban đầu tại thế hệ 0, một quần thể (0) được khởi tạo một cách ngẫu nhiên. Sau đó (0) được tiến hóa, quá trình tiến hóa diễn ra trong vòng lặp while, quần thể tại thế hệ thứ được ký hiệu là ( ) = { , … }. Tập lời giải thế hệ thứ + 1 được xây dựng trong vòng lặp while bằng cách:
1. Áp dụng phép trao đổi chéo cho × cá thể và phép đột biến cho × cá thể của quần thể thế hệ thứ , chúng ta được tập lời giải trung gian ( ). Ở đây, là xác suất trao đổi chéo và là xác suất đột biến.
2. Đánh giá độ thích nghi của mỗi các thể ( ). 3. Chọn lọc ( + 1) từ ( ).
Thủ tục khái quát cho GA cổ điển được đặt tả như sau: Procedure GA
Begin ← 0
Khởi tạo ( ) Đánh giá ( )
While (not điều kiện dừng) do Begin
Xây dựng tập lời giải trung gian ( ) từ ( ) Đánh giá ( ) Con 1 2 6 5 4 7 8 9 3 4 5 6 7 8 9 2 1 Cha 3 Con 1 2 4 5 6 3 7 8 9 3 4 5 6 7 8 9 2 1 Cha
Chọn lọc ( + 1) từ ( ) ← + 1 Đánh giá ( ) End End 2.7. Kết luận
Thuật toán di truyền có đặc trưng khác với các kỹ thuật tìm kiếm lân cận ở chỗ nó thực hiện tìm kiếm theo nhiều hướng bằng cách luôn duy trì một tập các lời giải. Ngoài ra GA có sự trao đổi thông tin giữa các hướng thông qua phép trao đổi chéo nhằm khám phá không gian tìm kiếm. Tập các lời giải mà GA duy trì dần dần được tiến hóa, các lời giải tiến dần tới lời giải tối ưu qua các thế hệ. Điều này là do tại mỗi thế hệ, các lời giải tốt hơn có cơ hội được lựa chọn nhiều hơn cho thế hệ sau để sinh con đẻ cái, trong khi các lời giải tồi hơn dần dần bị loại bỏ qua các thế hệ. Đặc trưng nổi bật là GA dùng luật chuyển đổi theo khả năng có thể xảy ra chứ không phải là luật ấn định. Điều này cho thấy yếu tố ngẫu nhiên là một trong những đặc trưng quan trọng của GA trong tìm kiếm lời giải tối ưu.
CHƯƠNG 3. HAI BÀI TOÁN CON CỦA BÀI TOÁN LẬP LỊCH JOB SHOP Trong thực tế, chúng ta gặp nhiều trường hợp các vấn đềgiải quyết chỉ cần thỏa