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

Tiểu luận môn Thuật Toán và Phương Pháp Giải Quyết Vấn Đề ỨNG DỤNG THUẬT TOÁN DI TRUYỀN VÀO BÀI TOÁN NGƯỜI DU LỊCH

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 (468.65 KB, 27 trang )

ĐẠI HỌC QUỐC GIA TP.HỒ CHÍ MINH
TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN
TIỂU LUẬN MÔN HỌC
THUẬT TOÁN VÀ PHƯƠNG PHÁP
GIẢI QUYẾT VẤN ĐỀ
ĐỀ TÀI
ỨNG DỤNG THUẬT TOÁN DI TRUYỀN VÀO BÀI
TOÁN NGƯỜI DU LỊCH
Giảng viên hướng dẫn : PGS.TS Đỗ Văn Nhơn
Học viên thực hiện: Trần Văn Cường
MSHV : CH1301083
TP.HCM 10/2014
MỤC LỤC
MỤC LỤC 2
LỜI CẢM ƠN 1
LỜI MỞ ĐẦU 2
PHẦN I. CƠ SỞ LÝ THUYẾT 3
I. TỔNG QUAN VỀ THUẬT TOÁN DI TRUYỀN 3
II. TỔNG QUAN BÀI TOÁN NGƯỜI DU LỊCH 13
PHẦN II. ỨNG DỤNG THUẬT GIẢI DI TRUYỀN VÀO BÀI TOÁN NGƯỜI DU LỊCH
16
I. MÃ HÓA BÀI TOÁN 16
II. KHỞI TẠO QUẦN THỂ 16
III. LAI GHÉP 17
IV. ĐỘT BIẾN 18
V. CHỌN LỌC TỰ NHIÊN 19
VI. TIẾN HOÁ 20
KẾT LUẬN 21
TÀI LIỆU THAM KHẢO 22
Phương pháp và Thuật toán giải quyết vấn đề GVHD: PGS.TS Đỗ Văn Nhơn
LỜI CẢM ƠN


Trong thời lượng 8 buổi học, tuy thời gian ngắn nhưng qua sự truyền đạt tận
tình cùng với kinh nghiệm giảng dạy lâu năm của thầy PGS TS Đỗ Văn Nhơn đã
truyền đạt cho Em cũng như các bạn trong lớp những kiến thức quý báu.
Em xin chân thành cám ơn Thầy về những kiến thức và những kinh nghiệm
quý báu mà Thầy đã truyền đạt cho lớp trong phạm vi môn học Thuật toán và
Phương pháp giải quyết vấn đề thuộc chương trình đào tạo cao học ngành Khoa
học máy tính tại trường Đại học Công Nghệ Thông Tin – Đại học Quốc gia Thành
phố Hồ Chí Minh.
Chúc Thầy sức khỏe, hạnh phúc và thành công!
Em xin chân thành cảm ơn!
HV: Trần Văn Cường – MSHV: CH1301083 Trang 1
Phương pháp và Thuật toán giải quyết vấn đề GVHD: PGS.TS Đỗ Văn Nhơn
LỜI MỞ ĐẦU
Bài toán Người du lịch (Travelling Salesman Problem - TSP) là một trong
những bài toán kinh điển và khó trong tin học. Bài toán có phát biểu rất đơn giản
nhưng rất khó giải trong trường hợp tổng quát với không gian tìm kiếm rộng lớn, khó
bởi các thuật toán hiệu quả nhất đa được biết đến có thời gian giải quyết bài toán này
tăng dần theo cấp số nhân của n, hay độ phức tạp thuật toán tăng theo hàm số mũ. Có
rất nhiều cách tiếp cận giải bài toán này ngay từ khi nó mới ra đời, như sử dụng quy
hoạch tuyến tính, thuật toán vét cạn, thuật toán người láng giềng gần nhất, kỹ thuật
nhánh và cận, nhưng mới chỉ dừng lại ở các bộ dữ liệu nhỏ. Gần đây có nhiều thuật
toán ra đời theo hướng tiếp cận về tiến hóa như thuật toán di truyền Genetic
Algorithm hay cách mô phỏng hành vi của đàn kiến như thuật toán đàn kiến được áp
dụng cho kết quả tốt hơn rất nhiều.
Trong trong phạm vi bài thu hoạch này tôi xin chọn đề tài:“Ứng dụng thuật
toán di truyền vào bài toán người du lịch” nhằm tìm hiểu thuật toán, xem xét hiệu
quả của các thuật toán.
HV: Trần Văn Cường – MSHV: CH1301083 Trang 2
Phương pháp và Thuật toán giải quyết vấn đề GVHD: PGS.TS Đỗ Văn Nhơn
PHẦN I. CƠ SỞ LÝ THUYẾT

