1. Trang chủ
  2. » Luận Văn - Báo Cáo

bài toán người du lịch lý thuyết đồ thị và ứng dụng

30 2K 1

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 30
Dung lượng 624 KB

Nội dung

Với mong muốn bước đầu nghiên cứu về những bài toán tối ưu và cách giảimột số bài toán tối ưu cũng như tìm kiếm những phương pháp có thể giải tốt nhữngbài toán tối ưu, nhóm 5 chúng tôi đ

Trang 1

MỤC LỤC

MỤC LỤC 1

MỞ ĐẦU 2

CHƯƠNG 1: CƠ SỞ LÝ THUYẾT 3

1.1 CÁC KHÁI NIỆM CƠ BẢN 3

1.1.1 Đồ thị, đỉnh, cạnh, cung 3

1.1.2 Đường đi, chu trình, tính liên thông 4

1.2 BIỂU DIỄN ĐỒ THỊ 5

1.2.1 Ma trận kề 5

1.2.1.1 Đồ thị vô hướng 5

1.2.1.2 Đồ thị có hướng 6

1.2.2 Ma trận liên thuộc 6

1.2.2.1 Đồ thị vô hướng 6

1.2.2.2.Đồ thị có hướng 7

1.2 ĐƯỜNG ĐI VÀ ĐỒ THỊ HAMILTON 7

1.2.1 Định nghĩa 1.2.9 7

1.2.2 Điều kiện cần 7

1.2.3 Điều kiện đủ 7

1.2.4 Đồ thị có hướng 9

CHƯƠNG 2 : BÀI TOÁN NGƯỜI DU LỊCH 9

2.1 PHÁT BIỂU BÀI TOÁN 9

2.2 GIẢI QUYẾT BÀI TOÁN 9

2.2.1 Một số phương pháp giải 9

2.2.2.Phương pháp nhánh cận 10

2.2.2.1.Phương pháp 10

2.2.2.2 Cơ sở lý luận của phép toán 10

2.2.2.3 Ma trận rút gọn 11

2.2.2.4 Mệnh đề 12

2.2.2.5 Thủ tục phân nhánh 12

2.2.2.6 Thủ tục chọn cạnh phân nhánh 14

2.2.2.7 Chọn 2 cạnh cuối cùng 17

2.2.2.8 Tính chất tối ưu 20

2.3.CÀI ĐẶT CHƯƠNG TRÌNH 20

2.3.1 Đầu vào 20

2.3.2 Đầu ra 21

2.3.3 Chương trình cài đặt thuật toán nhánh cận cho Bài toán người du lịch theo ngôn ngữ lập trình Pascal 21

KẾT LUẬN 30

Trang 2

MỞ ĐẦU

Lý thuyết đồ thị là ngành khoa học phát triển từ lâu đời nhưng lại có nhiều ứngdụng hiện đại Những ý tưởng cơ bản của nó đã được nhà Toán học Thụy sĩ vĩ đạiLeonhard Euler đưa ra từ thế kỷ 18 Ngày nay, lý thuyết đồ thị đã phát triển thànhToán học có vị trí đăc biệt quan trọng về mặt lý thuyết cũng như ứng dụng, đặc biệt

là ứng dụng vào giải các bài toán tối ưu

Bài toán Người du lịch (Travelling Salesman Problem) là một trong những bàitoán kinh điển và khó trong tin học Có rất nhiều cách tiếp cận giải bài toán nàyngay từ khi nó mới ra đời, như sử dụng quy hoạch tuyến tính, nhánh và cận, nhưngmới chỉ dừng lại ở các bộ dữ liệu nhỏ, không tìm được cách giải tối ưu và vẫn đangđược tiếp tục nghiên cứu và phát triển

Với mong muốn bước đầu nghiên cứu về những bài toán tối ưu và cách giảimột số bài toán tối ưu cũng như tìm kiếm những phương pháp có thể giải tốt nhữngbài toán tối ưu, nhóm 5 chúng tôi đã chọn: “Bài toán người du lịch” (Travelingsalesman problem) cho đề tài nghiên cứu của môn học “Lý thuyết đồ thị và ứngdụng”

