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

Nghiên cứu giải thiaatj GA giải bài toán chiếc balo loại 1

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 (605.04 KB, 16 trang )


Tiểu Luận
Đề Tài :
Nghiên Cứu Giải Thuật GA Giải Bài
Toán Chiếc Balo Loại 1
Lớp: Cao học KHMT
Khóa 23 – Cơ Sở 2


GVHD: Thầy TS Ngô Hữu Phúc
HVTH: Trần Đắc Tốt MS : 11870261

BỘ GIÁO DỤC VÀ ĐÀO TẠO
BỘ QUỐC PHÒNG
HỌC VIỆN KỸ THUẬT QUÂN SỰ
HVTH: Trần Đắc Tốt; Page 2

Mục lục:
1. Giải thuật di truyền 3
1.1 Giới thiệu về giải thuật di truyền 3
1.1.1 Lịch sử phát triển: 3
1.2 Các khái niệm cơ bản 4
1.2.1 Cá thể, nhiễm sắc thể 4
1.2.2 Quần thể 4
1.2.3 Các toán tử di truyền 4
1.3 Mô hình giải thuật di truyền 5
1.4 Các tham số của GA 6
Xác suất lai ghép 6
Xác suất đột biến 6
Kích thước quần thể 6
1.5 Các cách mã hoá NST 6


Mã hoá nhị phân 6
Mã hoá hoán vị 7
Mã hoá theo giá trị 7
1.6 Khởi tạo quần thể ban đầu 7
Hàm tính độ thích nghi 7
Cơ chế lựa chọn 8
Lựa chọn tỷ lệ 8
Lựa chọn xếp hạng 8
Lựa chọn theo cơ chế lấy mẫu ngẫu nhiên 8
Lựa chọn tranh đấu 9
1.7 Các toán tử di truyền (GA operators) 9
Mã hoá nhị phân 9
Mã hoá hoán vị 9
Mã hoá theo giá trị 10
1.8 Chiến lược nạp lại quần thể 10
Nạp lại hoàn toàn 10
Nạp lại ngẫu nhiên 10
Nạp lại theo mô hình cá thể ưu tú 10
2. Áp Dụng Giải Thuật Ga Giải Bài Toán Chiếc Balo Loại 1 11

HVTH: Trần Đắc Tốt; Page 3

1. Giải thuật di truyền
1.1 Giới thiệu về giải thuật di truyền
1.1.1 Lịch sử phát triển:
Giải thuật di truyền là một kỹ thuật của khoa học máy tính nhằm tìm kiếm giải pháp thích
hợp cho các bài toán tối ưu tổ hợp (combinatorial optimization). Giải thuật di truyền là một
phân ngành của giải thuật tiến hóa vận dụng các nguyên lý của tiến hóa như di truyền, đột
biến, chọn lọc tự nhiên, và trao đổi chéo.
Giải thuật di truyền thường được ứng dụng nhằm sử dụng ngôn ngữ máy tính để mô phỏng

quá trình tiến hoá của một tập hợp những đại diện trừu tượng (gọi là những nhiễm sắc thể)
của các giải pháp có thể (gọi là những cá thể) cho bài toán tối ưu hóa vấn đề. Tập hợp này sẽ
tiến triển theo hướng chọn lọc những giải pháp tốt hơn.
Thông thường, những giải pháp được thể hiện dưới dạng nhị phân với những chuỗi 0 và 1,
nhưng lại mang nhiều thông tin mã hóa khác nhau. Quá trình tiến hóa xảy ra từ một tập hợp
những cá thể hoàn toàn ngẫu nhiên ở tất cả các thế hệ. Trong từng thế hệ, tính thích nghi của
tập hợp này được ước lượng, nhiều cá thể được chọn lọc định hướng từ tập hợp hiện thời
(dựa vào thể trạng), được sửa đổi (bằng đột biến hoặc tổ hợp lại) để hình thành một tập hợp
mới. Tập hợp này sẽ tiếp tục được chọn lọc lặp đi lặp lại trong các thế hệ kế tiếp của giải
thuật.
Như đã nói ở trên, GA là một thành phần của EC- một lĩnh vực được coi là có tốc độ phát
triển nhanh của trí tuệ nhân tạo. EC được chia ra thành 5 nhóm :
 Giải thuật di truyền (Genetic Algorithm - GA): Dựa vào quá trình di truyền trong tự