I. TỔNG QUAN VỀ THUẬT TOÁN DI TRUYỀN
1. Giới thiệu
Trong thuật giải di truyền người ta dùng thuật ngữ vay mượn của di truyền
học như: cá thể, nhiễm sắc thể (nhiễm sắc thể), gen, quần thể, độ thích nghi, chọn
lọc, lai ghép, đột biến, v.v… Trong đó cá thể (individual, genotypes, structure) biểu
diễn một lời giải, giải pháp của bài toán, không giống như trong tự nhiên một cá thể
có thể có nhiều nhiễm sắc thể, ở đây chúng ta quy ước mỗi cá thể chỉ có một nhiễm
sắc thể (chromosome). Các nhiễm sắc thể là một có thể là một chuỗi tuyến tính, trong
nhiễm sắc thể có thể có các đơn vị nhỏ hơn đó là gen. Mỗi gen đại diện một thuộc
tính, tính chất và có vị trí nhất định trong nhiễm sắc thể. Quần thể (population) là
một tập hợp hữu hạn xác định các cá thể, trong thuật giải di truyền quần thể là một
tập
- Xây dựng hàm thích nghi làm tiêu chuẩn đánh giá các cá thể theo độ thích
nghi của chúng.
- Xác định xác suất lai tạo, xác suất đột biến, …
- Xây dựng các phép toán lai tạo, chọn lọc, đột biến.
2. Thuật giải di truyền
Bài toán dành cho GA 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 GA “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. Ví dụ, nếu tác vụ học hỏi là bài toán xấp xỉ một
hàm chưa biết cho tập mẫu huấn luyện gồm dữ liệu đầu vào và dữ liệu đầu ra, thì độ
thích nghi có thể được định nghĩa như là độ chính xác của giả thuyết trên dữ liệu huấn
luyện này. Nếu tác vụ là học chiến lược chơi cờ, độ thích nghi có thể là số ván thắng
của chiến lược này khi đấu với các chiến lược khác trong quần thể hiện tại.
HV: Trần Văn Cường – MSHV: CH1301083 Trang 3
Phương pháp và Thuật toán giải quyết vấn đề GVHD: PGS.TS Đỗ Văn Nhơn
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.
HV: Trần Văn Cường – MSHV: CH1301083 Trang 4
Phương pháp và Thuật toán giải quyết vấn đề GVHD: PGS.TS Đỗ Văn Nhơ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:
2. Lai ghép: chọn lọc theo xác xuất 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 con vào P
S
.
3. Đột biến: Chọn m% các thể 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 P có độ thích nghi cao nhất
}
Hình: Các bước cơ bản của giải thuật
HV: Trần Văn Cường – MSHV: CH1301083 Trang 5
Phương pháp và Thuật toán giải quyết vấn đề GVHD: PGS.TS Đỗ Văn Nhơn
Sơ đồ mô tả giải thuật di truyền
3. Các toán tử di truyền
a. Biểu diễn cá thể
Công việc đầu tiên khi thực hiện việc giải bài toán bằng giải thuật di truyền là
chọn cách biểu diễn các cá thể. Đó là việc ánh xạ các tham số của bài toán lên một
chuỗi có chiều dài xác định. Tuỳ theo từng bài toán cụ thể mà có những cách biểu diễn
khác nhau sao cho phù họp, thuận lợi khi giải toán. Trong đó có hai cách biểu diễn
thông dụng nhất là biểu diễn nhị phân và biểu diễn sử dụng các hoán vị.
Biểu diễn nhị phân
HV: Trần Văn Cường – MSHV: CH1301083 Trang 6

Phương pháp và Thuật toán giải quyết vấn đề GVHD: PGS.TS Đỗ Văn Nhơn
Mỗi cá thể tương ứng với một chuỗi bao gồm các bit 0 và 1, ý nghĩa của
các bít này phụ thuộc vào từng tình huống cụ thể. Đây là cách biểu diễn đơn
giải nhất và là cách thông dụng nhất trong các cách biểu diễn.
Ví dụ trong bài toán cái túi: có n đồ vật với trọng lượng và giá trị được
cho trước và một cái túi có trọng lượng đã biết. Hãy chọn ra các đồ vật đế cho
vào túi sao cho tống giá trị các đồ vật trong túi là lớn nhất?
Ớ đây, đồ vật được đánh số từ 1 đến n, mỗi cá thể được biểu diễn bằng
một xâu nhị phân độ dài n. Trong đó, bít thứ i bằng 1 có nghĩa là đồ vật thứ i
được cho vào túi, bằng 0 thì bỏ lại.
Biểu diễn sử dụng hoán vị
Mỗi cá thể tương ứng với một hoán vị của tập n ký hiệu nào đó. Chang
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ụ T8T5T9T3 sẽ là kí hiệu của hành trình từ T8  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.
Biểu diễn bằng giá trị
Biểu diễn giá trị trực tiếp có thể được dùng trong các bài toán có chứa
những giá trị phức tạp, chẳng hạn như số thực. Nếu dùng biểu diễn nhị phân
cho loại bài toán này thì rất phức tạp. Trong mã hóa giá trị, mọi nhiễm sắc thể
là một chuỗi chứa những giá trị nào đó. Những giá trị này có thể có dạng bất
HV: Trần Văn Cường – MSHV: CH1301083 Trang 7