Đề tài gồm 2 chương xoay quanh nguyên lý bù trừ Chương 1 nêu đại cương về

cơ sở lý thuyết của lý thuyết đồ thị, chương 2 nghiên cứu sâu về bài toán người dulịch

Chương 1

Trang 3

CHƯƠNG 1: CƠ SỞ LÝ THUYẾT

1.1 CÁC KHÁI NIỆM CƠ BẢN

Mỗi cạnh eE được liên kết với một cặp đỉnh (v, w) có thứ tự

Ghi chú:

- Cạnh có hai đỉnh liên kết trùng nhau gọi là khuyên

- Đỉnh không kề với đỉnh khác gọi là đỉnh cô lập

Bậc của đỉnh vV là tổng số cạnh liên thuộc với nó và ký hiệu là deg(v) Nếu

đỉnh có khuyên thì mỗi khuyên được tính là 2 khi tính bậc, như vậy:

deg o (v), là số cung đi ra từ đỉnh v (v là đỉnh đầu) và nửa bậc vào của đỉnh vV, ký

hiệu là deg 1 (v), là số cung đi tới đỉnh v (v là đỉnh cuối).

G = ({V1,V2},E)

Trang 4

Đồ thị Km,n là đồ thị lưỡng phân ({V1,V2}, E) với tập V1 có m đỉnh và tập V2 có

n đỉnh và mỗi đỉnh của V1 được nối với mỗi đỉnh của V2 bằng một cạnh duy nhất

1.1.2 Đường đi, chu trình, tính liên thông

Đường đi sơ cấp : là đường đi không đi qua một đỉnh quá một lần

Vòng là dãy có đỉnh đầu và đỉnh cuối trùng nhau

Chu trình là đường đi có đỉnh đầu và đỉnh cuối trùng nhau

Chu trình sơ cấp : là chu trình không đi qua một đỉnh quá một lần

Dãy có hướng : trong đồ thị có hướng là dãy các đỉnh và cung nối tiếp nhau(e1,e2,…,en) thỏa mãn đỉnh cuối của cung ei là đỉnh đầu của cung ei+1,

Vòng có hướng là dãy có hướng có đỉnh đầu và đỉnh cuối trùng nhau

Chu trình có hướng là đường đi có hướng có đỉnh đầu và đỉnh cuối trùng nhau.Chu trình có hướng sơ cấp là chu trình có hướng không đi qua một đỉnh quámột lần

Đồ thị có hướng gọi là liên thông, nếu mọi cặp đỉnh của nó đều có đường đi nốichúng với nhau

Đồ thị có hướng gọi là liên thông mạnh, nếu mọi cặp đỉnh của nó đều có đường

đi có hướng nối chúng với nhau

Đồ thị có hướng gọi là liên thông yếu, nếu đồ thị lót (vô hướng) của nó liênthông

Đồ thị có hướng gọi là bán liên thông, nếu với mọi cặp đỉnh (u,v) bao giờ cũngtồn tại đường đi có hướng từ u đến v hoặc từ v đến u

Trang 5

Trọng đồ (có hướng) là đồ thị (có hướng) mà mỗi cạnh (cung) của nó được gánmột số.

Trọng đồ được biễu diễn bởi G = (V, E, w), trong đó V là tập các đỉnh, E là tậpcác cạnh (cung) và w: E R là hàm số trên E, w(e) là trọng số của cạnh (cung) e vớimọi eE

Trong trọng đồ độ dài trọng số của đường đi  là tổng các trọng số trên đường

Từ định nghĩa suy ra rằng ma trận kề của đồ thị vô hướng luôn đốixứng qua đường chéo chính

Trang 6

của ma trận T đều lớn hơn 0.

