Tải bản đầy đủ (.doc) (30 trang)

Tỉm hiểu Giải thuật di truyền và xây dựng ứng dụng minh họa

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (274.89 KB, 30 trang )

MỤC LỤC
1 CHƯƠNG 1: GIẢI THUẬT DI TRUYỀN.............................................................................2
1.1 GIỚI THIỆU....................................................................................................................2
1.2 CÁC KHÁI NIỆM CƠ SỞ...............................................................................................3
1.2.1 Lai ghép.....................................................................................................................3
1.2.2 Đột biến.....................................................................................................................3
1.2.3 Chọn lọc....................................................................................................................4
1.2.4 Nhiễm sắc thể............................................................................................................4
1.2.5 Cá thể.........................................................................................................................4
1.2.6 Quần thể....................................................................................................................4
1.3 SƠ ĐỒ CHUNG CỦA GIẢI THUẬT DI TRUYỀN.......................................................5
1.4 CÁC PHƯƠNG PHÁP MÃ HĨA VÀ KHỞI TRỊ..........................................................6
1.4.1 Mã hóa dạng nhị phân...............................................................................................7
1.4.2 Mã hóa dạng số thực.................................................................................................8
1.4.3 Mã hố hốn vị:.........................................................................................................9
1.4.4 Tạo lập lời giải ban đầu (khởi tạo quần thể).............................................................9
1.5 XÂY DỰNG HÀM THÍCH NGHI (hàm phù hợp).........................................................9
1.6 CÁC TỐN TỬ DI TRUYỀN.......................................................................................10
1.6.1 Toán tử chọn lọc (Selection)...................................................................................11
1.6.2 Toán tử lai ghép (crossover)....................................................................................13
1.6.3 Toán tử đột biến (Mutation)....................................................................................17
2 CHƯƠNG2: ỨNG DỤNG GIẢI THUẬT DI TRUYỀN GIẢI BÀI TOÁN RA ĐỀ THI TỐI
ƯU............................................................................................................................................21
2.1 Bài toán..........................................................................................................................21
2.2 Các yêu cầu chung của việc ra đề:.................................................................................22
Các u cầu của đề thi:....................................................................................................22
2.3 Mơ hình bài tốn ra đề thi:.............................................................................................24
2.3.1 Phân tích bài tốn:...................................................................................................24
2.3.2 Bài tốn tìm đề thi tối ưu thuộc vào lớp bài toán NP-đầy đủ..................................25
2.3.3 Xây dựng cá thể, hàm thích nghi và các phép toán di truyền..................................25


1


1 CHƯƠNG 1: GIẢI THUẬT DI TRUYỀN
1.1 GIỚI THIỆU
Giải thuật di truyền GA(GENETIC ALGORITHM) do D.E. Goldberg đề
xuất, sau đó được L. Davis và Z. Michalevicz phát triển, đây cũng chính là một
trong các thuật tốn tiến hóa. Thuật tốn tiến hóa là các chương trình máy tính
có dùng các thuật tốn tìm kiếm, tối ưu hóa dựa trên ngun lý tiến hóa tự
nhiên.
Giải thuật di truyền được hình thành dựa trên quan niệm: q trình tiến
hóa tự nhiên là q trình hồn hảo và hợp lý nhất, tự q 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 q 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 q 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 hố, 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 ln 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 ngồ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 tố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 tốn. Q trình tìm kiếm phải đạt được hai mục tiêu:
+ Khai thác những lời giải tốt nhất
+ Xem xét trên tồn bộ khơng gian tìm kiếm
1.2 CÁC KHÁI NIỆM CƠ SỞ
1.2.1 Lai ghép
Lai ghép trong tự nhiên là sự kết hợp các tính trạng của bố mẹ để sinh ra
thế hệ con. Trong giải thuật di truyền, lai ghép là quá trình hình thành nhiễm sắc
thể mới trên cơ sở của nhiễm sắc thể cha mẹ, bằng cách ghép một hay nhiều
đoạn gen của hai (hay nhiều) nhiễm sắc thể của cha mẹ với nhau.
1.2.2 Đột biến
Đột biến là một sự biến đổi tại một (hay một số) gen của nhiễm sắc thể
ban đầu để tạo ra một nhiễm sắc thể mới. Đột biến có xác suất xảy ra thấp hơn
lai ghép. Đột biến có thể tạo ra một cá thể mới tốt hơn hoặc xấu hơn cá thể ban
đầu. Tuy nhiên trong giải thuật di truyền thì ta luôn muốn tạo ra những phép đột
biến cho phép cải thiện lời giải qua từng thế hệ.


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.4 Nhiễm sắc thể
Một NST được tạo thành từ nhiều gen, mỗi gen có thể có các giá trị khác
nhau để quy định một tính trạng nào đó. Trong GA, một gen được coi như một
phần tử trong chuỗi NST.
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
tố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.
1.2.6 Quần thể
Là tập hợp các cá thể cùng loài, cùng sống trong một khoảng khơng gian
xác định vào một thời gian nhất định, có khả năng sinh sản và tạo thành thế hệ
mới. Trong giải thuật di truyền ta quan niệm quần thể là một tập các lời giải
của một bài toán.


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
Khởi tạo quần thể
Đánh giá độ thích nghi
Chọn lọc
Lai ghép
Đột biến
Kiểm tra điều kiện