nhiên để cải tiến lời giải qua các thế hệ bắt nguồn từ một tập các lời giải ban đầu.
 Quy hoạch tiến hoá (Evolutionary Programming -EP): Dựa vào quy luật tiến hoá,
tìm phương pháp liên hợp đủ khả năng giải quyết trọn vẹn một bài toán từ một lớp các
phương pháp giải quyết được một số phần của bài toán.
 Các chiến lược tiến hoá ( Evolutionary Strategies -ES): Dựa trên một số chiến lược
ban đầu, tiến hoá để tạo ra những chiến lược mới phù hợp với môi trường thực tế một
cách tốt nhất.
 Lập trình di truyền (Genetic Programming -GP): Mở rộng giải thuật di truyền trong
lĩnh vực các chương trình của máy tính. Mục đích của nó là để sinh ra một cách tự
động các chương trình máy tính giải quyết một cách tối ưu một vấn đề cụ thể.
 Các hệ thống phân loại (Classifier Systems- CS): Các GA đặc biệt được dùng trong
việc học máy và việc phát hiện các quy tắc trong các hệ dựa trên các quy tắ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 :

HVTH: Trần Đắc Tốt; Page 4

 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ể
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ể (NST),có 1 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ể 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 Các toán tử di truyền
1.2.3.1 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.3.2 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.
HVTH: Trần Đắc Tốt; Page 5

1.2.3.3 Độ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ệ.
1.3 Mô hình giải thuật di truyền
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 :
Nhận các tham số
của bài toán
Khởi tạo quần thể
ban đầu
Tính giá trị thích nghi
Sinh sản
Lai ghép

Đột biến
Điều kiện
dừng
Kết
thúc
Bắt đầu
Lựa chọn giải pháp tốt
nhất

Hình 1
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.
HVTH: Trần Đắc Tốt; Page 6

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
1.4 Các tham số của GA
Xác suất lai ghép
Xác suất lai ghép cho biết tính thường xuyên của việc lai ghép tạo ra thế hệ mới được
thực hiện như thế nào. Nếu 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ẹ.
Xác suất đột biến
Xác suất đột biến cho biết tính thường xuyên của việc các gen của NST thay đổi như
thế nào. Nếu 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
. Tác dụng của toán tử đột biến là 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.
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ỗi thế
hệ). Các nghiên cứu và 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ì sẽ làm giảm không gian tìm kiếm của giải
thuật và dễ rơi vào các cục bộ địa phương, như vậy sẽ dễ xảy ra trường hợp bỏ qua các lời
giải tốt. Tuy nhiên nếu có quá nhiều cá thể cũng sẽ làm cho giải thuật chạy chậm đi, ảnh
hưởng đến hiệu quả tính toán 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.
1.5 Các cách mã hoá NST
Trong giải thuật di truyền cách mã hóa NST rất quan trọng nó không chỉ quyết định
đến hiệu quả của giải thuật mà còn ảnh hưởng đến việc lựa chọn các toán tử trong các bước
lai ghép và đột biến. Với mỗi kiều bài toán khác nhau có nhiều cách mã hóa NST .
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.
Mã hoá nhị phân
Trong tất cả các phương pháp mã hóa thì phương pháp mã hoá nhị phân là phương
pháp mã hoá nhiễm sắc thể đơn giản và ra đời sớm 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 lời giải.
Ví dụ: hai nhiễm sắc thể 1 và 2 có chiều dài là 15.
HVTH: Trần Đắc Tốt; Page 7