(ii) Đồ thị G có chu trình có hướng khi và chỉ khi tồn tại phần tử lớn hơn 0 trênđường chéo chính của ma trận T

1.2.2 Ma trận liên thuộc

1.2.2.1 Đồ thị vô hướng

Cho đồ thị G=(V,E) có n đỉnh,V= {v1,v2,v3, ,vn} và m cạnh E={e1,e2,e3,…,em}

Ma trận liên thuộc của đồ thị G là ma trận A= (a ij)nn thỏa mãn:

1, nếu đỉnh vi liên thuộc cạnh e j

a ij =

0, nếu đỉnh vi không liên thuộc cạnh e j

Trang 7

Mệnh đề 1.2.8 Cho đồ thị đơn G = (V, E) với ma trận liên thuộc (a ij) Khi đó

V )

Cho đồ thị có hướng G = (V, E) có n đỉnh.V={v1,v2,v3,…,vn} và m cung E={e1,

e2, e3,…, em} Ma trận liên thuộc của đồ thị G là ma trận A= (a ij)nn thỏa mãn

1, nếu đỉnh vi là đỉnh đầu của cung ei

a ij= -1, nếu đỉnh vi là đỉnh cuối của cung ei

0, nếu đỉnh vi không kề cung ei

1.2 ĐƯỜNG ĐI VÀ ĐỒ THỊ HAMILTON

1.2.1 Định nghĩa 1.2.9

Cho đồ thị (có hướng) G = (V, E)

Chu trình (có hướng) Hamilton là chu trình sơ cấp qua mọi đỉnh của đồ thị.Đường đi (có hướng) Hamilton là đường đi sơ cấp qua mọi đỉnh đồ thị

Như vậy, mọi chu trình Hamilton có độ dài bằng số đỉnh và mọi đường điHamilton có độ dài bằng số đỉnh trừ 1

Đồ thị chứa chu trình (có hướng) Hamilton gọi là đồ thị Hamilton

 Nếu xóa đi k đỉnh bất kỳ cùng các cạnh liên thuộc chúng thì đồ thị còn lại

sẽ có tối đa k thành phần liên thông

Trang 8

Cho G là đồ thị đơn n đỉnh (n 3) Nếu bậc deg(v)n2 1

với mọi đỉnh v của

G thì G có đường đi Hamilton

Cho G là đơn đồ thị n đỉnh (n 3) Nếu deg(u)+deg(v) n với mọi cặp đỉnh

không kề nhau thì đồ thị G có chu trình Hamilton

Nếu đồ thị G là đồ thị có hướng liên thông mạnh và

deg 1 (v)  n/2 & deg 0 (v)  n/2 ,vG

Trang 9

CHƯƠNG 2 : BÀI TOÁN NGƯỜI DU LỊCH

2.1 PHÁT BIỂU BÀI TOÁN

Một người du lịch muốn đi tham quan n thành phố 1,2,…,n Xuất phát từ mộtthành phố nào đó người du lịch đi qua tất cả các thành phố, mỗi thành phố chỉ quađúng một lần, rồi quay về thành phố ban đầu Hỏi nên đi theo trình tự nào để độ dàitổng cộng các đoạn đường đi qua là ngắn nhất (khoảng cách giữa hai thành phố cóthể hiểu là cự ly thông thường hoặc thời gian cần đi hoặc chi phí của hành trình vàxem như cho trước) Trò chơi này được Hamilton nghĩ ra năm 1859 Ông biểu diễncác thành phố và các đường đibằng đa diện đều 20 đỉnh

Xét đồ thị đủ G = (V, E), với V={1, 2, , n}, có trọng số với trọng số cij= c(i,j)

có thể khác cji = c(j,i) Như vậy, ta có thể xem G như là một đồ thị có hướng đầy đủ

“mạnh” theo nghĩa với mọi i, j=1, 2, , n, ij, luôn có (i,j), (j,i)E Bài toán trở thành tìm chu trình Hamilton có độ dài ngắn nhất trong G

2.2 GIẢI QUYẾT BÀI TOÁN

