Professional Documents
Culture Documents
Tim Hieu Giai Thuat Di Truyen Va Xay Dung Ung Dung Minh Hoa
Tim Hieu Giai Thuat Di Truyen Va Xay Dung Ung Dung Minh Hoa
1
1 CHƯƠNG 1: GIẢI THUẬT DI TRUYỀN
Giải thuật di truyền được hình thành dựa trên quan niệm: quá trình tiến
hóa tự nhiên là quá trình hoàn hảo và hợp lý nhất, tự quá trình này đã mang
tính tối ưu. Quan niệm này là một tiên đề đúng, không chứng minh được nhưng
phù hợp với thực tế khách quan. Tính tối ưu của quá trình tiến hóa thể hiện ở
đặc điểm, thế hệ sau bao giờ cũng tốt hơn (phát triển hơn, hoàn thiện hơn) thế
hệ trước. Tiến hóa tự nhiên được duy trì nhờ hai quá trình cơ bản là sinh sản và
chọn lọc tự nhiên, trong suốt quá trình tiến hóa tự nhiên, các thế hệ mới luôn
được sinh ra để bổ sung thay thế thế hệ cũ. Cá thể nào phát triển hơn, thích ứng
hơn với môi trường sẽ tồn tại, cá thể nào không thích ứng được với môi trường
sẽ bị đào thải. Sự thay đổi của môi trường là động lực thúc đẩy quá trình tiến
hóa, ngược lại tiến hóa cũng tác động trở lại góp phần thay đổi môi trường.
Giải thuật di truyền là giải thuật tìm kiếm, chọn lựa các giải pháp tối ưu
để giải quyết các bài toán thực tế khác nhau, dựa trên cơ chế chọn lọc của tự
nhiên: từ tập lời giải ban đầu, thông qua nhiều bước tiến hoá, hình thành tập lời
giải mới phù hợp hơn, và cuối cùng dẫn đến lời giải tối ưu toàn cục.
Trong tự nhiên, mỗi cá thể muốn tồn tại và phát triển phải thích nghi với
môi trường, cá thể nào thích nghi hơn thì tồn tại, cá thể nào kém thích nghi thì
bị tiêu diệt. Trong mỗi cá thể, các gen liên kết với nhau theo cấu trúc dạng
chuỗi, gọi là nhiễm sắc thể (NST). Mỗi NST đặc trưng cho mỗi loài và quyết
định sự sống còn của cá thể đó. Do môi trường tự nhiên luôn biến đổi nên cấu
2
trúc NST cũng thay đổi để thích nghi với môi trường và thế hệ sau luôn thích
nghi hơn thế hệ trước. Cấu trúc này có được do sự trao đổi thông tin có tính
ngẫu nhiên với môi trường bên ngoài hoặc giữa các NST với nhau.
Từ ý tưởng đó, các nhà khoa học đã nghiên cứu và xây dựng nên giải
thuật di truyền dựa trên cơ sở chọn lọc tự nhiên và quy luật tiến hoá. Giải thuật
di truyền sử dụng các thuật ngữ được lấy từ di truyền học như: lai ghép, đột
biến, NST, cá thể...Ở đây mỗi cá thể được đặc trưng bởi một tập nhiễm sắc thể,
nhưng để đơn giản khi trình bày, ta xét trường hợp tế bào mỗi cá thể chỉ một
NST. Các NST được chia nhỏ thành các gen được sắp xếp theo một dãy tuyến
tính. Mỗi cá thể (hay NST) biểu diễn một lời giải có thể của bài toán. Một xử lý
tiến hoá duyệt trên tập các NST tương đương với việc tìm kiếm lời giải trong
không gian lời giải của bài toán. Quá trình tìm kiếm phải đạt được hai mục tiêu:
3
1.2.3 Chọn lọc
Trong tự nhiên, quá trình chọn lọc và đấu tranh sinh tồn đã làm thay đổi
các cá thể trong quần thể. Những cá thể tốt, thích nghi được với điều kiện sống
thì có khả năng đấu tranh lớn hơn, do đó có thể tồn tại và sinh sản. Các cá thể
không thích nghi được với điều kiện sống thì dần mất đi. Dựa vào nguyên lý của
quá trình chọn lọc và đấu tranh sinh tồn trong tự nhiên, chọn lựa các cá thể
trong GA chính là cách chọn các cá thể có độ thích nghi tốt để đưa vào thế hệ
tiếp theo hoặc để cho lai ghép, với mục đích là sinh ra các cá thể mới tốt hơn.
Có nhiều cách để lựa chọn nhưng cuối cùng đều nhằm đáp ứng mục tiêu là các
cá thể tốt sẽ có khả năng được chọn cao hơn.
1.2.5 Cá thể
Một cá thể trong giải thuật di truyền, biểu diễn một giải pháp của bài
toán. Tuy nhiên không giống với trong tự nhiên, một cá thể có nhiều nhiễm sắc
thể, có một thì gọi là thể đơn bội, còn nếu có nhiều thì là thể đa bội, ở đây để
giới hạn trong giải thuật di truyền ta quan niệm một cá thể có một nhiễm sắc
thể. Do đó khái niệm cá thể và nhiễm sắc thể của giải thuật di truyền trong tiểu
luận này được coi là tương đương.
4
1.3 SƠ ĐỒ CHUNG CỦA GIẢI THUẬT DI TRUYỀN
Với các khái niệm được nêu ở trên, giải thuật di truyền có thể được mô tả
vắn tắt như sau:
Bắt đầu
Chọn lọc
Lai ghép
Đột biến
Thỏa
Kết quả
Kết thúc
5
Giải thích các khối trong sơ đồ:
2. [Khởi tạo quần thể] Sinh ngẫu nhiên một quần thể gồm M cá thể (là M
lời giải cho bài toán)
3. Tạo quần thể mới bằng cách lặp lại các bước sau cho đến khi quần thể
mới hoàn thành
a.[Đánh giá độ thích nghi] Đánh giá độ thích nghi eval(x) của mỗi
cá thể trong quần thể.
c.[Lai ghép] Với một xác suất lai ghép được chọn, lai ghép hai cá
thể bố mẹ để tạo ra một cá thể mới.
d.[Đột biến] Với một xác suất đột biến được chọn, biến đổi cá thể
mới.
e.[Kiểm tra điều kiện] Kiểm tra điều kiện kết thúc giải thuật.
4. [Kết quả] Nếu điều kiện dừng được thỏa mãn thì thuật toán kết thúc và
trả về lời giải tốt nhất trong quần thể hiện tại.
+ Xây dựng cấu trúc gen cho mỗi lời giải của bài toán để từ mỗi lời giải
ta có thể mã hoá thành một NST (chuỗi các gen).
Đây là vấn đề cần giải quyết trước khi giải bài toán với GA. Tuỳ thuộc
vào nội dung của mỗi bài toán mà ta có cách mã hoá khác nhau.
6
Sau đây là các phương pháp mã hóa thường dùng:
Ví dụ:
Nhiễm sắc thể A: 101100101100101011100101
Nhiễm sắc thể B: 111111100000110001
Ta sử dụng véc tơ nhị phân có độ dài L như một NST để biểu diễn giá trị
thực của biến x ∈ [lx, ux]. Độ dài L của NST phụ thuộc vào yêu cầu cụ thể của
bài toán. Một bit mã hoá x ứng với một giá trị trong khoảng [0, 2 L] sẽ được ánh
xạ lên giá trị thực thuộc miền [lx,ux]. Nhờ đó ta có thể kiểm soát miền giá trị của
các biến và tính chính xác của chúng. Tỷ lệ co giãn của ánh xạ được tính như
sau:
u x −l x
g =
2L
Giá trị x tương ứng với chuỗi NST nhị phân là:
x = lx+ decimal(NST) * g
trong đó, decimal(NST) là giá trị thập phân của chuỗi NST nhị phân.
Chẳng hạn ta muốn tìm cực tiểu một hàm k biến f(x1,…,xk): Rk → R. Giả sử
thêm là mỗi biến xi có thể nhận giá trị trong miền Di = [ai, bi] ⊆ R và f(x1,…,xk)
> 0 với mọi xi thuộc Di. Ta muốn tối ưu hoá hàm f với độ chính xác cho trước là
6 số lẻ đối với giá trị của các biến.
Rõ ràng là để đạt được độ chính xác như vậy mỗi miền Di được phân cắt
thành (bi – ai)*106 miền con bằng nhau. Gọi mi là số nguyên nhỏ nhất sao cho:
7
(bi – ai)*106 ≤ 2mi - 1
Như vậy, mỗi biến xi được biểu diễn bằng một chuỗi nhị phân có chiều dài
mi. Biểu diễn như trên, rõ ràng thoả mãn điều kiện về độ chính xác yêu cầu.
Công thức sau tính giá trị thập phân của mỗi chuỗi nhị phân biểu diễn biến xi
bi − a i
X i = a i + decimal (1100...012 ).
2 mi − 1
trong đó decimal(chuỗi2) cho biết giá trị thập phân của chuỗi nhị phân đó.
Bây giờ, mỗi nhiễm sắc thể (là một lời giải) được biểu diễn bằng chuỗi nhị
phân có chiều dài L= ∑ki=1 mi
trong đó m1 bit đầu tiên biểu diễn các giá trị trong khoảng [a1, b1]; ... ; mk bit
cuối cùng biểu diễn giá trị trong khoảng [ak, bk].
Để khởi tạo quần thể, chỉ cần đơn giản tạo pop-size (kích cỡ quần thể) nhiễm
sắc thể ngẫu nhiên theo từng bit. Phần còn lại của thuật giải di truyền rất đơn
giản: trong mỗi thế hệ, ta lượng giá từng nhiễm sắc thể (tính giá trị hàm f trên
các chuỗi biến nhị phân đã được giải mã), chọn quần thể mới thoả phân bố xác
suất dựa trên độ thích nghi và thực hiện các phép đột biến và lai để tạo các cá
thể thế hệ mới. Sau một số thế hệ, khi không còn cải thiện thêm được nữa,
nhiễm sắc thể tốt nhất sẽ được xem như lời giải của bài toán tối ưu (thường là
toàn cục). Thông thường, ta cho dừng thuật giải di truyền sau một số bước lặp
cố định tuỳ thuộc vào điều kiện về tốc độ về tài nguyên máy tính.
Ví dụ:
Nhiễm sắc thể A 1,2324 5,3243 0,4556 2,3293 2,4545
Nhiễm sắc thể B 3,134 5,234 0,245 2,976
8
1.4.3 Mã hoá hoán vị:
Mỗi cá thể tương ứng với một hoán vị của tập n ký hiệu nào đó. Chẳng
hạn cách biểu diễn này đã được áp dụng cho bài toán người du lịch:
Một thương gia phải đi qua nhiều thành phố (n). Hãy vạch lộ trình đi qua
tất cả các thành phố đó sao cho quãng đường đi là ngắn nhất. Biết rằng mỗi
thành phố chỉ đi qua một lần.
Kí hiệu các thành phố là T1, T2, ..., Tn mỗi cá thể - sự mã hoá của lời giải -
sẽ là một danh sách hoán vị của T1, T2, ..., Tn biểu diễn lộ trình mà người thương
gia đã đi qua. Thí dụ T 8T5T9T3..... sẽ là kí hiệu của hành trình từ T 8 → T5 → T9
→ T3...
Như vậy mỗi chuỗi con sẽ biểu diễn cho một đỉnh của không gian tìm
kiếm và qua đó thể hiện được cách trả lời có thể có của bài toán. Sau này mỗi
chuỗi nhiễm sắc thể sẽ được giải mã lại để trả về các thông số ban đầu của bài
toán.
1.4.4 Tạo lập lời giải ban đầu (khởi tạo quần thể)
Tập lời giải ban đầu thường được khởi tạo ngẫu nhiên từ miền xác định
của các lời giải. Cách tạo lập tập lời giải ban đầu phụ thuộc rất nhiều vào cách
mã hoá NST.
Với phương pháp mã hoá nhị phân: xây dựng NST bằng cách tạo ngẫu
nhiên chuỗi các bit 0 hoặc 1.
Với phương pháp mã hoá hoán vị: xây dựng NST ban đầu bằng cách
hoán vị ngẫu nhiên các thứ tự.
Với mã hoá số thực: tạo ngẫu nhiên N vecto thực trong Rm.
9
Biến đổi hàm mục tiêu thành hàm phù hợp:
Do giá trị phù hợp trong giải thuật di truyền là không âm, nên để áp dụng
GA cho bài toán tối ưu ta cần phải chuyển giá trị hàm mục tiêu thành hàm phù
hợp.
Nếu bài toán tối ưu là cực tiểu hàm mục tiêu g(x) thì ta chuyển sang hàm
phù hợp như sau:
C − g ( x ) g ( x ) < C max
f ( x ) = max
0 nguoc lai
Trong đó, Cmax là tham số vào do người sử dụng chọn, thường chọn C max
là giá trị lớn nhất của hàm mục tiêu trong tập hiện tại.
Nếu bài toán tối ưu là cực đại hàm mục tiêu g(x), ta có thể chuyển sang
hàm phù hợp như sau :
C + g ( x ) g ( x ) + C min > 0
f ( x ) = min
0 nguoc lai
Trong đó Cmin là tham số đầu vào, Cmin có thể là giá trị tuyệt đối bé nhất
của các hàm mục tiêu trong tập hiện tại hoặc trong k vòng lặp cuối.
10
1.6.1 Toán tử chọn lọc (Selection)
Phép chọn lọc được mô tả như sau:
Sắp xếp quần thể theo thứ tự độ thích nghi giảm dần.
Loại bỏ các cá thể cuối dãy chỉ để lại các cá thể tốt nhất.
Có các toán tử chọn lọc sau:
Pi = f(vi) / F (i = 1…m ~ kích cỡ của quần thể) gọi là xác suất chọn cho
mỗi nhiễm sắc thể vi
Trong đó: f(vi) là hàm thích nghi của mỗi cá thể vi.
F là tổng của các giá trị thích nghi của quần thể.
Việc chọn lọc cá thể nào phụ thuộc vào xác suất q i của mỗi nhiễm sắc thể
vi được tính như sau: qi = Σij=1 pj
Có nhiều cách để thực hiện toán tử chọn lọc, nói chung đều theo tư tưởng
cá thể có độ thích nghi cao hơn thì khả năng được chọn nhiều hơn. Nhưng có lẽ
đơn giản và hiệu quả nhất là sử dụng bánh xe Roulette (roulette wheel), mỗi cá
thể trong quần thể chiếm một khe có độ rộng tỷ lệ thuận với giá trị phù hợp. Độ
rộng của khe được tính bằng tỷ lệ % giá trị phù hợp của một cá thể trên tổng giá
trị phù hợp toàn quần thể.
Tiến trình chọn lọc được thực hiện bằng cách quay bánh xe Roulette m
lần; mỗi lần chọn một nhiễm sắc thể từ quần thể hiện hành vào quần thể mới
theo cách sau:
- Nếu r <qi thì chọn nhiễm sắc thể đầu tiên v1, ngược lại chọn nhiễm sắc thể
thứ i, vi (2 ≤ i ≤ pop-size) sao cho qi-1 < r ≤ qi.
11
Hiển nhiên, có thể sẽ có một số nhiễm sắc thể được chọn nhiều lần. Điều
này phù hợp với lý thuyết sơ đồ (Nguyễn Đình Thúc, [1]): các nhiễm sắc thể tốt
nhất có nhiều bản sao hơn, các nhiễm sắc thể trung bình không thay đổi, các
nhiễm sắc thể kém nhất thì mất đi.
Ví dụ: Với quần thể gồm 4 cá thể cho trong bảng sau chúng ta có vòng tròn
Roulette như hình dưới.
Xét bảng trên với số ngẫu nhiên r= 654/1170 thì chuỗi thứ 2 sẽ được chọn.
12
WHILE (i<m and r > ) DO
i := i+1;
Select(vi);
- Chọn t cá thể từ quần thể hiện tại một cách ngẫu nhiên và chọn cá thể tốt
nhất trong t cá thể đó để sao chép sang quần thể tạm thời.
- Lặp lại bước trên N lần chúng ta sẽ có quần thể tạm thời.
Giá trị t được gọi là kích cỡ của chọn lọc cạnh tranh. Khi t = 2 chúng ta
chọn lọc cạnh tranh nhị phân.
Các cá thể của quần thể hiện tại được sắp xếp theo thứ tự giảm dần của giá trị
độ thích nghi. Cá thể tốt nhất được xếp thứ nhất và cá thể tồi nhất được xếp cuối
cùng. Trong thủ tục này cá thể thứ (N-j) trong dãy sẽ có xác suất chọn lựa là:
j
pN − j = N
∑k .
k =1
- Sắp xếp các chuỗi theo thứ tự giảm dần của hàm mục tiêu (bài toán cực
đại) hoặc theo thứ tự tăng dần của hàm mục tiêu (bài toán cực tiểu).
- Sử dụng thủ tục quay Roulette để chọn chuỗi sao chép sang quần thể tạm
thời.
13
- Chọn ngẫu nhiên hai (hay nhiều) cá thể bất kỳ trong quần thể (để làm cha
mẹ). Giả sử các nhiễm sắc thể của cha mẹ đều có m gen.
- Tạo một số ngẫu nhiên trong khoảng từ 1 đến m-1 (gọi là điểm lai ghép).
Điểm lai ghép chia nhiễm sắc thể cha mẹ ra thành hai chuỗi con có độ dài m1 và
m2. Hai chuỗi nhiễm sắc thể con mới sẽ là : m11+m22 và m21+ m12.
- Đưa hai cá thể mới vào quần thể để tham gia quá trình tiến hóa tiếp theo.
Ví dụ:
Cha: 101101100
Mẹ: 000011100
Thì việc trao đổi chéo các nhiễm sắc thể sau gen thứ 5 sẽ tạo ra hai con:
Con 1: 101111100
Con 2: 000001100
Lai ghép một điểm (One-point Crossover): là loại lai ghép đơn
giản nhất được sử dụng cả trong GA mã hóa nhị phân cũng như GA mã hóa số
thực. Với cặp cha mẹ X,Y là cặp vectơ m chiều như ký hiệu trên, 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 hai cá thể con
theo công thức:
Ví dụ: P1 = (1 1 1 0 0 0 1 0 1 0) P2 = (0 1 0 1 1 0 0 1 1 1)
là hai chuỗi nhị phân độ dài 10, giả sử điểm cắt đã chọn là k=7, thế thì hai
con được sinh ra là :
C1 = (1 1 1 0 0 0 1 1 1 1) C2 = (0 1 0 1 1 0 0 0 1 0)
14
Thủ tục lai ghép đơn giản như sau :
Procedure lai1diem(k; P1, P2; var C1, C2);
Begin
For i:=1 to k do
Begin
C1[i] := P1[i];
C2[i] := P2[i];
End;
For i:=k+1 to L do
Begin
C1[i] := P2[i];
C2[i] := P1[i];
End;
End;
Lai ghép đa điểm (Multi-point Crossover)
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 con (X’,Y’) bằng cách đánh số các đoạn [ jt , jt+1 ] từ 0 trở đi sau đó:
- x’i lấy bằng xi tại những đoạn có số hiệu chẵn và bằng y i tại những đoạn
có số hiệu lẻ.
- y’i lấy 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.
ví dụ: P1 = (1 1 1 0 0 0 1 0 1 0) P2 = (0 1 0 1 1 0 0 1 1 1)
là hai chuỗi nhị phân độ dài 10, giả sử các điểm cắt đã chọn là 2, 5, 8 thế thì hai
con được sinh ra là :
C1 = (1 1 1 0 0 0 1 1 1 1) C2 = (0 1 0 1 1 0 0 0 1 0)
Loại lai ghép này còn gọi là lai ghép đều; với hai cá thể cha mẹ đã chọn P 1, P2
trước hết phát sinh một chuỗi nhị phân ngẫu nhiên cũng có độ dài L gọi là chuỗi
mặt nạ. Sau đó các con được tạo ra dựa trên chuỗi mặt nạ này để quyết định lấy
thành phần của cá thể cha hay mẹ. Chẳng hạn gen thứ i của cá thể con C 1 được
lấy là gen thứ i của P1 nếu bit mặt nạ tương ứng là 1 và lấy gen thứ i của P 2 nếu
bit mặt nạ là 0. Cá thể con C2 được tạo ngược lại.
15
Ví dụ: Với P1 = (1 1 1 0 1 0 0 1 0 0 0) P2 = (0 0 0 0 1 0 1 0 1 0 1)
là hai chuỗi nhị phân độ dài 11, giả sử chuỗi bít nhị phân (mặt nạ) được khởi tạo
ngẫu nhiên ta có kết quả như sau:
Các chuỗi ban đầu Mặt nạ lai ghép Các cá thể con
00001010101 00001001000
00001010101 00101000101
00001010101 01101011001
16
Thủ tục lai ghép như sau :
Procedure lai_mat_na(U, P1, P2; var C1, C2);
Begin
For i:=1 to L do
Begin
If U[i]=1 then
Begin
C1[i] := P1[i]; C2[i] := P2[i];
End
Else
Begin
C1[i] := P2[i]; C2[i] := P1[i];
End;
End;
End;
- Thay đổi bít thứ k. Đưa nhiễm sắc thể này vào quần thể để tham gia quá
trình tiến hóa ở thế hệ tiếp theo.
Ví dụ : v1 = 101101010
v2 = 101111010
NST v1 được chọn để đột biến tại vị trí gen thứ năm, gen này hiện tại là 0,
sau khi đột biến sẽ trở thành 1. Khi đó NST v1 trở thành v2.
17
Tóm lại, giải thuật di truyền cổ điển có thể mô tả một cách khá tường minh như
sau:
Algorithm GA;
BEGIN
{Khởi tạo quần thể m cá thể}
t := 0;
{Khởi tạo }
B0 = (b10 , b20 , ... , bm0 );
{Đánh giá độ thích nghi}
WHILE (not (điều kiện dừng)) DO
BEGIN
{chọn lọc tỷ lệ}
FOR i:=1 TO m DO
BEGIN
r:=random[0,1];
k:=1;
∑
i
j: =1
f ( b j ,t )
WHILE (k<m and r< ) DO k := k+1;
∑
m
j: =1
f ( b j ,t )
bi,t+1 := bk;
END;
{lai ghép 1 điểm}
FOR i:=1 TO m-1 DO
BEGIN
IF random[0,1]<pc THEN
BEGIN
pos:=random(1, ... , n-1); { n là độ dài NST}
FOR k:=pos+1 TO n DO
BEGIN
tg := bit+1[k] ;
bit+1[k] := bi+1t+1[k];
bi+1t+1[k] := tg;
END;
END;
END;
{đột biến}
FOR i:=1 TO m DO
FOR k:=1 TO n DO
IF random[0,1]<pm THEN
invert(bit+1[k]);
t := t+1;
END;
Như vậy, bản chất GA là một giải thuật lặp, nhằm giải quyết các bài toán
tìm kiếm dựa trên cơ chế chọn lọc nhân tạo và sự tiến hoá của các gen. Trong
quá trình đó, sự sống còn của cá thể phụ thuộc vào hoạt động của các NST và
quá trình chọn lọc (tham gia vào việc tái tạo ra các chuỗi NST mới bằng cách
giải mã các chuỗi NST và tạo ra mối liên kết giữa các NST trong các cá thể
khác nhau).
18
GA sử dụng các toán tử: chọn lọc, lai ghép, đột biến trên các NST để tạo
ra chuỗi mới. Những toán tử này thực chất là việc sao chép chuỗi, hoán vị các
chuỗi con và sinh số ngẫu nhiên.
Cơ chế của GA đơn giản nhưng lại có sức mạnh hơn các giải thuật khác
nhờ có sự đánh giá và chọn lọc sau mỗi bước thực hiện. Do vậy khả năng tiến
gần đến lời giải tối ưu của GA sẽ nhanh hơn nhiều so với các giải thuật khác.
Có thể nói GA khác với những giải thuật tối ưu thông thường ở những
đặc điểm sau:
+ GA làm việc với tập mã của biến chứ không phải bản thân biến
+ GA thực hiện tìm kiếm trên một quần thể các cá thể chứ không phải trên một
điểm nên giảm bớt khả năng kết thúc tại một điểm tối ưu cục bộ.
+ GA chỉ cần sử dụng thông tin của hàm mục tiêu để phục vụ tìm kiếm chứ
không đòi hỏi các thông tin hỗ trợ khác.
+ Các thao tác cơ bản trong giải thuật dựa trên khả năng tích hợp ngẫu
nhiên, mang tính xác suất chứ không tiền định.
+ Cá thể (hay kiểu gen, cấu trúc) trong một quần thể còn được gọi là các
chuỗi hay các nhiễm sắc thể (trong giải thuật di truyền chúng ta chỉ xét những
cá thể có một nhiễm sắc thể, điều này khác với mỗi tế bào của một cơ thể của
một chủng loại cho trước mang một số những nhiễm sắc thể nào đó, như người
có 46 nhiễm sắc thể). Các nhiễm sắc thể được hình thành từ các đơn vị - các
gen- biểu diễn trong một chuỗi tuyến tính. Mỗi gen kiểm soát một số đặc trưng.
Gen với những đặc trưng nhất định có vị trí nhất định trong nhiễm sắc thể, bất
cứ đặc trưng nào của mỗi cá thể có thể tự biểu hiện một cách phân biệt và gen
có thể nhận một số giá trị khác nhau (các giá trị về tính năng).
Mỗi kiểu (nhóm) gen (được gọi là một nhiễm sắc thể) sẽ biểu diễn lời giải
của bài toán đang giải (ý nghĩa của một nhiễm sắc thể cụ thể được người sử
dụng xác định trước). Một tiến trình tiến hóa được thực hiện trên một quần thể
19
các nhiễm sắc thể tương ứng với một quá trình tìm kiếm lời giải trong không
gian lời giải, quá trình tìm kiếm này cần cân đối giữa 2 mục tiêu là: Khai thác
những lời giải tốt nhất và khảo sát không gian tìm kiếm. Thuật giải di truyền
(GA) là phương pháp tìm kiếm tạo được sự cân đối giữa việc khai thác và khảo
sát không gian tìm kiếm.
Giải thuật di truyền thuộc lớp các giải thuật xác suất, nhưng chúng lại
khác các giải thuật ngẫu nhiên vì GA kết hợp các phần tử tìm kiếm trực tiếp và
ngẫu nhiên. Khác biệt quan trọng giữa tìm kiếm của GA và các phương pháp
tìm kiếm khác là GA duy trì và xử lý một tập các lời giải (một quần thể), tất cả
các phương pháp khác chỉ xử lý một điểm trong không gian tìm kiếm, chính bởi
vậy, GA mạnh hơn các phương pháp tìm kiếm hiện có rất nhiều.
20
2 CHƯƠNG2: ỨNG DỤNG GIẢI THUẬT DI TRUYỀN GIẢI BÀI
TOÁN RA ĐỀ THI TỐI ƯU
2.1 Bài toán
Chúng ta hãy xét một ngân hàng câu hỏi để kiểm tra kiến thức, sự hiểu biết,
kinh nghiệm về môn học thuộc một lĩnh vực hay về một chủ đề nào đó. Mỗi câu
hỏi đề cập đến một chủ đề của lĩnh vực cần kiểm tra với một mức độ khó - dễ
được các giáo viên thống nhất đánh giá. Ngoài nội dung của câu hỏi, thời gian
tối đa dự kiến trả lời cũng cần được xác định trước.
Tập các câu hỏi có thể được tổ chức thành quan hệ CauHoi với các thuộc tính
của quan hệ này như sau:
Trong đó:
- Ma: Thuộc tính khóa (có thể là các số nguyên, số thứ tự của các câu hỏi)
- DoKho: Chỉ số xác định độ khó của câu hỏi: 1: rất khó; 2: khó; 3: trung bình;
4: dễ, …
- ThoiGian: Thời gian tối đa được phép trả lời câu hỏi (tính bằng phút). Trong
thực tế thời gian tối đa này có thể được lấy bằng 3/2 thời gian tối thiểu để trả lời
câu hỏi.
Ví dụ: Cho quan hệ CauHoi với 10 câu hỏi của môn học Tin học 10 quan hệ
như sau:
21
3 Tin học 10 (Chương 2) … 1 15
4 Tin học 10 (Chương 2) … 2 20
5 Tin học 10 (Chương 2) … 3 12
6 Tin học 10 (Chương 3) … 3 15
7 Tin học 10 (Chương 3) … 4 10
8 Tin học 10 (Chương 3) … 5 5
9 Tin học 10 (Chương 4) … 1 25
10 Tin học 10 (Chương 5) … 2 5
Yêu cầu ra đề 1: Với quan hệ CauHoi 10 câu đã cho ở trên, hãy soạn một đề
Tin học 10 thỏa mãn tối ưu các yêu cầu sau:
o Thời gian làm bài khoảng: 90 phút
o Nằm trong các chủ đề: Tin học 10 (Chương 1), Tin học 10 (Chương 2),
Tin học 10 (Chương 3), Tin học 10 (Chương 4).
22
o Độ khó, tỷ lệ phân bổ kiến thức của các chủ đề cho trong bảng dưới đây:
Yêu cầu ra đề 2: Với quan hệ CauHoi 10 câu đã cho ở trên, hãy soạn một đề
Tin học 10 thỏa mãn tối ưu các yêu cầu sau:
o Thời gian làm bài khoảng: 180 phút
o Nằm trong các ChuDe: Tin học 10 (Chương 3), Tin học 10 (Chương
2),Tin học 10 (Chương 1), Tin học 10 (Chương 4)
o Tỷ lệ phân bổ kiến thức của các chủ đề cho như trong bảng dưới đây:
Tên chủ đề cần ra Tỷ lệ phân bổ kiến thức
Tin học 10 (Chương 3) Tùy ý
Tin học 10 (Chương 2) chiếm 40%
Tin học 10 (Chương 1) chiếm 10%
Tin học 10 (Chương 4) Tùy ý
o Số lượng câu khó, dễ có tỉ lệ như sau:
Khó (DoKho = 4) chiếm 20%; TB (DoKho = 3) chiếm 30%
Nhận xét:
• Đề thi được tạo ra bằng cách tổ hợp các câu hỏi của quan hệ CauHoi.
• Với yêu cầu soạn đề 1 hoặc yêu cầu soạn đề 2, không thể có đề thi (phương
án) nào thỏa mãn hoàn toàn 100% tất cả các ràng buộc đã đề ra.
• Luôn tồn tài một số đề thi thỏa mãn gần nhất các yêu cầu trên. Các đề thi
này được gọi là đề thi tối ưu.
Ví dụ đề thi tối ưu sau thỏa mãn gần nhất yêu cầu ra đề 1:
Ma ChuDe NoiDung DoKho ThoiGianTL
2 Tin học 10 Chương 1 … 2 5
3 Tin học 10 Chương 2 … 1 15
23
4 Tin học 10 Chương 2 … 2 20
5 Tin học 10 Chương 2 … 3 12
7 Tin học 10 Chương 3 … 4 10
9 Tin học 10 Chương 4 … 1 25
Đề thi đạt được:
• Tổng thời gian 87 phút gần bằng yêu cầu đã đề ra là 90 phút
• Tin học 10 (Chương 2) 3 câu ≈ 50% (gần đạt so với yêu cầu đề ra là 40%)
• Tin học 10 (Chương 1) 1 câu ≈ 17% (gần đạt so với yêu cầu đề ra là 10%)
• Tin học 10 (Chương 3) 1 câu ≈ 17% (gần đạt so với yêu cầu đề ra là 10%)
• Các câu hỏi có trong đề là các câu có độ khó gần với độ khó yêu cầu nhất.
Khi soạn đề, hệ thống ra đề thi tự động cần phải đi tìm các đề thi tối ưu đáp
ứng các yêu cầu trên.
24
i: thời gian làm bài, i thỏa mãn i ≈ I.
Vấn đề chủ yếu ở đây là tìm ánh xạ f (giải thuật phù hợp) để giải quyết bài
toán nêu trên.
2.3.2 Bài toán tìm đề thi tối ưu thuộc vào lớp bài toán NP-đầy đủ
Tìm hàm mục tiêu:
Như trên đã khẳng định, lời giải của bài toán nêu trên là một quan hệ q tối
ưu, nghĩa là quan hệ q phải thỏa mãn đồng thời các mục tiêu:
m
(i) E1 = ( ∑ | k T - K T |)
i i
Ti = 1
với k T ∈ k, K T ∈ K
i i
(ii) E2 = ( ∑ | l T - LT |)
i i
Ti = 1
với l T ∈ l, LT ∈ L
i i
2.3.3 Xây dựng cá thể, hàm thích nghi và các phép toán di truyền
Bài toán đặt ra là tìm một phương án (một đề thi) tối ưu nhất thỏa mãn các
điều kiện ràng buộc của người dùng. Chúng ta có thể coi các đề thi được tạo ra
từ CauHoi là các cá thể với các phép toán di truyền trên các cá thể đó như sau:
• Nếu cá thể trong quần thể được gọi là q thì ta có q ⊆ CauHoi
• Xác định phép lai:
Phép lai p với q sẽ tạo ra một cặp cá thể (p’, q’)
(p’, q’) := Lai(p, q) được xác định theo quy tắc:
p’ = q” ∪ p”; q’ = (p – p”) ∪ (q – q”)
25
với q” ⊂ q và p” ⊂ p
• Thiết kế phép đột biến
Phép đột biến cá thể q tạo ra một cá thể q’ mới
q’ := Dbien(q) được xác định theo quy tắc:
q’ = q + {qi} với qi ∈ CauHoi
• Thiết kế hàm thích nghi
Hàm thích nghi của quan hệ q (Fitness(q)) cần phải phụ thuộc vào: tỉ lệ %
phân bố kiến thức, độ khó, số lượng chủ đề và thời gian.
Gọi E1, E2, E3, E4 lần lượt là độ đo của: tỉ lệ % phân bố kiến thức, độ khó, số
lượng chủ đề, thời gian. E1, E2, E3, E4 được xác định như sau:
(i) E1 = (| k T - K T |)
i i
if(d.getdscauhoi(i).getCD().equalsIgnoreCase(cd))
dem++;
return dem/d.getsl();
}
// y là yêu cầu của đề thi cần tạo ra
public static double tinhE1(dethi d,ndyc y){
double t=0;
for(int i = 0; i < y.getsl();i++)
t=t+Math.abs(tinhPT(d,y.getyeucau(i).getCD())-
y.getyeucau(i).getPT());
return t;
}
m eTi
(ii) E2 = ( ∑ | ∑ DoKho (q j ) - LT |)
T i
i
Ti = 1 j =1
26
double t=0;
for(int i = 0;i < y.getsl();i++){
double t1=0;
for(int j = 0; j <d.getsl();j++)
if(d.getdscauhoi(j).getCD().equalsIgnoreCase
(y.getyeucau(j).getCD()))
t1=t1+d.getdscauhoi(j).getDokho();
t=t+Math.abs(t1-y.getyeucau(i).getDK());
}
return t;
}
(iii) E3 = (|m - n|)
với m = |t| và n = |T|
Phương thức tính E3:
public static double tinhE3(dethi d,ndyc y){
double t; int dem = 1;
for(int i= 1;i<d.getsl();i++){
boolean kt=true;
for(int j=0;j<i;j++){
if(d.getdscauhoi(i).getCD().equalsIgnoreCase
(d.getdscauhoi(j).getCD()))
kt=false;
}
if(kt) dem++;
}
t = Math.abs(dem-y.getsl()));
return t;
}
p
27
Vì hàm mục tiêu là số âm mà hàm thích nghi là không âm nên ta chuyên hàm
mục tiêu thành hàm thích nghi không âm (theo công thức trong mục 1.4).
Phương thức tính hàm thích nghi:
public static void hamthichnghi(quanthe q, ndyc y, int n,
double tn[]){
// tinh ham muc tieu
double tam[] = new double[n];
for(int i=0;i<n;i++){
tam[i]=-tinhE1(q.getdethi(i),y)*
tinhE2(q.getdethi(i),y)*tinhE3(q.getdethi(i),y)*
tinhE4(q.getdethi(i),y);
}
// chuyen ham muc tieu thanh ham thich nghi
double min=tam[0];
for(int i=1;i<n;i++)
if(tam[i]<min) min=tam[i];
for(int i=0;i<n;i++)
tn[i]=Math.abs(min)+tam[i];
}
28
KẾT LUẬN
Ưu điểm:
Tiểu luận đã trình bày và giới thiệu những khái niệm cơ bản, cơ sở lý thuyết
về giải thuật di truyền. Trên cơ sở lý thuyết, tác giả đã cài đặt các phép toán cơ
bản của giải thuật di truyền, sử dụng các phép toán của giải thuật di truyền để
trình bày và cài đặt cho bài toán ứng dụng ra đề thi tối ưu.
Hạn chế:
Do thời gian có hạn, tác giả chỉ giới thiệu những kiến thức chung nhất về
giải thuật di truyền, chưa đi sâu vào các vấn đề nghiên cứu tối ưu khác.
Phần cài bài toán ứng dụng còn đơn giản, chỉ mang tính chất minh họa chưa
thật sự bao quát.
Hướng phát triển:
Tiếp tục nghiên cứu cơ sở lý thuyết về giải thuật di truyền.
Tiếp tục nghiên cứu các bài toán ứng dụng khác của giải thuật di truyền để
hiểu sâu sắc hơn ý nghĩa của nó.
29
1. Tài liệu
tham khảo:
[1] Nguyễn Đình Thúc, Trí tuệ nhân tạo: Lập trình tiến hóa, NXB Giáo Dục,
2001.
[2] Nguyễn Thanh Thủy, Công nghệ tri thức và tính toán mềm: Giải thuật di
truyền, ĐH Bách Khoa Hà Nội, 2003.
[3] Hoàng Kiếm, Lê Hoàng Thái, Giải thuật di truyền, cách giải tự nhiên các
bài toán trên máy tính, NXB Giáo Dục, 2000.
[4] Nguyễn Đức Nghĩa, Phân tích thiết kế thuật toán: Nhập môn NP-đầy đủ,
ĐH Bách Khoa Hà Nội, 2003.
[5] Brian M. Kelley. Genetic Programming and a Genetic Algorithm for
Approximate Optimal Timetable Design. Theory of Computing, June 11, 2001.
30