Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 18 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
18
Dung lượng
582,98 KB
Nội dung
BỘ GIÁO DỤC VÀ ĐÀO TẠO TRƯỜNG ĐẠI HỌC PHAN THIẾT BÁO CÁO TỔNG KẾT ĐỀ TÀI NGHIÊN CỨU KHOA HỌC SINH VIÊN BÀI TOÁN LUỒNG CỰC ĐẠI VỚI KHẢ NĂNG THƠNG QUA CÁC CUNG – CÁC ĐỈNH Khoa: Cơng nghệ Thơng tin Nhóm sinh viên: Đinh Quốc Hiếu Trần Thị Thùy Trâm Giảng viên hướng dẫn: ThS Đỗ Thị Kim Dung Bình Thuận, tháng 10 năm 2017 BỘ GIÁO DỤC VÀ ĐÀO TẠO TRƯỜNG ĐẠI HỌC PHAN THIẾT BÁO CÁO TỔNG KẾT ĐỀ TÀI NGHIÊN CỨU KHOA HỌC SINH VIÊN BÀI TỐN LUỒNG CỰC ĐẠI VỚI KHẢ NĂNG THƠNG QUA CÁC CUNG – CÁC ĐỈNH Khoa: Công nghệ Thông tin Nhóm sinh viên: Đinh Quốc Hiếu Trần Thị Thùy Trâm Giảng viên hướng dẫn: ThS Đỗ Thị Kim Dung Bình Thuận, tháng 10 năm 2017 BÀI TỐN LUỒNG CỰC ĐẠI VỚI KHẢ NĂNG THÔNG QUA CÁC CUNG – CÁC ĐỈNH Bài toán luồng cực đại mạng số toán tối ưu đồ thị tìm ứng dụng rộng rãi thực tế ứng dụng thú vị lý thuyết tổ hợp Bài toán đề xuất vào đầu năm 1950, gắn liền với tên tuổi hai nhà bác học Mỹ Ford Fulkerson Bài toán luồng cực đại mạng có nhiều ứng dụng thực tế như: Bài tốn xác định cường độ dịng lớn dòng vận tải hai nút đồ giao thơng, tốn tìm luồng dầu lớn bơm từ tàu chở dầu vào bể chứa hệ thống đường ống dẫn dầu…Ngoài ra, ứng dụng tốn cịn để giải toán như: Bài toán đám cưới vùng quê, toán hệ thống đại diện chung, toán phân nhóm sinh hoạt, tốn lập lịch cho hội nghị …Trong phạm vi đề tài tơi trình bày “bài toán luồng cực đại mạng với khả thông qua cung đỉnh” phải nhờ thuật toán Ford Fulkerson để giải toán đặt nêu số ứng dụng toán I PHÁT BIỂU BÀI TỐN 1.Bài tốn Giả xử đồ thị G = (V,E), ngồi khả thơng qua cung c(u,v), đỉnh v V cịn có khả thơng qua đỉnh d(v), địi hỏi tổng luồng vào đỉnh v khơng vượt d(v), tức f ( w, v) d (v) wV Cần phải tìm luồng cực đại s t mạng Xây dựng mạng G’ cho: đỉnh v G tương ứng với hai đỉnh v+, v- G’, cung (u,v) G ứng với cung (u,v+) G’, cung (v,w) G ứng với cung (v-,w+) G’ Ngồi ra, cung (v+,v-) G’ có khả thông qua d(v), tức khả thông qua đỉnh v G Giải toán Từ mạng G = (V,E) khả thông qua cung đỉnh Ta giải theo hai bước sau: 10 Xác định mạng G’ 20 Tìm luồng cực đại mạng G’ Bắt đầu từ luồng zero với khả thơng qua cung Thí dụ Hình 1a cho ví dụ mạng G với khả thơng qua cung đỉnh Hình 1b mạng G’ tương ứng có khả thơng qua cung u du (a) C[u,t] C[s,u] s ds t dt C[u,v] C[s,v] C[v,t] v dv u+ (b) du u- C[s,u] C[u,t] t+ s+ ds s- dt t- C[u,v] C[v,t] C[s,v] v+ dv v- Hình Do luồng vào đỉnh v phải qua cung (v+,v-) với khả thông qua d(v), nên luồng cực đại G’ luồng cực đại G với khả thông qua cung đỉnh + Hai bước ta biểu diễn dạng sơ đồ thuật toán sau: Begin Ma trận biểu diễn đồ thị toán luồng cực đại 3.1 Biểu diễn mạng G với khả thông qua cung - đỉnh Giả sử mạng G = (V,E), |V| = n Ta biểu diễn ma trận trọng số A cấp n x n sau: ,nếu i = j di A = ( aij ) = c[i,j] ,nếu [i,j] E ,nếu [i,j] E Trong đó: di khả thơng qua đỉnh i; C[i,j] khả thông qua cung [i,j] 3.2 Biểu diễn mạng G’ tương ứng với mạng G Mạng tương ứng với G = (V,E), |V | = n mạng G’ = (V’,E’), |V’| = |V |, |E’| = |E | - Được biểu diễn thông qua ma trận A’ cấp (2n x 2n) sau: i = j A’ = ( a’ij ) = c[i,j] [i,j] E’ Thí dụ Như thí dụ có mạng G sau: 5 u[6] Ta có ma trận biểu diễn mạng G : s 0 A= u 0 v t s u v t Tương tự từ mạng G’: u- u- s+ s- t- t+ v+ v- Ta có ma trận biểu diễn mạng G’ sau: A’ = s+ 0 0 0 0 s7 0 0 0 u+ 0 0 0 u0 0 0 v+ 0 0 v0 0 0 t+ 0 0 t0 0 0 s+ su+ uv+ vt+ t- Áp dụng T.T Ford-Fulkerson tìm luồng cực đại cho mạng G’ ta mạng cực đại ma trận biểu diễn sau: C= s+ 0 0 0 0 s6 0 0 0 u+ 0 0 0 u0 0 0 v+ 0 0 0 v0 0 0 t+ 0 0 t0 0 0 s+ su+ uv+ vt+ t- Với Val(f*) = Bài toán luồng cực đại mạng Cho mạng G=(V,E) Hãy tìm luồng f* mạng với giá trị luồng val(f*) lớn Luồng ta gọi luồng cực đại mạng 4.1 Thuật toán Ford – Fulkerson tìm luồng cực đại mạng Bắt đầu từ mạng với luồng tất cung ( ta gọi luồng luồng không ), lặp lại bước lặp sau thu luồng mà khơng cịn luồng tăng: Thuật toán 10 Xuất phát từ luồng chấp nhận f 20 Tìm đường tăng luồng P Nếu khơng có thuật tốn kết thúc Nếu có, tiếp bước 30 Nếu (P) = + thuật tốn kết thúc Trong (P) - Lượng luồng tăng thêm, hay nói khác làm tăng luồng (flow augmentation) dọc theo đường tăng luồng P lượng thích hợp mà ràng buộc toán thoả Sơ đồ thuật toán Ford – Fulkerson mơ tả thủ tục sau đây: Procedure Max_Flow; (* Thuật toán Ford – Fulkerson *) begin (* Khởi tạo: Bắt đầu từ luồng với giá trị *) for u V for v V f(u,v):=0; Stop:=false; While not Stop if< Tìm đường tăng luồng P> then else Stop:= true; end; Để tìm đường tăng luồng Gf sử dụng thuật tốn tìm kiếm theo chiều rộng ( hay thuật tốn tìm kiếm theo chiều sâu) đỉnh s, không cần xây dựng tường minh đồ thị Gf Ford- Fulkerson đề nghị thuật toán gán nhãn chi tiết sau để giải toán luồng mạng Thuật toán luồng chấp nhận mạng ( luồng khơng) sau ta tăng luồng cách tìm đường tăng luồng Để tìm đường tăng luồng ta áp dụng phương pháp gán nhãn cho đỉnh Mỗi đỉnh q trình thực thuật tốn ba trạng thái: chưa có nhãn, có nhãn chưa xét, có nhãn xét Nhãn đỉnh v gồm phần có hai dạng sau: [+p(v), (v)] [-p(v), (v)] Phần thứ +p(v) (-p(v)) cần tăng (giảm) luồng theo cung (p(v),v) cung (v,p(v)) phần thứ hai (v) lượng lớn tăng giảm theo cung Đầu tiên có đỉnh s khởi tạo nhãn nhãn chưa xét, cịn tất đỉnh cịn lại chưa có nhãn Từ s ta gán cho tất đỉnh kề với nhãn đỉnh s trở thành nhãn xét Tiếp theo, từ đỉnh v có nhãn chưa xét ta lại gán nhãn cho tất nhãn chưa có nhãn kề với nhãn đỉnh v trở thành nhãn xét Quá trình lặp lại đỉnh t trở thành có nhãn nhãn tất đỉnh có nhãn xét đỉnh t chưa có nhãn Trong trường hợp thứ ta tìm đường tăng luồng, cịn trường hợp thứ hai luồng xét không tồn đường tăng luồng ( tức luồng cực đại ) Mỗi tìm đường tăng luồng, ta lại tăng luồng theo đường tìm được, sau xố tất nhãn luồng thu lại sử dụng phép gán nhãn đỉnh để tìm đường tăng luồng Thuật tốn kết thúc luồng có mạng khơng tìm đường tăng luồng Thuật toán gán nhãn (The labeling algorithm) Gọi VT tập đỉnh gán nhãn chưa thăm Ta có thuật tốn để tìm đường tăng luồng Xuất phát với VT = {s} s nút đánh dấu Một bước lặp có VT hành gồm ba bước sau 10 Nếu t VT VT = , thuật tốn kết thúc Ngược lại chọn đỉnh u VT để thăm đưa khỏi VT Xét tất đỉnh cạnh u, tức xét cung có dạng (u,v) (v,u) 20 Nếu (u,v) E, F(u,v) < C(u,v) v chưa gán nhãn gán nhãn đưa v vào tập VT 30 Nếu (v,u) E, F(v,u) > v chưa gán nhãn gán nhãn đưa vào tập VT Bây ta xét kết thuật tốn gán nhãn Nó có kết thúc hữu hạn hay không? Nhận xét đỉnh vào tập VT chuyển từ chưa gán nhãn Do đỉnh vào VT nhiều lần Mà bước lặp bỏ đỉnh khỏi VT Do đó, số đỉnh mạng hữu hạn, thuật toán phải kết thúc hữu hạn Thí dụ Áp dụng thuật tốn Ford-Fullkerson tìm luồng cực đại cách gán nhãn cho luồng zero sau: a b 7,0 6,0 5,0 4,0 s c 5,0 7,0 a(s+,6) b(a+,6) 7,0 6,0 5,0 t(e+,2) c(s+,4) 5,0 3,0 a b 7,4 6,4 12,0 e(d+,4) 9,0 d(s+,7) 5,0 4,4 4,0 4,0 c 5,0 7,0 4,0 4,0 4,0 s 12,0 e 9,0 d 7,0 t 3,0 + Bước lặp 1: s → a → b → t, 1 = s (s,) 4,0 4,0 t 3,0 e 9,0 d 12,0 + Bước lặp 2: s → a → b → c → e → t, 2 = a(s+,2) 6,4 s (s,) 5,0 4,0 4,0 5,0 7,0 3,0 5,0 5,0 12,0 b 7,6 4,0 t(e+,2) e(c+,2) 9,0 a 6,6 4,4 c(b+,2) d(s+,7) s b(a+,2) 7,4 4,2 c 4,4 t 3,2 + Bước lặp 3: s → c → e → t, 3 = a(s+,0) 6,6 s (s,) b(a+,1) 7,6 5,0 4,2 4,0 3,2 a b 7,6 6,6 5,0 4,2 4,1 4,4 c 5,0 7,0 12,2 e(c+,1) 9,0 d(s+,7) s t(e+,1) c(s+,4) 5,0 7,0 4,4 t 3,3 e 9,0 d 12,3 + Bước lặp 4: s → d → e → t, 4 = a(s+,0) 6,6 s (s,) 5,0 4,2 4,1 3,3 a 5,0 4,2 4,4 c 5,0 7,7 12,3 b 7,6 4,1 t(e+,7) e(d+,7) 9,0 d(s+,7) 6,6 4,4 c(s+,3) 5,0 7,0 s b(a+,1) 7,6 t 3,3 9,7 d 12,10 e + Bước lặp 5: s → c → d → e → t, 5 = a(s+,0) 6,6 s 7,6 10 5,0 4,1 b(a+,1) 4,2 c(s+,3) 4,4 t(e+,2) a 6,6 5,0 4,2 4,3 s b 7,6 c 5,2 7,7 4,4 3,3 9,9 d t 12,12 e + Bước lặp 6: Khơng cịn đường tăng luồng nữa, Val(fmax) = 6+3+7 = 16 Sơ đồ thuật toán Ford-Fullkerson tổng quát 11 Begin Mạng với luồng zero Stop:= False Tăng luồng True True not Stop Find_Path Path-Found False False Stop:= False Mạng với luồng cực đại End Sơ thuật toán Find_Path (Chi tiết) { Trả TRUE có đường tăng luồng } Begin P[t]:= s ; [t]:= + 12 True v= t 13 End Sơ đồ thuật toán tăng luồng (Inc_Flow) { Tăng luồng có đường tăng } 14 Begin v:= P[t] ; u:= t ; tang:= [t] End False us True v:= -v f[v,u]:=f[v,u] - tang False v>0 u:=v; v:=P[u] 15 True f[v,u]:=f[v,u] + tang Chương CÀI ĐẶT BÀI TOÁN I.Cấu trúc liệu chương trình Input: Nhập mạng G = (V,E) với khả thông qua cung đỉnh * Nhập số đỉnh: * Nhập ma trận A biểu diễn mạng G = (V,E) với khả thông qua cung đỉnh Giả sử mạng G = (V,E), |V| = n Ta biểu diễn ma trận trọng số A cấp n x n sau: di A = ( aij ) = ,nếu i = j c[i,j] ,nếu [i,j] E ,nếu [i,j] E Trong đó: di khả thông qua đỉnh i; C[i,j] khả thông qua cung [i,j] Output * Ma trận A’ biểu diễn mạng G’ = (V’,E’) với khả thông qua cung tương ứng * Ma trận luồng cực đại mạng * Giá trị luồng cực đại Val(f*) Mạng tương ứng với G = (V,E), |V | = n mạng G’ = (V’,E’), |V’| = |V |, |E’| = |E | - Được biểu diễn thông qua ma trận A’ cấp (2n x 2n) sau: i = j A’ = ( a’ij ) = c[i,j] [i,j] E’ Chú ý: Ta Input ma trận A biểu diễn mạng G = (V,E) với khả thông qua cung Sau đó, Output ma trận giá trị luồng cực đại mạng II Tên số hàm thủ tục chương trình nguồn 16 Chương trình viết ngơn ngữ Pascal Sau tên số hàm thủ tục chương trình nguồn: Procedure NMatranCD; { Thủ tục nhập ma trận biểu diễn mạng với khả thông qua cung đỉnh } Procedure Find_PathL; { Thủ tục tìm đường tăng luồng } Procedure inc_FlowL; { Thủ tục tăng luồng } Procedure Max_Flow; { Thủ tục tăng luồng toàn } Procedure NewfileL; { Thủ tục nhập ma trận biểu diễn mạng với khả thông qua cung } ………………………………………………… III.Một số giao diện chương trình Giao diện Giao diện Input ma trận biểu diễn mạng G = (V,E) với khả thông qua cung đỉnh 17 Giao diện Output ma trận biểu diễn mạng G’ = (V’,E’) với khả thông qua cung tương ứng, ma trận luồng cực đại giá trị luồng cực đại 18