Hiện nay, phương pháp duy nhất được biết đến đảm bảo giải quyết tối ưu TSPtrong mọi trường hợp là xét tất cả các hành trình có thể và tìm ra hành trình nào cóchi phí nhỏ nhất Mỗi hành trình như thế là một hoán vị của 1, 2, 3, , n với n là sốthành phố, do đó số hành trình là n! Khi n lớn, số hành trình bùng nổ quá lớn takhông thể tìm ra lời giải cho bài toán Nhiều phương pháp tối ưu khác nhau đượcdùng để giải quyết TSP và ta sẽ tìm hiểu chúng trong các mục sau:

2.2.1 Một số phương pháp giải

Xét bài toán người du lịch Gọi C = {cij: i,j = 1,2, ,n} là ma trận chi phí Mỗi hành trình V = v(1)→v(2)→ →v(n-1)→v(n)→v(1) có thể viết dưới dạng

v = (v(1),v(2)), (v(2),v(3)), , (v(n-1),v(n)), (v(n),v(1))

Trong đó mỗi thành phần (v(i-1),v(i)) gọi là một cạnh của hành trình

Đối với bài toán người du lịch, nếu áp dụng phương pháp tham ăn thì phương

án tìm được là tốt, nhưng trong một số trường hợp chưa hẳn là phương án tối ưu.Đối với phương pháp quy hoạch động thì không hiệu quả do số lượng bài toán contăng theo hàm mũ Mặt khác, bài toán người du lịch có không gian các phương ánquá lớn Do vậy, khi áp dụng thuật toán vét cạn không đảm bảo về thời gian cũngnhư kĩ thuật Khi nghiên cứu đề tài này chúng tôi giới thiệu phương pháp đánh giánhánh cận Đây là phương pháp có thể hạn chế số phương án phải duyệt của bàitoán Trong quá trình duyệt ta luôn giữ lại 1 phương án là phương án mẫu, phương

án mẫu là phương án có giá nhỏ nhất tại thời điểm đó Phương pháp đánh giá nhánhcận là phương pháp tính giá của phương án ngay trong quá trình xây dựng các thànhphần của phương án, có nghĩa là ta sẽ tính xem việc xây dựng phương án theohướng đó có thể có thể tốt hơn phương án mẫu hay không Nếu không tốt hơn ta lựachọn hướng khác Bằng cách này ta đã hạn chế được nhiều phương án mà chắc rằngtrong đó không chứa phương án tối ưu Một yêu cầu đặt ra là tính toán đặt nhánh cậnnhư thế nào, để có thể hạn chế tối đa các phương án phải duyệt

Trang 10

2.2.2.Phương pháp nhánh cận

2.2.2.1.Phương pháp

Giả sử trong một tập hữu hạn các phương án của bài toán, ta phải chọn ra mộtphương án tối ưu theo một tiêu chuẩn nào đó (Thí dụ làm cho hàm mục tiêu đạt giátrị nhỏ nhất) Ta sẽ tìm cách phân chia tập phương án đang xét thành 2 tập conkhông giao nhau Một tập chứa cạnh (i,j) và tập không chứa cạnh này

Ta gọi việc đó là phân nhánh, mỗi tập con nói trên gọi là nhánh Việc phânnhánh được minh họa bởi cây tìm kiếm:

Với mỗi tập con này, ta sẽ tính cận dưới (chặn dưới đủ tốt) của các giá trị hàmmục tiêu ứng với các phương án trong đó Mang so sánh hai cận dưới vừa tính được,việc tìm kiếm sẽ tìm trên tập con có cận dưới nhỏ hơn, tiếp tục phân chia tập con đóthành hai tập con khác không giao nhau, lại tính các cận dưới tương ứng Lặp lạiquá trình này thì sau một số hữu hạn bước, cuối cùng sẽ được một phương án tốt,nói chung là tối ưu, tức là phương án của bài toán người du lịch Sau đó ta chỉ cầnxét những tập con có cận dưới nhỏ hơn giá trị hàm mục tiêu tìm được Việc tính cậndưới dựa vào thủ tục rút gọn