Phương pháp và Thuật toán giải quyết vấn đề GVHD: PGS.TS Đỗ Văn Nhơn
kỳ 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.
Một ví dụ cho cách mã hóa này là bài toán tìm trọng số mạng nơron.
Biểu diễn theo cây
Mã hóa theo cây được dùng chủ yếu cho các chương trình (hoặc biểu
thức) tiến hóa, cho lập trình gen. Trong mã hóa theo cây mọi nhiễm sắc thể là
một cây chứa các đối tượng chẳng hạn như hàm hoặc lệnh trong một ngôn ngữ
lập trình nào đó.
Ví dụ: bài toán tìm hàm từ những giá trị cho trước. Cho trước một số đầu
vào và đầu ra. Tìm hàm cho ra kết quả tốt nhất với mọi đầu vào.
Mã hóa: Nhiễm sắc thể là các hàm được biểu diễn bằng cây.
=> Sau khi đã biếu diễn được các cá thể cho bài toán rồi thì có thể bắt
tay ngay vào việc thực hiện giải thuật di truyền theo sơ đồ đã có trong phần
trước. Bước đầu tiên là cần có một quần thể ban đầu. Nó có thể có được bằng
cách chọn ngẫu nhiên các cá thể; hoặc có thể dùng chiến thuật lựa chọn thông
qua hàm mục tiêu sẽ được trình bày ngay sau đây.
b. Hàm mục tiêu Fitness
Một hàm mục tiêu (fitness) sẽ lấy một chuỗi nhiễm sắc thể như là đầu vào và trả
về giá trị tượng trưng cho chuỗi nhiễm sắc thể đó đế đánh giá trên vấn đề cần giải
quyết.
Hàm mục tiêu có vai trò tương tự như là môi trường sống trong sự tiến hóa của
tự nhiên, vấn đề tương tác giữa một cá thể với môi trường sống được thể hiện qua giá
trị cuả hàm mục tiêu trong mỗi một cá thể.
Giá trị hàm mục tiêu là Maximum hay Minimum tùy theo bài toán sẽ quyết định
xác suất của mỗi chuỗi có thể tham gia vào các toán tử di truyền.
c. Toán tử tái tạo
Là một quá trình mà trong đó các chuỗi được lựa chọn tùy thuộc vào giá trị hàm
mục tiêu. Hàm mục tiêu f(i) được gán cho mỗi cá thể trong một quần thể, và những cá
HV: Trần Văn Cường – MSHV: CH1301083 Trang 8

Phương pháp và Thuật toán giải quyết vấn đề GVHD: PGS.TS Đỗ Văn Nhơn
thể nào có giá trị hàm mục tiêu cao sẽ đại diện cho những cá thể tốt, thích nghi và sẽ có
xác suất chọn lọc lớn. Toán tử này có thể được xem như là quá trình chọn lọc trong tự
nhiên: các cá thể tốt, thích nghi với môi trường sẽ có cơ hội được sống sót nhiều hơn.
Có nhiều cách để thực hiện toán tử này.
Chọn lọc dùng bánh xe Roulette
Đây được coi là phương pháp chọn lọc đơn giản nhất, ở đấy mỗi chuỗi
(cá thể) trong quần thể chiếm một khe trong vòng tròn Roulette có độ rộng tỷ
lệ với giá trị hàm mục tiêu của chuỗi. Mỗi lần quay vòng tròn Roulette chúng
ta nhận được một chuỗi và coi như đó là cách lựa chọn chuỗi cho việc tái tạo.
Các bước thực hiện:
• Tính tổng các giá trị mục tiêu của các cá thể trong một dân số
và gán kết quả này vào biến Total fitness.
• Ở thế hệ thứ n, lấy một số ngẫu nhiên giữa 0 và Total fitness.
• Trả về số cá thể đầu tiên của một dân số mới, dựa vào giá trị
mục tiêu của nó.
Chọn lọc Stochastic universal sampling
Thực hiện giống như phương pháp bánh xe Roulette, nhưng cách chọn
các giá trị ngẫu nhiên như sau: giả sử cần chọn ra N cá thể, khi đó khoảng cách
giữa các lát cắt là 1/N. Chúng ta chọn 1 số ngẫu nhiên trong đoạn [0, 1/N] rồi
từ đó xác định các lát cắt.
Chọn lọc lân cận địa phương
Lân cận địa phương là một vùng khép kín mà cá thể tương tác với các cá
thể khác nằm trong vùng đó.
Theo phương pháp này, một nửa số cá thể đầu tiên được chọn bởi một
phương pháp bất kì nào khác, chẳng hạn như phương pháp bánh xe Roulette.
Sau đó với mỗi cá thể đã chọn, xác định một lân cận địa phương của nó và tìm
cá thể đế lai ghép với nó.
HV: Trần Văn Cường – MSHV: CH1301083 Trang 9
Phương pháp và Thuật toán giải quyết vấn đề GVHD: PGS.TS Đỗ Văn Nhơn