Khơng

Thỏa
Kết quả
Kết thúc
Hình: Sơ đồ cấu trúc giải thuật di truyền

5


Giải thích các khối trong sơ đồ:
1. [Bắt đầu ] Nhận các tham số cho thuật toán.
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 hồ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ể.
b.[Chọn lọc] Chọn hai cá thể bố mẹ từ quần thể cũ theo độ thích
nghi của

chúng (cá thể có độ thích nghi càng cao thì càng có nhiều khả

năng được chọn).
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 tốn kết thúc và
trả về lời giải tốt nhất trong quần thể hiện tại.
1.4 CÁC PHƯƠNG PHÁP MÃ HÓA VÀ KHỞI TRỊ
Việc mơ tả di truyền cho lời giải cho bài tốn gồm hai phần cơ bản:
+ 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ã hố thành một NST (chuỗi các gen).
+ Giải mã các NST để nhận được lời giải.
Đâ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 tốn mà ta có cách mã hố khác nhau.

6


Sau đây là các phương pháp mã hóa thường dùng:
1.4.1 Mã hóa dạng nhị phân
Mã hóa nhị phân là phổ biến nhất, chủ yếu là bởi vì các cơng trình đầu
tiên về GA sử dụng loại mã hóa này. Trong mã hóa nhị phân mỗi nhiễm sắc thể

là một chuỗi các bit 0 hoặc 1.
Ví dụ:
Nhiễm sắc thể A: 101100101100101011100101
Nhiễm sắc thể B: 111111100000110001
Mã hoá - Biểu diễn các biến bằng véc tơ nhị phân
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 số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:

g =

u x −l x
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 hố 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 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
X i = a i + decimal (1100...012 ).

bi − a i
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à
tồ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 ngun máy tính.
1.4.2 Mã hóa dạng số thực
Mỗi NST được mã hố là một vecto trong khơng gian R m chẳng hạn X =
(a1, a2, ..., am) với các ai ∈ R. Cách mã hoá này thường tự nhiên đối với các bài
toán tối ưu số và được phát triển rất mạnh trong thời gian gần đây.
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 hố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.
1.5 XÂY DỰNG HÀM THÍCH NGHI (hàm phù hợp)
Hàm phù hợp đánh giá khả năng phù hợp của tập lời giải theo yêu cầu bài
toán. Hàm này được xây dựng cho từng bài toán với yêu cầu cụ thể. Thơng
thường trong các bài tốn tối ưu hàm này chính là hàm mục tiêu của bài tốn.
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 )
f ( x ) =  max
 0

g ( x ) < C max
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 )
f ( x ) =  min
 0

g ( x ) + C 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.
1.6 CÁC TOÁN TỬ DI TRUYỀN
Trong giải thuật di truyền, các cá thể mới liên tục sinh ra trong quá
trình tiến hóa nhờ sự lai ghép ở thế hệ cha mẹ. Một cá thể mới có thể mang

những tính trạng của cha mẹ (di truyền), cũng có thể mang những tính trạng
hoàn toàn mới (đột biến). Di truyền và đột biến là hai cơ chế có vai trị quan
trọng như nhau trong tiến trình tiến hóa, dù rằng đột biến xảy ra với xác suất
nhỏ hơn nhiều so với hiện tượng di truyền. Các thuật tốn tiến hóa, tuy có
những điểm khác biệt, nhưng đều mơ phỏng ba tốn tử cơ bản: lai ghép, đột
biến và chọn lọc.