2.2.2.2 Cơ sở lý luận của phép toán

Nếu không xác định thành phố xuất phát thì có n! hành trình, mỗi hành trìnhứng với một hoán vị nào đó của tập {1,2,3, , n} Còn nếu cho trước thành phố xuấtphát thì có tất cả là (n-1)! hành trình

Giả sử v = (v(1),v(2), ,v(n),v(1)) (v là một hoán vị) là một hành trình qua cácthành phố v(1),v(2), ,v(n) theo thứ tự đó rồi quay về v(1) thì hàm mục tiêuf(v) = Cv(1)v(2)+ Cv(n-1)v(n) + Cv(n)v(1)= 

v j i ij

C

) , (

sẽ biểu thị tổng độ dài đã đi qua theo hành trình v, trong đó (i,j) ký hiệu một chặngđường của hành trình, tức là hai thành phố kề nhau theo hành trình v

2.2.2.3 Ma trận rút gọn

Rõ ràng tổng chi phí của một hành trình sẽ chứa đúng một phần tử trên mỗidòng và mỗi cột của ma trận chi phí C = (cij) Do đó nếu ta trừ bớt mỗi phần tử củamột dòng (hay một cột) đi cùng một giá trị thì chi phí của tất cả hành trình sẽ giảm

Tập tất cả hành trình

Các hành trình qua (i,j)

Các hành trình không qua (i,j)

Trang 11

đi một lượng, vì thế hành trình tối ưu sẽ không thay đổi Vì vậy nếu tiến hành trừ bớtcác phần tử của mỗi dòng và mỗi cột đi một hằng số sao cho thu được ma trậnkhông âm và mỗi cột cũng như mỗi dòng chứa ít nhất một số 0, thì tổng các hằng sốtrừ đi đó sẽ cho ta cận dưới của mọi hành trình Thủ tục trừ bớt này gọi là thủ tục rútgọn, các hằng số trừ bớt ở mỗi dòng (cột) gọi là hằng số rút gọn dòng (cột), ma trậnthu được gọi là ma trận rút gọn.

Đầu vào: Ma trận chi phí C=(cij)

Đầu ra: Ma trận rút gọn và tổng các hằng số rút gọn Sum

Trang 12

số rút gọn tương ứng trên hàng ta được ma trận rút gọn.

Vậy cận dưới cho tất cả hành trình là:  :=0+sum=81

(nghĩa là không có hành trình có tổng chi phí nhỏ hơn 81)

- Giảm cấp ma trận chi phí C bằng cách loại dòng r và cột s

- Ngăn cấm tạo hành trình con:

Trang 13

Ta có thể tiếp tục thủ tục phân nhánh theo nhánh này với ma trận chi phí đãđược hiệu chỉnh và giảm một bậc Việc chọn theo cạnh nào để phân nhánh ta sẽ bàn

Ví dụ: Xét tiếp ví dụ trên Giả sử ta chọn cạnh phân nhánh là (r,s) = (6,3) Các

hành trình sẽ được phân thành hai nhánh:

P1 chứa các hành trình qua cạnh (6,3) và P2 chứa các hành trình không qua cạnh(6,3)

 Xét nhánh tập P1:

- Giảm cấp ma trận chi phí C bằng cách loại dòng 6 và cột 3

- Ngăn cấm tạo hành trình con:

Vì ma trận đã ở dạng rút gọn nên cận dưới vẫn giữ nguyên  = 81

Ta có thể tiếp tục phân nhánh theo nhánh này với ma trận chi phí đã được hiệuchỉnh Việc chọn cạnh nào để phân nhánh ta sẽ bàn ở mục tiếp theo

Trang 14

(i) Khởi tạo:  :=-;

(ii) Với mỗi cặp (i,j) thỏa cij=0 (i=1, ,k; j=1, ,k) thực hiện:

Ví dụ: Xét tiếp ví dụ trên Ta đi theo nhánh P1, qua cạnh (6,3) Cận dưới =81 và

ma trận chi phí tương ứng như sau:

Trang 15

Kết quả ta chọn được cạnh phân nhánh là (4,6).

Tập hành trình P1 sẽ được phân thành hai nhánh:

- Cấm tạo chu trình con:

Cạnh (6,3) chọn trước kế tiếp sau cạnh (4,6)

Trang 16

Ma trận chi phí đã ở dạng rút gọn nên cận dưới  giữ nguyên  =81.

Bây giờ ta tiếp tục thủ tục chọn cạnh phân nhánh, phân nhánh và rút gọn đối

Trang 17

Trong trường hợp (i) ta chọn hai cạnh (p,u) và (q,v), còn trong trường hợp (ii)

ta chọn hai cạnh (p,v) và (q,u) Tổng chi phí là 

Trang 18

Hành trình chứa (6,3)

Hành trình chứa (4,6)

Hành trình không chứa (6,3)

Hành trình không chứa (4,6)

Hành trình chứa (1,4)

Hành trình chứa (2,1)

Hành trình không chứa (1,4)

 0 2 30

  30 17

Hành trình không chứa (2,1)

Trang 19

cạnh (5,1) có cận dưới bằng 101+26 = 127 > 104 = cp Ta loại không xét nhánh nàynữa.

Trang 20

a) Nếu cận dưới của đỉnh này không lớn hơn các cận dưới của mọi đỉnh treotrên cây phân nhánh thì hành trình đó là tối ưu.

