Tải bản đầy đủ (.pdf) (21 trang)

Giải thuật ga và bài toán tìm phần tử tốt nhất

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 (352.14 KB, 21 trang )


HỌC VIỆN KỸ THUẬT QUÂN SỰ

KHOA CÔNG NGHỆ THÔNG TIN





B
B
A
A
Ø
Ø
I
I


T
T
A
A
Ä
Ä
P
P


L
L


Ơ
Ơ
Ù
Ù
N
N






MÔN : TRÍ TUỆ NHÂN TẠO.








NỘI DUNG NGHIÊN CỨU
:

Nghiên cứu giải thuật GA

và bài tốn tìm phần tử tốt nhất






Giảng viên : TS Ngô Hữu Phúc
Tên học viên : Nguyễn Văn Tiến.
Lớp : KHMT K23






THÀNH PHỐ HỒ CHÍ MINH, THÁNG 6/2012
PHẦN I: KHÁI QUÁT VỀ GIẢI THUẬT GEN

1-KHÁI NIỆM GIẢI THUẬT GEN

1.1.Lịch sử phát triển :
Giải thuật gen (GAs) 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 khác nhau dựa trên cơ chế chọn lọc tự nhiên của ngành di
truyền học .

Trong cơ thể cơ thể sinh vật, các gen liên kiết với nhau theo cấu trúc dạng chuỗi
gọi là nhiễm sắc thể , nó đặc trưng cho mỗi loài và quyết định sự sống còn của cơ
thể đó. Trong tự nhiên một loài muốn tồn tại phải thích nghi với môi trường ,cơ thề
sống nào thích nghi với môi trường hơn thì sẽ tồn tại và sinh sản với số lượng ngày
càng nhiều hơn , trái lại những loài không thích nghi với môi trường sẽ dần dần bị
diệt chủng .Môi trường tự nhiên luôn biến đổi ,nên cấu trúc nhiễm sắc thể cũng
thay đổi để thích nghi với môi trường ,và ở thế hệ sau luôn có độ thích nghi cao
hơn ở thế hệ trước .Cấu trúc này có được nhờ vào sự trao đổi thông tin ngẫu nhiên
với môi trường bên ngoài hay giữa chúng với nhau . Dựa vào đó các nhà khoa học

máy tính xây dựng nên một giải thuật tìm kiếm tinh tế dựa trên cơ sở chọn lọc tự
nhiên và quy luật tiến hóa, gọi là giải thuật gen .

GAs ra đời và phát triễn dựa trên quá trình tiến hóa trong tự nhiên và đã được ứng
dụng thành công trong nhiều lĩnh vực nhất là tối ưu hóa và máy học.
Giải thuật di truyền cũng như các thuật toán tiến hoá đều được hình thành dựa trên
một quan niệm được coi là một tiên đề phù hợp với thực tế khách quan. Đó là quan
niệm "Quá trình tiến hoá tự nhiên là quá trình hoàn hảo nhất, hợp lý nhất và tự nó
đã mang tính tối ưu". Quá trình tiến hoá thể hiện tính tối ưu ở chỗ thế hệ sau bao
giờ cũng tốt hơn thế hệ trước.
Quá trình phát triển của giải thuật di truyền có thể được chỉ ra qua các mốc thời
gian sau :
 1960 : Ý tưởng đầu tiên về Tính toán tiến hoá được Rechenberg giới thiệu
trong công trình "Evolution Strategies" (Các chiến lược tiến hoá). Ý tưởng
này sau đó được nhiều nhà nghiên cứu phát triển.
 1975 : Giải thuật gen do John Holland phát minh và được phát triển bởi ông
cùng với các đồng nghiệp và những sinh viên. Cuốn sách "Adaption in
Natural and Artificial Systems" (Sự thích nghi trong các hệ tự nhiên và nhân
tạo) xuất bản năm 1975 đã tổng hợp các kết quả của quá trình nghiên cứu và
phát triển đó.
 1992 : John Koza đã dùng GA để xây dựng các chương trình giải quyết một
số bài toán và gọi phương pháp này là " lập trình gen".
Ngày nay giải thuật di truyền càng trở nên quan trọng, đặc biệt là trong lĩnh vực tối
ưu hoá, một lĩnh vực có nhiều bài toán thú vị, được ứng dụng nhiều trong thực tiễn
nhưng thường khó và chưa có giải thuật hiệu quả để giải .
1.2. Các khái niệm cơ bản
Giải thuật di truyền dựa vào quá trình tiến hoá trong tự nhiên nên các khái niệm và
thuật ngữ của nó đều có liên quan đến các thuật ngữ của di truyền học.
1.2.1.Cá thể, nhiễm sắc thể
Trong giải thuật di truyền, một cá thể biểu diễn một giải pháp của bài toán. Không

giống với trong tự nhiên, một cá thể có nhiều nhiễm sắc thể (NST), ở đây 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ể trong giải
thuật di truyền coi như là tương đương.
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.2. Quần thể
Quần thể là một tập hợp các cá thể có cùng một số đặc điểm nào đấy. 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.
1.2.3. Chọn lựa
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. 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 được coi là một sự tổ hợp lại các tính chất (thành
phần) trong hai lời giải cha mẹ nào đó để sinh ra một lời giải mới mà có đặc tính mong
muốn là tốt hơn thế hệ cha mẹ. Đây là một quá trình xảy ra chủ yếu trong giải thuật di
truyền.
1.2.5. Độ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ệ.


2 –
SƠ ĐỒ GIẢI THUẬT GEN
Với các khái niệm được giới thiệu ở trên, giải thuật di truyền được mô tả như sau :

