Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 61 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
61
Dung lượng
898,17 KB
Nội dung
ĐẠI HỌC THÁI NGUYÊN TRƢỜNG ĐẠI HỌC CÔNG NGHỆ THƠNG TIN VÀ TRUYỀN THƠNG Phạm Chí Hiếu PHÁT TRIỂN CÁC KĨ THUẬT NHÁNH CẬN VÀ ỨNG DỤNG Chuyên ngành: Khoa học máy tính Mã số: 60.48.01 LUẬN VĂN THẠC SĨ KHOA HỌC MÁY TÍNH NGƢỜI HƢỚNG DẪN KHOA HỌC: PGS TSKH Nguyễn Xuân Huy Thái Nguyên – 2014 Số hóa Trung tâm Học liệu – Đại học Thái Nguyên http://www.lrc-tnu.edu.vn/ i LỜI CAM ĐOAN Tôi xin cam đoan cơng trình nghiên cứu riêng tơi Các kết luận văn trung thực, chƣa đƣợc công bố tài liệu khác Tơi xin cam đồn giúp đỡ để hoàn thành luận văn đƣợc cảm ơn Các thơng tin trích dẫn luận văn đƣợc ghi rõ nguồn gốc Học viên thực luận văn Phạm Chí Hiếu Số hóa Trung tâm Học liệu – Đại học Thái Nguyên http://www.lrc-tnu.edu.vn/ ii MỤC LỤC LỜI CAM ĐOAN i DANH MỤC CÁC HÌNH iv MỞ ĐẦU 1 Đặt vấn đề Đối tƣợng phạm vi nghiên cứu Hƣớng nghiên cứu đề tài LỜI CẢM ƠN CHƢƠNG TỔNG QUAN KĨ THUẬT NHÁNH CẬN 1.1 Giới thiệu chung 1.2 Ý tƣởng thuật toán 1.3 Kĩ thuật tỉa nhánh 10 1.4 Kết hợp thuật toán nhánh cận vào thuật toán quay lui 11 1.5 Kết luận 13 CHƢƠNG II ÁP DỤNG KĨ THUẬT NHÁNH CẬN CHO MỘT SỐ BÀI TOÁN 14 2.1 Các tốn khó 14 2.2 Bài tốn Ba lơ 16 2.2.1 Bài toán: 16 2.2.2 Phân tích tốn Ba lơ 17 2.2.3 Chƣơng trình minh họa 22 2.3 Bài toán ngƣời du lịch (TSP) 25 2.3.1 Bài toán 25 2.3.2 Phân tích tốn TSP 26 2.3.3 Chƣơng trình minh họa 27 2.3.4 Cải tiến 29 2.4 Bài toán đổi tiền (ATM) 35 Số hóa Trung tâm Học liệu – Đại học Thái Nguyên http://www.lrc-tnu.edu.vn/ iii 2.4.1 Bài toán 35 2.4.2 Phân tích ATM 35 2.4.3 Chƣơng trình minh họa 36 2.5 Bài toán dãy ABC 40 2.5.1 Bài toán 40 2.5.2 Phân tích tốn 40 2.5.3 Chƣơng trình minh họa 41 2.6 Kết luận 44 CHƢƠNG ỨNG DỤNG PHÁT TRIỂN NHÁNH CẬN 45 3.1 Thủ tục rút gọn 46 3.2 Thủ tục chọn cạnh phân nhánh (r,c) 50 3.3 Mơ hình thuật toán 53 KẾT LUẬN 55 TÀI LIỆU THAM KHẢO 56 Số hóa Trung tâm Học liệu – Đại học Thái Nguyên http://www.lrc-tnu.edu.vn/ iv DANH MỤC CÁC HÌNH Hình Giải tốn ba lơ nhánh cận 21 Hình Giải toán ngƣời du lịch 31 Hình Mơ hình phân nhánh 46 Hình Minh họa rút gọn hành trình 49 Hình Minh họa rút gọn hành trình 51 Số hóa Trung tâm Học liệu – Đại học Thái Nguyên http://www.lrc-tnu.edu.vn/ MỞ ĐẦU Đặt vấn đề Ngày với phát triển nhƣ vũ bão khoa học công nghệ giới, xuất phát chậm nhiều nƣớc nhƣng chục năm qua đất nƣớc trải qua cách mạng lớn lao công nghệ thông tin Để đáp ứng địi hỏi phát triển phải có kế hoạch đào tạo bồi dƣỡng cá nhân có niềm say mê có khiếu lĩnh vực tin học đặc biệt học sinh lớp chuyên tin tạo nguồn, cung cấp cho trƣờng đại học sinh viên đƣợc trang bị vốn kiến thức sở vững chắc, giúp cho mục tiêu trƣớc đón đầu, rút ngắn khoảng cách trình độ tin học nƣớc ta giới Với học sinh phổ thông trƣờng chuyên phải đƣợc trang bị kiến thức sở loại cấu trúc liệu trang bị kiến thức tiên tiến giải thuật Việc truyền đạt kiến thức số giải thuật nhƣ: quay lui, nhánh cận, quy hoạch động, tham lam, giải thuật đồ thị … cần thiết cho học sinh trƣờng Chuyên nhƣ việc bồi dƣỡng học sinh giỏi trƣờng THPT (trung học phổ thông) để phát triển tƣ lập trình giải tốn tin học Hình thành nét nghệ thuật đoán nhận giải thuật nghệ thuật lập trình Tạo lập củng cố lịng say mê tìm hiểu khám phá cho học sinh giải toán tin Để giải tốn thơng thƣờng có nhiều cách tiếp cận Mỗi cách tiếp cận khác cho kết với độ tối ƣu khác Với nhiều toán việc tìm giải thuật tối ƣu khơng phải việc đơn giản, kĩ cần thiết để giải đƣợc tốn hồn chỉnh phải giải đƣợc tốn kích thƣớc liệu vừa phải Đây liệu thử mang tính định hƣớng chiến lƣợc cho việc giải tốn Có nhiều toán, đặc biệt toán tối ƣu, Số hóa Trung tâm Học liệu – Đại học Thái Nguyên http://www.lrc-tnu.edu.vn/ giải thuật tốn duyệt tồn phần tốn lớn Với phƣơng pháp duyệt tồn bộ, điển hình thuật tốn quay lui có nhƣợc điểm độ phức tạp tốn thƣờng lớn, kích thƣớc tốn giải đƣợc hạn chế Để khắc phục nhƣợc điểm thƣờng phải áp dụng kết hợp kĩ thuật nhánh cận (nhánh cận) Việc áp dụng kĩ thuật nhánh cận vào tốn tốn thƣờng trừu tƣợng khó hiểu với học sinh THPT Làm để xây dựng “cận” để đánh giá “độ tốt” “nhánh” xét ? Làm kết hợp kĩ thuật nhánh cận vào toán duyệt quay lui hiệu ? Do tơi thấy việc phân tích, đánh giá định hƣớng cách tiếp cận toán kĩ thuật nhánh cận cần thiết Từ nâng cao chất lƣợng việc dạy học cho học sinh Trong khuôn khổ luận văn thạc sĩ, chọn đề tài nghiên cứu: “Phát triển kĩ thuật nhánh cận ứng dụng” Đối tƣợng phạm vi nghiên cứu Kĩ thuật nhánh cận ứng dụng để giải số tốn liệt kê tìm phƣơng án tối ƣu Hƣớng nghiên cứu đề tài - Giới thiệu tổng quan kĩ thuật nhánh cận kỹ thuật liên quan - Tổ chức toàn theo kĩ thuật nhánh cận - Cách đánh giá cận tốn khác - Cài đặt chƣơng trình cho số tốn Số hóa Trung tâm Học liệu – Đại học Thái Nguyên http://www.lrc-tnu.edu.vn/ LỜI CẢM ƠN n vă cs h ng , đ ô ơn xin V đ Sau đ Đ Thông tin Truyền thông Thái Nguyên đ đ Công nghệ n thu n l n văn ƣ Khoa học Nguyễn Xuân Huy, ng , đ ng viên, t đ n vă nđ n thu n l p Trong trình học tập, nhƣ trình làm luận văn, khó tránh khỏi sai sót, mong Thầy, Cơ thơng cảm, bỏ qua Đồng thời trình độ nhƣ kinh nghiệm thực tiễn hạn chế nên luận văn khơng thể tránh khỏi thiếu sót, em mong nhận đƣợc ý kiến đóng góp Thầy, Cô để em học thêm đƣợc nhiều kinh nghiệm hoàn thành tốt Em xin chân thành cảm ơn! Số hóa Trung tâm Học liệu – Đại học Thái Nguyên http://www.lrc-tnu.edu.vn/ CHƢƠNG TỔNG QUAN KĨ THUẬT NHÁNH CẬN 1.1 Giới thiệu chung Một tốn đặt thực tế việc tìm nghiệm thoả mãn số điều kiện đó, nghiệm tốt theo tiêu cụ thể, nghiên cứu lời giải lớp toán tối ƣu thuộc lĩnh vực quy hoạch toán học Tuy nhiên cần phải nói nhiều trƣờng hợp chƣa thể xây dựng thuật toán thực hữu hiệu để giải toán, mà việc tìm nghiệm chúng phải dựa mơ hình liệt kê tồn cấu hình đánh giá, tìm cấu hình tốt Việc liệt kê cấu hình cài đặt phƣơng pháp liệt kê: Sinh tìm kiếm quay lui Thuật tốn quay lui (backtracking) chiến lƣợc tìm nghiệm tốn cách xét tất phƣơng án Đó trình tìm kiếm theo độ sâu tập hợp lời giải Trong trình tìm kiếm, ta gặp hƣớng lựa chọn không thỏa mãn, ta quay lui điểm lựa chọn nơi có hƣớng khác thử hƣớng lựa chọn Khi thử hết lựa chọn xuất phát từ điểm lựa chọn đó, ta quay lại điểm lựa chọn trƣớc thử hƣớng lựa chọn Q trình tìm kiếm thất bại khơng cịn điểm lựa chọn Đây thuật tốn áp dụng để giải nhiều toán với kích thƣớc liệu thích hợp Ƣu điểm thuật tốn đảm bảo tìm nghiệm xác Tuy nhiên, hạn chế độ phức tạp thƣờng lớn Mơ hình thuật tốn quay lui tìm kiếm phân cấp Nếu giả thiết ứng với nút tƣơng ứng với giá trị đƣợc chọn cho x[i] ứng với nút tƣơng ứng với giá trị mà x[i+1] nhận n cấp có tới 2n nút lá, số lớn nhiều lần so với liệu đầu vào n Số hóa Trung tâm Học liệu – Đại học Thái Ngun http://www.lrc-tnu.edu.vn/ Chính mà nhƣ ta có thao tác thừa việc chọn x[i] phải trả giá lớn chi phí thực thi thuật tốn q trình tìm kiếm lịng vịng vơ nghĩa bƣớc chọn x[i+1], x[i+2], … Khi đó, vấn đề đặt trình liệt kê lời giải ta cần tận dụng thơng tin tìm đƣợc để loại bỏ sớm phƣơng án chắn tối ƣu Kỹ thuật gọi kỹ thuật đánh giá nhánh cận tiến trình quay lui Kĩ thuật Nhánh cận (Nhánh cận – Branch and Bound) giúp đánh giá đƣợc nghiệm, cắt bỏ phƣơng án (nhánh) không cần thiết, việc tìm nghiệm tối ƣu nhanh hơn, cải thiện đƣợc độ phức tạp thuật tốn Những tốn tìm nghiệm, liệt kê toán tối ƣu lớp tốn giải Kĩ thuật Nhánh cận 1.2 Ý tưởng thuật toán Nhánh cận kỹ thuật xây dựng tìm kiếm phƣơng án tối ƣu, nhƣng khơng xây dựng tồn mà sử dụng giá trị cận để hạn chế bớt nhánh Phƣơng án khả toán, phƣơng án thỏa yêu cầu đƣợc gọi nghiệm tốn Trong q trình duyệt qua tất phƣơng án toán, từ nút phát sinh nhiều nút khác nhau, nút có nhiều nút khác Do đó, nút lại gốc Quá trình tìm kiếm tạo tìm kiếm Nếu ta đánh giá để cắt bỏ nhánh khơng khả thi số lƣợng phƣơng án phải duyệt giảm đáng kể Với nút ta xác định giá trị cận Giá trị cận giá trị gần với giá phƣơng án Với tốn tìm Min ta xác định cận Số hóa Trung tâm Học liệu – Đại học Thái Nguyên http://www.lrc-tnu.edu.vn/ 42 begin for l := to i div if Same(i, l) then begin Check := False; Exit; end; Check := True; end; procedure KeepResult; begin MinC := T[N]; Best := X; end; procedure Attempt(i: Integer); var j: 'A’ ’C’; begin for j := 'A' to 'C' begin X[i] := j; if Check(i) then begin if j = 'C' then T[i] := T[i - 1] + else T[i] := T[i - 1]; if T[i] + (N - i) div < MinC then if i = N then KeepResult else Attempt(i + 1); end; end; end; Số hóa Trung tâm Học liệu – Đại học Thái Nguyên http://www.lrc-tnu.edu.vn/ 43 procedure PrintResult; var i: Integer; begin for i := to N Write(f, Best[i]); WriteLn(f); WriteLn(f, ,’C Letter Count : ‘, MinC); end; begin Assign(f, InputFile); Reset(f); ReadLn(f, N); Close(f); Assign(f, OutputFile); Rewrite(f); T[0] := 0; MinC := N; Attempt(1); PrintResult; Close(f); end Nếu ta thay toán tìm xâu ký tự 'B' mà viết chƣơng trình tƣơng tự nhƣ chƣơng trình chạy chậm chút Lý do: thủ tục Attempt thử lần lƣợt giá trị 'A', 'B', đến 'C' Có nghĩa cách tìm, tiết kiệm sử dụng ký tự 'C' nên phần lớn liệu nhanh chóng tìm lời giải so với tốn tƣơng ứng tìm xâu ký tự 'B' Chính mà nhƣ đề u cầu ký tự 'B' ta lập chƣơng trình làm u cầu ký tự 'C' nhất, có điều in kết quả, ta đổi vai trị 'B', 'C' cho Đây ví dụ cho thấy sức mạnh thuật toán quay lui kết hợp với kỹ thuật nhánh cận, viết quay lui t đánh giá nhánh cận khơng tốt với N = 100, không đủ kiên nhẫn để đợi chƣơng trình cho kết (chỉ biết > giờ) Trong Số hóa Trung tâm Học liệu – Đại học Thái Nguyên http://www.lrc-tnu.edu.vn/ 44 N = 100, với chƣơng trình chạy hết giây cho kết xâu 27 ký tự 'C' 2.6 Kết luận Hiệu thuật toán nhánh cận phụ thuộc nhiều vào việc xây dựng hàm tính cận Việc xây dựng hàm tính cận dƣới lại phụ thuộc vào cách xây dựng thủ tục duyệt phƣơng án toán (đƣợc gọi thủ tục phân nhánh) Trên cách xây dựng cận đơn giản cho toán thơng dụng tối ƣu tổ hợp Các chƣơng trình đƣợc cài đặt theo thuật tốn đó, làm việc tốt nhiều so với duyệt toàn bộ, nhƣng áp dụng để giải tốn với kích thƣớc nhỏ Muốn giải đƣợc tốn đặt với kích thƣớc lớn cần có cách đánh giá cận tốt Trong chƣơng ta tìm hiểu cách áp dụng phát triển thuật kĩ thuật nhánh cận vào toán ngƣời du lịch để giải tốn kích thƣớc lớn Số hóa Trung tâm Học liệu – Đại học Thái Nguyên http://www.lrc-tnu.edu.vn/ 45 CHƢƠNG ỨNG DỤNG PHÁT TRIỂN NHÁNH CẬN Kĩ thuật nhánh cận phƣơng pháp giải chủ yếu tối ƣu tổ hợp Nhƣ chƣơng trƣớc thấy, tƣ tƣởng q trình tìm kiếm lời giải ta phân hoạch tập phƣơng án toán thành hai hay nhiều tập đƣợc biểu diễn nhƣ nút tìm kiếm cố gắng phép đánh giá cận cho nút, tìm cách loại bỏ nhánh tìm kiếm (những tập phƣơng án tốn) mà ta biết chắn khơng chứa phƣơng án tối ƣu Mặc dù tình tồi thuật tốn trở thành duyệt tồn bộ, nhƣng nhiều trƣờng hợp cụ thể, kỹ thuật cho phép rút ngắn đƣợc cách đáng kể trình tìm kiếm Chƣơng trình bày cách thể khác tƣ tƣởng kĩ thuật nhánh cận vào việc xây dựng thuật toán giải toán ngƣời du lịch Xét toán ngƣời du lịch phát biểu mục trƣớc Gọi C {cij : i, j 1,2, , n} ma trận chi phí Mỗi hành trình ngƣời du lịch Tx1 → Tx2 → … → Txn → Tx1 viết lại dƣới dạng: (x1, x2), (x2, x3), …, (xn, x1), thành phần (x(j-1), xj) đƣợc gọi cạnh hành trình Trong tốn ngƣời du lịch tiến hành tìm kiếm lời giải phân tập hành trình thành hai tập con: tập gồm hành trình chứa cạnh (ỉ, j) cịn tập gồm hành trình khơng chứa cạnh Ta gọi việc làm phân nhánh tập nói đƣợc gọi nhánh hay nút tìm kiếm Việc phân nhánh đƣợc minh hoạ tìm kiếm: Số hóa Trung tâm Học liệu – Đại học Thái Nguyên http://www.lrc-tnu.edu.vn/ 46 Tập tất hành trình Hành trình chứa (i,j) Hành trình khơng chứa (i,j) Hình Mơ hình phân nhánh Việc phân nhánh đƣợc thực dựa quy tắc Heuristic cho phép ta rút ngắn trình tìm kiếm phƣơng án tối ƣu Sau phân nhánh ta tính cận dƣới giá trị hàm mục tiêu hai tập nói Việc tìm kiếm đƣợc tiếp tục tập có giá trị cận dƣới nhỏ Thủ tục đƣợc tiếp tục thu đƣợc hành trình đầy đủ, tức phƣơng án toán ngƣời du lịch Khi ta cần xét tập phƣơng án có cận dƣới nhỏ giá trị hàm mục tiêu phƣơng án tìm đƣợc Quá trình phân nhánh tính cận tập phƣơng án tốn thơng thƣờng cho phép rút ngắn cách đáng kể trình tìm kiếm ta loại đƣợc nhiều tập chắn không chứa phƣơng án tối ƣu Một kỹ thuật thuật tốn tính cận dƣới đƣợc xây dựng dựa thủ tục rút gọn mà trình bày dƣới Sau bƣớc thuật tốn nhánh cận đƣợc mơ tả thơng qua ví dụ số cuối ta trình bày sơ đồ ngun tắc thuật tốn 3.1 Thủ tục rút gọn Rõ ràng tổng chi phí hành trình ngƣời du lịch chứa phần tử dòng phần tử cột ma trận chi phí C Do đó, ta trừ bớt phần tử dòng (hay cột) ma trận c số a độ dài tất hành trình giảm a, hành trình tối ƣu Số hóa Trung tâm Học liệu – Đại học Thái Nguyên http://www.lrc-tnu.edu.vn/ 47 không thay đổi Vì ta tiến hành trừ bớt phần tử dòng cột số cho thu đƣợc ma trận gồm phần tử khơng âm mà dịng cột có số tổng số trừ cho ta cận dƣới hành trình Thủ tục trừ bớt đƣợc gọi thủ tục rút gọn, số trừ dòng (cột) đƣợc gọi số rút gọn theo dòng (cột), ma trận thu đƣợc gọi ma trận rút gọn Hàm số sau cho phép rút gọn ma trận A kích thƣớc k x k đồng thời tính tổng số rút gọn (để tiện trình bày, tham số có mặt hàm thủ tục PASCAL dƣới đƣợc giả thiết khai báo cho phù hợp): function Reduce(A, k): real; (** Thủ tục rút gọn ma trận **) begin sum := 0; for i := to k (* k - kích thước A *) begin r[i]:= ; if r[i] > then begin ; sum := sum + r[i]; end; end; for j := to k begin s[j] := ; if s[j] > then begin ; sum := sum + s[j]; Số hóa Trung tâm Học liệu – Đại học Thái Nguyên http://www.lrc-tnu.edu.vn/ 48 end; end; Reduce := sum; end; Thí dụ: Ta có ma trận chi phí tốn ngƣời du lịch với n = thành phố sau s[j] ∞ 45 39 28 3 ∞ 17 90 46 88 93 77 ∞ 80 88 18 15 13 42 36 ∞ 33 46 33 21 16 56 ∞ 92 16 28 25 ∞ r[i 16 25 Đầu tiên trừ bớt phần tử dòng 1, 2, 3, 4, 5, cho số rút gọn tƣơng ứng 3, 4, 16, 7, 25, 3, sau ma trận thu đƣợc, trừ bớt phần tử cột cho số rút gọn tƣơng ứng 15 8, ta thu đƣợc ma trận rút gọn sau ∞ 29 32 ∞ 83 21 85 75 58 ∞ 58 48 30 12 ∞ 35 30 17 49 ∞ 89 6 12 12 0 ∞ Tổng số rút gọn 81, cân dƣới cho tất hành trình 81 (nghĩa khơng thể tìm đƣợc hành trình có tổng chi phí nhỏ 81) Bây giờ, ta xét cách phân tập phƣơng án thành hai tập Giả sử ta chọn cạnh (6, 3) để phân nhánh Khi tập hành trình đƣợc phân thành hai Số hóa Trung tâm Học liệu – Đại học Thái Nguyên http://www.lrc-tnu.edu.vn/ 49 tập con, tập hành trình chứa cạnh (6, 3), cịn tập hành trình khơng chứa cạnh (6, 3) Vì biết cạnh (6, 3) khơng đƣợc tham gia vào hành trình, nên ta cấm việc theo cạnh cách đặt c63 = ∞ Ma trận thu đƣợc rút gọn cách bớt phần tử cột 48 khơng bớt phần tử dòng Nhƣ ta thu đƣợc cận dƣới cho hành trình khơng chứa cạnh (6, 3) 81 + 48 = 129 Còn tập hành trình chứa cạnh (6, 3) ta phải loại dịng cột khỏi ma trận tƣơng ứng với nó, theo cạnh (6, 3) từ sang nơi khác không đƣợc phép từ đâu vào Kết ta thu đƣợc ma trận với bậc giảm Ngoài ra, theo cạnh (6, 3) nên không đƣợc phép từ đến nữa, ta cần cấm theo cạnh (3, 6) cách đặt c36 = ∞ Cây tìm kiếm bƣớc này, có dạng cho hình sau đây: Tập tất hành trình ∞ 29 32 ∞ 83 21 Hành trình khơng chứa (6,3) Hành trình chứa (6,3) Cận dƣới = 81 30 12 ∞ 30 17 49 ∞ 6 12 ∞ 0 Cận dƣới = 81 ∞ 0 ∞ 29 32 83 21 85 27 10 ∞ 10 ∞ Cận dƣới = 129 30 12 ∞ 35 30 17 12 12 49 ∞ 89 ∞ Hình Minh họa rút gọn hành trình Cạnh (6, 3) đƣợc chọn để phân nhánh phân nhánh theo ta thu đƣợc cận dƣới nhánh bên phải lớn so với việc phân nhánh theo cạnh khác Quy tắc đƣợc sử dụng để phân nhánh đỉnh tìm kiếm Trong Số hóa Trung tâm Học liệu – Đại học Thái Nguyên http://www.lrc-tnu.edu.vn/ 50 trình tìm kiếm ln theo nhánh bên trái trƣớc Nhánh bên trái có ma trận rút gọn với bậc giảm Trong ma trận nhánh bên phải ta thay số ∞, rút gọn thêm đƣợc ma trận tính lại số rút gọn theo dịng cột tƣơng ứng với cạnh phân nhánh, nhƣng kích thƣớc ma trận giữ nguyên Do cạnh cần chọn để phân nhánh phải cạnh làm tăng cận dƣới nhánh bên phải lên nhiều nhất, nên để tìm ta chọn số khơng ma trận mà thay ∞ cho ta tổng số rút gọn theo dịng cột chứa lớn Ta có thủ tục sau để chọn cạnh phân nhánh (r,c): 3.2 Thủ tục chọn cạnh phân nhánh (r,c) Đầu vào: Ma trận rút gọn A kích thƣớc k x k Đầu : Cạnh phân nhánh (r, c) tổng số rút gọn theo dòng r cột c beta procedure BestEdge(A,k,r,c,beta); [5] (* Thủ tục phân nhánh *) begin beta := -∞; for i := to k for j := to k if a[i,j] = then begin minr := ; mine := ; total := minr + mine; if total > beta then begin beta := total; r := i;(*chỉ số dịng cạnh tốt nhất*) Số hóa Trung tâm Học liệu – Đại học Thái Nguyên http://www.lrc-tnu.edu.vn/ 51 c := j; (* số cột cạnh tốt *) end; end; end; Trong ma trận rút gọn 5x5 nhánh bên trái hình 5, số khơng vị trí (4, 6) cho tổng số rút gọn 32 (theo dòng 32, cột 0) Đây giá trị lớn số khơng ma trận Vì vậy, việc phân nhánh dựa vào cạnh (4, 6) Khi cận dƣới nhánh bên phải tƣơng ứng với tập hành trình qua cạnh (6,3) nhƣng không qua (4,6) 81 + 32 = 113 Còn nhánh bên trái tƣơng ứng với ma trận x 4, ta phải loại bỏ dịng cột Tình phân nhánh đƣợc mơ tả hình Tập hành trình qua cạnh (6,3) Hành trình chứa (6,3), (4,6) Cận dƣới = 81 Hành trình chứa (6,3) khơng chứa (4,6) Cận dƣới = 113 Cận dƣới = 81 ∞ 29 ∞ 21 30 12 30 17 ∞ ∞ 0 ∞ 29 51 21 30 12 ∞ 30 17 12 ∞ 17 ∞ ∞ Hình Minh họa rút gọn hành trình Tiếp tục, ta lại phân nhánh từ đỉnh bên trái cách sử dụng cạnh (2, 1), số khơng vị trí có tổng số rút gọn 17 + = 20 (theo Số hóa Trung tâm Học liệu – Đại học Thái Nguyên http://www.lrc-tnu.edu.vn/ 52 đòng 17, theo cột 3) Sau phân nhánh theo cạnh (2, 1) ma trận nhánh trái có kích thƣớc 3x3 Vì qua (2, 1) nên ta cấm cạnh (1,2) cách đặt c12 = ∞, ta thu đƣợc ma trận sau: ∞ 30 21 ∞ 0 ∞ Ma trận rút gọn đƣợc cách bớt từ cột bớt dịng Điều dẫn đến ma trận: ∞ 28 20 ∞ 0 ∞ Ta có cận dƣới nhánh tƣơng ứng 81 + + = 84 Chú ý sau chấp nhận n-2 cạnh vào hành trình ma trận cịn lại có kích thƣớc x Hai cạnh cịn lại hành trình khơng phải chọn lựa nữa, mà đƣợc kết nạp vào chu trình Trong ví dụ đây, sau có cạnh (6, 3), (4, 6), (2, 1) (1, 4) ma trận nhánh trái có dạng ∞ ∞ Vì ta kết nạp nốt hai cạnh (3, 5) (5, 2) vào thu đƣợc hành trình 1, 4, 6, 3, 5, 2, với chi phí 104 Chú ý: Trong trình tìm kiếm nút tìm kiếm tƣơng ứng với ma trận chi phí A bƣớc ma trận chi phí tƣơng ứng với gốc ma trận c Khi chuyển động từ gốc theo nhánh bên trái Số hóa Trung tâm Học liệu – Đại học Thái Nguyên http://www.lrc-tnu.edu.vn/ 53 xuống phía dƣới kích thƣớc ma trận chi phí A giảm dần Cuối ma trận A có kích thƣớc 2x2 ta chấm dứt việc phân nhánh kết nạp cạnh lại để thu đƣợc hành trình ngƣời du lịch Dễ thấy ma trận rút gọn cuối có hai dạng sau: x ∞ U V y ∞ u v x ∞ y ∞ u, x, w, y đỉnh khác có đỉnh khác Trong trƣờng hợp để xác định xem hai cạnh cần phải kết nạp nốt ta cần xét phần tử ma trận A: if A[1,1] = ∞ then Kết nạp cạnh (u,y) (v,x) else Kết nạp cạnh (u,x) (v,y); 3.3 Mơ hình thuật tốn Bây ta mơ tả bƣớc thuật tốn nhánh cận giải toán ngƣời du lịch thủ tục đệ quy TSP sau Thủ tục TSP xét hành trình phận với Edges cạnh đƣợc chọn tiến hành tìm kiếm Ta sử dụng biến: Edges - số cạnh hành trình phận; A - ma trận chi phí tƣơng ứng với kích thƣớc (n-edges) X (n-edges); cost - chi phí hành trình phận; MinCost - chi phí hành trình tốt tìm đƣợc Trong thủ tục sử dụng hàm Reduce(A, k) thủ tục BestEdge(A, k, r, c, beta) mơ tả Số hóa Trung tâm Học liệu – Đại học Thái Nguyên http://www.lrc-tnu.edu.vn/ 54 procedure TSP(edges, cost, A); begin [5] cost:= cost + Reduce(A, n-edges); if cost < MinCost then if edges = n-2 then begin ; MinCost := Cost; ; end else begin BestEdge(A,n-edges,r,c.beta); LowerBound:= cost + beta; NewA := TSP(edges+1 ,cost,NewA); (* theo nhánh trái *) ; ^ if LowerBound < MinCost then begin (* theo nhánh phải *) A[r,c]:= ∞; TSP(edges, cost, A); A[r,c]:=0; end; end; ; (* thêm lại số rút gọn vào dòng cột tương ứng *) end; (* of TSP *) Số hóa Trung tâm Học liệu – Đại học Thái Nguyên http://www.lrc-tnu.edu.vn/ 55 KẾT LUẬN Luận văn trình bày hệ thống cách tổng quát kĩ thuật nhánh cận, nhƣ kĩ thuật cài đặt chung thuật toán nhánh cận Ứng dụng thuật toán nhánh cận vào toán mang tính chất tiêu biểu cho lớp tốn thơng dụng Từ đó, giúp minh họa chi tiết cách áp dụng kĩ thuật nhánh cận vào toán cụ thể, bƣớc đầu hình thành kĩ bản, cần thiết để áp dụng thuật tốn nhánh cận để giải tốn tối ƣu Số hóa Trung tâm Học liệu – Đại học Thái Nguyên http://www.lrc-tnu.edu.vn/ 56 TÀI LIỆU THAM KHẢO Tiếng Việt [1] Hồ Sĩ Đàm (chủ biên), Đỗ Đức Đơng, Lê Minh Hồng, Nguyễn Thanh Hùng, Tài liệu giáo khoa chuyên tin, NXB Giáo dục, 2009 [2] Lê Minh Hoàng, Giải thuật lập trình, http://www.jaist.ac.jp/~hoangle/, 2006 [3] Nguyễn Xuân Huy, Sáng tạo thuật tốn lập trình, NXB Thơng tin truyền thông, 2011 [4] Nguyễn Xuân My (chủ biên), Hồ Sĩ Đàm, Trần Đỗ Hùng, Lê Sĩ Quang, Một số vấn đề chọn lọc môn tin học, NXB Giáo dục, 2002 [5] Nguyễn Đức Nghĩa, Nguyễn Tơ Thành, Tốn rời rạc, NXB ĐH Quốc gia Hà Nội, 2004 [6] Tài liệu hội thảo phát triển chuyên môn giáo viên tin học trường THPT Chuyên (tài liệu lƣu hành nội bộ), Bộ giáo dục đào tạo, 2011 [7] Một số thông tin, tài liệu website http://Wikipedia.org Thái nguyên, ngày 24 tháng năm 2014 Học viên Phạm Chí Hiếu Số hóa Trung tâm Học liệu – Đại học Thái Nguyên http://www.lrc-tnu.edu.vn/ ... phải áp dụng kết hợp kĩ thuật nhánh cận (nhánh cận) Việc áp dụng kĩ thuật nhánh cận vào toán tốn thƣờng trừu tƣợng khó hiểu với học sinh THPT Làm để xây dựng ? ?cận? ?? để đánh giá “độ tốt” ? ?nhánh? ??... khuôn khổ luận văn thạc sĩ, chọn đề tài nghiên cứu: ? ?Phát triển kĩ thuật nhánh cận ứng dụng? ?? Đối tƣợng phạm vi nghiên cứu Kĩ thuật nhánh cận ứng dụng để giải số tốn liệt kê tìm phƣơng án tối ƣu Hƣớng... phƣơng án chắn tối ƣu Kỹ thuật gọi kỹ thuật đánh giá nhánh cận tiến trình quay lui Kĩ thuật Nhánh cận (Nhánh cận – Branch and Bound) giúp đánh giá đƣợc nghiệm, cắt bỏ phƣơng án (nhánh) khơng cần thiết,