Chọn lọc loại bỏ
Các làm rất đơn giản: dùng một ngưỡng lựa chọn đế xác định các cá thể
được lựa chọn. Theo đó các cá thể có giá trị hàm mục tiêu nhỏ hơn ngưỡng thì
sẽ bị loại bỏ, còn các cá thể có giá trị hàm mục tiêu lớn hơn ngưỡng thì được
lựa chọn.
d. Lai ghép
Phép lai là quá trình hình thành NST mới trên cơ sở NST cha mẹ, bằng cách
ghép một hay nhiều đoạn gen của hai (hay nhiều) NST cha mẹ khác nhau.
Các cặp cha mẹ được lựa chọn ngẫu nhiên và xác suất xảy ra lai ghép với mỗi
cặp được quy định từ trước.
Có nhiều cách lai ghép khác nhau:
• Lai ghép một điểm cắt, nhiều điểm cắt
• Lai ghép nhiều đoạn
e. Đột biến
Đột biến là tình trạng NST con không có một (hoặc một số) tính trạng có trong
mã di truyền của cha mẹ.
Các cặp cha mẹ được lựa chọn ngẫu nhiên và xác suất xảy ra đột biến với mỗi
cặp được quy định từ trước, thường là rất nhỏ.
Các phép đột biến thường được sử dụng:
• Đảo bit
HV: Trần Văn Cường – MSHV: CH1301083 Trang 10
Phương pháp và Thuật toán giải quyết vấn đề GVHD: PGS.TS Đỗ Văn Nhơn
• Hoán vị: Đổi vị trí của các gen với nhau
• Đổi giá trị: Thay đổi giá trị tại một điểm gen
• Đảo đoạn: Đảo thứ tự của một đoạn NST bất kì.
4. Đấu tranh sinh tồn
Chọn những NST từ quần thể kết quả theo một quy tắc nào đó thay thế cho cha
mẹ để sinh ra thế hệ mới. Một số phương thức đấu tranh sinh tồn cơ bản:
• Tráo đổi hoàn toàn cha mẹ bằng con.
• Tráo đổi ngẫu nhiên: Chọn ngẫu nhiên k cha mẹ và thay thế bằng k con

mới.
• Chọn những cá thể ưu tú nhất trong quần thể.
5. Sự khác biệt của thuật giải di truyền và thuật giải khác
Khi dùng phương pháp truyền thống có một số cách giải sau:
Phương pháp liệt kê
Phương pháp giải tích
Phương pháp tìm kiếm ngẫu nhiên
Đặc trưng của thuật giải di truyền so với các phương pháp truyền thống:
Thuật giải di truyền làm việc với sự mã hoá của tập thông số chứ không làm
việc với các giá trị của các thông số.
Thuật giải di truyền tìm kiếm từ một quần thể các điểm chứ không phải từ một
điểm.
Thuật giải chỉ sử dụng thông tin về các tiêu chuẩn tối ưu của hàm mục tiêu chứ
không dùng các thông tin hỗ trợ nào khác.
Thuật giải sử dụng các luật chuyển đổi mang tính xác suất chứ không phải là
các luật chuyển đổi mang tính xác định.
Thuật giải thường khó cài đặt, áp dụng. Tuy nhiên không phải lúc nào cũng
cho lời giải chính xác. Một số thuật giải di truyền có thể cung cấp lời giải tiềm năng
cho một bài toán xác định để người sử dụng lựa chọn.[6]
HV: Trần Văn Cường – MSHV: CH1301083 Trang 11
Phương pháp và Thuật toán giải quyết vấn đề GVHD: PGS.TS Đỗ Văn Nhơn
6. Các thành phần trong thuật giải di truyền
Biểu diễn nhiễm sắc thể
- Biểu diễn nhị phân
- Biểu diễn sử dụng hoán vị
- Biểu diễn bằng giá trị
Khởi tạo quần thể ban đầu
Đánh giá cá thể
Phương pháp chọn lọc
- Chọn lọc tỷ lệ