b) Nếu trái lại thì phải xuất phát từ đỉnh treo nào có cận dưới nhỏ hơn đểphân nhánh tiếp tục và kiểm tra xem điều kiện a) có thỏa mãn không

2.3.CÀI ĐẶT CHƯƠNG TRÌNH

2.3.1 Đầu vào

Đầu vào là ma trận chi phí kích thước n

Ví dụ: Đầu vào là ma trận chi phí với số đỉnh là n = 6 như sau.

Minh họa bằng đồ họa

1 Hành trình tối ưu cho bài toán người du lịch bắt đầu từ đỉnh 1

2 Tổng chi phí của hành trình tối ưu

Ví dụ: Với ma trận chi phí cho như ở mục 3.1 thì đầu ra là

1 4 6 3 5 2 1

 0

0 

Trang 21

Type Arrn = Array [1 Maxvar] Of Integer;

Arrnn= Array [1 Maxvar,1 Maxvar] Of Integer;

Procedure Input (Var N : Integer;

Var Inf : Integer;

Trang 22

{Thu Tuc Rut Gon }

Function Reduce(Var Row,Col,Rowred,Colred:Arrn):Integer;

Var I,J,Sum,Temp:Integer;

Begin

Sum:=0;

Trang 23

For I:=1 To Size Do

Begin { Reduce Rows }

For I:=1 To Size Do

If C[Row[I],Col[J]] < Inf Then

{Thu Tuc Phan Nhanh}

Procedure Bestedge(Var R,S,Most:Integer);

Trang 24

If Zeroes > 1 Then Mincolelt:=0;

If (Minrowelt+Mincolelt) > Most Then

Begin

Most:=Minrowelt+Mincolelt;

R:=I;{Chi So Dong Cua Canh Tot Nhat}

S:=J;{Chi So Cot Cua Canh Tot Nhat}

Begin { Bo Sung Not Hai Canh Con Lai}

For I:=1 To N Do Best[I]:=Fwdptr[I];

If C[Row[1],Col[1]] = Inf Then Avoid:=1

Last:=Col[S]; { Prevent Cycles }

While Fwdptr[Last] <> 0 Do Last:=Fwdptr[Last];

First:=Row[R];

While Backptr[First] <> 0 Do First:=Backptr[First];

Ngày đăng: 12/05/2014, 11:48

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w