Một lời giải hợp lệ của bài toán có thể được biểu diễn dưới dạng một véctơ mà các phần tử là một hoán vị của các số tự nhiên trong Bảng 3.9 như sau:
Hình 3.9: Một lời giải hợp lệ cho PFSP 5 công việc 4 máy Hàm đánh giá độ thích nghi Hàm đánh giá độ thích nghi
Hàm đánh giá độ thích nghi của mỗi lời giải được ký hiệu là được xây dựng theo công thức sau:
= − ( )
Trong đó, ( ) là thời gian hoàn thành của mỗi lời giải , là tham số dương được đưa vào sao cho − ( ) > 0 với mọi . Bài toán tìm được chuyển đổi thành bài toán tìm vì thuật toán di truyền chỉ áp dụng trực tiếp cho bài toán tìm
. Nhiệm vụ của bài toán là phải tìm một lịch biểu sao cho = − ( ) đạt giá trị lớn nhất (tức là ( ) nhỏ nhất).
Để khởi tạo _ (cỡ quần thể) lời giải cho thế hệ đầu tiên, chúng ta tiến hành các bước sau:
Bước 1:
+ Xây dựng mảng một chiều _ [1. . ] để lưu số thao tác của mỗi công việc đã được lập lịch. Mảng này gồm phần tử tương ứng với công việc, ban đầu các giá trị của các phần tử của mảng này đều bằng 0.
+ Xây dựng một một mảng một chiều [1. . ], mảng này lưu các công việc chưa được lập lịch xong. Ban đầu gồm phần tử ( công việc), [1] = 1, [2] = 2, … , [ ] = .
Bước 2: Lặp lại quy trình sau cho đến khi = ∅.
1. Chọn ngẫu nhiên một số tự nhiên là một phần tử của (chọn một công việc để lập lịch).
Ví dụ, chọn số ngẫu nhiên là 2, tức là công việc được chọn để lập lịch. 2. Lập lịch cho tất cả các thao tác của công việc vừa được chọn.
3. Xóa công việc này ra khỏi bảng . Lặp lại bước 1. Các toán tử di truyền
+ Toán tử chọn lọc:
Toán tử này nhằm mục đích chọn các lời giải tốt cho thế hệ sau dựa trên giá trị của hàm thích nghi. Về cơ bản, cơ chế của hoạt động của toán tử này tương tự như toán tử chọn lọc trong thuật toán di truyền truyền thống đã được trình bày chương 2. Chọn lọc một cách ngẫu nhiên theo nguyên tắc bánh xe số.
+ Toán tử đột biến:
Toán tử đột biến thực hiện trên một các thể cha, số các cá thể cha được chọn để đột biến theo một tỷ lệ nhất định tùy thuộc vào xác suất đột biến ( ). Phép biến đổi được tiến hành theo các bước sau:
1. Chọn ngẫu nhiên một thao tác (ký hiệu là 1) trong cá thể cha. Xác định công việc chứa thao tác đó (ký hiệu là 1) và vị trí của thao tác đó (ký hiệu là
1).
2. Chọn ngẫu nhiên một thao tác ( 2) trong cá thể cha. Xác định công việc chứa thao tác đó ( 2) và vị trí của thao tác đó ( 2).
3. Nếu 1 ≠ 2 thì tiến hành đột biến bằng cách chèn các thao tác của 1 vào vị trí các thao tác của 2. Chúng ta được cá thể con. Trong quá trình chèn xảy ra hai trường hợp sau:
- Trường hợp 1: 1 > 2, dồn các thao tác của 2 sang phải vị trí để lấy chỗ cho các thao tác của 1.
- Trường hợp 2: 1 < 2, dồn các thao tác của 2 sang trái vị trí để lấy chỗ cho các thao tác của 1.
Ví dụ, các thể cha được chọn để đột biến như trong Hình 3.10:
- 1 = 20 1 = và 1 = 15, 2 = 12 2 = và 2 = 8.
Hình 3.10: Cá thể cha cho phép đột biến
+ 1 ≠ 2 và 1 > 2 chèn các thao tác của vào vị trí các thao tác của (dồn các thao tác của sang phải 4 vị trí, chúng ta được cá thể con sau đột biến như trong Hình 3.11.
Hình 3.11: Cá thể con sau phép đột biến
+ Toán tử trao đổi chéo:
Toán tử trao đổi chéo được thực hiện trên 2 cá thể cha. Các gien trong cá thể con được kết hợp từ các gien trong 2 cá thể cha theo một quy luật nào đó. Toán tử trao đổi chéo được tiến hành theo các bước sau:
1. Tung ngẫu nhiên đồng xu, nếu kết quả là mặt sấp thì chọn công việc từ cha thứ 2 đưa vào cá thể con. Ngược lại chọn từ cha thứ nhất. Việc tung đồng xu được tiến hành lần tương ứng với công việc. Quá trình chọn các công việc được thực hiện bằng cách kiểm tra cá thể cha từ trái qua phải, nếu gặp công việc chưa có trong cá thể con thì chọn để đưa vào cá thể con. Tiến trình kết thúc khi số công việc trong cá thể con là .
2. Từ dãy các công việc vừa được chọn cho cá thể con, chúng ta chuyển thành một dãy bao gồm tập các thao tác của mỗi công việc để có thể được cá thể con thực sự có mã hóa các thao tác là số tự nhiên.
Ví dụ, hai cá thể cha được chọn để trao đổi chéo như trong Hình 3.12.
5 6 7 8 17 18 19 20 9 10 11 12 1 2 3 4 13 14 15 16 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 5 6 7 8 9 10 11 12 1 2 3 4 17 18 19 20 13 14 15 16 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
Giả sử, các kết quả tung đồng xu là: 0, 0, 1, 0, 1. Khi đó cá thể con có các công việc được chọn từ cá thể cha 1 và cha 2 là: , (từ cha 1), (từ cha 2), (từ cha 1) và (từ cha 2).
Cha 1
Hình 3.12: Hai thể cha tham gia trao đổi chéo Cá thể con sau trao đổi chéo như trong Hình 3.13 Cá thể con sau trao đổi chéo như trong Hình 3.13
Hình 3.13: Cá thể con sau trao đổi chéo Thủ tục tiến hóa Thủ tục tiến hóa
Thủ tục tiến hóa cho bài toán PFPS được đặc tả vắn tắt như sau: Procedure GA_PFSP Begin 0 Khởi tạo ( ) Đánh giá ( ) While(điều kiện còn đúng) Begin
Xây dựng lời giải trung gian ( ):
+ Áp dụng toán tử đột biến với ( ) được ( ) + Áp dụng toán tử trao đổi chéo với ( ) được ( ) + ( ) = ( ) ∪ ( ) ∪ ( )
Đánh giá ′( )
+ 1
Áp dụng toán tử chọn lọc với ( − 1) được ( )
5 6 7 8 9 10 11 12 13 14 15 16 1 2 3 4 17 18 19 20 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 14 15 16 5 6 7 8 9 10 11 12 1 2 3 4 17 18 19 20 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 5 6 7 8 9 10 11 12 1 2 3 4 17 18 19 20 13 14 15 16 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 13
End End
3.1.5. Kết quả thực nghiệm
Dựa trên thuật toán trình bày ở trên, chương trình đã được chạy thử nghiệm trên các bài toán kiểm thử đã biết trước kết quả tối ưu. Với các bài toán cỡ không lớn. Số lần chạy đạt kết quả tối ưu thực sự khá cao. Kết quả chạy thử nghiệm được thống kê trong Bảng 3.6 được tham khảo trong [1].
Bài toán (m x n) Cỡ lời giải Số thế hệ Xác suất lai ghép Xác suất đột biến Kết quả chạy Tối ưu thực sự 3x5 20 100 0.5 0.5 28 28 4x5 20 100 0.5 0.5 32 32 3x5 20 100 0.5 0.5 49 49