- Chọn lọc xếp hạng
- Chọn lọc cạnh tranh
Phương pháp lai ghép
- Lai ghép một điểm
- Lai ghép đa điểm
- Lai ghép ánh xạ từng phần
- Lai ghép có trật tự
- Lai ghép dựa trên vị trí
- Lai ghép thứ tự tuyến tính
- Lai ghép có chu trình
Toán tử đột biến
Điều kiện dừng của thuật giải
Một số điều kiện dừng của thuật giải:
Kết thúc theo kết quả, tức khi giá trị thích nghi của cá thể trong quần thể có giá
trị sai số nhỏ hơn một giá trị cho trước, thì dừng thuật toán.
Kết thúc dựa trên số thế hệ, một số vấn đề dựa vào số thế hệ trong quần thể.
Khi số lượng tiến hoá của quần thể đến một giới hạn cho phép thì thuật toán sẽ dừng,
HV: Trần Văn Cường – MSHV: CH1301083 Trang 12
Phương pháp và Thuật toán giải quyết vấn đề GVHD: PGS.TS Đỗ Văn Nhơn
mà trong khi không quan tâm đến chất lượng của cá thể trong quần thể như thế nào.
Tính theo thời gian, phụ thuộc vào thời gian chạy chương trình được quy định
trước và thuật toán dừng.
Kết hợp nhiều phương pháp khác nhau, thuật giải cũng có thể sử dụng kết hợp
nhiều phương pháp khác nhau để giải quyết vấn đề.
Các tham số của thuật giải di truyền
- Kích thước quần thể
- Xác suất lai ghép
- Xác suất đột biến
II. TỔNG QUAN BÀI TOÁN NGƯỜI DU LỊCH
1. Lịch sử bài toán

Bài toán người du lịch (Travelling Salesman problem (TSP)) là một bài toán
khá nổi tiếng trong lĩnh vực tối ưu tổ hợp được nghiên cứu trong lý thuyết khoa học
máy tính. Nội dung của nó khá đơn giản , nó được phát biểu như sau : Cho một danh
sách các thành phố và khoảng cách giữa chúng , nhiệm vụ là phải tìm đường đi ngắn
nhất có thể mà chỉ thăm mỗi thành phố đúng 1 lần.
Nguồn gốc của bài toán người du lịch đến nay vẫn chưa rõ ràng. Một cuốn sách
cho người du lịch từ năm 1832 đã đề cập tới vấn đề và bao gồm vài ví dụ về các
đường đi từ đức qua Thụy sỹ nhưng không chứa đựng ý nghĩa toán học nào
Vấn đề toán học liên quan tới bài toán người du lịch đã được nhắc đến trong
những năm 1800 bởi nhà toán học ireland W. R. Hamilton và nhà toán học người
Anh Thomas Kirkman. Trò chơi Icosian Game của Hamilton là một trò đố vui dựa
trên cơ sở tìm chu trình Hamilton. Dạng tổng quát của bài toán TSP được nghiên cứ
bởi các nhà toán học suốt những năm 1930 ở đại học Harvard, đáng chú ý là Karl
Menger người đã định nghĩa bài toán, xem xét giải thuật brute-force và quan sát thấy
tính không tối ưu của heuristic dựa trên láng giếng gần nhất.
HV: Trần Văn Cường – MSHV: CH1301083 Trang 13
Phương pháp và Thuật toán giải quyết vấn đề GVHD: PGS.TS Đỗ Văn Nhơn
Hassler Whitney ở đại học Princeton University là ngừời đầu tiên đặt tên người
du lịch cho bài toán không lâu sau đó.
Trong những năm 1950 và 1960 , bài toán trở nên ngày càng phổ biến trong
khoa học ở châu Âu và Mỹ. Những đóng góp đáng chú ý được kể đến như George
Dantzig, Delbert Ray Fulkerson và Selmer M. Johnson tại RAND Corporation ở
Santa Monica, những người đã trình bày bài toán như bài toán số nguyên tuyến tính
và phát triển phương thức cắt cho lời giải của nó. Với những phương thức mới này họ
đã giải được một thí dụ của bài toán với 49 thành phố để xây dựng một cách tối ưu và
chứng minh rằng không còn đường đi nào ngắn hơn nữa. Trong những thập kỷ tiếp
theo, bài toán được nghiên cứu bởi rất nhiều nhà nghiên cứ từ toán học , khoa học
máy tính , hóa học ,vật lý và những khoa học khác.
Richard M. Karp năm 1972 chỉ ra rằng bài toán chu trình Hamiltonian thuộc
lớp NP-complete, và qua đó chỉ ra tính NP khó (NP-hardness ) của bài toán TSP.

