Trong thực tế GA đó được dựng để giải quyết những vấn đề phức tạp, tuy nhiờn để hướng dẫn độc giả về lý thuyết mới, chỳng tụi cin đề cử ở đõy một vớ dụ rất đơn giản, tỡm đỏp số cho phương trỡnh X2 = 64. Dĩ nhiờn bài toỏn này quỏ đơn giản khụng cần đến GA, nhưng chỳng tụi đơn cử ở đõy để làm sỏng tỏ vấn đề. Trong cỏc chương sau, chỳng tụi sẽ xột đến nhiều vớ dụ phức tạp hơn.
Bài toỏn 1:
Tỡm đỏp số cho phương trỡnh X2 = 64 (*) (tức là trị số của X để X2 = 64)
Bước 1: Qui định số lượng cỏc đỏp số ấn định ký hiệu cho từng đỏp số. Giả sử chỳng ta khụng biết đỏp số của bài toỏn, nờn sẽ chọn 4 số trong số những đỏp số cú thể cú cho bài toỏn. Đồng thời chỳng ta chọn mụ hỡnh để tượng trưng cho cỏc số phải xột (dựng hệ thống nhị phõn để ký hiệu cỏc đỏp số) Hệ thập phõn 1 2 3 4 5 6 7 8 Hệ nhị phõn 0001 0010 0011 0100 0101 0110 0111 1000 If (t<0.5) then S= 1 else S=-1; {Xỏc định trị range} Range=0.5*(R[Vi_Tri].Max-R[VI_Tri].Min)
{giar sử R là mảng lưu cỏc cận trờn và cận duới của miền
xỏc định của từng thành phần gen} {Xỏc định giỏ trị delta} Delta:=0; L:=0.5; FOR i:=1 To 20 do Begin t=random_real(0,1); if (t<1/20) then delta:=delta+L; L:=L/2; End; { Xỏc định gỏi trị mới}
Bước 2: Chỉ định số đỏp số và ký hiệu cỏc đỏp số cho bài toỏn (*) (vớ dụ 2.1). Sau đõy 4 số cú thể là đỏp số cho bài toỏn (1)
Thứ tự Nhị phõn Thập phõn 1 00100 4 2 10101 21 3 01010 10 4 11000 24 Bảng 1.
Bước 3: ấn định hàm số thớch nghi (fitness function) và tớnh hệ số thớch nghi (fitness) cho từng đỏp số. Chỳng ta cú thể chọn bất cứ hệ thức hay hàm số nào để biểu diễn sự thớch nghi của cỏc đỏp số của bài toỏn. Kinh nghiệm cho thấy hàm số thớch nghi phải cú liờn hệ đến vấn đề. Bước thứ ba này tương đối phức tạp và khú thực hiện nhất, vỡ nếu chọn hàm số thớch nghi khụng đỳng, kết quả sẽ khụng cú hiệu lực. Trong vớ dụ này, chọn hàm số thớch nghi = 1000 – (X2 - 64) và qui định đỏp số nào cú hệ số thớch nghi bằng1000 hay gần 1000 nhất sẽ là đỏp số của bài toỏn.
Trong bảng 2 dưới đõy chỳng ta sẽ ghi lại cỏc chi tiết cú trong bảng 1 và thờm hệ số thớch nghi cho mỗi đỏp số.
Thứ tự (1) Nhị phõn (2) Thập phõn (3) Bỡnh phương hệ số ở cột (3) trừ 64 Thớch nghi 1 00100 4 -48 952 2 10101 21 377 623 3 01010 10 36 964 4 11000 24 512 488 Bảng 2
Bước 4: Biến hoỏ cỏc đỏp số để tỡm cỏc đỏp số cú hệ số thớch nghi tối ưu. Nhỡn vào
bảng 2, nhận thấy: đỏp số cú hệ số thớch nghi cao nhất vẫn cũn cỏch xa 1000. Do đú, phải tỡm ra những đỏp số mới (để cú hệ số ngày càng lớn và bằng hay gần với 1000) bằng cỏch biến hoỏ cỏc đỏp số cũ. Vấn đề đặt ra là: trong 4 số (4, 21, 10 và 24) trờn, số nào sẽ được chọn để biến hoỏ. Nguyờn tắc của GA đó trỡnh bày trờn là số nào cú hệ số thớch nghi cao nhất sẽ cú cơ hội tạo sinh và biến hoỏ hơn cỏc số cú hệ số thớch nghi thấp. Điều này cũng giống với thực tế, chỉ những sinh vật nào thớch nghi với hoàn cảnh hơn sẽ tồn tại lõu hơn và dĩ nhiờn sẽ cú cơ hội tạo sinh và biến hoỏ nhiều hơn.
Nhỡn vào bảng 2, chỳng ta thấy theo thứ tự 10 và 4 cú hệ số thớch nghi cao hơn do đú chỳng sẽ được chọn để tạo sinh và biến hoỏ, đồng thời số 21 và 24 cú hệ số thớch nghi thấp nhất sẽ bị loại (để giữ tổng số cỏc đỏp số là 4). Trong vớ dụ này chỳng ta sẽ lai ghộp hai số 4 và 10 tại điểm giữa hàng thứ hai và thứ ba, như trỡnh bày dưới đõy:
001 | 00 (4) 010 | 00 (hay 8)
010 | 10 (10) 001 | 10 (hay 6)
Bước 5: Tớnh hệ số thớch nghi cho cỏc đỏp số vừa cú được kết quả được ghi trong
bảng 3 dưới đõy: Thứ tự (1) Nhị phõn (2) Thập phõn (3) Bỡnh phương của hệ số ở cột (3) trừ 64 Thớch nghi 1 00100 4 -48 952 2 01010 10 36 964 3 01000 8 0 1000 4 00110 6 -28 968 Bảng 3
Bước 6: Trước khi trở lại bước 4 và 5 như trỡnh bày trờn, chỳng ta hóy xột cỏc chi tiết trong bảng 3. May mắn chỳng ta cú được đỏp số ở hàng thứ 3 là số 8 với hệ số thớch nghi là 1000. Theo quy định ghi trong bước 3, đõy là đỏp số cú hệ số thớch nghi cao nhất, số này là 01000 (nhị phõn) hay 8 (thập phõn). Do đú chỳng ta khụng cần trở lại bước 4 và 5, chỳng ta sẽ bỏo cỏo kết quả là 8.
Bước 7: Kết quả với X = 8, chỳng ta sẽ cú X2= 82= 64
Cỏc phương thức biến hoỏ trong giải thuật di truyền
Ba phương thức sau đõy đó được dựng để biến hoỏ cỏc giải đỏp: Tạo sinh (reproduction)
Lai ghộp (cross over)
Đột biến (mutation)
a) Tạo sinh: Tạo sinh là dựng những thành phần của thế hệ trước để tạo thờm thành phần của thế hệ sau. Vậy thành phần nào sẽ được chọn cho việc tạo sinh? Cũng giống như trong thiờn nhiờn, những thành phần nào cú hệ số thớch nghi lớn hơn sẽ cú cơ hội được chọn để thực hiện việc tạo sinh.
b) Lai ghộp (Cross over): Cỏc vớ dụ dưới đõy thể hiện cỏc hỡnh thức của lai ghộp:
Vớ dụ 2.2
Trước khi lai ghộp 1001110(A) 0100011(B)
Sau khi lai ghộp tại vớ trớ giữa số thứ 3 và 4, chung ta sẽ cú: (A) 1001 | 110 0100 | 110 (B‟)
(B) 0100 | 011 1001 | 011 (A‟)
Vớ dụ 2.3
Trước khi lai ghộp 1001110(A) 0100011(B)
Sau khi lai ghộp tại vớ trớ giữa số 4 và 5, chung ta sẽ cú:
(A) 100 | 1110 010 | 1110 (B”)
(B) 010 | 0011 100 | 0011 (A”)
Vớ dụ 2.4
Trước khi lai ghộp 1001110(A) 0100011(B)
Sau khi lai ghộp tại vớ trớ giữa số thứ 2 và 3, giữa số thứ 5 và thứ 6: (A) 10 | 01110 01 | 01110 (B”‟)
(B) 01 | 00011 10 | 00011 (A”‟)
c) Đột biến (Multation): là việc thay đổi trị số của một số trong dóy số, thớ dụ 0 thành 1hoặc 1 thành 0, cho trường hợp dựng dóy số theo hệ nhị phõn. So với lai ghộp, phương thức biến hoỏ dựa trờn đột biến rất ớt xảy ra. Theo kết quả nghiờn cứu của Kenneth De Jong thỡ tỉ lệ lai ghộp trung bỡnh là 0.6 trong khi tỉ lệ đột biến là 0.001, phần cũn lại 0.399 là tạo sinh.
Lai ghộp dựng lại những tin tức cú sẵn trong cỏc thành phần của thế hệ trước và truyền lại cho thế hệ sau; trong khi đú đột biến tạo ra những tin tức hoàn toàn mới.
Sau đõy là vài vớ dụ về đột biến:
Vớ dụ 2.5
110011 sẽ được biến đổi thành 110010, trong đú số 1 ở hàng cuối (tớnh từ trỏi) đó được đổi thành 0.
Vớ dụ 2.6
110011 sẽ được biến đổi thành 110111, trong đú số 0 ở hàng thứ tư (tớnh từ trỏi) đó được đổi thành 1.
Lý thuyết lập lịch
Lịch biểu (schedule) chẳng qua là một loại kế hoạch để thực hiện một cụng việc nào đú. Vỡ vậy việc lập lịch (Scheduling) chỳng ta gặp hàng ngày: Lập lịch để cỏc ụ tụ vào nhà mỏy sửa chữa, lập lịch để cỏc mỏy bay đợi đến lượt hạ cỏnh, lập lịch để chương trỡnh chờ đến lượt mỡnh vào mỏy tớnh xử lý
Bài toỏn 2
Cú n ụtụ đó sẵn sàng trước nhà mỏy để vào sửa chữa. Nhà mỏy được biết về mỗi ụtụ qua 2 tham số: hạn định mà nú phải sửa xong, thời gian cần thiết để sửa chữa ụtụ đú. Nhà mỏy làm việc khụng ngừng cho đến khi mọi ụtụ được sửa xong. Tại mỗi thời điểm, nhà mỏy chỉ xử lý được một ụtụ, sửa xong ụtụ này mới được sửa ụtụ khỏc.
Hóy sắp xếp cỏc ụtụ theo một thứ tự nhất định để theo đú chờ đến lượt sửa chữa, sao cho số lượng ụtụ được sửa đỳng hạn là nhiều nhất.
Diễn giải bài toỏn * Dữ liệu vào:
- n ụtụ sẵn sàng để vào sửa chữa: thời điểm cú thể bắt đầu xử lý (release) là như nhau:
(ri = 0 i = 1,2,...,n). .
- Mỗi ụtụ i ( 1 i n ) được biết:
+ di : hạn định ( due date ), mà ụtụ phải sửa xong. + ti : thời gian ( time) cần thiết để sửa chữa ụtụ.
- Nhà mỏy làm việc khụng ngừng cho đến khi mọi ụtụ sửa xong: liờn tục. - Tại mỗi thời điểm, nhà mỏy chỉ xử lý được một ụtụ.
- Sửa xong ụtụ này mới được sửa ụtụ khỏc: khụng cho phộp ngắt.
- Kớ hiệu bi : thời điểm bắt đầu thực sự xử lý ụtụ i. ci : thời điểm sửa xong ụtụ I.
ci di : ụ tụ i sửa đỳng hạn, nguợc lại là quỏ hạn.
- Hóy sắp xếp cỏc ụtụ theo một thứ tự nhất định để theo đú chờ đến lượt sửa chữa, sao cho số lượng ụtụ được sửa đỳng hạn là nhiều nhất.
Vớ dụ ụ tụ hạn định di thời gian ti X1 7 3 X2 5 2 X3 8 4 X4 12 4 X5 17 6 X6 9 2 X7 20 5
Nếu sửa chữa theo thứ tự : x1 , x2 , x3 , x4 , x5 , x6 , x7 , thỡ số lượng ụtụ được sửa đỳng hạn chỉ cú 2: vỡ sau khi sửa xong ụtụ x1 , x2 , ụtụ x3 đó bị quỏ hạn ( do t1 + t2 + t3 > d3 ), tiếp theo 4 ụtụ sau cũng bị quỏ hạn.
Nếu sửa chữa theo thứ tự : x2 , x1 , x6 , x4 , x5 , x3 , x7 , thỡ số lượng ụtụ được sửa đỳng hạn là 5.
Nhận xột 1
1. Bài toỏn trờn thuộc loại Lập lịch tối ưu: Với chuẩn tối ưu là số lượng ụtụ được sửa đỳng hạn là nhiều nhất (hay số lượng ụtụ bị sửa chậm là ớt nhất) .
2. Bài toỏn luụn giải được: Vỡ nú thuộc loại bài toỏn tổ hợp hữu hạn phần tử. Cụ thể dựng phương phỏp “vột toàn bộ”: Lấy tất cả cỏc hoỏn vị của n ụtụ, chọn hoỏn vị nào mà theo thứ tự đú, số lượng ụtụ được sửa đỳng hạn là nhiều nhất.
3. Bài toỏn trờn cú thể cú nhiều lịch biểu tối ưu: tức là cú nhiều thứ tự của n ụtụ thỏa món chuẩn tối ưu.
4. Nếu dựng phương phỏp “vột toàn bộ “, thỡ tốn kộm rất nhiều thời gian, vỡ cụng việc lấy tất cả cỏc hoỏn vị của n ụtụ cần thời gian hàm mũ. Vấn đề đặt ra ở đõy là khụng chỉ xõy dựng được lịch biểu tối ưu mà hơn nữa nhanh chúng tỡm ra nú. Núi cỏch khỏc xõy dựng được lịch biểu bằng thuật toỏn đa thức.
Túm lại
Cỏc đối tượng được xử lý như “ ụtụ “ hay “ chương trỡnh “ ,... trong cỏc vớ dụ trờn được qui về tờn chung là “ Cụng việc“ (Job). Cỏc phương tiện xử lý như “ nhà mỏy “ hay “ mỏy tớnh “ ,... kể cả con người cú tờn chung là “ mỏy“ (Machine). Khi đú chỳng ta cú quan niệm rộng hơn về bài toỏn lập lịch.
Lý thuyết lập lịch hiện nay đó giải quyết được cỏc vấn đề sau: Phõn loại bài toỏn lập lịch.
Nghiờn cứu cỏch thức xõy dựng lịch biểu tối ưu theo tiờu chuẩn nào đú, và hơn nữa làm sao để tạo ra nú thật nhanh (Thuật toỏn đơn định, đa thức). Sau này khi núi lập lịch ta hiểu là lập lịch tối ưu.
Tỡm ứng dụng của bài toỏn lập lịch trong thực tế: cụng nghiệp, giao thụng vận tải, hệ điều hành mỏy tớnh,...
Áp dụng giải thuật di truyền vào bài toỏn lập thời khúa biểu: Bài toỏn
Vấn đề được mụ tả như sau:
Cho số lượng lớp là K. Mỗi lớp cú một số mụn học. Mỗi lớp cú một số giờ học chắc chắn là tổng lớn nhất của 15 mụn khỏc nhau. Ta cú D giỏo viờn, mỗi giỏo viờn cú thể dạy được một số mụn nhất định. Số mụn thực tế được đưa bởi V. Yờu cầu lập lịch cho năm ngày trong tuần, và 6 giờ mỗi ngày.
í tưởng: Dựa trờn giải thuật di truyền cổ điển
Cấu trỳc dữ liệu:
Một lịch là một ma trận với 30 cột và K dũng (số lớp). Mỗi phần tử của ma trận chỉ ra rằng giỏo viờn dạy lớp này đang dạy mụn nào đú. Một vớ dụ về cấu trỳc lịch được đưa ra trong hỡnh 1.
Hỡnh 3.Cấu trỳc của một thời khúa biểu
Trong vớ dụ này cú một số ràng buộc cứng và ràng buộc mềm:
Ràng buộc cứng:
Một giỏo viờn chỉ dạy được một lớp trong cựng một quóng thời gian. Cỏc lớp chỉ cú một mụn học trong cựng một quóng thời gian
Tất cả cỏc bài học của một mụn nào đú dạy tại một lớp phải được dạy bởi cựng một giỏo viờn.
Một giỏo viờn khụng thể dạy quỏ 20 giờ mỗi tuần.
Ràng buộc mềm:
Một lớp cú thể cú cỏc giờ trống
Một lớp cú thể cú cựng một mụn nhiều lần trong một ngày Tất cả cỏc giỏo viờn cú cựng số lượng giờ dạy như nhau.
Giải thuật:
Ta xõy dựng theo thuật toỏn di truyền trong đú:
a. Hàm mục tiờu (hàm thớch nghi)
Tiến trỡnh xỏc định hàm mục tiờu là trung tõm của thuật toỏn di truyền. Hàm mục tiờu được thực hiện bằng việc xõy dựng hàm thớch nghi (fitness function) gỏn một số nguyờn cho mỗi cỏ thể. Độ thớch nghi được được đo bằng sự vi phạm cỏc ràng buộc. Với mỗi ràng buộc, chỳng ta kiểm tra xem nú bị vi phạm bao nhiờu lần bằng hàm thớch nghi. Vỡ vậy, chỳng ta khụng đếm được cỏc vi phạm trong bản thõn nú và cỏc vi phạm mở rộng. Vớ dụ như ràng buộc một giỏo viờn cú thể khụng dạy nhiều hơn một lớp trong cựng một thời gian, khi đú sẽ xảy ra vi phạm nếu giỏo viờn đú được lập lịch cho 10 lớp hơn là lập lịch cho 2 lớp.
Mỗi một ràng buộc cứng được gỏn một số trong đoạn từ 0 đến 1000000 cho hàm thớch nghi. Với mỗi ràng buộc mềm được gỏn giỏ trị trong đoạn 0 đến 200000. thường thỡ số cho ràng buộc mềm bằng ắ số cho ràng buộc cứng. Điều này rất quan trọng vỡ một số ràng buộc liờn quan lẫn nhau và một lịch biểu hoàn hảo sẽ khụng thể tồn tại.
Chi tiết cỏc ràng buộc
Với mỗi ràng buộc ta tớnh tỷ lệ lỗi = sốlỗi*100/maximumerrors. Tỷ lệ lỗi sau đú được tớnh trung bỡnh tựy mỗi loại và với cỏc ràng buộc mềm thỡ được nhõn với 0.2 và cú thể được làm giảm xuống bằng 0.75*(tỷ lệ lỗi của ràng buộc cứng). Đặt X là tỷ lệ lỗi trung bỡnh của cỏc ràng buộc cứng, và Y là tỷ lệ lỗi trung bỡnh của cỏc ràng buộc mềm. Giỏ trị thớch nghi sẽ được tớnh = (100-X)+(20-Y)+bonus. Dưới đõy tụi sẽ giải thớch tại sao lại xỏc định như vậy. Trong vớ dụ demo, C là số mụn học, T là số giỏo viờn và Cl là số lớp học.
• Một giỏo viờn chỉ dạy một lớp trong cựng một khoảng thời gian
Sử dụng ma trận biểu diễn như trờn, ta sẽ đếm được mỗi cột xuất hiện của một giỏo viờn. Vỡ mỗi dũng được sắp xếp cựng giờ, nờn chỳng ta sẽ đếm được số lỗi nếu một giỏo viờn xuất hiện hơn một lần trong cựng một giờ. Số lỗi lớn nhất = 30*(Cl – 1) vỡ với mỗi giờ cú thể cú một lỗi với một lớp trừ đi một và một lớp chỉ cú một giỏo viờn cú thể dạy.
• Cỏc lớp chỉ cú một mụn học trong cựng một khoảng thời gian
Ràng buộc này được tự động thỏa món vỡ ma trận của ta đó thể hiện điều đú; Mỗi một ụ thể hiện một mụn học được dạy tại một lớp tại một giờ và chỉ cú một giỏ trị
• Mỗi lớp sẽ cú chớnh xỏc số tiết học đó được miờu tả.
Chỳng ta đếm với mỗi lớp tại mỗi giờ xỏc định tại lịch biểu hiện tại cho mỗi lớp. Cỏc lỗi được xỏc định chớnh xỏc giữa số giờ trờn thực tế và số giờ đưa ra ban đầu. Số lỗi lớn nhất sẽ được tớnh bằng 30*Cl vỡ mỗi giờ cú thể cú một lỗi với một lớp.
•Tất cả cỏc bài giảng của cựng một mụn học được thực hiện bởi cựng một giỏo viờn
Chỳng ta tạo ra cho mỗi lớp một ma trận với cỏc mỗi mụn học là cỏc dũng, và cỏc giỏo viờn là cỏc cột. Cỏc ụ ban đầu được khởi tạo giỏ trị bằng 0. Với lịch biểu hiện tại ta sẽ đặt giỏ trị 1 trong một ụ nếu một mụn được dạy bởi một giỏo viờn xỏc định. Sau đú ta tớnh tổng mỗi dũng hiện tại. Nếu giỏ trị của mỗi dũng lớn hơn một thỡ sự