Hình 1: Sơ đồ mô tả giải thuật di truyền




1. [Bắt đầu ] Nhận các tham số cho thuật toán.
2. [Khởi tạo ] Sinh ngẫu nhiên một quần thể gồm n cá thể ( là n lời giải cho bài toán)
3. [Quần thể mới ] 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.[Thích nghi] Ước lượng độ thích nghi eval(x) của mỗi cá thể.
b.[Kiểm tra ] Kiểm tra điều kiện kết thúc giải thuật.
c.[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)
d.[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.
e.[Đột biến] Với một xác suất đột biến được chọn, biến đổi cá thể mới
5. [Chọn 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
2. Các tham số của GA
2.1. Kích thước quần thể
Kích thước quần thể cho biết có bao nhiêu cá thể trong một quần thể (trong một
thế hệ). Qua các nghiên cứu cũng như các thử nghiệm đã cho thấy kích thước quần thể
không nên quá bé cũng như không quá lớn. Nếu có quá ít cá thể thì ít có khả năng thực
hiện lai giống và chỉ một phần nhỏ không gian tìm kiếm được dùng. Như vậy sẽ dễ xảy ra
trường hợp bỏ qua các lời giải tốt. Nhưng quá nhiều cá thể cũng không tốt vì GA sẽ chạy

chậm đi, ảnh hưởng đến hiệu quả của giải thuật. Các nghiên cứu cũng đã chỉ ra không có
lợi khi tăng kích thước quần thể lên quá một giới hạn cho phép.
2.2. Xác suất lai ghép
Xác suất lai ghép cho biết việc lai ghép tạo ra thế hệ mới được thực hiện thường
xuyên như thế nào. Xác suất lai ghép là p
c
, khi đó khả năng để một cá thể được lai ghép
là p
c
. Nếu không thực hiện lai ghép, con sinh ra sẽ giống hoàn toàn bố mẹ. Nếu được lai
ghép, con sinh ra sẽ có một phần giống bố và một phần giống mẹ.
2.3. Xác suất đột biến
Xác suất đột biến cho biết các gen của NST thay đổi thường xuyên như thế nào.
Xác suất đột biến là p
m
, khi đó khả năng để mỗi gen của một NST bất kỳ bị đột biến là
p
m
. Toán tử đột biến có tác dụng ngăn ngừa giải thuật di truyền rơi vào tình trạng cực trị
địa phương, tuy nhiên nếu thực hiện đột biến với xác suất quá cao sẽ biến giải thuật di
truyền thành giải thuật tìm kiếm ngẫu nhiên.

3. Mã hoá NST
Trong giải thuật di truyền, mỗi nhiễm sắc thể biểu diễn một lời giải theo một cách
nào đó mà chứa đủ các thông tin cần thiết về lời giải. Các nhiễm sắc thể tạo nên một quần
thể, là không gian lời giải của bài toán mà ta khảo sát.
Cách mã hoá NST được đánh giá là một trong hai yếu tố quyết định trong xây
dựng giải thuật di truyền. Phần sau đây sẽ trình bày một số cơ chế mã hoá nhiễm sắc thể
hay dùng cho giải thuật di truyền. Tuy nhiên, tuỳ thuộc vào các tri thức riêng của từng bài
toán mà ta sẽ lựa chọn hay xây dựng cách biểu diễn nhiễm sắc thể riêng phù hợp với bài

toán của mình.
3.1.1. Mã hoá nhị phân
Mã hoá nhị phân là phương pháp mã hoá nhiễm sắc thể phổ biến nhất. Trong mã
hoá nhị phân, mỗi nhiễm sắc thể là một chuỗi nhị phân, mỗi bit trong nó có thể biểu diễn
một đặc tính của nghiệm.
Ví dụ: hai nhiễm sắc thể 1 và 2 có chiều dài là 16.
Nhiễm sắc thể 1: 1101100100110110
Nhiễm sắc thể 2: 1101111000011110
Mã hoá nhị phân thường hay dùng trong các bài toán tối ưu các hàm một biến hay
nhiều biến. Khi đó, mỗi chuỗi nhị phân sẽ biểu diễn hàm tại một (tập) giá trị của (các)
biến. Ngoài ra nó còn được áp dụng trong nhiều loại bài toán khác nữa.
Ví dụ: Trong bài toán cái túi, để biểu diễn một cách xếp đồ vào túi, ta sẽ dùng một
chuỗi nhị phân có kích thước bằng số đồ vật, mỗi bit tương ứng với các đồ vật sẽ có hai
giá trị: giá trị 0 nếu đồ vật đó không được cho vào túi và giá trị 1 nếu đồ vật được cho vào
túi.
Mã hoá nhị phân tuy là phổ biến nhưng nó có một nhược điểm là có thể tạo ra
không gian mã hoá lớn hơn so với không gian giá trị của nhiễm sắc thể. Do đó, với nhiều
bài toán thì biểu diễn nhị phân là không hữu hiệu.
3.1.2. Mã hoá hoán vị
Mã hoá hoán vị có thể được sử dụng trong các bài toán liên quan đến thứ tự như
bài toán du lịch hay bài toán lập lịch.
Trong mã hoá hoán vị, mỗi nhiễm sắc thể là một chuỗi các số biểu diễn một trình tự.
Ví dụ :
Nhiễm sắc thể 1: 1 5 4 3 2 6 7 9 8
Nhiễm sắc thể 2: 9 1 7 3 8 5 6 4 2
Mã hoá hoán vị phù hợp cho các bài toán liên quan đến thứ tự. Đối với các bài
toán này, việc thao tác trên các nhiễm sắc thể chính là hoán vị các số trong chuỗi đó làm
thay đổi trình tự của nó.
Ví dụ: Trong bài toán người du lịch, để biểu diễn một cách đi của người du lịch thì
dùng một nhiễm sắc thể mà trình tự các số trong chuỗi cho biết thứ tự các thành phố mà

người du lịch đi qua.
3.1.3. Mã hoá theo giá trị
Mã hoá trực tiếp theo giá trị có thể được dùng trong các bài toán sử dụng giá trị
phức tạp như trong số thực. Trong đó, mỗi nhiễm sắc thể là một chuỗi các giá trị. Các giá
trị có thể là bất cứ cái gì liên quan đến bài toán, từ số nguyên, số thực, kí tự cho đến các
đối tượng phức tạp hơn.
Ví dụ:
Nhiễm sắc thể 1: 1.23 5.32 0.34 2.98 3.54
Nhiễm sắc thể 2: (back), (back), (right), (forward), (left)
Mã hoá theo giá trị thường dùng cho các bài toán đặc biệt. Trong cách mã hoá này
ta thường phải phát triển các toán tử đột biến và lai ghép cho phù hợp với từng bài toán.

4. Khởi tạo quần thể ban đầu
Khởi tạo quần thể ban đầu là bước đầu tiên trong giải thuật di truyền. Thông
thường để khởi tạo quần thể trong bài toán tối ưu, ta tạo ra một cách ngẫu nhiên các lời
giải có thể (thường là các lời giải thỏa mãn ràng buộc của bài toán nhưng chưa biết là đại
lượng cần tối ưu đã là tối ưu hay chưa). Tuỳ vào từng bài toán cụ thể mà ta có các
phương pháp khởi tạo khác nhau. Ví dụ trong bài toán BDMST, ta sẽ sinh ngẫu nhiên các
DBST còn trọng số thì có thể chưa quan tâm đến.
Chất lượng của quần thể ban đầu càng cao thì lời giải mà giải thuật di truyền đưa
ra càng tốt. Nếu trong bài toán cây khung ở trên mà ta tạo được các cây khung trong
quần thể ban đầu có trọng số càng thấp thì càng tốt. Do đó, trong nhiều giải thuật di
truyền, thường sử dụng các giải thuật đã có để giải bài toán mà cho kết quả khá tốt để
khởi tạo quần thể ban đầu.
5.Hàm tính độ thích nghi
Theo các nghiên cứu và các thử nghiệm của nhiều nhà nghiên cứu về giải thuật di
truyền thì hàm tính độ thích nghi là một trong hai yếu tố quan trọng nhất quyết định sự
thành công hay thất bại của GA.
Hàm thích nghi được xây dựng sao cho giá trị thích nghi phải phản ánh được giá
trị thực của NST trong việc đáp ứng yêu cầu của bài toán. Ví dụ như trong các bài toán về

cây khung nhỏ nhất thì hàm thích nghi sẽ là hàm tính tổng trọng số các cạnh trên các cây
khung.
6. Cơ chế lựa chọn
Cơ chế lựa chọn được áp dụng khi chọn các cá thể từ quần thể P(t) để thực hiện
việc lai ghép và đột biến, tạo ra quần thể P(t+1). Có nhiều cách để lựa chọn các cá thể từ
một quần thể. Sau đây sẽ giới thiệu một số cơ chế hay áp dụng.
Để tiện mô tả các cơ chế lựa chọn ta đưa ra một số kí hiệu sau :
Cách biểu diễn các nhiễm sắc thể thứ i là v
i
.
Hàm tính độ thích nghi của nhiễm sắc thể v
i
là f(v
i
).
Kích thước quần thể là pop_size.
Số nhiễm sắc thể cần chọn là N.
6.1. Lựa chọn tỷ lệ
Trước khi lựa chọn thì tính các giá trị sau :
 Tính tổng độ thích nghi của cả quần thể:

=
=
sizepop
i
i
vfF
_
1
)(


 Tính xác suất chọn p
i
cho mỗi nhiễm sắc thể v
i
: p
i
= f(v
i
)/F
 Tính vị trí xác suất q
i
của mỗi nhiễm sắc thể :

=
=
i
j
ji
Pq
1

Cơ chế lựa chọn theo bánh xe Roulet được thực hiện bằng cách quay bánh xe
Roulet N 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
bằng cách sau :
 Phát sinh ngẫu nhiên một số r trong khoảng [0,1].
 Nếu r < q
1
thì chọn nhiễm sắc thể v
1

; ngược lại thì chọn nhiễm sắc thể thứ i ( 2 ≤ i
≤ pop_size ) sao cho q
i-1
≤ r ≤ q
i
.
Với cơ chế lựa chọn như thế này thì có một số nhiếm sắc thể sẽ được chọn nhiều
lần. Điều này phù hợp với lý thuyết lược đồ: Các nhiễm sắc thể tốt nhất thì có nhiều bản
sao, nhiễm sắc thể trung bình thì không đổi , nhiễm sắc thể kém thì chết đi [11].

6.2. Lựa chọn xếp hạng
Cơ chế lựa chọn xếp hạng được mô tả như sau:
 Sắp xếp các nhiễm sắc thể trong quần thể theo độ thích nghi từ thấp đến cao.
 Đặt lại độ thích nghi cho quần thể đã sắp xếp theo kiểu: nhiễm sắc thể thứ nhất có
độ thích nghi là 1, NST thứ hai có độ thích nghi là 2, .v.v., NST thứ pop_size có
độ thích nghi là pop_size.
Theo phương pháp này việc một NST được chọn nhiều lần như trong lựa chọn
theo kiểu bánh xe Roulet đã giảm đi. Nhưng nó có thể dẫn đến sự hội tụ chậm và NST có
độ thích nghi cao cũng không khác mấy so với các NST khác.
6.3. Lựa chọn theo cơ chế lấy mẫu ngẫu nhiên
Cơ chế lựa chọn:
 Biểu diễn xác suất chọn các NST lên trên một đường thẳng.
 Đặt N điểm chọn lên đường thẳng. Các điểm chọn này cách nhau 1/N, điểm đầu
tiên đặt ngẫu nhiên trong khoảng [0,1/N]
 Với một điểm chọn, NST gần với nó nhất về bên phải sẽ được chọn.
Phương pháp này có đặc điểm là các điểm chọn được phân bố đều trên trục số, do
đó sẽ gần với điểm xứng đáng được chọn.
6.4. Lựa chọn tranh đấu
Cơ chế lựa chọn :
 Lấy một số NST trong quần thể, NST nào có độ thích nghi cao nhất được chọn.

 Lặp lại thao tác trên N lần.
7. Các toán tử di truyền
Các toán tử di truyền của GA là toán tử lai ghép và đột biến. Đây là hai toán tử có
tác động lớn đến chất lượng của giải thuật. Các toán tử này được xây dựng phụ thuộc vào
cách mã hoá các NST. Ở đây chỉ đưa ra toán tử lai ghép và đột biến trên một số cách mã
hoá NST để chỉ ra được ý tưởng xây dựng toán tử lai ghép và đột biến trong GA. Còn
tuỳ thuộc vào các bài toán cụ thể và cách mã hoá NST mà ta xây dựng hai loại toán tử
này.
7.1.Mã hoá nhị phân
7.1.1.Toán tử lai ghép
Lai ghép đơn điểm cắt :
 Một điểm cắt được chọn tại một vị trí thứ k trên NST.
 Từ đầu NST đến vị trí k, NST con sao chép từ cha, phần còn lại sao chép từ
mẹ.
Ví dụ :
Cha : 11011 | 001

Mẹ : 10011 | 101
Con sinh ra do lai ghép đơn điểm cắt :

Con : 11011 | 101

Lai ghép hai điểm cắt :
 Hai điểm cắt được chọn .
 Từ đầu cho đến điểm cắt thứ nhất được sao chép từ cha, từ điểm cắt thứ
nhất đến điểm cắt thứ hai sao chép từ mẹ và phần còn lại sao chép từ cha.
Ví dụ :
Cha : 11| 0110 | 01

Mẹ : 10| 0111 | 01

Con sinh ra do lai ghép hai điểm cắt :

Con : 11 | 0111| 01

Lai ghép đồng nhất :
 Có một mặt nạ sao chép là một chuỗi nhị phân có chiếu dài bằng chiều dài
NST.
 Xây dựng NST mới: Duyệt qua mặt nạ, bit có giá trị một thì sao chép gen
tại vị trí đó từ NST cha sang con, bit có giá trị 0 thì sao chép từ mẹ.
 Mặt nạ được phát sinh ngẫu nhiên đối với từng cặp cha mẹ.
Ví dụ :
Cha : 11011001

Mẹ : 10011101

Mặt nạ : 10101000

Con : 10011101

Lai ghép số học: NST con được tạo thành bằng cách thực hiện một phép toán
logic nào đó như AND, OR, … với cặp NST bố mẹ.
Ví dụ :
Cha : 11011001

Mẹ : 10011101

Con (AND): 10011001

7.1.2.Toán tử đột biến
Phép đảo bit : Bit được chọn sẽ bị đảo (Bit được chọn có gạch chân)

Ví dụ
Trước đột biến : 11011001

Sau đột biến : 11010001

7.2.Mã hoá hoán vị
7.2.1.Toán tử lai ghép
Toán tử lai ghép đơn điểm cắt :
 Một điểm cắt được chọn.
 Từ đầu đến điểm cắt được lấy từ cha, phần còn lại duyệt qua mẹ, đưa những
gen chưa có vào.

Ví dụ :
Cha : 128 | 74365
Mẹ : 537 | 68412
Con : 128 | 53764
7.2.2.Toán tử đột biến
Thay đổi thứ tự : Hai số được chọn hoán đổi vị trí cho nhau.
Ví dụ : (Số được chọn có gạch chân)
Trước đột biến : 12874365
Sau đột biến : 14872365
7.3.Mã hoá theo giá trị
7.3.1.Toán tử lai ghép
Mã hoá theo giá trị có thể áp dụng tất cả các toán tử lai ghép có trong mã hoá nhị
phân.
7.3.2.Toán tử đột biến
Với mã hoá theo giá trị thực thì có thể thực hiện đột biến bằng cách thay đổi giá trị
(cộng thêm hoặc trừ đi) một giá trị nhỏ vào một số cá thể được chọn.
Ví dụ : (Các các thể được chọn được tô đậm)
Giá trị nhỏ : 0.02

Trước đột biến : 1.23 5.32 0.34 2.98 3.54
Sau đột biến : 1.23 5.30 0.34 3.00 3.54
8. Chiến lược nạp lại quần thể
8.1.Nạp lại hoàn toàn
Tạo ra số NST mới bằng kích thước quần thể và quần thể mới bao gồm toàn các
NST mới này, không có NST nào của thế hệ trước.
8.2.Nạp lại ngẫu nhiên
Tạo ra số NST mới ít hơn kích thước quần thể và thay thế một cách ngẫu nhiên các
NST ở thế hệ trước bằng NST ở thế hệ sau.
8.3.Nạp lại theo mô hình cá thể ưu tú
Tạo ra số NST mới ít hơn kích thước quần thể và thay thế chúng cho các bố mẹ có
độ thích nghi thấp.

Nhận xét về các chiến lược nạp lại :
 Nạp lại hoàn toàn : là chiến lược đơn giản nhất. Mỗi NST chỉ tồn tại trong một
thế hệ, sang thế hệ tiếp theo sẽ được thay mới hoàn toàn. Như vậy sẽ xảy ra trường
hợp là các NST tốt sẽ không được giữ lại, do đó chiến lược này không phải là
chiến lược phù hợp cho việc cải thiện lời giải qua các thế hệ.
 Nạp lại theo mô hình cá thể ưu tú: Được coi là chiến lược tối ưu. Các NST tốt sẽ
sống sót qua nhiều thế hệ. Qua mỗi thế hệ, sẽ có một số lượng nhất định các NST
tồi bị thay thế. Tuy chiến lược không kiểm tra các NST con cháu nạp vào có tốt
hơn bố mẹ bị loại đi hay không nhưng chắc chắn là những NST con cháu nạp vào
nếu là tồi thì sẽ bị loại trong thế hệ tiếp. Như vậy nó vẫn đảm bảo qua nhiều thế hệ
thì tính chất của quần thể sẽ được cải thiện dần dần.








PHẦN II
GIẢI THUẬT GEN BÀI TOÁN TÌM PHẦN TỬ TỐT NHẤT

Bài toán dành cho GAs là tìm kiếm trên không gian các giả thuyết ứng cử để xác
định giả thuyết tốt nhất. Trong GAs “giả thuyết tốt nhất” được định nghĩa như là một giả
thuyết tối ưu hóa một đại lượng số được định nghĩa trước cho bài toán sắp tới, được gọi
là độ thích nghi của giả thuyết.
Mặc dù các thuật giải di truyền được thực hiện thay đổi theo bài toán cụ thể, nhưng
chúng chia sẻ chung cấu trúc tiêu biểu sau: Thuật giải hoạt động bằng cách cập nhật liên
tục tập giả thuyết – được gọi là quần thể. Ở mỗi lần lặp, tất cả các cá thể trong quần thể
được ước lượng tương ứng với hàm thích nghi. Rồi quần thể mới được tạo ra bằng cách
lựa chọn có xác suất các cá thể thích nghi tốt nhất từ quần thể hiện tại. Một số trong
những cá thể được chọn được đưa nguyên vẹn vào quần thể kế tiếp. Những cá thể khác
được dùng làm cơ sở để tạo ra các cá thể con bằng cách áp dụng các tác động di truyền:
lai ghép và đột biến.
GA( Fitness, Fitness_threshold, p, r, m)
{
// Fitness
: hàm gán thang điểm ước lượng cho một giả thuyết

// Fitness_threshold:
Ngưỡng xác định tiêu chuẩn dừng giài thuật tìm kiếm
// p:
Số cá thể trong quần thể giả thuyết

// r:
Phân số
cá thể trong quần thể được áp dụng toán tử lai ghép ở mỗi bước
// m:

Tỉ lệ cá thể bị đột biến

• Khởi tạo quần thể: P  Tạo ngẫu nhiên p cá thể giả thuyết
• Ước lượng: Ứng với mỗi h trong P, tính
Fitness
(h)
• while [max
Fitness
(h)] <
Fitness_threshold
do

Tạo thế hệ mới
, P
S

1.
Chọn cá thể
: chọn theo xác suất (1 – r)p cá thể trong quần thể P thêm vào P
S
. Xác
suất Pr(h
i
) của giả thuyết h
i
thuộc P được tính bởi công thức:
1
( )
Pr( )
( )

i
i
p
j
j
Fitness h
h
Fitness h
=
=



2.
Lai ghép
: chọn lọc theo xác suất
2
r p
×
cặp giả thuyết từ quần thể P, theo Pr(h
i
) đã
tính ở bước trên. Ứng với mỗi cặp <h
1
, h
2
>, tạo ra hai con bằng cách áp dụng toán tử
lai ghép. Thêm tất các các con vào P
S
.

3.
Đột biến
: Chọn m% cá thể của P
S
với xác suất cho mỗi cá thể là như nhau. Ứng với
mỗi cá thể biến đổi một bit được chọn ngẫu nhiên trong cách thể hiện của nó.
4.
Cãp nhật
: P  P
S.

5.
Ước lượng
: Ứng với mỗi h trong P, tính
Fitness
(h)
• Trả về giả thuyết trong P có độ thích nghi cao nhất.
}
Bảng 2.1. Thuật giải di truyền mẫu
Quần thể gồm p cá thể. Ở mỗi lần lặp, quần thể kế tiếp P
S
được hình thành từ việc
lựa chọn theo xác suất các giả thuyết hiện tại theo độ thích nghi của chúng và bằng cách
thêm vào các giả thuyết mới. Các giả thuyết mới được tạo ra bằng cách áp dụng toán tử
lai ghép cho cặp giả thuyết thích nghi nhất và bằng cách tạo ra các đột biến điểm đơn
trong thế hệ giả thuyết kết quả. Quá trình này được lặp cho đến khi các giả thuyết thích
hợp được phát hiện. Các toán tử lai ghép và đột biến tiêu biểu được định nghĩa trong
bảng kế tiếp.
Một thuật giải di truyền mẫu được mô tả trong bảng 2.1. Các đầu vào cho thuật giải
này bao gồm hàm tính độ thích nghi để tính hạng cho các giả thuyết ứng cử, một giá trị

ngưỡng được định nghĩa cấp độ thích nghi có thể chấp nhận để kết thúc thuật giải, kích
thước quần thể, và các tham số quyết định các quần thể kế tiếp được tạo ra như thế nào:
phần quần thể bị thay thế ở mỗi thế hệ và tỉ lệ đột biến.
Lưu ý trong thuật giải này, ở mỗi bước lặp qua vòng lặp chính tạo ra một thế hệ mới
các giả thuyết dựa vào quần thế hệ hiện tại. Trước tiên, một số giả thuyết được chọn từ
quần thể hiện tại để đưa vào thế hệ kế tiếp. Những giả thuyết này được chọn theo xác
suất, ở đây xác suất của giả thuyết được tính bởi:
1
( )
Pr( )
( )
i
i
p
j
j
Fitness h
h
Fitness h
=
=

(2.1)
Vì vậy, xác suất để giả thuyết được chọn tỉ lệ với độ thích nghi của nó và tỉ lệ
nghịch với độ thích nghi của các giả thuyết cạnh tranh khác trong quần thể hiện tại.
Một khi các cá thể này của thế hệ hiện tại đã được chọn để đưa vào quần thể thế hệ
kế tiếp, các cá thể thêm vào được tạo ra dùng toán tử lai ghép. Lai ghép, được định nghĩa
chi tiết trong phần kế tiếp, lấy hai giả thuyết từ thế hệ hiện tại và tạo ra hai giả thuyết con
bằng cách kết hợp các phần của hai giả thuyết cha.
Các giả thuyết cha được chọn theo xác suất từ quần thể hiện tại, sử dụng hàm xác

suất được cho bởi phương trình (2.1). Sau khi các cá thể mới được tạo ra từ hoạt động lai
ghép này, quần thế thế hệ mới bây giờ có đủ số lượng thành viên mong muốn. Lúc này,
một phân số m nào đó các cá thể này được chọn một cách ngẫu nhiên, và tất cả các đột
biến ngẫu nhiên được thực hiện để thay đổi các cá thể này.

Bảng 4.1 Các toán tử chung cho thuật giải di truyền
Trong lai ghép hai điểm, cá thể con được tạo ra bởi thay thế các đoạn trung gian của
một cá thể cha vào giữa của chuỗi cha thứ hai. Nói một cách khác, mặt nạ lai ghép là một
chuỗi bắt đầu với n
0
trị 0, được theo sau bởi chuỗi liên tục n
1
trị 1, được theo sau bởi một
số trị 0 cần thiết để hoàn chỉnh chuỗi. Mỗi lần toán tử lai ghép hai điểm được áp dụng,
một mặt nạ được tạo ra bằng cách chọn ngẫu nhiên các số nguyên n
0
và n
1
. Thí dụ, trong
ví dụ được chỉ ra ở bảng 4.1 cá thể con được tạo ra dùng một mặt nạ với n
0
= 2 và n
1
= 5.
Như lai ghép trước, hai cá thể con được tạo ra bằng cách hoán đổi vai trò của hai cá thể
cha.
Lai ghép đồng nhất kết hợp các bit được lấy mẫu đồng nhất từ hai cá thể cha, như
được minh họa trong trong bảng 4.1. Trong trường hợp này, mặt nạ lai ghép được tạo ra
11101001000
00001010101

11101010101
00001001000
11111000000
11101001000
00001010101
11001011000
00101000101
00111110000
11101001000
00001010101
10001000100
01101011001
00111110000
11101001000 11101011000
Các chuỗi ban đầu Mặt nạ lai ghép Các cá thể con
Lai ghép điểm đơn:
Lai ghép điểm kép:
Lai ghép đồng nhất:
Đột biến điểm:
như là một chuỗi bit ngẫu nhiên với mỗi bit được chọn ngẫu nhiên và độc lập với các bit
khác.
Thêm vào các toán tử tái kết hợp - tạo ra cá thể con bằng cách kết hợp các phần của
hai cá thể cha, một loại toán tử thứ hai tạo ra cá thể con từ một cá thể cha. Cụ thể là toán
tử đột biến tạo ra những thay đổi ngẫu nhiên nhỏ cho chuỗi bit bằng cách chọn một bit ở
vị trí ngẫu nhiên, rồi thay đổi giá trị của nó.
Một bài toán áp dụng thuật giải di truyền thường được áp dụng cho các
bước sau:
Bước 1: Mã hóa ,mô tả di truyền cho lời giải bài toán
Đây là vấn đề cần giải quyết trước khi giải bài toán với GA .Tùy thuộc vào nội dung
của mỗi bài toán mà chúng ta có một cách mã hóa khác nhau

+ Mã hóa chuỗi nhị phân : mỗi nhiễm sắc thể ( lời giải ) là một chuỗi các bits 0 và 1
+ Mã hóa thứ tự : mỗi nhiễm sắc thể là một chuỗi các số nguyên thể hiện thứ tự phân
bố lời giải của bài toán .
+ Mã hóa giá trị : mỗi nhiễm sắc thể là một chuỗi các giá trị có mối quan hệ tương
ứng với bài toán .
+ Mã hóa dạng cây : mỗi nhiễm sắc thể là một cây của một nhóm đối tượng nào đó .
Bước 2 : Tạo lập lời giải ban đầu
Tập lời giải ban đầu thường được khởi tạo ngẫu nhiên từ không gian các lời giải .Cách
tạo lập lời giải ban đầu phụ thuộc rất nhiều vào cách mã hóa nhiễm sắc thể .
Bước 3 : Xây dựng hàm thích nghi
Hàm thích nghi đánh giá khả năng thích nghi của tập lời giải theo yêu cầu bài toán
Bước 4: Xây dựng các toán tử di truyền
+ Toán tử chọn lọc : Trong GA , sau mỗi lần tiến hóa chúng ta chỉ giữ lại các cá thể
có độ phù hợp cao còn các cá thể xấu bị loại bỏ . Một số quy tắc chọn lọc thường được sử
dụng là : lựa chọn tỷ lệ , lựa chọn xếp hạng , lựa chọn theo cơ chế lấy mẫu ngẫu nhiên ,
lựa chọn tranh đấu .
- Toán tử lai ghép : Tạo ra tập nhiễm sắc thể từ các nhiễm sắc thể đã được
chọn lọc bằng cách chọn ngẫu nhiên N nhiễm sắc thể ( N số lượng
nhiễm sắc thể của quần thể ), sau khi chọn được N nhiễm sắc thể lần
lượt lấy ra từng cặp nhiễm sắc thể để lai ghép tạo ra 2 nhiễm sắc thể mới
- Toán tử đột biến : đột biến gây rat hay đổi ngẫu nhiên trên từng bit của
nhiễm sắc thể tạo ra một nhiễm sắc thể mới
Bước 5: Xác định các tham số cho giải thuật
+ Xác suất lai ghép : là mức độ thường xuyên của thao tác lai ghép .Nếu không lai
ghép thì nhiễm sắc thể con sao chép nguyên vẹn nhiễm sắc thể cha mẹ .Nếu có lai ghép
thì nhiễm sắc thể con được xây dựng từ những phần của nhiễm sắc thể cha mẹ.
+ Xác suất đột biến : là mức độ thường xuyên của việc đột biến một phần của
nhiễm sắc thể .Xác xuất đột biến phải nhỏ , vì nếu xác suất này cao thì sẽ làm giảm khả
năng hội tụ.
+ Kích thước quần thể : nếu kích thước quần thể quá nhỏ thì khả năng lai ghép sẽ

nhỏ và chỉ một phần nhỏ của tập tìm kiếm được xử lý .Ngược lại , nếu kích thước quá lớn
thì tốc độ xử lý chậm .Số lượng các thể tối ưu phụ thuộc vào bài toán cụ thể và phương
pháp mã hóa cụ thể .

Ví dụ : Thuật toán di truyền cho bài toán tối ưu hóa hàm nhiều biến
- Phát biểu bài toán
Phát biểu bài toán tìm cực trị hàm f với n biến lien tục f(X1,X2,… Xn) trong
đó Xi có giá trị trong miền D=[a,b] là tập con của tập số thực .
- Các bước giải thuật di truyền cho bài toán tối ưu hóa hàm nhiều biến
B1: + Mã hóa – mô tả di truyền cho bài toán
Các biến của phương trình có giá trị kiểu số thực và nằm trong đoạn [0,1] , do
đó đối với bài toán này em sử dụng phương pháp mã hóa theo giá trị là hợp lý
nhất ( mỗi phần tử sẽ có kiểu dữ liệu là kiểu số thực ) với các giá trị được sinh
ngẫu nhiên trong đoạn [0,1].
B2: + Tạo lập lời giải ban đầu
Theo cách mã hóa đã được xác định, em xây dựng một mảng hai chiều
V[size,N] để lưu tập lời giải ban đầu .Trong đó Size là số hang ( số các thể trong
quần thể ), N là số cột ( số biến trong hàm mục tiêu ).Trong chương trình Init sẽ
có chức năng sinh ra tập lời giải ban đầu một cách ngẫu nhiên và lưu vào trong
mảng V[size,N].
B3: +Đánh giá độ thích nghi của mỗi các thể
Việc đánh giá độ thích nghi của mỗi các thể trong chương trình này chính là
hàm mục tiêu mà bài toán đưa ra .
݂

ܺ݅


෎൬
9

256
െ ሺܺ݅െ 0.25ሻ

ݔሺܺ݅െ0.75ሻ

൅ log ሺ1 ൅ ܺ݅ሻሻ


௡ୀଵ


Trong chương trình , thủ tục tính độ thích nghi của mỗi cá thể là Calculater.Thủ
tục này sẽ tính tuần tự độ thích nghi của mỗi cá thể và lưu chúng vào một mảng
một chiều Fitness[size] với số phần tử chính là số cá thể được sinh ra ban đầu ,
tức là bằng chính số hang của mảng V.
+ Chọn lọc các cá thể tốt dựa vào độ thích nghi
Trong giải thuật di truyền ,tác vụ chọn lọc thường sử dụng hai phương pháp
chọn lọc xếp hạng và chọn lọc theo bàn quay Roulete để chọn lọc ra những cá
thể có độ thích nghi tốt .Theo cách mã hóa lời giải và khởi tạo tập lời giải ban
đầu , nếu sử dụng phương pháp lọc xếp hạng , ta phải sắp xếp mảng Fitness theo
thứ tự tăng dần hoặc giảm dần và sắp xếp lại các hang của mảng V tương ứng
với các vị trí của Fitness đã thay đổi một cách đồng thời .Điều này làm cho
thuật toán tốn khá nhiều thời gian .Do đó với bài toán đang xét ta sử dụng
phương pháp chọn lọc theo bàn quay Roulete để chọn lọc .Thủ tục có chức năng
chọn lọc trong chương trình là Select , trước tiên ta tính tổng độ thích nghi của i
cá thể lưu vào mảng một chiều PartialSum[i], trong đó ࢏ൌ૚ െ ࢙ଙࢠࢋ












.Tổng độ
thích nghi của cả quần thể Totalsum=partialsum[size].Tiếp theo chúng ta sinh
ngẫu nhiên một giá trị RandVal trong đoạn [0,1], nhân với TotalSum rồi gán
lại cho chính nó .Thực hiện Size lần lặp , nếu Partialsum[i]>=RandVal thì
chọn cá thể thứ i .
Lai ghép các cá thể
Sauk hi chọn lọc được các cá thể có độ thích nghi tốt , ta chọn ngẫu nhiên từng
cặp trong chúng để lai ghép với xác suất lai ghép cho trước .
Trong chương trình , việc chọn ngẫu nhiên từng cặp để lai ghép được thực hiện
bởi thủ tục SelectParrent .Thủ tục này sử dụng lại thủ tục Select để chọn từng
cặp cá thể có độ thích nghi tốt một cách ngẫu nhiên để lai ghép .Thủ tục này chỉ
dừng lại khi chọn ngẫu nhiên hai cá thể mà hai cá thể đó trùng nhau.
Sau khi thực hiện SelectParrent xong chương trình sẽ sử dụng thủ tục
CrossOver để lai ghép với xác suất cho trước.Trong thủ tục này,trước tiên ta
sinh một số R ngẫu nhiên trong đoạn [0,1], nếu R > CrossOverProbability (
xác suất lai ghép cho trước ) thì giữ nguyên cặp cá thể đó , ngược lại thi cho
chúng lai ghép .Việc lai ghép được thực hiện khá đơn giản .Sử dụng một vòng
for chạy từ biến đầu tiên của các thể đến biến cuối cùng , cứ mỗi lần như vậy
chúng ta thực hiện như sau :
a=(double)ran.Next(sMax)/(double)sMax;
Child 1[i]=a*Parrent 1[i] + ( 1-a) * Parrent2[i];
a=(double)ran.Next(sMax)/(double)sMax;
Child2[i]=a*Parrent 1[i] + ( 1-a) * Parrent2[i];


Đột biến
Sau khi thực hiện tác vụ lai ghép , tác vụ đột biến sẽ được thực hiện với xác
suất đột biến cho trước .Tác vụ đột biến sẽ giúp chương trình tránh được việc
nhận giá trị tối ưu cục bộ .Trong chương trình thủ tục Mute sẽ thực hiện tác vụ
này .Trong thủ tục Mute , ta sinh ngẫu nhiên một số R trong đoạn [0,1] , nếu R
<= MutationProb( xác suất đột biến cho trước ) thì chúng ta đột biến cá thể được
chọn , ngược lại thì giữ nguyên .Tác vụ đột biến được thực hiện như sau :
- Chọn ngẫu nhiên một vị trí trên cá thể được chọn để đột biến bằng
cách : sinh ngẫu nhiên một số nguên rồi chia lấy dư cho số biến
của cá thể đó , chúng ta sẽ lấy được vị trí cần đột biến .
- Đột biến : sinh ngẫu nhiên một số trong đoạn [0,1], gán giá trị của
biến ở vị trí đã tìm được ở thao tác trên bằng số vừa mới được sinh
ngẫu nhiên .
Thay thế quần thể hiện tại bởi quần thể đã được tiến hóa
Sauk hi thực hiện các tác vụ gen , chương trình sẽ thay thế quần thể hiện tại bởi
quần thể được tiến hóa bằng thủ tục ReplacePopulation . Thủ tục này sẽ ghi lại các
cá thể mới được sinh ra vào mảng V.
Quá trình tiến hóa trên ( tính độ thích nghi của quần thể , chọn lọc , lai ghép , đột
biến , thay thế quần thể hiện tại bởi quần thể đã được tiến hóa ) được lặp đi lặp lại
cho đến khi điều kiện dừng ( được cjho trước ) được thỏa mãn .
Để kiểm tra tính hội tụ của thuật toán , cứ mỗi lần thực hiện quá trình tiến hóa
chương trình sẽ tính độ thích nghi trung bình của quần thể và độ phương sai về độ
thích nghi của các cá thể trong quần thể .
Thủ tục tính toán chính trong chương trình mô phỏng GA
Input : N ( số biến ) , size ( số cá thể ) , MaxNumOfGen ( số lần lặp tối đa),
CrossOverProb( xác suất lai ghép ), MutationProb ( xác suất đột biến ) , hàm f(Xi).
Output : mảng V[size,N] ( mảng lưu quần thể đã tiến hóa )
Procedure seriaGA:
Begin

NumberOfGeneration: =0 ;// biến lặp
InitPopulation;// Khởi tạo quần thể ban đầu
While ( NumberOfGeneration < MaxNumOfGEn) do
Begin
CalculateFitness;// Tính độ thích nghi của các cá thể trong quần thể
For i=1 to size/2 do
Begin
SelectParrent ;//chọn các cá thể có độ thích nghi tốt và lấy từng cặp
CrossOver ;// lai ghép các cặp cá thể đã chọn với xác suất cho trước
Mute ;// Đột biến cá thể với xác suất cho trước
End;
ReplacePopulation;// Thay thế quần thể hiện tại bằng quần thể đã tiến
hóa
NumberOfGeneration = NumberOfGeneration + 1 ;
End
End

×