Điều này giải thích một cách khoa học cho độ phức tạp tính toán của việc tìm lời giải
tối ưu cho bài toán .
Nhiều thành tựu đã đạt được trong suốt những năm cuối thập kỷ 1970 và 1980,
khi Grötschel, Padberg, Rinaldi và những người khác cố gắng giải một cách chính
xác một thể hiện của bài toán với 2392 thành phố, sử dụng phương thức cắt và
branch-and-bound.
Trong những năm 1990 Applegate, Bixby, Chvátal, và Cook đã phát triển
chương trình Concorde mà đã được sử dụng nhiều trong việc giải các bài toán TSP
cho đến nay . Gerhard Reinelt đã công bố thư viện TSPLIB vào năm 1991, đó là một
tập các thể hiện của bài toán TSP với nhiều độ khó khác nhau, và đã được sử dụng
bởi nhiều nhóm nghiên cứu khác nhau để so sánh kết quả. Năm 2005, Cook và những
người khác đã tính được độ dài tối ưu cho chu trình với thể hiện của bài toán TSP lên
tới 33,810 thành phố , được lấy ra từ bài toán xây dựng layout cho microchip, cho tới
nay vẫn là thể hiện lớn nhất trong các thể hiện ở TSPLIB .Nhiều thể hiện khác với
HV: Trần Văn Cường – MSHV: CH1301083 Trang 14
Phương pháp và Thuật toán giải quyết vấn đề GVHD: PGS.TS Đỗ Văn Nhơn
hàng triệu thành phố , lời giải tìm được có thể chứng minh nằm sai khác 1% so với
lời giải tối ưu.
2. Mô tả bài toán
TSP có thể được mô hình như một đồ thị , các đỉnh của đồ thị tương ứng với các
thành phố và các cạnh thì tương ứng với đường nối giữa các thành phố, chiều dài của
một cạnh tương ứng với khoang cách giữa 2 thành phố. Một đường đi trong bài toán
TSP là một chu trình Hamilton trên đồ thị và một lời giải tối ưu của bài toán là chu
trình Hamilton ngắn nhất.
Thường thì đồ thị là đồ thị đầy đủ , vì vậy mọi cặp cạnh đều được nối bởi các
cạnh. Đây là bước đơn giản hóa bài toán vì việc tìm chu trình Hamilton trong một đồ
thị đầy đủ là dễ. Các bài toán mà không phải 2 thành phố nào cũng được nối với nhau
có thể được chuyển đổi thành đồ thị đầy đủ bằng cách thêm những cạnh có độ dài lớn
giữa cách thành phố này , những cạnh sẽ không xuất hiện trong chu trình tối ưu.
3. Phân tích độ phức tạp

Bài toán TSP thuộc lớp bài toán NP-Khó (lớp các bài toán không có giải thuật
trong thời gian đa thức).
Việc thực hiện liệt kê hết tất cả các chu trình là điều gần như không thể với số
đỉnh lớn (đồ thị n đỉnh phải duyệt n! chu trình). Số chu trình phải duyệt.
HV: Trần Văn Cường – MSHV: CH1301083 Trang 15
Phương pháp và Thuật toán giải quyết vấn đề GVHD: PGS.TS Đỗ Văn Nhơn
PHẦN II. ỨNG DỤNG THUẬT GIẢI DI TRUYỀN VÀO BÀI TOÁN
NGƯỜI DU LỊCH
I. MÃ HÓA BÀI TOÁN
1. Mã hoá đồ thị:
Đồ thị được mã hoá bằng danh sách mảng các điểm và toạ độ tương ứng của
chúng.
Trọng số trong cột đầu tiên là số hiệu của đỉnh, trọng số thứ 2 là hoành độ, trọng
số thứ 3 là tung độ. Khoảng cách giữa 2 đỉnh M(x
i
,y
i
) và N(x
j
,y
j
) của đồ thị (trọng số
cho cạnh) được tính theo công thức:
2. Mã hoá chu trình (cá thể-gen)
Chu trình được mã hoá bằng mảng có thứ tự các số hiệu của đỉnh. Với đồ thị n
đỉnh thì mảng có kích thước n phần tử. Ví dụ chu trình của đồ thị 10 đỉnh:
C1 1 3 2 4 6 9 8 7 5 10
C2 10 7 9 6 4 2 8 3 1 5
Ngoài ra mỗi chu trình cần phải có thêm thông số về chi phí của toàn bộ chu
trình đó. Chi phí này được tính bằng tổng độ dài tất cả các cạnh tạo nên chu trình đó