Nhiễm sắc thể 1: 110110010011011
Nhiễm sắc thể 2: 110111100001111
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ể, hơn nữa có thể xảy ra
trường hợp các toán tử lai ghép và đột biến tạo ra các cá thể không nằm trong không gian tìm
kiếm và đòi hỏi phải có những phương pháp sửa chữa để làm cá thể tạo ra nằm trong không
gian tìm kiếm. Do đó, với nhiều bài toán thì biểu diễn nhị phân là không hữu hiệu, điển hình
là bài toán TSP.
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.
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.
1.6 Khởi tạo quần thể ban đầu
Quần thể ban đầu ảnh hưởng khá nhiều đến hiệu quả giải thuật, tuy nhiên trong nhiều bài toán
thì quần thể ban đầu thường được lựa chọn ngẫu nhiên
Hàm tính độ thích nghi
Hàm độ thích nghi(fitness function) là hàm đánh giá hay hàm mục tiêu thể hiện tính
thích ngi của cá thể hay độ tốt của lời giải
HVTH: Trần Đắc Tốt; Page 8

Cơ chế lựa chọn
Cơ chế lựa chọn được áp dụng khi quần thể P(t+1) được tạo ra từ việc 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. 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.
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ể:



si zepop
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].
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.
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.
HVTH: Trần Đắc Tốt; Page 9

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.
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.
1.7 Các toán tử di truyền (GA operators)
Các toán tử di truyền là các hàm biến đổi NST từ thế hệ P(t) để tạo ra các NST của thế
hệ P(t+1). Các toán tử di truyền của GA là toán tử lai ghép và đột biến. Việc xây dựng hai
toán tử này đóng vai trò rất quan trọng trong hiệu quả của giải thuật. Nó phải được đảm bảo
rằng kết quả sinh ra của 2 toán tử là hợp lệ theo nghĩa phải nằm trong không gian tìm kiếm
của giải thuật, lấy ví dụ với bài toán TSP thì việc mã hóa nhị phân và toán tử đột biến và lai
ghép sẽ tạo ra các cá thể không phù hợp vì không tạo thành 1 đường đi hợp lệ, do đó mã hóa
nhị phân ít được dùng cho bài toán TSP.
Mã hoá nhị phân
1.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ẹ.
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.
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ẹ.

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ẹ.
1.7.1.2 Toán tử đột biến
Phép đảo bit : Bit được chọn sẽ bị đảo
Mã hoá hoán vị
1.7.1.3 Toán tử lai ghép
Toán tử lai ghép đơn điểm cắt :
HVTH: Trần Đắc Tốt; Page 10

 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.
1.7.1.4 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)

Trong bài toán TSP có thể vị trí 2 thành phố bất kỳ sẽ được đảo vị trí
Mã hoá theo giá trị
1.7.1.5 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.
1.7.1.6 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
1.8 Chiến lược nạp lại quần thể
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.
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.
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
HVTH: Trần Đắc Tốt; Page 11

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.
2. Áp Dụng Giải Thuật Ga Giải Bài Toán Chiếc Balo Loại 1
Phát biểu Bài toán ba lô:
Cho trước một tập thực thể cùng các giá trị và kích thước của chúng. Cần chọn được một hay
nhiều tập con rời nhau sao cho tổng kích thước trong mỗi tập con không vượt quá giới hạn
cho phép và tổng giá trị đã chọn là lớn nhất.
Vấn đề bài toán được xác định như sau:
Đưa ra vector giá trị : P
i
Vector khối nượng : w
i
Giá trị cực đại : ∑
n
i=1
p
i
x
i

Số vật thể phải thỏa mãn điều kiện : ∑
n
i=1
w
i
x