10


1.6.1 Tố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 tốn tử chọn lọc sau:


Chọn lọc tỷ lệ: Được sử dụng thường xuyên nhất

trong GA. Xác xuất lựa chọn của mỗi cá thể tỉ lệ thuận với giá trị độ thích hợp
của nó, được tính theo cơng thức:
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 tố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 tồ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:
-

Phát sinh ngẫu nhiên một số r trong đoạn [0..1].

-

Nếu r
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.
Bảng Ví dụ về quần thể gồm 4 cá thể
STT

Chuỗi vi


Sức khoẻ f(vi)

Tỷ lệ % Pi

Tổng chạy qi

1

01101

169

14.4

169

2

11000

576

49.2

745

3

01000


64

5.5

809

4

10011

30.9

1170

Tổng

361
1170

100.0

Hình: Vịng trịn Roulette với 4 khe của 4
chuỗi bảng 1

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.
Trên thực tế người ta thường sử dụng toán tử chọn lọc tỷ lệ được mô tả
như sau:
r := random[0,1];
i := 1;
12



WHILE (ii := i+1;
Select(vi);

r >

)

DO

 Chọn lọc cạnh tranh:
Trong thủ tục này chúng ta tiến hành như sau:
- 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.
 Chọn lọc xếp hạng:
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à:
pN − j =

j
N

∑k .
k =1


Các bước tiến hành của thủ tục là:
-

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.
1.6.2 Toán tử lai ghép (crossover)
Toán tử lai ghép được gán với một xác suất pc. Q trình được mơ tả như
sau:

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
Có một số dạng toán tử lai ghép như:


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:
X’ = (x1,..., xk, yk+1,..., ym )
Y’ = (y1,..., yk, xk+1,..., xm )

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)
Toán tử lai ghép đa điểm được mô tả như sau:
Chọn ngẫu nhiên k điểm j1,…,jk (1≤ j1tạ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)


Lai ghép đều hay lai ghép mặt nạ (Uniform Crossover)

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

Lai ghép điểm đơn:
11101001000

11111000000

00001010101


11101010101

00001001000

Lai ghép điểm kép:
11101001000

00111110000

00001010101

11001011000

00101000101

Lai ghép đồng nhất:
11101001000

00001010101

00111110000

10001000100

01101011001

Đột biến điểm:
11101001000


11101011000

Hình: Các tốn tử chung cho thuật giải di truyền

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;

1.6.3 Toán tử đột biến (Mutation)
Toán tử đột biến được gán xác suất p m (nhỏ hơn nhiều so với xác suất lai
ghép pc). Điều này được suy diễn bởi trong tự nhiên đột biến ít xảy ra. Phép đột
biến được mơ tả như sau:
-

Chọn ngẫu nhiên một NST trong quần thể.


-

Tạo một số ngẫu nhiên k trong khoảng từ 1 tới m, 1 ≤ k ≤ m.

-

Thay đổi bít thứ k. Đưa nhiễm sắc thể này vào quần thể để tham gia q

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;


r<


i

WHILE (k
j: =1
m

f ( b j ,t )

f ( b j ,t )
j: =1

bi,t+1 := bk;
END;
{lai ghép 1 điểm}
FOR i:=1 TO m-1 DO
BEGIN
IF random[0,1]

BEGIN
pos:=random(1, ... , n-1);
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]invert(bit+1[k]);
t := t+1;
END;

) DO

k := k+1;

{ n là độ dài NST}

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 tốn
tìm kiếm dựa trên cơ chế chọn lọc nhân tạo và sự tiến hố của các gen. Trong
q 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 số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, q 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:
CauHoi = (Ma, NoiDung, ChuDe, DoKho, ThoiGian)
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)
- NoiDung: Nội dung câu hỏi
- ChuDe: Chủ đề, lĩnh vực của 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:
Ma

ChuDe

Noi dung

DoKho

ThoiGianTL

1

Tin học 10 (Chương 1)



1

10


2

Tin học 10 (Chương 1)



2

5

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

