HỌC VIỆN KỸ THUẬT QUÂN SỰ
KHOA CÔNG NGHỆ THÔNG TIN
Bài tập lớn :
NGHIÊN CỨU GIẢI THUẬT GA
CHO BÀI TOÁN TSP
Giảng viên : TS. Ngô Hữu Phúc
Sinh viên : Đỗ Anh Phi
Lớp : KHMT-K23
Thành phố Hồ Chí Minh 08/2012
MỤC LỤC
I Giới thiệu trang 3
II Thuật toán di truyền trang 3
1. Nguyên lý tiến hóa trang 3
2. Đặc tính trang 3
3. Mô tả trang 3
4. Cài đặt trang 3
5. Các thành phần cơ bản trang 4
6. Một số gợi ý trang 5
7. Ưu và khuyết điểm trang 6
III Bài toán người đưa thư trang 6
IV Áp dụng GA giải bài toán TSP trang 6
V Tài liệu tham khảo trang 7
2
I Giới thiệu
Trong thập niên 60, Ingo Rechenberg và Hans-Paul Schwefel đã giới thiệu ý tưởng về
chiến lược tiến hóa dựa trên thuyết tiến hóa của Darwin. Năm 1975, John Holland đưa ra
thuật toán di truyền (GA) là phương pháp tìm kiếm có sử dụng thông tin (heuristic) mà nó
mô phỏng tiến hóa chọn lọc tự nhiên, sử dụng các khái niệm sinh học như gen, nhiễm sắc
thể, cá thể, quần thể, và các kỹ thuật như di truyền, chọn lựa, lai ghép và đột biến. Chính
heuristic này được sử dụng để đưa ra các giải pháp tối ưu hóa và tìm kiếm. (1)
Để tìm hiểu về thuật toán di truyền một dễ dàng là tìm hiểu thông qua các ví dụ kinh
điển như bài toán Knapsack, bài toán người đưa thư (TSP). Bài viết này giới thiệu cách giải
quyết bài toán TSP sử dụng giải thuật GA để minh họa.
II Thuật toán di truyền
1. Nguyên lý tiến hóa của Darwin: (2)
a. Mỗi cá thể đều di truyền đặc điểm của nó cho con cái
b. Những cá thể con đôi khi cũng có những đặc điểm khác cha mẹ do đột biến gen
c. Những cá thể có đặc điểm thích nghi nhất với môi trường nhất sẽ tồn tại, những
cá thể kém thích nghi sẽ bị đào thải
2. Thuật toán di truyền có các đặc tính sau : (2)
a. Thích hợp với các bài toán tối ưu
b. Phương pháp tìm kiếm ngẫu nhiên có định hướng
c. Không quan tâm đến nội dung bài toán chỉ quan tâm đến vấn đề cần giải quyết
cùa bài toán
d. Kết quả tìm kiếm không hẳn là tối ưu nhất
3. Mô tả của thuật toán : (3)
a. Ban đầu, sinh ra thế hệ khởi tạo với quần thể P(0), chỉ số i chỉ ra thế hệ thứ i
b. Lặp cho tới khi quần thể hội tụ hoặc đạt được tiêu chuẩn kết thúc
i. Đánh giá độ thích nghi của mỗi cá thể trong P(i)
ii. Lựa chọn các cha từ P(i) dựa trên độ thích nghi của chúng trong P(i)
iii. Áp dụng các toán tử di truyền như lai ghép, đột biến từ các cha đã chọn
để sinh ra các con
iv. Đạt được thế hệ tiếp theo P(i+1) từ các con và các cá thể ở thế hệ P(i)
4. Cài đặt thuật toán: (3)
a. Bước 1 : Mã hóa vấn đề của bài toán
i. Xác định và biểu diễn cá thể
ii. Khởi tạo quần thể ban đầu
b. Bước 2 : Xác định hàm thích nghi
c. Bước 3 : Tạo cá thể con từ các phép toán di truyền
i. Chọn lọc
ii. Lai ghép
iii. Đột biến
iv. Chép các cá thể mới vào quần thể mới
d. Bước 4 : Tạo lại quần thể ban đầu mới
e. Bước 5 : Kiểm tra điều kiện dừng của thuật toán
3
f. Bước 6 : Lặp lại Bước 2 cho đến khi thỏa điều kiện dừng
5. Các thành phần cơ bản của GA: (3)
a. Mã hóa :
i. Mã hóa nhị phân : (là kiểu mã hóa thông dụng nhất và rất đơn giản)
- Nhiễm sắc thể là chuỗi bít 0 hoặc1
- Khi thực hiện lai ghép và biến dị có thể có sai.
- Vd : Cá thể A : 1000000111110
ii. Mã hóa hoán vị : sử dụng cho các bài toán có thứ tự
- Nhiễm sắc thể là chuỗi số biểu diễn vị trí trong một dãy
- Trong vài trường hợp phải hiệu chỉnh lai ghép và đột biến để tạo
ra nhiễm sắc thể mới
- Vd: Cá thể A : 1 5 7 9 3 2 6 8
iii. Mã hóa giá trị :
- Nhiễm sắc thể là chuỗi giá trị có thể nhận dạng bất kỳ tùy thuộc
vào bài toán cụ thể, có thể là chuỗi số thực, ký tự hoặc đối tượng
nào đó
- Thường phải xây dựng một số phép lai ghép và biến dị cho từng
trường hợp cụ thể
- Vd : Cá thể A : HGYUEAS
iv. Mã hóa dạng cây : thường sử dụng trong các bài toán hoặc các biểu thức
suy luận
- Nhiễm sắc thể là một cây gồm có các đối tượng như các hàm, câu
lệnh của ngôn ngữ lập trình
b. Hàm thích nghi : là hàm đánh giá độ thích nghi của các cá thể. Dùng để so sánh
giữa 2 cá thể xem cá thể nào tốt hơn. Do đó việc chọn hàm thích nghi phụ
thuộc vào bài toán và ngữ cảnh của bài toán đưa ra. Nếu chọn hàm thích nghi
tốt sẽ dẫn đến quần thể hội tụ sớm và ngược lại.
c. Chọn lựa : các nhiễm sắc thể được chọn lựa là các cha cho lai ghép, để các con
tốt thì chọn các cha tốt nhất có thể. Có nhiều cách chọn lựa như sau :
i. Roulette wheel : nhiễm sắc thể được chọn thông qua độ thích nghi.
Giống như trò chơi vòng quay roulette, khi viên bi lăn dừng lại tại
nhiễm sắc thể nào, nhiễm sắc thể đó được chọn, nên nhiễm sắc thể nào
có độ thích nghi cao thì xác suất được chọn cao hơn. Mô tả thuật toán
như sau :
- Tính tổng S của giá trị thích nghi của các cá thể trong quần thể.
- Lựa chọn giá trị ngẫu nhiên r trong đoạn (0,S)
- Lặp : với giá trị ngẫu nhiên r đã chọn, tương ứng với các cá thể
nào đó khi hình thành S thì cá thể đó được chọn cho thế hệ tiếp
theo.
ii. Rank : tính hạng quần thể đầu tiên và sau đó mọi nhiễm sắc thể nhận lại
giá trị thích nghi được định nghĩa bởi hạng của chúng.
iii. Steady-state : Trong tất cả các thế hệ sẽ có vài nhiễm sắc thể tốt được
chọn để tạo nhiễm sắc thể con mới. Một vài nhiễm sắc thể tồi sẽ bị xóa
bỏ và các nhiễm sắc thể con sẽ thay thế chỗ của chúng. Phần còn lại của
quần thể tạo ra thế hệ mới.
4
iv. Elitism : Cho phép chép các cá thể tốt qua quần thể mới, tránh việc mất
đi cá thể tốt xãy ra trong quá trình lai ghép và đột biến.
d. Lai ghép : việc lai ghép sẽ tạo ra cá thể con thừa hưởng một phần từ cha, một
phần từ mẹ và phụ thuộc vào kiểu mã hóa cá thể
i. Mã hóa nhị phân :
- Một điểm cắt : chuỗi nhị phân từ đầu của nhiễm sắc thể đến điểm
cắt được sao chép từ cha 1, và phần còn lại được sao chép từ cha
2. Vd : 100|111 + 101|010 = 100 010
- Hai điểm cắt : chuỗi nhị phân nằm giữa 2 điểm cắt được sao chép
từ cha 2, phần đầu và cuối sẽ được chép từ cha 1. Vd : 11|0101|00
+ 10|1010|10 = 11 1010 00
- Đồng nhất : các bit được sao chép ngẫu nhiên từ cha 1 và cha 2.
Vd : 11001011 + 11011101 = 11011111
- Số học : sử dụng các phép toán số học trên bit để tạo ra cá thể
mới. Vd : 11001011 + 11011111 = 11001001 (AND)
ii. Mã hóa hoán vị :
- Một điểm cắt : chuỗi nhiễm sắc thể được chép từ đầu đến điểm
cắt từ cha 1, phần còn lại kiểm tra phần tử nào trong cha 2 theo
thứ tự chưa có trong con thì chép vào con.
- Hai điểm cắt : chép phần giữa 2 điểm cắt vào các con, sau đó từ
điểm cắt thứ 2 trong cha mẹ chép vào con, đến cuối cha mẹ thì
quay lại đầu chuỗi cha mẹ chép vào tiếp.
iii. Mã hóa giá trị : có thể sử dụng giống như mã hóa nhị phân
iv. Mã hóa dạng cây : xác định điểm cắt trên cây của 2 cha và sau đó ghép
lại thành con.
e. Đột biến :
i. Mã hóa nhị phân : đổi giá trị từ 0 sang 1 và ngược lại tại vài vị trí
ii. Mã hóa hoán vị : đổi vị trí của các số trong chuỗi.
iii. Mã hóa giá trị : có thể sử dụng giống như mã hóa nhị phân
iv. Mã hóa dạng cây :đổi vị trí các toán tử và số
f. Tiêu chuẩn kết thúc thuật toán:
i. Thuật toán dừng khi quần thể hội tụ
ii. Khi số vòng lặp thế hệ sinh ra bằng với số quy định trước
iii. Khi các cá thể trở nên giống nhau
iv. Khi tồn tại một cá thể tốt nhất trong quần thể không thay đổi theo thời
gian.
6. Một số gợi ý khi sử dụng GA :(3)
a. Chọn lựa thường sử dụng roulette wheel. Elitism thường được chọn nếu không
sử dụng cách nào khác để lưu thông tin của cá thể tốt nhất.
b. Mã hóa phụ thuộc vào bài toán
c. Lai ghép và đột biến phụ thuộc vào cách mã hóa
d. Tỷ lệ lai ghép thường nên cao khoảng 80%-95%
e. Tỷ lệ đột biến thường khoảng 0,5% -1%
f. Kích thước quần thể thường là 20-30, có thể chọn theo cách phụ thuộc vào
cách mã hóa của bài toán thì tốt hơn trong vài trường hợp.
5
7. Ưu khuyết điểm của GA (3)
a. Ưu điểm :
i. Khả năng song song của thuật toán
ii. Ít mắc cực trị địa phương như các thuật toán khác
iii. Dễ thể hiện
iv. Khi có thuật toán gen cơ bản chỉ cần mô tả nhiễm sắc thể mới để xử lý
bài toán khác
v. Cùng với cách mã hóa có thể thay đổi hàm thích nghi
b. Khuyết điểm :
i. Thời gian tính toán
ii. Chậm hơn các thuật toán khác
iii. Kết thúc tính toán bất cứ lúc nào
III Bài toán người đưa thư (TSP):
Bài toán TSP được mô tả như sau : Có một số N các thành phố và các khoảng cách
giữa các thành phố. Người đưa thư phải đi qua tất cả các thành phố, hãy tìm một lộ trình nào
đó giúp cho người đưa thư đi qua tất cả các thành phố với lộ trình là ngắn nhất. Để kiểm tra
mọi khả năng có thể chọn một đường đi ngắn nhất qua N thành phố ta có N! trường hợp, điều
này làm cho bài toán được cho là một trong những NP-hard.
Giả sử ta có 5 thành phố được đánh số từ 1 đến 5, các khoảng cách giữa các thành phố
được mô tả như sau :
STT Điểm bắt đầu Điểm kết thúc Khoảng cách
1 1 3 3
2 2 4 5
3 3 5 2
4 2 3 1
5 1 2 4
6 3 4 7
7 4 5 10
Vậy ta có các đường đi như sau :
1-2-3-4-5-1 , 1-3-2-4-5-1, 1-2-4-3-5-1, ….
Lưu ý là đường đi 1-2-3-4-5-1 và đường đi 1-5-4-3-2-1 là như nhau.
IV Ứng dụng GA để giải bài toán TSP :
Mục đích để minh họa giải thuật di truyền nên ta chọn bài toàn TSP đơn giản, người
đưa thư phải đi qua tất cả các thành phố, và giữa các thành phố luôn có đường đi với một
khoảng cách cho trước để tránh trường hợp không tính được hàm thích nghi khi khoảng cách
giữa 2 thành phố nào đó không được xác định.Theo thuật toán ta thực hiện các bước sau :
Bước 1 :
- Xác định cá thể và mã hóa : biểu diễn đường phải đi của người đưa thư dưới dạng một
chuổi số vị trí các thành phố phải đi qua và ít nhất phải có một lần vị trí của một thành
phố xuất hiện trong chuổi theo thứ tự có vị trí ở đầu và cuối chuổi là như nhau theo
như cách mã hóa hoán vị.
Vd : ta có 5 thành phố và 2 là vị trí của thành phố xuất phát ta có một chuỗi nhiễm sắc
thể được mã hóa như sau: 2 1 3 4 5 4 2
6
- Số quần thể khởi tạo : tùy theo số lượng thành phố ta có thể chọn số lượng quần thể
ban đầu, giả sử như số lượng thành phố đủ lớn ta chọn số lượng khởi tạo là 20. Chọn
số thế hệ muốn di truyền.
Bước 2 : Xác định hàm thích nghi
Để xác định hàm thích nghi ta có thể chọn hàm f(x) = 1/S (S: là tổng các khoảng cách
theo lộ trình được mô tả của cá thể). Khi f(x) càng lớn thì độ thích nghi của cá thể đó càng
cao.
Bước 3 : Tiến hành tạo cá thể con
- Chọn lựa : dùng phương pháp chọn lựa roulette wheel với độ thích nghi của các
cá thể trong quần thể được tính bằng hàm f(x)
- Lai ghép : ta chọn tỷ lệ lai ghép 80% và sử dụng lai ghép với dạng mã hóa là
hoán vị và một điểm cắt
- Đột biến : ta chọn tỷ lệ đột biến 0,5% và sử dụng đột biến với dạng mã hóa
hoán vị.
- Cho cá thể con vào quần thể mới
Bước 4 : Kiểm tra lại quần thể mới nếu có cá thể nào có độ thích nghi thấp thì loại bỏ để
đảm bảo kích cở quần thể ban đầu. Sau đó xác định lại quần thể ban đầu mới.
Bước 5 : Kiểm tra điều kiện dừng xem quần thể có hội tụ hay chưa, số vòng lặp thế hệ đã hết
chưa, có tồn tại cá thể tốt nhất không thay đổi sau nhiều thế hệ không, các cá thể trong quần
thể có giống nhau không.
Bước 6 : Nếu thuật toán chưa dừng thì quay lại bước 2.
V Tài liệu tham khảo :
(1). Wikipedia.org : Giải thuật di truyền
(2). diendantinhoc.org : Câu lạc bộ thuật toán
(3). TS Ngô Hữu Phúc - Nhập môn trí tuệ nhân tạo – Chương 3-2 Các phương pháp tìm
kiếm có sử dụng thông tin.
7