i ≤ C
x
i
nhận giá trị 0 hoặc 1 ,( i= 1,… ,n ) n là số các phần tử
0 : đồ vật ( nhiễm sắc thể ) không được chọn .
1 : đồ vật ( nhiễm sắc thể ) được chọn .
Ta chọn giải thuật gene với phương pháp chọn là rank để xây dựng chương trình
giải quyết bài toán chiếc balo loại 1.
a. Mã hóa (encoding ) :
• Ban đầu phải mã hóa các cá thể( Mã hóa nhị phân (Binary encoding )) của quần
thể thành các gene tương ứng. Với mỗi gene sẽ là một trường hợp chọn các vật cho
vào balo.
x
i
nhận giá trị 0 hoặc 1 ,( i= 1,… ,n ) n là số các phần tử
0 : đồ vật ( nhiễm sắc thể ) không được chọn .
1 : đồ vật ( nhiễm sắc thể ) được chọn .
Số thứ tự đồ vật được tính từ trái sang phải .
Dùng biến là một mảng 2 chiều : balo[i,j] , để biểu diễn quần thể trong
chiếc ba lô.
Trong đó :
+ i : biểu diễn cho yếu tố giá trị.
+ j : biểu diễn cho yếu tố khối lượng.
b. Khởi tạo quần thể ( initial population generation ) :
Sinh ngẫu nhiên cá thể trong quần thể ban đầu:
Ngẫu nhiên sinh ra các chuỗi 0,1.
Kiểm tra tổng khối lượng các vật được chọn không được vượt quá 50
HVTH: Trần Đắc Tốt; Page 12

c. Hàm thích nghi (fitness function ) :

Hàm elitism: Chọn trong các cá thể của quần thể đang xét có cá thể nào có tổng giá trị
là lớn nhất và khối lượng là nhỏ nhất thì lưu lại và đưa vào quần thể sau.
Hàm thích nghi: xây dựng dựa trên phép toán tính tổng giá trị và khối lượng để xác
định cá thể tốt(chọn cá thể có khối lượng không vượt quá 50 nhưng phải lớn hơn 40
và giá trị không được thấp hơn 30 để đưa vào quần thể lai hóa).
private void Ham_thich_nghi(string[] str_p_)
{
int sum1 = 0;
int sum2 = 0;
lb_rank.Items.Clear();
string tmp = "";
count = 0;
for (int i = 0; i < 30; i++)
{
tmp = str_p_[i];
for (int j = 0; j < 10; j++)
{
if (Convert.ToInt16(tmp[j]) == 49)
{
sum1 += balo[j, 0];
sum2 += balo[j, 1];
}
}
if (sum2 <= 49 && sum1 >= 50 && sum2 >= 40)
{
lb_rank.Items.Add(tmp);
str_f[count] = tmp;
count++;
}
sum2 = 0;

sum1 = 0;
} }
d. Sự lựa chọn cho sự kết hợp lại (selection for recombination)
Có rất nhiều thuật toán để lựa chọn cá thể để tham gia vào quá trình lai ghép(
crossover ) và đột biến ( mutation ). Ví dụ như : Roulette wheel selection, Rank
selection , Elitism, Steady-state, v.v.v.
Ta chọn phương pháp Rank để đưa các cá thể tốt và có khả năng thích nghi cao đưa
vào quần thể mới để lai ghép, đột biến.
Hàm Rank
private int Rank(string[] str_p_)
{
int sum1 = 0, sum2 = 0, temp1 = 0, temp2 = 0;
string tmp = "";
for (int i = 0; i < 30; i++)
{
tmp = str_p_[i];
for (int j = 0; j < 10; j++)
{
if (Convert.ToInt16(tmp[j]) == 49)
{
sum1 += balo[j, 1];
sum2 += balo[j, 0];
temp1 = sum2 - sum1;
HVTH: Trần Đắc Tốt; Page 13

}
}
temp2 += temp1;
sum1 = 0;
sum2 = 0;

temp1 = 0;
}
Random rnd = new Random();
int r = rnd.Next(0, temp2);
int sum3 = 0, sum4 = 0, ret = 0, tmp1 = 0, tmp2 = 0;
for (int i = 0; i < 30; i++)
{
tmp = str_p_[i];
for (int j = 0; j < 10; j++)
{
if (Convert.ToInt16(tmp[j]) == 49)
{
sum3 += balo[j, 1];
sum4 += balo[j, 0];
tmp1 = sum4 - sum3;
}
}
tmp2 += tmp1;
sum3 = 0;
sum4 = 0;
tmp1 = 0;
if (sum4 > r)
{
ret = i;
goto end;
}
}
end: return ret;
}
e. Lai ghép ( crossover )

