Chương 3: THIẾT KẾ CHUỖI CUNG ỨNG BẰNG GIẢI THUẬT DI TRUYỀN
3.1.1. Ý tưởng của thuật toán di truyền
Thuật toán di truyền được xây dựng dựa trên quy luật tiến hóa sinh học hay phát triển tự nhiên của một quần thể sống. Các cá thể trải qua một quá trình phát triển và sinh sản để tạo ra những cá thể mới cho thế hệ tiếp theo. Trong quá trình tăng trưởng và phát triển những cá thể xấu (theo một tiêu chuẩn nào đó hay còn gọi là độ phù hợp của nó trong môi trường) sẽ bị đào thải, ngược lại, những cá thể tốt sẽ được giữ lại (đây chính là quá trình chọn lọc) và được lai ghép (quá trình lai ghép) để tạo ra những cá thể mới cho thế hệ sau. Những cá thể mới được sinh ra mang những tính trạng của cá thể cha-mẹ (còn gọi là hiện tượng di truyền). Những cá thể được giữ lại có độ thích nghi khác nhau và quá trình lai ghép được thực hiện hoàn toàn ngẫu nhiên giữa các cá thể trong quần thể. Các cá thể được tạo ra trong quá
trình lai ghép có thể sẽ xảy ra hiện tượng đột biến và tạo ra những cá thể khác với cá
thể cha-mẹ. Cá thể này có thể tốt hơn hoặc xấu hơn cá thể cha-mẹ. Di truyền và đột biến là hai cơ chế có vai trò như nhau trong quá trình tiến hóa, mặc dù hiện tượng đột biến xảy ra với xác suất nhỏ hơn nhiều so với xác suất của hiện tượng di truyền.
Và quá trình lai ghép và chọn lọc là hai quá trình cơ bản xuyên suốt quá trình tiến hóa tự nhiên.
Thuật toán di truyền cũng như các thuật toán tiến hóa nói chung được hình thành trên quan niệm cho rằng, quá trình tiến hóa là quá trình hoàn hảo nhất vì tự nó đã mang tính tối ưu . Thể hiện ở chỗ, cá thể sau được sinh ra bao giờ cũng tốt hơn, hoàn hảo hơn cá thể cha-mẹ, chúng có khả năng thích nghi với sự thay đổi của môi
số cá thể của thế hệ trước tốt hơn các cá thể ở thế hệ sau. Vì vậy, trong khi sử dụng thuật toán di truyền, chúng ta cần phải lưu lại những cá thể tốt nhất của mỗi thế hệ, trải qua một số thế hệ (lần lặp) nhất định chúng ta đem so sánh những cá thể tốt nhất của những thế hệ với nhau và chọn ra một cá thể tốt nhất trong số các cá thể đó. Đó chính là lời giải tối ưu cho bài toán.
Thuật toán di truyền sử dụng nhiều thuật ngữ của ngành sinh học như chọn lọc, lai ghép, đột biến, gen, cá thể. Thông thường một cá thể mang nhiều cá thể nhưng để đơn giản ta chỉ coi mỗi cá thể mang một cá thể và bộ mã gen của nó mang đặc tính của cá thể, mỗi cá thể là một lời giải của bài toán.
3.1.2. Các vấn đề cơ bản về thuật toán di truyền
Thuật toán di truyền là một kỹ thuật của khoa học máy tính nhằm tìm kiếm các giải pháp thích hợp cho các bài toán tối ưu tổ hợp. Giải thuật di truyền là một phân ngành của giải thuật tiến hóa vận dụng các nguyên lý của tiến hóa như di truyền, đột biến, lai ghép (trao đổi chéo) và chọn lọc tự nhiên.
Giải thuật di truyền thường được ứng dụng nhằm sử dụng ngôn ngữ máy tính để mô phỏng quá trình tiến hóa của một tập hợp những đại diện trừu tượng (gọi là cá thể) của các giải pháp có thể (gọi là những cá thể) cho bài toán tối ưu hóa vấn đề.
Tập hợp này sẽ tiến triển theo hướng chọn lọc những giải pháp tốt hơn.
Liên quan đến giải thuật di truyền có các khái niệm sau:
a) Sự diểu diễn của cá thể (encoding mechanism)
Để áp dụng được thuật toán di truyền thì việc đầu tiên là phải tìm được cách biểu diễn của các cá thể sao cho mỗi cá thể biểu diễn một giải pháp của bài toán đang được quan tâm. Có rất nhiều các dạng biểu diễn khác nhau như biểu diễn nhị phân, biểu diễn nguyên, biểu diễn bằng ma trận, .... Các thuật toán di truyền ban đầu
đều sử dụng biểu diễn nhị phân, trong đó một cá thể là một xâu bít 0 và 1. Tuy nhiên khi thuật toán di truyền đã được áp dụng để giải nhiều bài toán trong nhiều lĩnh vực khác nhau, cách biểu diễn nhị phân đôi khi gây những khó khăn cho các thao tác khác. Vì vậy, tùy theo các bài toán thực tế, người giải bài toán có thể lựa chọn các cách biểu diễn cho phù hợp nhất với chúng.
b) Đánh giá độ thích nghi (fitness function)
Độ thích nghi là khả năng phù hợp của mỗi cá thể (giải pháp) đối với môi trường (bài toán). Việc xây dựng độ thích nghi cũng là một bước quan trọng trong thuật toán di truyền. Để đánh giá được độ thích nghi của các cá thể giải thuật di truyền sử dụng một hàm đo gọi là Fitness Function .
Hàm Fitness là hàm dùng để đánh giá độ tốt của một lời giải hoặc cá thể. Hàm Fitness nhận vào một tham số là xâu mã hóa nhị phân của một cá thể và trả ra một số thực. Tùy theo giá trị của số thực này mà ta biết độ tốt của cá thể đó (chẳng hạn với bài toán tìm cực đại thì giá trị trả ra càng lớn thì cá thể càng tốt, và ngược lại, với bài toán tìm cực tiểu thì giá trị trả ra càng nhỏ thì cá thể càng tốt).
c) Lai ghép (crossover operator)
Là quá trình tạo ra cá thể mới dựa trên nhiều cá thể đã có, gọi là các cá thể cha-mẹ. Hai cá thể con được tạo ra bằng cách hoán đổi các gen từ cá thể cha mẹ.
- Lai ghép đơn điểm (single-point crossover): Lai ghép đơn điểm được mô tả như sau:
o Chọn ngẫu nhiên hai cá thể trong quần thể bằng các phương pháp chọn lọc.
Giả sử cá thể của cha mẹ có m gen.
o Tạo một số ngẫu nhiên trong khoảng từ 1 đến m-1, số này sẽ được gọi là điểm lai. Điểm lai chia các chuỗi cá thể cha mẹ ra thành hai nhóm chuỗi con dài m1
Đưa hai cá thể mới này vào quần thể để tham gia các quá trình tiến hóa tiếp theo.
Ví dụ: giả sử ta có 2 cá thể A và B như sau:
Cá thể A
Cá thể B
Giả sử điểm lai là k=6.
Cá thể A
Cá thể B
Khi đó hai cá thể con A’ và B’ sẽ có bộ gen được biểu diễn như sau:
Cá thể con A’
Cá thể con B’
- Lai ghép đa điểm (multi-point crossover)
Lai ghép đa điểm là dạng tổng quát của lai ghép đơn điểm và được mô tả như sau:
o Chọn ngẫu nhiên hai cá thể trong quần thể bằng các phương pháp chọn lọc.
Giả sử cá thể của cha mẹ có m gen.
1 1 0 1 0 0 1 0
0 1 1 1 0 1 0 0
1 1 0 1 0 0 1 0
0 1 1 1 0 1 0 0
1 1 0 1 0 1 0 0
0 1 1 1 0 0 1 0
o Chọn nhiều điểm lai ghép: k1, k2, …, km, m điểm lai ghép này sẽ chia đoạn mã gen của cha-mẹ ra thành m+1 đoạn
o Hai cá thể mới được tạo ra bằng cách ghép các đoạn của hai bộ gen cha mẹ với nhau theo quy tắc: các đoạn ở vị trí lẻ được giữ nguyên, các đoạn ở vị trí chẵn được chuyển hóa cho nhau như trong lai ghép đơn điểm .
o Đưa hai cá thể mới này vào quần thể để tham gia các quá trình tiến hóa tiếp theo.
Ví dụ: giả sử có hai cá thể A và B được chọn lọc theo một phương pháp chọn lọc.
Cá thể A
Cá thể B
Giả sử các vị trí lai ghép là 2, 4, 7; biểu diễn như trong hình sau:
Cá thể A
Cá thể B
Hai cá thể con có bộ gen được biểu diễn như sau:
Cá thể con A’
Cá thể con B’
1 1 0 1 0 0 1 0
0 1 1 1 0 1 0 0
1 1 0 1 0 0 1 0
0 1 1 1 0 1 0 1
1 1 1 1 0 0 1 1
Quá trình lai ghép:
Phép lai xảy ra với xác suất là pc (đây là tham số do người dùng tự định nghĩa). Xác suất pc này cho ta số cá thể tham gia lai ghép là pc* pop_size (pop_size là kích thước quần thể). Quá trình được tiến hành như sau:
1. Chọn cặp cá thể từ quần thể hiện tại
2. Sinh ngẫu nhiên một số hữu tỷ r trong khoảng [0..1].
3. Nếu r < pc chọn điểm lai ghép bằng cách tạo một số ngẫu nhiên k với 1≤ k ≤ độ dài xác định của xâu
4. Thực hiện lai ghép.
d) Đột biến (mutation operator)
Là quá trình tạo ra cá thể mới từ một cá thể ban đầu bằng cách thay đổi một số gen của nó. Nếu sử dụng biểu diễn nhị phân thì phép đột biết thường sử dụng là bit flipping, nghĩa là nếu gen là 1 thì được đổi thành 0 và ngược lại.
Ví dụ: ta chọn k=3 là vị trí thay đổi khi đó ta có
Cá thể A
Cá thể đột biến
Quá trình đột biến:
1 0 0 1 1 0
1 0 1 1 1 0
Tương tự như quá trình lai ghép, quá trình đột biến cũng được thực hiện với một xác suất đột biến pm (tham số này do người dùng tự định nghĩa). Quá trình đột biết xảy ra như sau:
1. Chọn một cá thể trong quần thể.
2. Sinh ngẫu nhiên một số hữu tỷ r trong khoảng [0..1].
3. Nếu r < pm Chọn điểm đột biến bằng cách tạo một số ngẫu nhiên k với 1≤ k ≤ độ dài xác định của xâu
4. Thay đổi 0 thành 1 hoặc ngược lại (Flipping) gen thứ k e) Chọn lọc và thay thế (selection and replacement)
Chọn lọc và thay thế (cũng được biết như là reproduction) là quá trình chọn những cá thể từ quần thể hiện tại để tạo ra thế hệ sau của nó. Trong quá trình này diễn ra sự đào thải những cá thể xấu chỉ giữ lại những cá thể tốt. Những cá thể có độ thích nghi lớn hơn hoặc bằng với độ thích nghi tiêu chuẩn sẽ được giữ lại và độ thích nghi của các cá thể trong quần thể sẽ hoàn thiện hơn sau nhiều thế hệ. Để cho đơn giản chúng ta thường sắp xếp độ thích nghi của các cá thể theo thứ tự giảm dần. Quá
trình này được mô tả như sau:
o Tính độ thích nghi của từng cá thể trong quần thể hiện hành, lập bảng cộng dồn các giá trị thích nghi ( theo số thứ tự gán cho cá thể ). Giả sử quần thể có n cá thể. Gọi độ thích nghi của cá thể thứ i là Fi, tổng dồn thứ i là Fti, tổng độ thích nghi của toàn quần thể là Fm.
o Tạo một số ngẫu nhiên F trong trong đoạn từ 0 đến Fm.
o Chọn cá thể thứ k đầu tiên thỏa mãn F ≥ Ftk đưa vào quần thể của thế hệ mới