CHƯƠNG 2 BÀI TOÁNBài toán Người du lịch, tìm đường đi ngắn nhất cho người thương nhânsalesman, hay còn gọi là người chào hàng xuất phát từ một thành phố, đi qua lần lượttất cả các thành
Trang 1ĐẠI HỌC QUỐC GIA TP.HỒ CHÍ MINH
TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN
Tháng 10/2014
Trang 2Mục Lục
CHƯƠNG 1 GIỚI THIỆU 7
CHƯƠNG 2 BÀI TOÁN 8
CHƯƠNG 3 CƠ SỞ LÝ THUYẾT 9
3.1 Các khái niệm cơ bản về đồ thị 9
3.1.1 Định nghĩa đồ thị 9
3.1.2 Các thuật ngữ cơ bản 10
3.1.3 Đường đi, chu trình và đồ thị liên thông 12
3.1.4 Chu trình Euler 13
3.1.5 Chu trình Hamilton 13
3.1.6 Đồ thị có trọng số 14
3.1.7 Các cấu trúc dữ liệu biểu diễn đồ thị 15
3.2 Khái niệm về lớp các bài toán P và NP 16
3.2.1 Khái niệm các loại thời gian tính 16
3.2.2 Bằng chứng ngắn gọn dễ kiểm tra 17
3.2.3 Khái niệm quy dẫn 18
3.2.4 Lớp bài toán P 18
3.2.5 Lớp bài toán NP 18
3.2.6 Lớp bài toán Co-NP 18
3.2.7 Lớp bài toán NP-đầy đủ (NP-Complete) 19
3.2.8 Lớp bài toán NP- khó (NP-Hard) 19
3.3 Mô hình phân lớp các bài toán 20
CHƯƠNG 4 THUẬT TOÁN BẦY KIẾN 23
4.1 Ý tưởng 23
4.2 Thuật toán 24
4.3 Quá trình phát triển 27
4.4 Demo 28
CHƯƠNG 5 KẾT LUẬN 31
Trang 4Bảng viết tắt
(Tối ưu hóa bầy kiến)
(Bài toán người du lịch/chào hang)
(Bài toán lập lịch sản xuất)
(Thuật toán tiến hóa)
Trang 5LỜI MỞ ĐẦU
Tìm đường đi ngắn nhất là một trong những bài toán luôn luôn thu hút giới nghiêncứu Làm sao có thể tìm được đường đi ngắn nhất từ 1 điểm đến 1 điểm khác một cách
ít tốn chi phí nhất trên một bản đồ có thể có những chướng ngại vật
Hiện nay đã có rất nhiều thuật toán, công trình nghiên cứu về tìm đường đi ngắnnhất ứng với từng hoàn cảnh khác nhau Áp dụng tất cả những gì tự nhiên vào trongmáy tính là một trong những bước chuyển biến mang tính chất đột phá của khoa họcmáy tính Vì những gì ngoài tự nhiên thì đã tồn tại rất lâu rồi, đã được đút kết rất nhìukinh nghiệm, do vậy áp dụng nó vào máy tính sẽ đạt được mức độ tối ưu nhất định.Các bài toán thực tế được nghiên cứu tìm ra những ưu điểm của nó để áp dụng vàotrong những hệ thống trên máy tính Các hệ thống này gọi là hệ thống mô phỏng sinhhọc
Một trong những mô hình tính toán mô phỏng hoạt động sinh học ngoài đời thựcvào trong máy tính tốt nhất cho các bài toán tối ưu tổ hợp, đó chính là mô hình giảithuật bầy kiến Mô phỏng lối di chuyển ngoài đời thực của bầy kiến
Trong bài báo cáo này sẽ mô phỏng cách duy chuyển, hoạt động của bầy kiến, từ
đó mô hình nên giải thuật bầy kiến Áp dụng trong bài toán người du lịch (TSP –Travelling Saleman Prolem)
Bài toán người du lịch là một trong những bài toán kinh điển và khó trong tin học
Và cũng có rất nhiều giải pháp thuật toán cho bài toán này Và trong báo cáo này sẽ
mô tả một các tiếp cần theo mô hình sinh học, tự nhiên mà cách di chuyển của đànkiếm sẽ áp dụng cho người du lịch
Trang 6CHƯƠNG 1 GIỚI THIỆU
Hệ thống tính toán phỏng sinh học được phát triển theo nguyên lý chung là dựa vàocác hiện tượng sinh học tự nhiên Các tính toán này bao gồm lớp các thuật toán môphỏng sinh học (EA – Evolutionary Algorithm) trong đó chứa các giải thuật tìm kiếmdựa trên tri thức kinh nghiệm Các tri thức này được sử dụng để tìm kiếm các lời giảitốt cho các bài toán khó Các tính toán này sẽ tìm lời giải tốt hơn những lời giải đã cótrước, đặt biệt phù hợp với những bài toàn không tồn tại lời giải hiệu quả Các giảithuật này thường đơn giản, mang tính chất tổng quát và có thể áp dụng trong các bàitoán tìm kiếm và tối ưu
Để tìm được lời giải tối ưu hơn lời giải trước người ta xây dựng phương pháp gọi
là Heuristic Phương pháp Heuristic thể hiện lối suy nghĩ tự nhiên, gần gũi với cáchsuy nghĩ của con người
Áp dụng những nguyên lý:
- Nguyên lý vét cạn thông minh: khi không gian tìm kiếm lớn, thường sẽgiới hạn lại không gian tìm kiếm hoặc thực hiện một kiểu dò tìm nào đódựa trên một số đặt trưng của bài toán để nhanh chống tìm ra mục tiêu
- Nguyên lý tham lam: lấy tiêu chuẩn tối ưu trên phạm vi toàn cục để làmtiêu chuẩn lựa chọn hành động cho phạm vi cục bộ của từng bước (giaiđoạn) trong quá trình tìm kiếm lời giải
- Nguyên lý thứ tự: Thực hiện hành động dựa trên một cấu trúc thứ tự hợp
lý của không gian khảo sát nhằm nhanh chóng đạt được một lời giải tốt
- Hàm Heuristic: Trong việc xây dựng các thuật giải Heuristic, người tathường dùng các hàm Heuristic Ðó là các hàm đánh giá thô, giá trị củahàm phụ thuộc vào trạng thái hiện tại của bài toán tại mỗi bước giải Nhờgiá trị này, ta có thể chọn được cách hành động tương đối hợp lý trongtừng bước của thuật giải
Với những đặc trưng như vậy, Heuristic đã được áp dụng rất nhiều trong nhữngbài toán khó Thuật toán bầy kiến là một phương pháp Heuristic vận dụng nhữngnguyên lý trên để tìm lời giải hợp lý cho bài toàn người du lịch
Trang 7CHƯƠNG 2 BÀI TOÁN
Bài toán Người du lịch, tìm đường đi ngắn nhất cho người thương nhân(salesman), hay còn gọi là người chào hàng xuất phát từ một thành phố, đi qua lần lượttất cả các thành phố duy nhất một lần và quay về thành phố ban đầu với chi phí rẻnhất, được phát biểu vào thế kỷ 17 bởi hai nhà toán học vương quốc Anh là SirWilliam Rowan Hamilton và Thomas Penyngton Kirkman, và được ghi trong cuốngiáo trình Lý thuyết đồ thị nổi
tiếng của Oxford Nó nhanh chóngtrở thành bài toán khó thách thức toànthế giới bởi độ phức tạp thuật toántăng theo hàm số mũ (trong chuyênngành thuật toán người ta còn gọichúng là những bài toán NP-khó).Người ta bắt đầu thử và công bố cáckết quả giải bài toán này trên máy tính từ năm
1954 (49 đỉnh), cho đến năm 2004 bài toán giải
được với số đỉnh lên tới 24.978, và dự báo sẽ còn tiếp tục tăng cao nữa Bài toán có thểphát biểu dưới ngôn ngữ đồ thị như sau :Cho đồ thị n đỉnh đầy đủ và có trọng số G=(V-tập đỉnh,E-tập cạnh) có hoặc vô hướng.Tìm chu trình Halmilton có trọng số là nhỏ nhất
l
Trang 8CHƯƠNG 3 CƠ SỞ LÝ THUYẾT
3.1 Các khái niệm cơ bản về đồ thị
3.1.1 Định nghĩa đồ thị
Trong toán học và tin học, đồ thị là đối tượng nghiên cứu cơ bản của lý thuyết đồthị Một cách không chính thức, đồ thị là một tập các đối tượng gọi là đỉnh nối với nhau bởi các cạnh Thông thường, đồ thị được vẽ dưới dạng một tập các điểm (đỉnh,
nút) nối với nhau bởi các đoạn thẳng (cạnh) Tùy theo ứng dụng mà một số cạnh có thể
có hướng.Chúng ta phân biệt các loại đồ thị khác nhau bởi kiểu và số lượng cạnh nốihai đỉnh nào đó của đồ thị
Định nghĩa 1.1 Đơn đồ thị vô hướng G=(V,E) bao gồm V là tập các đỉnh, và E là
tập các cặp không có thứ tự gồm hai phần tử khác nhau của V gọi là các cạnh
Định nghĩa 1.2 Đa đồ thị vô hướng G=(V,E) bao gồm V là tập các đỉnh, và E là
họ các cặp không có thứ tự gồm hai phần tử khác nhau của V gọi là các cạnh Hai cạnh
e1 và e2 được gọi là cạnh lặp nếu chúng cùng tương ứng với một cặp đỉnh
Định nghĩa 1.3 Đơn đồ thị có hướng G=(V,E) bao gồm V là tập các đỉnh, và E là
tập các cặp có thứ tự gồm hai phần tử khác nhau của V gọi là các cung
Định nghĩa 1.4 Đa đồ thị có hướng G=(V,E) bao gồm V là tập các đỉnh, và E là
họ các cặp có thứ tự gồm hai phần tử khác nhau của V gọi là các cung Hai cung e1 và
e2 được gọi là cung lặp nếu chúng cùng tương ứng với một cặp đỉnh
Trang 9Hai loại đồ thị cơ bản:
a) Đồ thị vô hướng(6 đỉnh, 9 cạnh) b) Đồ thị có hướng(5 đỉnh, 7 cung)
Định nghĩa 1.5 Đồ thị hỗn hợp G=(V, E, A ) bao gồm V là tập các đỉnh, E là tập
các cạnh (E≠Ø) và A là tập các cung (A ≠Ø) của đồ thị
Đồ thị hỗn hợp(6 đỉnh 5 cạnh, 4 cung)
Số đỉnh của đồ thị G là số phần tử trong V
Chúng ta có thể coi các đồ thị vô hướng và có hướng là các trường hợp riêng của
đồ thị hỗn hợp G=(V, E, A) khi mà A =Ø hoặc E=Ø
3.1.2 Các thuật ngữ cơ bản
Định nghĩa 1.6 Hai đỉnh u và v của đồ thị vô hướng G được gọi là kề nhau nếu
(u,v) là cạnh của đồ thị G Nếu e=(u,v) là cạnh của đồ thị thì chúng ta nói cạnh này làliên thuộc với hai đỉnh u và v, hoặc cũng nói là cạnh e là nối đỉnh u và đỉnh v, đồngthời các đỉnh u và v sẽ được gọi là các đỉnh đầu cuả cạnh (u,v)
Để có thể biết được bao nhiêu cạnh liên thuộc với một đỉnh, chúng ta đưa vào địnhnghĩa sau
Trang 10Định nghĩa 1.7 Chúng ta gọi bậc của đỉnh v trong đồ thị vô hướng là số cạnh liên
thuộc với nó và sẽ kí hiệu là deg(v)
Định lý 1.1 Giả sử G=(V,E) là đồ thị vô hướng với m cạnh Khi đó
Hệ quả 1.1 Trong đồ thị vô hướng, số đỉnh bậc lẻ(nghĩa là có bậc là số lẻ) là một
số chẵn
Định nghĩa 1.8 Nếu e=(u,v) là cung của đồ thị có hướng G thì chúng ta nói hai
đỉnh u và v là kề nhau, và nói cung (u,v) nối đỉnh u và đỉnh v hoặc cũng nói cung này
là đi ra khỏi đỉnh u và đi vào đỉnh v Đỉnh u (v) sẽ được gọi là đỉnh đầu (cuối) củacung (u,v)
Định nghĩa 1.9 Chúng ta gọi bán bậc ra (bán bậc vào) của đỉnh v trong đồ thị có hướng là số cung của đồ thị đi ra khỏi nó (đi vào nó) và ký hiệu làError! Objects cannot be created from editing field codes.
Định lý 1.2 Giả sử G=(V,E) là đồ thị có hướng Khi đó
Tương tự như trên , chúng ta xét các thuật ngữ cơ bản cho đồ thị hỗn hợp
Quy ước Kí hiệu với S là một tập hợp thì #(S) hay |S| là số phần tử của tập S.
Cho đồ thị hỗn hợp G =(V,E,A) Nếu e=(u,v) thuộc E, thì chúng ta nói cạnh e kềvới đỉnh u, và v Nếu e=(u,v) thuộc A, thì chúng ta nói cung e kề với đỉnh u, và v
Định nghĩa 1.10 Cho đồ thị hỗn hợp G=(V, E, A) Kí hiệu deg(v) là bậc của đỉnh
v trong đồ thị Giá trị của deg(v) được tính theo công thức sau:
deg(v)= #(các cạnh kề với đỉnh v)+ # (các cung kề với đỉnh v)
Định nghĩa 1.11 Chúng ta gọi bán bậc ra( bán bậc vào) của đỉnh v trong đồ thị
hỗn hợp G là số cung của đồ thị đi ra khỏi nó (đi vào nó) và kí hiệu là indegree(v)(outdegree(v))
3.1.3 Đường đi, chu trình và đồ thị liên thông
Định nghĩa 1.12 Đường đi độ dài n từ đỉnh u đến đỉnh v, trong đó n là số nguyên
dương, trên đồ thị vô hướng G=(V,E) là dãy
Trang 11trong đó u=x0 , v= xn , (xi,xi+1) E, i = 0,1,2,…,n-1.
Đường đi nói trên còn có thể biểu diễn dưới dạng dãy các cạnh:
(x0, x1), (x1, x2), …, (xn-1, xn).
Đỉnh u gọi là đỉnh đầu, còn đỉnh v gọi là đỉnh cuối của đường đi Đường đi có
đỉnh đầu trùng với đỉnh cuối (tức là u=v) được gọi là chu trình Đường đi hay chu trình được gọi là đơn nếu như không có cạnh nào bị lặp lại
Định nghĩa 1.13 Đường đi độ dài n từ đỉnh u đến đỉnh v, trong đó n là số nguyên
dương, trên đồ thị có hướng G=(V, A) là dãy
x0,x1, …,xn-1,xn
trong đó u=x0 , v= xn , (xi,xi+1) A, i = 0,1,2,…,n-1
Đường đi nói trên còn có thể biểu diễn dưới dạng dãy các cung:
(x0, x1), (x1, x2), …, (xn-1, xn)
Đỉnh u gọi là đỉnh đầu, còn đỉnh v gọi là đỉnh cuối của đường đi Đường đi cóđỉnh đầu trùng với đỉnh cuối (tức là u=v) được gọi là chu trình Đường đi hay chu trìnhđược gọi là đơn nếu như không có cung nào bị lặp lại
Định nghĩa 1.14 Đường đi độ dài n từ đỉnh u đến đỉnh v, trong đó n là số nguyêndương, trên đồ thị hỗn hợp G=(V, E, A) là dãy
Định nghĩa 1.15 Đồ thị vô hướng G=(V, E) được gọi là liên thông nếu luôn tìmđược đường đi giữa hai đỉnh bất kì của nó
Định nghĩa 1.16 Chúng ta gọi đồ thị con của đồ thị G=(V, E) là đồ thị H=(W, F),trong đó W V và F E
Trang 12Trong trường hợp đồ thị là không liên thông, nó sẽ rẽ ra thành một số đồ thị conliên thông đôi một không có đỉnh chung Những đồ thị con liên thông như vậy chúng
ta sẽ gọi là các thành phần liên thông của đồ thị
Định nghĩa 1.17 Đồ thị có hướng G=(V, A) được gọi là liên thông mạnh nếu luôntìm được đường đi giữa hai đỉnh bất kỳ của nó
Định nghĩa 1.18 Đồ thị có hướng G=(V, A) được gọi là liên thông yếu nếu đồ thị
vô hướng tương ứng với nó là đồ thị vô hướng liên thông
Rõ ràng nếu đồ thị là liên thông mạnh thì cũng là liên thông yếu nhưng điều ngượclại là không luôn đúng
3.1.4 Chu trình Euler
Định nghĩa 1.19 Chu trình đơn trong G đi qua mỗi cạnh của nó một lần được gọi
là chu trình Euler Đường đi đơn trong G đi qua mỗi cạnh của nó một lần được gọi làđường đi Euler Đồ thị được gọi là đồ thị Euler nếu nó có chu trình Euler, và gọi là đồthị nửa Euler nếu nó có đường đi Euler
Rõ ràng mọi đồ thị Euler luôn là nửa Euler, nhưng điểu ngược lại không luônđúng
Định lý 1.4 Đồ thị vô hướng liên thông G là đồ thị Euler khi và chỉ khi mọi
đỉnh của G đều có bậc chẵn
Hệ quả 1.2 Đồ thị liên thông G là nửa Euler khi và chỉ khi nó có không quá 2
đỉnh bậc lẻ
Định lý 1.5 Đồ thị có hướng liên thông mạnh là đồ thị Euler khi và chỉ khi
Trên đây chúng ta đã mô tả điều kiện cần và đủ để đồ thị vô hướng và cóhướng là đồ thị Euler Điều kiện cần và đủ để đồ thị hỗn hợp là đồ thị Euler là kháphức tạp và sẽ được trình bày trong phần bài toán người đưa thư Trung Hoa trên đồ thịhỗn hợp
3.1.5 Chu trình Hamilton
Trong toán học, ngành lý thuyết đồ thị, một đường đi Hamilton là một đường đi
trong đồ thị vô hướng đi qua tất cả các đỉnh của đồ thị, mỗi đỉnh đúng một lần Một
Chu trình Hamilton là một đường đi Hamilton sau đi qua tất cả các đỉnh của đồ thị
thì trở về đỉnh xuất phát
Trang 13Một đồ thị có chu trình Hamilton được gọi là đồ thị Hamilton, đồ thị có đường điHamilton được gọi là đồ thị nửa Hamilton.
Bài toán tìm đường đi và chu trình như vậy được gọi là bài toán Hamilton Bàitoán Hamilton là NP đầy đủ
Tên gọi đường đi và chu trình Hamilton là gọi theo tên của William RowanHamilton
3.1.5.1 Định lý Bondy-Chvátal
Cho đồ thị G có n đỉnh, bao đóng cl(G) được tạo ra từ G bằng cách bổ sung cho
mỗi cặp đỉnh không kề nhau u và v với degree(v) + degree(u) ≥ n một cạnh mới uv.
3.1.5.2 Định lý Bondy-Chvátal (1972)
Một đồ thị là Hamilton nếu và chỉ nếu bao đóng của nó là Hamilton
Vì đồ thi đầy đủ là Hamilton, nên tất cả các đồ thị mà bao đóng là đầy đủ làHamilton
tế người ta đưa vào khái niệm đồ thị có trọng số, trên mỗi cạnh hay mỗi cung được gánmột trọng số thể hiện chi phí cho việc thực hiện một mục đích nào đó trên cạnh haytrên cung
Trang 14Định nghĩa 1.20 Chúng ta kí hiệu đồ thị có trọng số là bộ 4 G=(V, E, A, w),
trong đó, w là hàm trọng số
w:, R: tập số thực, ngoài ra còn có thể kí hiệu w bằng c hoặc weight, cost
Cho S là một tập con của EA, khi đó chúng ta kí hiệu w(S)=∑w(s)| sS là giá trị trọng số của tập S.
3.1.7 Các cấu trúc dữ liệu biểu diễn đồ thị
Có nhiều cách khác nhau để lưu trữ các đồ thị trong máy tính Sử dụng cấu trúc
dữ liệu nào thì tùy theo cấu trúc của đồ thị và thuật toán dùng để thao tác trên đồ thị
đó Trên lý thuyết, người ta có thể phân biệt giữa các cấu trúc danh sách và các cấutrúc ma trận Tuy nhiên, trong các ứng dụng cụ thể, cấu trúc tốt nhất thường là kết hợpcủa cả hai Người ta hay dùng các cấu trúc danh sách cho các đồ thị thưa (sparse
graph), do chúng đòi hỏi ít bộ nhớ Trong khi đó, các cấu trúc ma trận cho phép truynhập dữ liệu nhanh hơn, nhưng lại cần lượng bộ nhớ lớn nếu đồ thị có kích thước lớn
3.1.7.1 Các cấu trúc danh sách
Danh sách liên thuộc (Incidence list) - Mỗi đỉnh có một danh sách các cạnh nối
với đỉnh đó Các cạnh của đồ thị được có thể được lưu trong một danh sách riêng (cóthể cài đặt bằng mảng (array) hoặc danh sách liên kết động (linked list)), trong đó mỗi
phần tử ghi thông tin về một cạnh, bao gồm: cặp đỉnh mà cạnh đó nối (cặp này sẽ cóthứ tự nếu đồ thị có hướng), trọng số và các dữ liệu khác Danh sách liên thuộc củamỗi đỉnh sẽ chiếu tới vị trí của các cạnh tương ứng tại danh sách cạnh này
Danh sách kề (Adjacency list) - Mỗi đỉnh của đồ thị có một danh sách các đỉnh kề
nó (nghĩa là có một cạnh nối từ đỉnh này đến mỗi đỉnh đó) Trong đồ thị vô hướng, cấutrúc này có thể gây trùng lặp Chẳng hạn nếu đỉnh 3 nằm trong danh sách của đỉnh 2thì đỉnh 2 cũng phải có trong danh sách của đỉnh 3 Lập trình viên có thể chọn cách sửdụng phần không gian thừa, hoặc có thể liệt kê các quan hệ kề cạnh chỉ một lần Biểudiễn dữ liệu này thuận lợi cho việc từ một đỉnh duy nhất tìm mọi đỉnh được nối với nó,
do các đỉnh này đã được liệt kê tường minh
Trang 153.1.7.2 Các cấu trúc ma trận
Ma trận liên thuộc (Incidence matrix) - Đồ thị được biểu diễn bằng một ma trận
[b ij ] kích thước p × q, trong đó p là số đỉnh và q là số cạnh, b ij = 1 chứa dữ liệu về quan
hệ giữa đỉnh v i và cạnh x j Đơn giản nhất: b ij = 1 nếu đỉnh v i là một trong 2 đầu của
Ma trận dẫn nạp (Admittance matrix) hoặc ma trận Kirchhoff (Kirchhoff
matrix) hay ma trận Laplace (Laplacian matrix) - được định nghĩa là kết quả thu được
khi lấy ma trận bậc (degree matrix) trừ đi ma trận kề Do đó, ma trận này chứa thôngtin cả về quan hệ kề (có cạnh nối hay không) giữa các đỉnh lẫn
3.2 Khái niệm về lớp các bài toán P và NP
3.2.1 Khái niệm các loại thời gian tính
Thời gian tính tốt nhất: là thời gian tính tối thiểu cần thiết để thực hiện thuật toán
với mọi bộ dữ liệu đầu vào kích thước n
Thời gian tính tồi nhất: là thời gian tính tối đa cần thiết để thực hiện thuật toán với
mọi bộ dữ liệu đầu vào có kích thước n
Thời gian tính trung bình: là thời gian tính cần thiết để thực hiện thuật toán trên
một tập hữu hạn các bộ dữ liệu đầu vào có kích thước n Thời gian tính trung bình
được tính theo công thức sau:
Thời gian tính trung bình=(Tổng thời gian tính tất cả các bộ dữ liệu có thể)/ Số bộ
dữ liệu.
Định nghĩa Bài toán quyết định là bài toán mà đầu ra chỉ có thể là ‘yes’ hoặc
‘no’(đúng/sai, 0/1)
Đối với một bài toán quyết định, có những bộ dữ liệu vào cho ra câu trả lời(đầu ra)
là ‘yes’, chúng ta gọi đây là bộ dữ liệu ‘yes’, nhưng cũng có những bộ dữ liệu vào cho
ra câu trả lời là ‘no’, chúng ta gọi những bộ dữ liệu này là bộ dữ liệu ‘no’.