(theo công thức tính khoảng cách ở trên).
Mỗi chu trình là một lời giải, trong giải thuật di truyền coi đó như một cá thể.
Việc tiến hoá về sau ta sẽ dựa trên tập chu trình khởi tạo ban đầu và tìm ra kết quả tốt
nhất sau một số thế hệ.
II. Khởi tạo quần thể
Quần thể ban đầu được khởi tạo bằng cách sinh ngẫu nhiên các chu trình, số
lượng chu trình khởi tạo là một nửa số kích thước cá thể tối đa. Việc sinh ngẫu nhiên
HV: Trần Văn Cường – MSHV: CH1301083 Trang 16
Phương pháp và Thuật toán giải quyết vấn đề GVHD: PGS.TS Đỗ Văn Nhơn
sử dụng hàm đột biến. Số kích thước cá thể tối đa có thể tùy biến theo số đỉnh của đồ
thị cần giải, có thể chọn kích thước của quần thể là 100 cá thể.
III. Lai ghép
Phương thức lai ghép được thực hiện dựa trên 2 cá thể đầu vào:
C1 1 3 2 4 6 9 8 7 5 10
C2 10 7 9 6 4 2 8 3 1 5
Thực hiện lai ghép một điểm cắt với vị trí cắt là ngẫu nhiên:
- Cắt từ điểm p đến hết chu trình của C2 đưa vào chu trình mới, lấy một ví
dụ p=5;
Con 2 8 3 1 5
- Xét từ đầu đến cuối chu trình 1, nạp dần các điểm chưa có trong con lai
theo thứ tự duệt ta được chu trình mới
Con 2 8 3 1 5 4 6 9 7 10
- Tính lại chi phí cho chu trình mới sinh.
Thuật toán:
private Circle hybridize(Circle c1, Circle c2) {
Circle child = new Circle(c1.getLength());
Random rand = new Random();
int p = rand.nextInt(child.length - 1);
int i = 0, j = 0, k = 0;
for (i = p; i < child.length; i++)

{ child.vertex[j] = c2.vertex[i]; j++; }
for (i = 0; i < child.length; i++)
{
for (j = 0; j < child.length - p; j++)
{
HV: Trần Văn Cường – MSHV: CH1301083 Trang 17
Phương pháp và Thuật toán giải quyết vấn đề GVHD: PGS.TS Đỗ Văn Nhơn
if (c1.vertex[i] == child.vertex[j]) break;
else if (j == child.length - p - 1)
{ k++;
child.vertex[j + k] = c1.vertex[i];
}
}
}
return child;
}
IV. ĐỘT BIẾN
Phương thức đột biến được thực hiên dựa trên một cá thể đầu vào:
C1 1 3 2 4 6 9 8 7 5 10
Thực hiện đột biến bằng tráo đổi các điểm trên gen cho nhau. Số lần tráo đổi
được sinh ngẫu nhiên từ trong khoảng 5% chiều dài chu trình (tức là có tối đa 10% vị
trí trên một gen có thể bị đột biết),vị trí điểm tráo cũng được sinh ngẫu nhiên trong
quá trình thực hiện chương trình.
Ví dụ với đột biến C1 bằng tráo đổi 2 lần: tráo 3 và 9, tráo 4 và 10. Khi đó ta
được chu trình mới:
C2 1 9 2 1
0
6 3 8 7 5 4
Thuật toán:
private Circle mutate(Circle c)

