Bối cảnh và vấn đề nghiên cứu
Khóa luận tốt nghiệp "Áp dụng thuật toán di truyền để giải bài toán người du lịch" được thực hiện bởi sinh viên Thái Công Danh (lớp K47 Tin học Kinh tế, Khoa Hệ thống Thông tin Kinh tế, Trường Đại học Kinh tế – Đại học Huế) dưới sự hướng dẫn khoa học của TS. Nguyễn Đình Hoa Cương vào tháng 5 năm 2017. Bối cảnh thực tiễn của đề tài gắn liền với đợt thực tập tốt nghiệp của tác giả tại Công ty FPT Software Đà Nẵng nhằm tiếp cận dữ liệu và ứng dụng kiến thức thuật toán vào môi trường phát triển thực tế.
Bài toán người du lịch (Traveling Salesman Problem – TSP) là một trong những bài toán kinh điển thuộc lớp tối ưu tổ hợp. Vấn đề cốt lõi mà đề tài giải quyết xuất phát từ việc tìm kiếm một hành trình tối ưu đi qua $n$ thành phố, mỗi thành phố đúng một lần rồi quay trở lại điểm xuất phát sao cho tổng quãng đường là ngắn nhất. Dù phát biểu đơn giản, TSP thuộc lớp bài toán NP-đầy đủ (NP-Complete) và NP-khó (NP-Hard). Khi số lượng thành phố tăng lên, số lượng chu trình khả dĩ bùng nổ theo hàm giai thừa $(n-1)!$, khiến các thuật toán duyệt toàn bộ (vét cạn) hoàn toàn bất khả thi về mặt thời gian tính toán. Việc giải quyết các bài toán NP-đầy đủ như TSP còn là tiền đề lý thuyết quan trọng để nghiên cứu vấn đề thiên niên kỷ liệu $P = NP$ trong lý thuyết độ phức tạp tính toán. Nhằm vượt qua rào cản thời gian, thuật toán di truyền (Genetic Algorithm – GA) được lựa chọn như một phương pháp tìm kiếm heuristic phỏng sinh học hiệu quả, có khả năng tìm kiếm nghiệm xấp xỉ tối ưu trong thời gian chấp nhận được.
Mục tiêu nghiên cứu của khóa luận được phân định thành:
- Mục tiêu tổng quát: Dựa trên các nghiên cứu cụ thể về bài toán người du lịch và thuật toán di truyền để xây dựng chương trình phần mềm giải quyết bài toán, đồng thời kiểm thử tính hiệu quả của thuật toán.
- Các mục tiêu cụ thể:
- Nghiên cứu cơ sở lý luận về bài toán người du lịch cũng như thuật toán di truyền: lịch sử hình thành, tư tưởng toán học và các bước thực hiện.
- Nghiên cứu phương pháp cài đặt thuật toán bằng ngôn ngữ lập trình Java theo mô hình hướng đối tượng.
- Tiến hành kiểm thử chương trình, đánh giá tính hiệu quả và thời gian thực thi của thuật toán di truyền so với thuật toán duyệt sâu.
Đối tượng và phạm vi nghiên cứu:
- Đối tượng nghiên cứu: Thuật toán di truyền và cơ chế ứng dụng để giải quyết bài toán người du lịch.
- Phạm vi nghiên cứu: Đề tài tập trung vào không gian bài toán TSP đối xứng hai chiều, trong đó mỗi thành phố được biểu diễn bằng tọa độ Descartes phẳng $(x, y)$, khoảng cách giữa hai thành phố là khoảng cách Euclid; phạm vi công nghệ giới hạn trong việc xây dựng ứng dụng độc lập trên nền tảng Java; phạm vi thời gian nghiên cứu và thực nghiệm hoàn thành vào tháng 5 năm 2017.
Cơ sở lý thuyết và phương pháp
Cơ sở lý thuyết của khóa luận được xây dựng dựa trên hai trụ cột chính: lý thuyết độ phức tạp tính toán của bài toán TSP và nguyên lý tiến hóa của thuật toán di truyền:
- Lý thuyết bài toán người du lịch: Khóa luận hệ thống hóa lịch sử từ trò chơi Icosian năm 1857 của William Rowan Hamilton (với đồ thị 20 đỉnh), nghiên cứu toán học của Karl Menger (1930), Hassler Whitney, Merrill Flood tại Đại học Princeton và RAND Corporation. Năm 1972, Richard Karp đã chứng minh bài toán chu trình Hamilton thuộc lớp NP-đầy đủ, khẳng định không tồn tại thuật toán thời gian đa thức để giải chính xác bài toán trừ khi chứng minh được $P = NP$.
- Lý thuyết độ phức tạp tính toán: Văn bản phân định bốn lớp độ phức tạp cơ bản gồm lớp $P$ (Polynomial time), lớp $NP$ (Nondeterministic Polynomial time), lớp $NP$-Complete và lớp $NP$-Hard.
- Nguyên lý thuật toán di truyền: Bắt nguồn từ công trình nghiên cứu hệ thống thích nghi tự nhiên của John Holland tại Đại học Michigan trong thập niên 1960 và cuốn sách nền tảng "Adaptation in Natural and Artificial Systems" (1975). GA mô phỏng chọn lọc tự nhiên và di truyền học, vận hành qua các khái niệm quần thể (population), cá thể/nhiễm sắc thể (chromosome), gen (gene), hàm thích nghi (fitness function) và các toán tử: chọn lọc (selection), lai ghép (crossover), đột biến (mutation).
- Các công trình liên quan: Tác giả đã tổng quan 10 tài liệu tiêu biểu trong và ngoài nước, bao gồm: nghiên cứu lập lịch bệnh viện của Bùi Thu Lâm và Phan Việt Anh (2010); xếp thời khóa biểu tín chỉ của Nguyễn Thanh Bình và Trương Công Tuấn; phân lớp dữ liệu Random Forest kết hợp KPCA và GA của Nguyễn Hà Nam; bộ giải nhanh TSP trên Java của Hiroaki Sengoku và Ikuo Yoshihara; nghiên cứu toán tử lai và biểu diễn của P. Larranaga và cộng sự; giải thuật tìm kiếm di truyền địa phương của Bernd Freisleben và Peter Merz; toán tử lai ghép cấu trúc tuần tự SCX của Ahmed; kỹ thuật tránh toán tử đặc biệt của Gokturk Ucoluk; mô hình GA cho TSP của Potvin; điều kiện dừng bằng chuỗi Markov của Safe và cộng sự; cùng tài liệu hướng dẫn GA của Darrell Whitley.
Phương pháp nghiên cứu thực hiện trong đề tài bao gồm:
- Phương pháp nghiên cứu tài liệu: Thu thập, tổng hợp các công trình khoa học, sách chuyên khảo, tài liệu lý thuyết đồ thị và giải thuật tiến hóa.
- Phương pháp hỏi ý kiến chuyên gia: Tham vấn giảng viên hướng dẫn và các nhà nghiên cứu trong ngành để hoàn thiện giải pháp kỹ thuật.
- Phương pháp phân tích thiết kế hướng đối tượng (OOAD): Mô hình hóa các thực thể của bài toán thành các lớp đối tượng tường minh trong ngôn ngữ Java.
- Phương pháp thực nghiệm và kiểm thử: Đo lường thời gian chạy và chất lượng nghiệm trên các bộ dữ liệu mô phỏng, đồng thời đối chiếu hiệu năng với thuật toán duyệt sâu (DFS – Depth First Search).
Nguồn dữ liệu sử dụng trong nghiên cứu:
- Dữ liệu tọa độ điểm hai chiều do người dùng nhập trực tiếp từ giao diện dòng lệnh.
- Dữ liệu sinh ngẫu nhiên tự động bởi chương trình dựa trên số lượng thành phố $N$ yêu cầu.
- Dữ liệu đọc từ tập tin văn bản cấu trúc lưu tại đường dẫn
E:\input.txt với định dạng mỗi dòng gồm ba trường: <số thứ tự thành phố> <tung độ> <hoành độ>.
Thiết kế và triển khai
Hệ thống được xây dựng bằng ngôn ngữ lập trình Java, sử dụng phương pháp lập trình hướng đối tượng nhằm phản ánh trực quan các thành phần của bài toán người du lịch và các cơ chế tiến hóa sinh học.
Kiến trúc phần mềm bao gồm 5 lớp đối tượng chính:
- Lớp
ThanhPho: Biểu diễn một đỉnh trên đồ thị với hai tọa độ thực $x$ (hoành độ) và $y$ (tung độ). Lớp cung cấp phương thức khoangCachToi(ThanhPho) tính khoảng cách Euclid theo công thức:
$$d = \sqrt{(x_1 - x_2)^2 + (y_1 - y_2)^2}$$
- Lớp
DanhSachThanhPho: Sử dụng cấu trúc danh sách động tĩnh ArrayList<ThanhPho> để lưu trữ toàn bộ các điểm đến cần ghé thăm, quản lý thuộc tính thanhPhoBatDau và cung cấp các phương thức truy xuất, định danh thành phố.
- Lớp
ChuTrinh: Biểu diễn một cá thể (nhiễm sắc thể) trong quần thể, chứa một hành trình khép kín thông qua ArrayList<ThanhPho>. Lớp cài đặt phương thức taoChuTrinh() khởi tạo ngẫu nhiên bằng cách hoán vị danh sách thông qua Collections.shuffle(), phương thức tính tổng độ dài getKhoangCach() và hàm thích nghi getDoThichNghi():
$$f(x) = \frac{1}{d(x)}$$
trong đó $d(x)$ là tổng độ dài chu trình $x$. Phương thức toString() chịu trách nhiệm định dạng chuỗi kết quả hành trình theo thứ tự bắt đầu từ thành phố khởi hành được chỉ định.
- Lớp
QuanThe: Quản lý tập hợp các cá thể chu trình dưới dạng mảng ChuTrinh[] quanThe, hỗ trợ khởi tạo quần thể ban đầu với kích thước xác định và phương thức layChuTrinhTotNhat() để tìm cá thể có độ thích nghi cao nhất.
- Lớp
ThuatToanDiTruyen: Chịu trách nhiệm thực thi các toán tử tiến hóa cốt lõi:
- Cơ chế biểu diễn nhiễm sắc thể: Sử dụng biểu diễn theo lộ trình (path representation) dưới dạng dãy hoán vị các thành phố.
- Toán tử chọn lọc: Sử dụng phương pháp giao đấu (tournament selection) với quy mô nhóm giao đấu là 5 cá thể (
nhomChuTrinh = new QuanThe(5, false)). Lớp lấy ngẫu nhiên 5 chu trình trong quần thể và chọn ra cá thể có độ thích nghi cao nhất.
- Toán tử lai ghép: Hiện thực cơ chế lai bảo toàn thứ tự để tránh trùng lặp thành phố. Thuật toán chọn ngẫu nhiên hai vị trí
diemDau và diemCuoi từ chu trình cha để sao chép nguyên vẹn sang chu trình con, sau đó duyệt chu trình mẹ để bổ sung các thành phố chưa có theo đúng thứ tự xuất hiện.
- Toán tử đột biến: Duyệt qua các vị trí trong chu trình, tiến hành hoán đổi ngẫu nhiên hai thành phố với nhau theo xác suất đột biến (tham số khai báo trong mã nguồn là
private static double tiLeDotBien = 0.015, tương ứng 1,5%, trong khi phần thuyết minh mô tả ghi tỷ lệ 15%).
- Chiến lược tiến hóa: Áp dụng cơ chế ưu tú (elitism) bằng cách giữ lại cá thể tốt nhất của thế hệ trước đưa thẳng vào vị trí đầu tiên của thế hệ mới (
quanTheMoi.luuChuTrinh(0, quanThe.layChuTrinhTotNhat())), các cá thể còn lại được sinh ra thông qua chọn lọc, lai ghép và đột biến.
- Lớp
XuLyBaiToan: Chứa hàm main, quản lý luồng tương tác với người dùng qua Scanner, khởi tạo quần thể gồm 50 cá thể (new QuanThe(50, true)), thực thi vòng lặp tiến hóa qua 10.000 thế hệ và in kết quả chu trình tối ưu tìm được cùng tổng độ dài.
Chương trình cung cấp ba phương thức nạp dữ liệu: khai báo thủ công các đối tượng ThanhPho(x, y), sinh ngẫu nhiên số lượng thành phố qua hàm Math.random(), và đọc tệp E:\input.txt sử dụng bộ tách ký tự khoảng trắng docFile.useDelimiter(" ").
Nội dung chính theo từng chương
Chương 1: Cơ sở lý luận
Chương 1 tập trung làm rõ bản chất toán học của bài toán người du lịch, cơ sở của lý thuyết độ phức tạp tính toán và các nguyên lý của giải thuật di truyền.
Tác giả phân tích bảng tiến trình lịch sử giải quyết kích thước bài toán TSP qua các giai đoạn nghiên cứu thực nghiệm:
| Năm |
Nhà nghiên cứu |
Quy mô thành phố giải được |
| 1954 |
G. Dantzig, R. Fulkerson, S. Johnson |
49 thành phố |
| 1971 |
S. Lin, B. Kernighan |
64 thành phố |
| 1975 |
P. M. Camerini, L. Fratta, F. Maffioli |
67 thành phố |
| 1977 |
M. Grötschel |
120 thành phố |
| 1980 |
H. Crowder, M. Padberg |
318 thành phố |
| 1987 |
M. Padberg, G. Rinaldi |
532 thành phố |
| 1987 |
M. Grötschel, O. Holland |
666 thành phố |
| 1987 |
M. Padberg, G. Rinaldi |
2.392 thành phố |
| 1998 |
D. Applegate, R. Bixby, V. Chvátal, W. Cook |
13.509 thành phố |
| 2001 |
D. Applegate, R. Bixby, V. Chvátal, W. Cook |
15.112 thành phố |
| 2006 |
D. Applegate, R. Bixby, V. Chvátal, W. Cook, K. Helsgaun |
85.900 thành phố |
Chương này cũng minh họa sự bùng nổ tổ hợp của không gian tìm kiếm TSP thông qua số lượng chu trình Hamilton trên đồ thị đầy đủ gồm $n$ đỉnh theo công thức $(n-1)!$:
| Số đỉnh |
Số cạnh |
Số lượng chu trình |
| 6 |
15 |
120 |
| 7 |
21 |
720 |
| 8 |
28 |
5.040 |
| 9 |
36 |
40.320 |
| 10 |
45 |
362.880 |
| 11 |
55 |
3.628.800 |
| 12 |
66 |
$3{,}216451 \times 10^{17}$ |
Văn bản ghi nhận khi số đỉnh đạt tới 20, số lượng chu trình cần duyệt qua vượt quá 121 triệu tỷ chu trình, chứng minh phương pháp vét cạn hoàn toàn bất khả thi đối với máy tính hiện đại. Bên cạnh đó, chương 1 trình bày chi tiết các dạng biểu diễn cá thể (lộ trình, thứ tự, liền kề), các kỹ thuật chọn lọc (vòng quay Roulette, giao đấu), kỹ thuật đột biến đảo bit, đổi chỗ, và khảo sát tổng quan 10 nghiên cứu khoa học liên quan trực tiếp đến ứng dụng GA.
Chương 2: Cài đặt thuật toán di truyền để giải bài toán người du lịch
Chương 2 trình bày chi tiết quá trình hiện thực hóa giải thuật trên ngôn ngữ lập trình Java. Tác giả phân tích thiết kế hướng đối tượng qua biểu đồ lớp (Class Diagram), phân chia cấu trúc thành 4 lớp dữ liệu (ThanhPho, DanhSachThanhPho, ChuTrinh, QuanThe) và 1 lớp thuật toán (ThuatToanDiTruyen).
Nội dung chương mô tả đầy đủ các đoạn mã nguồn hiện thực:
- Thiết lập cách tính khoảng cách Euclid giữa các tọa độ điểm thực.
- Mã hóa hành trình dưới dạng lộ trình không lặp đỉnh.
- Hiện thực toán tử chọn lọc giao đấu với quy mô nhóm ngẫu nhiên bằng 5.
- Cài đặt toán tử lai ghép cắt - dán bảo toàn tính hợp lệ của chu trình.
- Cài đặt toán tử đột biến hoán vị vị trí hai thành phố ngẫu nhiên.
- Xây dựng 3 cơ chế nạp dữ liệu đầu vào: nhập cố định qua hàm khởi tạo, sinh ngẫu nhiên qua vòng lặp, và đọc dữ liệu từ tệp tin
E:\input.txt.
Chương 3: Thí nghiệm chương trình
Theo danh mục mục lục và danh mục biểu bảng của khóa luận, Chương 3 tập trung vào việc đánh giá thực nghiệm chương trình đã cài đặt thông qua ba nội dung:
- Thí nghiệm chương trình với số thành phố tăng dần: Khảo sát thời gian thực thi của thuật toán khi quy mô bài toán mở rộng (được tổng hợp tại Bảng 3.1 và Biểu đồ 3.1).
- Thí nghiệm kết quả chương trình với số thế hệ tăng dần: Khảo sát mức độ cải thiện của hàm thích nghi và độ dài chu trình ngắn nhất tìm được khi tăng số lượng thế hệ lặp (được tổng hợp tại Bảng 3.2).
- So sánh thời gian chạy của thuật toán di truyền với thuật toán duyệt sâu (DFS): Đo lường sự chênh lệch về thời gian xử lý giữa thuật toán heuristic di truyền và thuật toán tìm kiếm vét cạn duyệt sâu khi số đỉnh tăng lên (được tổng hợp tại Bảng 3.3 và Biểu đồ 3.2).
Kết quả và đóng góp
Khóa luận đã đạt được các kết quả kỹ thuật và đóng góp cụ thể sau:
- Xây dựng thành công ứng dụng Java hoàn chỉnh giải quyết bài toán TSP bằng thuật toán di truyền theo phương pháp lập trình hướng đối tượng, cung cấp cấu trúc mã nguồn tường minh và dễ mở rộng.
- Hệ thống hóa bộ tham số cấu hình thực nghiệm của thuật toán:
| Thành phần / Tham số |
Giá trị cài đặt trong khóa luận |
| Ngôn ngữ phát triển |
Java |
| Phương pháp mã hóa |
Biểu diễn theo lộ trình (Path representation) |
| Kích thước quần thể |
50 cá thể |
| Phương pháp chọn lọc |
Giao đấu (Tournament selection) với quy mô nhóm 5 cá thể |
| Cơ chế lai ghép |
Cắt đoạn cha ngẫu nhiên, điền bù từ mẹ bảo toàn thứ tự |
| Cơ chế đột biến |
Hoán đổi vị trí ngẫu nhiên hai thành phố |
| Tỷ lệ đột biến |
Khai báo mã nguồn: 0,015 (thuyết minh văn bản ghi 15%) |
| Chiến lược thế hệ |
Giữ lại 1 cá thể tốt nhất (Elitism) |
| Điều kiện dừng |
Cố định số thế hệ tiến hóa (10.000 vòng lặp trong hàm main) |
| Hàm mục tiêu thích nghi |
$f(x) = 1 / d(x)$ ($d(x)$ là tổng độ dài Euclid của chu trình) |
- Giải pháp và kiến nghị của tác giả: Đề xuất sử dụng thuật toán di truyền như một giải pháp thay thế hiệu quả cho các phương pháp duyệt toàn bộ khi giải quyết bài toán TSP quy mô lớn; định hướng ứng dụng thuật toán vào các bài toán thực tiễn như định tuyến vận tải, bài toán tìm đường đi ngắn nhất giữa các đô thị trong các hệ thống bản đồ số.
- Đóng góp so với các nghiên cứu trước: Tác giả tự nêu việc xây dựng chương trình minh họa trực quan trên Java giúp người học dễ tiếp cận cơ chế sinh học của GA; đồng thời thực hiện kiểm chứng so sánh thực nghiệm giữa thuật toán di truyền và thuật toán duyệt sâu (DFS) nhằm cung cấp minh chứng định lượng về giới hạn của thuật toán vét cạn trên không gian bài toán NP-đầy đủ.
Hạn chế và hướng nghiên cứu tiếp
Khóa luận ghi nhận các hạn chế và hướng mở nghiên cứu dựa trên văn bản:
- Hạn chế:
- Điều kiện dừng của thuật toán mới chỉ áp dụng phương án đơn giản là đặt số lần lặp thế hệ cố định, chưa cài đặt các điều kiện dừng nâng cao như giới hạn hội tụ của hàm thích nghi hoặc mô hình xác suất chuỗi Markov (như nghiên cứu của Safe và cộng sự đã chỉ ra).
- Tỷ lệ đột biến và kích thước quần thể được thiết lập dưới dạng hằng số cố định, chưa có cơ chế điều chỉnh thích nghi linh hoạt theo từng giai đoạn tiến hóa.
- Không gian bài toán mới dừng lại ở mô hình tọa độ phẳng hai chiều đối xứng với khoảng cách hình học thuần túy, chưa xét đến các ràng buộc thực tế như mạng lưới giao thông một chiều, lưu lượng tắc nghẽn hay bài toán TSP có hướng.
- Hướng nghiên cứu tiếp:
- Nghiên cứu và thử nghiệm các điều kiện dừng tối ưu dựa trên biến thiên độ thích nghi giữa các thế hệ liên tiếp.
- Tích hợp các toán tử lai ghép chuyên biệt có hiệu năng cao hơn như phép lai cấu trúc tuần tự (SCX), phép lai tái kết nối cạnh (ERX) hoặc kết hợp thuật toán tìm kiếm địa phương (Genetic Local Search).
- Mở rộng ứng dụng trên dữ liệu địa lý thực tế từ hệ thống bản đồ số với đồ thị có trọng số phức tạp.
Giá trị tham khảo
Tài liệu khóa luận có giá trị tham khảo thiết thực đối với:
- Sinh viên các ngành Hệ thống Thông tin Kinh tế, Tin học Kinh tế, Công nghệ Thông tin và Khoa học Máy tính đang học tập các học phần về Lý thuyết đồ thị, Cấu trúc dữ liệu và giải thuật, hoặc Trí tuệ nhân tạo.
- Người nghiên cứu đang tìm kiếm mã nguồn mẫu viết bằng Java cài đặt thuật toán di truyền theo chuẩn thiết kế hướng đối tượng (OOP) rõ ràng, phục vụ cho các bài toán tối ưu tổ hợp.
- Nội dung tổng quan ở Chương 1 là tài liệu tham khảo súc tích về lịch sử giải bài toán TSP, các lớp độ phức tạp thuật toán và tổng kết các hướng tiếp cận toán tử lai ghép trong GA.
Câu hỏi thường gặp
-
Khóa luận sử dụng phương pháp biểu diễn cá thể nào cho bài toán người du lịch?
Khóa luận sử dụng phương pháp biểu diễn theo lộ trình (path representation). Trong phương pháp này, mỗi cá thể (chu trình) là một dãy hoán vị chứa đầy đủ các thành phố theo đúng thứ tự cần ghé thăm. Để thuận tiện cho việc thực hiện các toán tử di truyền, thành phố bắt đầu chỉ được liệt kê một lần trong mảng và chỉ được bổ sung điểm khép kín khi hiển thị kết quả.
-
Hàm tính độ thích nghi (fitness) trong chương trình được xác định như thế nào?
Hàm thích nghi được xác định tỷ lệ nghịch với tổng độ dài của chu trình theo công thức $f(x) = 1 / d(x)$, trong đó $d(x)$ là tổng khoảng cách Euclid giữa các thành phố liên tiếp trong chu trình $x$ (bao gồm cả chặng quay về điểm xuất phát). Chu trình có tổng quãng đường càng ngắn thì giá trị $f(x)$ càng lớn, thể hiện cá thể có độ thích nghi càng cao.
-
Toán tử chọn lọc trong chương trình Java được cài đặt theo kỹ thuật nào?
Chương trình sử dụng phương pháp chọn lọc giao đấu (tournament selection). Cụ thể, thuật toán tạo một nhóm gồm 5 cá thể ngẫu nhiên rút ra từ quần thể hiện tại (new QuanThe(5, false)), sau đó so sánh độ thích nghi giữa các cá thể trong nhóm và chọn ra cá thể có độ thích nghi cao nhất để làm cha mẹ tham gia vào quá trình lai ghép.
-
Chương trình hỗ trợ những hình thức nhập dữ liệu đầu vào nào?
Chương trình hỗ trợ 3 hình thức nhập dữ liệu:
- Nhập thủ công các điểm tọa độ cố định trong mã nguồn bằng cách khởi tạo các đối tượng
ThanhPho(x, y).
- Nhập số lượng $N$ thành phố từ bàn phím để chương trình tự động sinh tọa độ thực ngẫu nhiên thông qua hàm
Math.random().
- Đọc dữ liệu danh sách thành phố từ tệp văn bản lưu tại đường dẫn
E:\input.txt, trong đó mỗi dòng lưu trữ ba thông tin gồm số thứ tự, tung độ và hoành độ, phân cách nhau bằng dấu khoảng trắng.
- Tại sao thuật toán duyệt sâu (DFS) không thể áp dụng cho bài toán TSP khi số lượng thành phố lớn?
Khi giải bài toán TSP bằng phương pháp vét cạn qua duyệt sâu, số lượng chu trình Hamilton cần phải kiểm tra trên đồ thị đầy đủ gồm $n$ đỉnh là $(n-1)!$. Với $n = 12$, số chu trình đã lên tới hơn $3{,}216 \times 10^{17}$, và với $n = 20$, số chu trình vượt quá 121 triệu tỷ. Không gian tìm kiếm tăng theo hàm giai thừa vượt xa năng lực xử lý của máy tính hiện nay, đòi hỏi phải sử dụng các thuật toán tìm kiếm xấp xỉ gần đúng như thuật toán di truyền.
Kết luận
Khóa luận tốt nghiệp của sinh viên Thái Công Danh đã hoàn thành việc nghiên cứu cơ sở lý luận và hiện thực hóa thuật toán di truyền để giải quyết bài toán tối ưu tổ hợp người du lịch trên nền tảng Java. Đề tài đã phân tích bản chất NP-đầy đủ của bài toán, xây dựng kiến trúc hướng đối tượng hoàn chỉnh cho các toán tử chọn lọc giao đấu, lai ghép bảo toàn hoán vị và đột biến hoán đổi vị trí. Các thực nghiệm kiểm thử và so sánh với thuật toán duyệt sâu đã khẳng định tính khả thi của giải thuật di truyền trong việc tìm kiếm lời giải gần tối ưu với chi phí thời gian chấp nhận được.