Lai ghép là quá trình kết hợp các bit của cá thể này với các bit của cá thể khác. Đây là
tiến trình tạo cá thể mới cho thế kế cận, cá thể này kế thừa những đặc tính của các cá
thể bố mẹ. Tiến trình lai ghép lựa chọn ngẫu nhiên định vị và sự thay đổi chuỗi con
trước và sau nó. Từ điểm lai ghép này tạo ra 2 cá thể mới.
Hàm Lai ghép tại một điểm
private string Single_point_crossover1(string str1, string str2)
{
string str_temp = str1.Substring(0, 5) + str2.Substring(5, 5);
return str_temp;
}
private string Single_point_crossover2(string str1, string str2)
{
string str_temp = str1.Substring(5, 5) + str2.Substring(0, 5);
return str_temp;
HVTH: Trần Đắc Tốt; Page 14

}
Hàm Lai ghép tại hai điểm
private string Two_point_crossover1(string str1, string str2)
{
string str_temp = str1.Substring(0, 3)+ str2.Substring(3, 5)+ str1.Substring(8, 2);
return str_temp;
}
private string Two_point_crossover2(string str1, string str2)
{
string str_temp = str2.Substring(0, 3) + str1.Substring(2, 3) + str2.Substring(5, 2);
return str_temp;
}
Hàm Lai ghép arithmetic
private string Arithmetic_crossover(string str1, string str2)

{
string temp = "";
for (int i = 0; i < str1.Length; i++)
{
temp += Convert.ToString(Convert.ToByte(str1[i]) ^ Convert.ToByte(str2[i]));
}
return temp;
}
f. Đột biến ( Mutation)
Đột biến được thực thi sau tiến trình lai ghép ( crossover) để đảm bảo không bị dừng
lại ở giá trị cực trị địa phương ( a local optimum) trong quá trình giải quyết bài toán. (
Đột biến trên 1 gene nào đó, với giá trị 0 sẽ chuyển thành 1, và ngược lại ).
Hàm Đột biến (Mutation)
private void Mutation(string[] str)
{
Random rnd = new Random();
int index_str = rnd.Next(0, 30);
HVTH: Trần Đắc Tốt; Page 15

string tmp = str[index_str];
int num = rnd.Next(1, 3);
for (int i = 0; i < num; i++)
{
int index = rnd.Next(0, 9);
if (tmp[index].Equals("0"))
{
tmp.Remove(index, 1);
tmp.Insert(index, "1");
}
else

{
tmp.Remove(index, 1);
tmp.Insert(index, "0");
}
}
str_p[index_str] = tmp;
}
g. Tiêu chuẩn kết thúc.
Bài toán sẽ dừng lại khi thỏa mãn một trong các yếu tố sau:
- Quần thể hội tụ, hay nói cách khác là khi tìm ra được cá thể tốt nhất trong quần
thể giống với kết quả mong muôn.
- Kết thúc khi số thế hệ sinh ra đạt đến số sinh ra trước.
- Kết thúc khi cá thể tốt nhất trong quần thể không thay đổi theo thời gian.
- Kết thúc khi các cá thể trở nên giống nhau.

h. Giao diện chương trình
HVTH: Trần Đắc Tốt; Page 16




i. Hướng dẫn sử dụng
- Nút “ Khởi tạo quần thể ” giúp tạo ngẫu nhiên dữ liệu mẫu.
- Nút “ Các giá trị ” hiện thị giá trị và khối lượng tương ứng cho dữ liệu mẫu.
- Textbox giúp nhập vào số thế hệ cần lai ghép( bắt buộc nhập ).
- Nút “Lai Ghép” tiến hành lai ghép và hiện thị kết quả.
TÀI LIỆU THAM KHẢO
[1]. Tiến sĩ Ngô Hữu Phúc , Bài giảng AI.
[2]. Google


×