HỌC VIỆN KỸ THUẬT QUÂN SỰ
KHOA CÔNG NGHỆ THÔNG TIN
BÀI TẬP LỚN MÔN HỌC
TRÍ TUỆ NHÂN TẠO
Đề Tài
Nghiên Cứu Giải Thuật GA
Giải Bài Toán Chiếc Balô Loại 2
GIẢNG VIÊN BỘ MÔN:
TS Ngô Hữu Phúc
HỌC VIÊN THỰC HIỆN:
Giảng Thanh Trọn
TP. HCM, THÁNG 08 NĂM 2012
NHẬN XÉT
CỦA GIẢNG VIÊN BỘ MÔN
LỜI CẢM ƠN
Trước hết, cho em gửi lời cảm ơn chân thành nhất đến
TS NGÔ HỮU PHÚC - Giảng viên Bộ môn Khoa Học Máy Tính. Người đã
giảng dạy và truyền đạt chúng em kiến thức về môn học đồng thời là người
hướng dẫn và định hướng cho em trong quá trình hoàn thiện Bài tập này.
Em đã cố gắng thật nhiều để hoàn thành Bài tập. Tuy nhiên, kết quả tìm
hiểu chưa hoàn thiện còn nhiều thiếu sót. Rất mong Thầy xem xét và đ
óng góp ý
kiến để kết quả tìm hiểu được hoàn thiện hơn./.
Học Viên Thực Hiện
Giảng Thanh Trọn
NỘI DUNG TÌM HIỂU
Nội dung nghiên cứu của Bài Tập bao gồm những thành phần sau:
1. Giới Thiệu Bài Toán Chiếc Ba Lô Loại 2.
2. Tìm Hiểu Giải Thuật GA.
3. Ứng Dụng Giải Thuật GA Vào Giải Bài Toán Chiếc BaLô Loại 2.
4. Cài Đặt Ứng Dụng.
1. Mô Tả Bài Toán Chiếc Ba Lô Loại 2
Bài toán xếp ba lô hay cũng được gọi là bài toán cái túi, là một bài toán
tối ưu hóa tổ hợp. Bài toán được đặt tên từ vấn đề chọn những gì quan trọng
có thể nhét vừa trong một cái túi với giới hạn khối lượng để mang theo trong
một chuyến đi.
Giả sử Nội dung bài toán được phát biểu dựa theo hành động của một kẻ
trộm: Một kẻ trộm đột nh
ập vào một cửa hiệu tìm thấy có n mặt hàng có trọng
lượng và giá trị khác nhau, nhưng hắn chỉ mang theo một cái túi có sức chứa về
trọng lượng tối đa là M. Vậy kẻ trộm nên bỏ vào ba lô những món nào và số
lượng bao nhiêu để đạt giá trị cao nhất trong khả năng giới hạn của cái túi mà
hắn có thể mang đi được.
Dạng bài toán quyết định của bài toán xếp ba lô là câu hỏi "có th
ể đạt được
một giá trị nhiều nhất là bao nhiêu theo phát biểu của bài toán".
Ta có n loại đồ vật, x1 tới xn. Mỗi đồ vật xj có một giá trị pj và một khối
lượng wj. Khối lượng tối đa mà ta có thể mang trong ba lô là C. Mỗi vật có thể
được chọn hoặc không được chọn.
(Ảnh minh họa)
Thực tiễn có rất nhiều bài toán tối ưu với không gian tìm kiếm rất lớn cần
phải giải quyết. Vì vậy, việc đòi hỏi tìm ra một thuật giải tốt và vận dụng trí tuệ
nhân tạo vào giải quyết bài toán là rất cần thiết đặc biệt với những bài toán có
không gian tìm kiếm lớn. Thuật giải di truyền - Genetic Algorithm là một trong
những thuật giải tìm kiếm lời giải tối
ưu đã đáp ứng được yêu cầu của nhiều bài
toán và ứng dụng. Hiện nay, thuật toán di truyền được ứng dụng rất rộng rãi
trong các lĩnh vực phức tạp, nó chứng tỏ được hiệu quả trong các vấn đề khó có
thể giải quyết bằng các phương pháp thông thường hay các phương pháp cổ
điển, nhất là trong các bài toán cần có sự lượng giá, đánh giá sự tối ưu của
kế
t quả thu được. Chính vì vậy, thuật giải di truyền đã trở thành đề tài
nghiên cứu thú vị và đem đến nhiều ứng dụng trong thực tế.
Trong khuôn khổ của đề tài này, em xin trình bày nội dung của giải thuật di
truyền - Genetic Algorithm và ứng dụng của nó trong việc giải quyết bài toán
Chiếc ba lô loại 2 với phương pháp lựa chọn.
2. Tìm Hiểu Giải thuật Di Truyền Genetic Algorithm - GA
2.1. Khái quát về giải thuật Di Truyền
Lịch sử ra đời của giải thuật di truyền
Trước tiên, ý niệm về giải thuật di truyền đã được một số nhà sinh vật
học đưa ra từ những năm 50-60, thế kỉ XX. A.S. Fraser là người tiên phong
nêu lên sự tương đồng giữa sự tiến hóa của sinh vật và chương trình tin học
giả tưởng về Genetic Algorithms – viết tắc là GA.
Tuy nhiên, chính John Henry Holland mới là người triển khai ý tưởng
và phương pháp giải quy
ết vấn đề dựa theo sự tiến hóa. Từ những
bài giảng, bài báo của mình, ông đã đúc kết các ý tưởng vào trong
cuốn sách đầu tay Adaptation in Natural and Artificial Systems, xuất bản
năm 1975. Dựa trên lý thuyết cơ bản về GA của Holand, Keneth De Jong
đã triển khai và chứng minh những thành quả do ông thực hiện đã góp phần
quan trọng trong việc tạo ra nền tảng toán học cho lý thuyết GA
Lần đầu tiên Holand nghiên cứu các giải thuật này, chúng hoàn toàn
không có tên. Do nguồn gốc của phương pháp này là từ các gen di truyền,
Holand đã đặt tên cho nó là thuật giải di truyền.
Các đặc điểm, đặc trưng của giải thuật di truyền
Giải thuật di truyền đã mô phỏng sự chọn lọc tự nhiên và di truyền.
Trong tự nhiên, các cá thể khỏe, có khả năng thích nghi với môi trường tốt
sẽ được tồn tại và phát tri
ển ở các thế hệ sau. Mỗi cá thể có cấu trúc gen
đặc trưng cho tính chất của cá thể đó.
Trong quá trình sinh sản, các cá thể con có thể thừa hưởng các
phẩm chất của cha mẹ, cấu trúc gen của nó mang một phần cấu trúc gen
của cha mẹ. Ngoài ra, trong quá trình tiến hóa, có thể xảy ra hiện tượng
đột biến, cấu trúc gen của cá thể con có thể chứa các gen mà cả cha mẹ
đều không có.
Trong giải thuật di truyền, mỗi cá thể
được mã hóa bởi một cấu trúc
dữ liệu mô tả cấu trúc gen của cá thể đó, ta gọi nó là nhiễm sắc thể.
Mỗi nhiễm sắc thể được tạo thành từ các đơn vị được gọi là gen.
Giải thuật di truyền sẽ làm việc trên các quần thể gồm nhiều cá thể.
Một quần thể ứng với một giai đoạn phát triển gọi là một thế h
ệ.
Từ một thế hệ được tạo ra, giải thuật di truyền bắt chước sự chọn lọc
tự nhiên và di truyền để biến đổi các thế hệ.
Các thành phần của giải thuật di truyền
1. Khởi tạo quần thể - Initializetion
Là quá trình tạo quần thể đầu tiên trong giải thuật, là nơi
xuất phát quá trình tiến hóa, bao gồm tất cả các giá trị thô ban đầu.
Tùy theo vấn đề c
ủa bài toán mà có cách khởi tạo khác nhau.
Quá trình được thực hiện bằng cách tạo ngẫu nhiên một số cá thể
chấp nhận được để được một quần thể phù hợp với kích thước
quần thể được quy định sẵn.
2. Hàm thích nghi - Fitness Function
Gán giá trị thích nghi cho mỗi cá thể. Giá trị thích nghi càng sát
với thực tế thì độ chính xác sẽ càng cao.
3. Lựa chọn để kết hợp lại - Selection For Recombine
Có nhiều phương pháp để chọn các nhiễm sắc thể tốt nhất, như:
chọn lọc roulette wheel, chọn lọc xếp hàng, chọn lọc cạnh tranh:
Roulette wheel selection
Các cá thể cha mẹ được chọn theo độ thích nghi của chúng.
Nhiễm sắc thể tốt h
ơn có cơ hội cao hơn để tham dự vào thế hệ
tiếp theo.
Thuật giải chọn lọc roulette của Davis, như sau:
Tính tổng giá trị thích nghi của tất cả thành viên quần thể và
gọi nó là tổng thích nghi - total fitness.
Phát sinh một số n là số ngẫu nhiên trong khoảng từ 0 đến
tổng thích nghi.
Trả lại thành viên quần thể đầu tiên mà độ thích nghi của nó
cộng với độ thích nghi của các thành viên quần thể trước đ
ó lớn
hơn hay bằng n…
Tournament selection
Chọn lọc cạnh tranh 2 – 2 - tournament selection
Hai nhiễm sắc thể khác nhau được chọn ngẫu nhiên và được
so sánh với nhiễm sắc thể tồn tại. Nếu nhiễm sắc thể I1 không tốt
hơn nhiễm sắc thể I2 nghĩa là: f(I1) ≤ f(I2), thì nhiễm sắc thể I1
chết đi và bị loại ra khỏi quần thể. Quá trình này lặp lại đến hết N
nhiễm s
ắc thể còn lại.
Chọn lọc cạnh tranh 3 - 3-tournament selection
Giống như trên, ba nhiễm sắc thể khác nhau được chọn ngẫu
nhiên và được so sánh. Nếu chúng ta có f(I1) ≤ f(I2) và f(I1) ≤
f(I3), thì nhiễm sắc thể I1 chết đi và bị loại ra khỏi quần thể. Quá
trình này lặp lại đến hết N nhiễm sắc thể còn lại.
Rank selection
Phương pháp này sẽ sắp hạng cá thể dựa trên độ thích nghi
của chúng. Cá thể xấu nhất sẽ có giá trị 1, kế tiếp là 2, v.v…và
cá thể
tốt nhất sẽ có độ thích nghi N - N là số nhiễm sắc thể
trong quần thể.
Ngoài ra còn có những phương pháp lựa chọn khác như:
Boltzman selection, Steady state selection, Elitism.
4. Mã hóa
Mã hóa chuỗi Gene của mỗi cá thể thành dạng thích hợp có thể
sử dụng mã hóa nhị phân, mã hóa giá trị, mã hóa hoán vị.
5. Lai ghép
Sau khi chọn được các cặp Nhiễm sắc thể dùng để lai, ta tiến
hành cắt ghép để tạo được các nhiễm sắc thể mới - con mới.
Có nhiề
u hình thức lai ghép: Lai 1 điểm, lai nhiều điểm, lai bằng
các phép toán nhị phân, …
6. Đột biến
Sau khi lai ghép, để tạo sự đa dạng quần thể, ta làm phép đột biến
đối với một vài cá thể. Trên chuỗi Gene, tại 1 vài vị trí, làm thay đổi
giá trị của 1 đoạn gene nào đó.
7. Đánh giá cá thể
Khi đã có quần thể mới, ta tiến hành kiểm tra đánh giá xem
cá thể nào tốt nhất, cá thể nào tồi. Loạ
i bỏ bớt những cá thể tồi để
lặp lại các bước trên đó Chắc chắn rằng việc chọn cá thể sẽ thông qua
kết quả, hay mục đích của vấn đề. Các cá thể tốt được chọn lọc để
đưa vào thế hệ sau. Sự lựa chọn này được thực hiện dựa vào độ thích
nghi với môi trường của mỗi cá thể.
8. Tiêu chuẩn kết thúc
Không có quá trình nào là không thể kết thúc. Quá trình tiến hóa
có thể dừng lại sau một khoảng tgian được quy định - một số thế hệ
hoặc sau khi đã hội tụ - không thể tìm thêm được cá thể tốt hơn.
Thoát khỏi quá trình tiến hóa quần thể, dựa vào bài toán
mà có các cách kết thúc v
ấn đề khác nhau một khi đạt đến mức
yêu cầu. Một vài trường hợp thông thường như sau:
Kết thúc theo kết quả: một khi đạt đến mức giá trị yêu cầu thì
chấm dứt ngay quá trình thực hiện.
Kết thúc dựa vào số thế hệ: chọn số thế hệ, quá trình sẽ dừng
đúng ngay số thế hệ đã qui định trước, không cần biết kết quả
như thế nào.
Tính theo thời gian: không cần biết đã bao nhiêu thế hệ hay
kết quả nào, chỉ dựa vào số giờ qui định mà kết thúc.
Tổ hợp: dùng nhiều phương án khác nhau cho vấn đề, chẳng hạn
như: chạy theo số thế hệ xong sau đó đánh giá cho chạy theo
kết quả, hoặc ngược lại.
9. Các Toán Tử Trong giải thuật di truyền
Toán tử lai ghép:
Toán tử
lai ghép có trật tự bao gồm các bước sau:
1. Chọn ngẫu nhiên một chuỗi con từ một cá thể cha mẹ - parent.
2. Đưa ra một proto_child bằng cách sao chép chuỗi con vào
những vị trí tương ứng như trong cá thể cha mẹ.
3. Xoá tất cả các ký hiệu từ cá thể cha mẹ thứ hai, lúc này đã có
trong chuỗi con. Chuỗi còn lại chứa các ký hiệu mà proto_child cần.
4. Đặt các ký hiệu vào những vị trí không cố định của proto-child
từ trái sang phải theo trật tự của chuỗi để tạo ra cá thể con.
Ví dụ:
Cá thể cha: 9 3 | 8 5 7 1 | 6 4 2
Cá thể con: 3 5 | 2 6 1 4 | 8 7 9
Phân đoạn giữa để cắt các điểm được sao chép vào cá thể con.
Proto-child 1: x x | 8 5 7 1| x x x
Proto-child 1: x x | 2 6 1 4| x x x
Chuỗi bắt đầu từ điểm cắt thứ hai của cá thể cha mẹ thứ hai:
8-7-9-3-5-2-6-1-4
Chuỗi sau khi loại bỏ các phần tử 8, 5, 7 và 1, c
ũng ở trong
cá thể con đầu tiên là: 9-3-2-6-4
Cuối cùng, chuỗi này được đặt vào proto-child 1 đầu tiên để
tạo ra cá thể con - bắt đầu từ điểm cắt thứ hai.
Cá thể con thứ nhất: 6 4 | 8 5 7 1 | 9 3 2
Cá thể con thứ hai: 5 7 | 2 6 1 4 |9 3 8
Toán tử đột biến:
Đột biến đảo ngược - Inversion Mutation
Chọn hai vị trí ngẫu nhiên trong một nhiễm sắc thể và sau
đó, nghịch đảo chuỗi giữa hai vị trí này.
Ví dụ:
Nhi
ễm sắc thể : 9 3 8 5 7 1 6 4 2
Sau khi đột biến : 9 3 1 7 5 8 6 4 2
Đột biến chèn - Insertion Mutation
Chọn ngẫu nhiên một gen và sau đó chèn nó vào vị trí
ngẫu nhiên.
Ví dụ:
Nhiễm sắc thể : 9 3 8 5 7 1 6 4 2
Sau đột biến: 9 3 5 7 8 1 6 4 2
Đột biến thay thế - Displacement Mutation
Chọn ngẫu nhiên một chuỗi con và chèn nó vào một vị trí
ngẫu nhiên. Đột biến chèn có thể được xem như trường hợp đặc
biệt của đột biến thay, trong đó, chuỗi con chỉ chứa một gen.
Ví dụ:
Nhiễm sắc thể: 9 3 8 5 7 1 6 4 2
Sau đột biến: 9 3 6 8 5 7 1 4 2
Đột biến tương hỗ - Reciprocal Exchange Mutation
Chọn ngẫu nhiên hai vị trí và sau đó hoán vị gen trên những
vị trí này.
Ví dụ:
Nhiễm sắc thể: 9 3 8 5 7 1 6 4 2
Sau đột biến: 9 3 1 5 7 8 6 4 2
Đột biến chuyển dịch - Shift Mutation
Trước tiên, chọn ngẫu nhiên một gen, sau đó, dịch chuyển
nó đến một vị trí ngẫu nhiên bên phải hoặc bên trái vị trí của gen.
Ví dụ:
Nhiễm sắc thể: 9 3 8 5 7 1 6 4 2
Sau đột biến (trái): 9 8 3 5 7 1 6 4 2
Sau đột biến (phải): 9 3 5 8 7 1 6 4 2
2.2. Biểu Diễn Giải Thuật của Giải Thuật Di Truyền
Giải thuật của Giải thuật Di truyền được biểu diễn qua các bước sau:
Bước 1: Khởi tạo quần thể P(0), chỉ số i chỉ thế hệ thứ i.
Bước 2: Lặp đến khi quần thể hội tụ hoặc đạt đến tiêu chuẩn kết thúc.
Đánh giá độ thích nghi của mỗi cá thể
trong P(i).
Chọn các cha từ P(i) dựa trên độ thích nghi của chúng trong P(i).
Áp dụng các toán tử Gen - Crossover, Mutation từ các cha đã
chọn để sinh ra các con.
Đạt được thế hệ tiếp theo P(i + 1) gồm các cá thể con và cha P(i).
Cài đặt Thuật Toán
Procedure GA
begin
t := 0 ;
initialize P(t) ;
evaluate P(t) ;
while (not termination-condition) do
begin
t := t + 1 ;
select P(t) from P(t-1) ;
alter P(t) ;
evaluate P(t) ;
end;
end;
Step 1 : Initialization
Step 2 : Selection
Step 3-1 : Crossover
Step 3-2 : Mutation
Step 5 : Termination Test
Step 6 : End
Step 4 : Evaluation
3. Ứng dụng giải thuật Di Truyền vào Bài toán chiếc Ba lô 2
Ta có thể hình dung mô hình bài toán được giải quyết trong giải thuật di
truyền như sau: Gồm một quần thể chứa tất cả các kết quả có thể có được của
bài toán, rồi từ đó chọn ra kết quả tốt nhất.
Các bước thực hiện:
Khởi tạo đồ vật và trọng lượng tối đa ba lô:
Tạo ra x đồ vật với khối lượng và giá trị khác nhau (ngẫu nhiên).
Ấn định khối lượng tối đa của ba lô.
Khởi tạo quần thể:
Tạo ra n chiếc ba lô, mỗi ba lô chứa số lượng các vật là khác
nhau, không ba lô nào vượt quá khối lượng tối đa củ
a ba lô.
Số lượng mỗi vật trong balô là một số ngẫu nhiên trong khoảng
từ 0 đến thương số khối lượng của balô với khối lượng của vật.
Tìm balô tốt nhất.
Lựa chọn:
Xếp các balô từ thế hệ trước theo thứ tự và được xếp rank.
Quá tải Không quá tải
Thứ tự
Giá trị tăng dần Giá trị tăng dần
Xếp hạng Rank 1 2 … maxRank
Tính tổng các Rank.
Xác định số cá thể con định tạo ra.
Lặp đến khi đủ số cá thể con
Lấy ngẫu nhiên 1 số thuộc khoảng (1; tổng Rank).
Cộng các Rank đến khi được giá trị > giá trị ngẫu nhiên.
Xác định Gene được chọn và đưa vào mảng để lai.
Mã hóa:
Với các Gene được chọn để đem lai, mã hóa chúng thành dạng
chuỗi bằng phươ
ng pháp mã hóa giá trị.
Lai:
Phương pháp lai được chọn là lai 2 điểm.
Chuỗi gen được chia thành 3 phần, phần 1 có độ dài = ¼ chuỗi
gene, phần 2 có độ dài = ½ chuỗi gene, phần 3 là phần còn lại.
Cách lai:
Bố a b c Con 1 a b’ c
Mẹ a’ b’ c’ Con 2 a’ b c’
Đột biến:
Dựa vào tỉ lệ đột biến → số lần đột biến → số cá thể đột biến.
Chọn 3 vị trí để đột biến. Giá trị đột boiến = vị trí.
Đánh giá.
Giải mã gene: Từ chuỗi mã hóa đưa về dạng bài toán.
Sau quá trình lai ghép, quần thể gồm cả các cá thể cha và con.
Vì quần thể có kích thước cố
định nên phải đánh giá để chọn ra
n cá thể tốt cho thế hệ kế tiếp.
Lặp lại các bước trên đến khi quần thể hội tụ hoặc sau k thế hệ.
Kết Luận:
Tuy giải thuật Genetic Algorithm - GA có thể chậm hơn một số thuật
toán khác, song GA lại có các ưu điểm nổi trội như: Dễ thể hiện, không bị
rơi vào trạng thái cực trị
địa phương, dễ thay đổi hàm thích nghi, … Vì
vậy, thuật toán Genetic Algorithm là một lựa chọn thích hợp cho dạng bài
toán quyết định. Ví dụ như bài toán tìm đường, bài toán chiếc balô.
4. Cài Đặt Ứng Dụng.