2.2 Các yêu cầu chung của việc ra đề:
Khi ra đề, người ra đề có thể đưa ra rất nhiều yêu cầu và chúng được đúc kết lại
thành các yêu cầu chung nhất như sau:
• Đề thi tạo ra cần phải có nội dung khơng thể dự đốn được trước
• Đề thi tạo ra cần phải thỏa mãn tối ưu các điều kiện ràng buộc và các mục
tiêu của người ra đề.
- Ràng buộc: Đề thi hoàn toàn nằm trong các chủ đề người biên soạn yêu cầu.
- Các mục tiêu:
+ Số lượng và thời lượng của từng câu hỏi phù hợp sao cho tổng thời gian
tối đa trả lời các câu hỏi đạt xấp xỉ thời gian người ra đề đặt ra ban đầu.
+ Các chủ đề có trong các đề tạo ra đạt số lượng lớn nhất có thể được
+ Tỉ lệ phân bổ kiến thức trong các đề đạt xấp xỉ tỉ lệ đặt ra ban đầu
+ Độ khó (hoặc tỉ lệ độ khó) đạt xấp xỉ độ khó đặt ra ban đầu.
• Điểm của mỗi câu hỏi được cho trong đề phải hợp lý phù hợp với qui trình
đánh giá chất lượng đào tạo hiện thời.
Các yêu cầu của đề thi:
Sau đây là hai ví dụ về yêu cầu của người ra đề.
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:
Tên chủ đề cần ra

Tỷ lệ phân bổ kiến thức

Độ khó yêu cầu

Tin học 10 (Chương 1)

chiếm 10%

2

Tin học 10 (Chương 2)

chiếm 40%

5

Tin học 10 (Chương 3)

chiếm 10%

Tùy ý


Tin học 10 (Chương 4)

Tùy ý

4

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 hồn tồn 100% tất cả các ràng buộc đã đề ra.
• Ln 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.
2.3 Mô hình bài tốn ra đề thi:
2.3.1 Phân tích bài tốn:
Gọi q là các đề thi tối ưu được soạn ra từ CauHoi (q ⊆ CauHoi), bài toán ra
đề thi được mô tả bằng một sơ đồ ánh xạ f như sau:
q (t, l, k, i) = f(CauHoi, T, L, K, I)


(*)

Trong đó T, L, K, I: là các tham số điều kiện yêu cầu đầu vào:
+ T: tập các chủ đề kiến thức cần kiểm tra, T = {T1,T2,…, Tn}
+ L: tập độ khó của các chủ đề yêu cầu tương ứng L = {LT , LT ,  , LT }
1

2

n

+ K: tập các tỉ lệ % phân bổ kiến thức yêu cầu tương ứng,
K = {K T , K T ,  , K T }
1

2

n

+ I: thời gian làm bài tối đa của đề.
Trong lời giải sau đây chúng tôi thường sử dụng khái niệm hai tập hợp
tiệm cận với nhau theo nghĩa chúng giao nhau nhiều nhất có thể. Để tiện chúng
ta ký hiệu P ≅ Q nếu tập |P ∩ Q| là cực đại.
Lời giải của (*) là một quan hệ q (một đề thi tối ưu), q ⊆ CauHoi có các các giá
trị: (t, l, k, i) tương ứng với các tham số (T, L, K, I), trong đó
t: tập chủ đề t = {T1, T2,…, Tm}, t ⊆ T và T ≅ t
l: tập độ khó l = {l T , l T ,  , l T } , l T thỏa mãn l T ≅ LT
1


2

m

i

i

i

k: tập tỉ lệ % phân bổ kiến thức k = {k T , k T ,  , k T } , k T thỏa mãn k T ≅ K T
1

2

m

i

i

i

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 tốn tìm đề thi tối ưu thuộc vào lớp bài tố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 |)
Ti = 1

i

i

với k T ∈ k, K T ∈ K
i

i

m

(ii) E2 = ( ∑ | l T - LT |)
Ti = 1

i

i

với l T ∈ l, LT ∈ L
i

i


(iii) E3 = (|m - n|)
với m = |t| và n = |T|
(iv) E4 = (|i – I|)
Nói cách khác, phải tìm một quan hệ q từ CauHoi để thoả mãn hàm mục tiêu
sau:
Fitness(q) = - E1 * E2 * E3 *E4
Hiển nhiên đây là bài toán tối ưu đa mục tiêu. Theo lý thuyết độ phức tạp
tính tốn chúng ta có thể khẳng định bài toán ra đề thi tự động đáp ứng các mục
tiêu như trên là bài toán NP-đầy đủ.
2.3.3 Xây dựng cá thể, hàm thích nghi và các phép tốn di truyền
Bài tố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


×