{
int n = c.getLength();
Circle nextgen = new Circle(n);
HV: Trần Văn Cường – MSHV: CH1301083 Trang 18
Phương pháp và Thuật toán giải quyết vấn đề GVHD: PGS.TS Đỗ Văn Nhơn
nextgen.setCircle(n, c.getCircle());
Random rand = new Random();
int count = rand.nextInt(mutateCoefficient) + 1;
int p1, p2, temp;
while (count > 0)
{
p1 = rand.nextInt(n);
p2 = rand.nextInt(n);
temp = nextgen.vertex[p1];
nextgen.vertex[p1] = nextgen.vertex[p2];
nextgen.vertex[p2] = temp;
count ;
}
return nextgen;
}
V. CHỌN LỌC TỰ NHIÊN
- Sắp xếp quần thể theo chi phí tăng dần.
- Lựa chọn ngẫu nhiên 1 chỉ số a (0<a<1)
- Loại cá thể thứ a[Kích thước mặc định] kém thích nghi nhất từ [Kích thước
mặc định] cá thể đứng đầu danh sách quần thể.
- Loại đến khi số cá thể còn lại bằng kích thước mặc định.
Thuật toán:
private void sortList() { // Selection sort
int i = 0, j = 0, min;
Circle temp;

HV: Trần Văn Cường – MSHV: CH1301083 Trang 19
Phương pháp và Thuật toán giải quyết vấn đề GVHD: PGS.TS Đỗ Văn Nhơn
for (i = 0; i < maxPopulation - 1; i++) // maxPopulation là [kích thước mặc định]
{
min = i;
for (j = i + 1; j < population.size(); j++)
{
if (population.get(j).cost < population.get(min).cost) min = j;
}
temp = population.get(i);
population.add(i, population.get(min));
population.remove(i + 1);
population.remove(min);
population.add(min, temp);
}
}
VI. Tiến hoá
Với quần thể khởi tạo ban đầu, chúng được tiến hoá một cách ngẫu nhiên và
thích nghi với điều kiện chọn lọc, các cá thể kém thích nghi sẽ bị loại thải và cá thể
tốt nhất được chọn làm lời giải.
Việc tiến hoá diễn ra qua một số thế hệ, ở mỗi thế hệ ta thực hiện lai ghép và đột
biến ngẫu nhiên trên toàn quần thể.
− Lai ghép: ngẫu nhiên trong 50% số cá thể đứng đầu tiên của quần thể
(Lựa chọn cha mẹ ngẫu nhiên).
− Đột biến cho toàn bộ quần thể 100%.
Sau một số thế hệ định trước (10000 đến 10000000) chương trình sẽ dừng và
xuất ra kết quả.
HV: Trần Văn Cường – MSHV: CH1301083 Trang 20
Phương pháp và Thuật toán giải quyết vấn đề GVHD: PGS.TS Đỗ Văn Nhơn
KẾT LUẬN

Trong thời gian nghiên cứu, tìm hiểu thuật toán để giải quyết bài toán người du lịch,
đề tài đã đạt được các kết quả sau:
− Báo cáo đã làm rõ các khái niệm về giải thuật di truyền và các bước thực
hiện khi áp dụng vào giải quyết bài toán người du lịch
− Nghiên cứu tìm hiểu nội dung, lịch sử, mô tả về bài toán người du lịch.
− Từ đó rút ra những ưu nhược điểm của phương pháp trong giải bài toán
người du lịch.
Từ kết quả nghiên cứu lý thuyết và thực tiển, bài tiểu luận đề ra các vấn đề cần tiếp
tục hoàn thiện, phát triển và nghiên cứu như sau:
− Tiếp tục nghiên cứu thêm các thuật toán khác áp dụng giải bài toán người du
lịch. Từ đó rút ra nhận xét và đánh giá về tính hiệu quả các thuật toán.
− Tiếp tục nghiên cứu thực nghiệm để tìm ra lời giải tối ưu áp dụng cho bài toán
người du lịch.
Với khả năng và thời gian có hạn, bài tiểu luận chắc chắn còn những thiếu sót trong
phần trình bày và nội dung, kính mong Thầy góp ý để tác giả hoàn thiện hơn
HV: Trần Văn Cường – MSHV: CH1301083 Trang 21
Phương pháp và Thuật toán giải quyết vấn đề GVHD: PGS.TS Đỗ Văn Nhơn
TÀI LIỆU THAM KHẢO
[1] PGS.TS Đỗ Văn Nhơn (2014), slide bài giảng môn Phương pháp giải quyết vấn đề;
[2] TS Nguyễn Đình Thúc (2008), Giáo trình Trí Tuệ Nhân Tạo – Lập trình
tiến hóa
[3] h

t t p

: //

v

i .


w i

k

i p

e d

i a

.

o rg

/ w

i k

i /

B à

i _

t oá

n _

ng


ư



i _

b á

n_

h à

n

g (10/2014)
HV: Trần Văn Cường – MSHV: CH1301083 Trang 22
Phương pháp và Thuật toán giải quyết vấn đề GVHD: PGS.TS Đỗ Văn Nhơn
NHẬN XÉT CỦA GIÁO VIÊN



























HV: Trần Văn Cường – MSHV: CH1301083 Trang 23

×