phát triển các kỹ thuật nhánh cận và ứng dụng

61 752 2
phát triển các kỹ thuật nhánh cận và ứng dụng

Đ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

Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên http://www.lrc-tnu.edu.vn/ ĐẠ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 i Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên http://www.lrc-tnu.edu.vn/ LỜI CAM ĐOAN Tôi xin cam đoan đây là công trình nghiên cứu của riêng tôi. Các kết quả trong luận văn là trung thực, và chƣa từng đƣợc ai công bố trong bất kỳ tài liệu nào khác. Tôi xin cam đoàn rằng mọi sự giúp đỡ để hoàn thành luận văn này đã đƣợc cảm ơn. Các thông tin trích dẫn trong luận văn đã đƣợc ghi rõ nguồn gốc. Học viên thực hiện luận văn Phạm Chí Hiếu ii Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên http://www.lrc-tnu.edu.vn/ MỤC LỤC LỜI CAM ĐOAN i DANH MỤC CÁC HÌNH iv MỞ ĐẦU 1 1. Đặt vấn đề 1 2. Đối tƣợng và phạm vi nghiên cứu 2 3. Hƣớng nghiên cứu của đề tài 2 LỜI CẢM ƠN 3 CHƢƠNG 1. TỔNG QUAN KĨ THUẬT NHÁNH CẬN 4 1.1. Giới thiệu chung 4 1.2. Ý tƣởng của thuật toán 5 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 bài toán khó 14 2.2. Bài toán Ba lô 16 2.2.1. Bài toán: 16 2.2.2. Phân tích bài toá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 bài toá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 iii Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên http://www.lrc-tnu.edu.vn/ 2.4.1. Bài toán 35 2.4.2. Phân tích bài 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 bài toán 40 2.5.3. Chƣơng trình minh họa 41 2.6. Kết luận 44 CHƢƠNG 3. Ứ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 iv Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên http://www.lrc-tnu.edu.vn/ DANH MỤC CÁC HÌNH Hình 1. Giải bài toán ba lô bằng nhánh cận 21 Hình 2. Giải bài toán ngƣời du lịch 31 Hình 3. Mô hình phân nhánh 46 Hình 4. Minh họa rút gọn hành trình 49 Hình 5. Minh họa rút gọn hành trình 2 51 1 Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên http://www.lrc-tnu.edu.vn/ MỞ ĐẦU 1. Đặt vấn đề Ngày nay với sự phát triển nhƣ vũ bão của khoa học công nghệ trên thế giới, mặc dù xuất phát chậm hơn rất nhiều nƣớc nhƣng trong hơn chục năm qua đất nƣớc chúng ta đã trải qua cuộc cách mạng lớn lao về công nghệ thông tin. Để đáp ứng những đòi hỏi của sự phát triển đó phải có kế hoạch đào tạo bồi dƣỡng những cá nhân có niềm say mê và có năng khiếu trong lĩnh vực tin học đặc biệt học sinh các lớp chuyên tin tạo nguồn, cung cấp cho các trƣờng đại học các sinh viên đã đƣợc trang bị vốn kiến thức cơ sở vững chắc, giúp cho mục tiêu đi trƣớc đón đầu, rút ngắn khoảng cách về trình độ tin học giữa nƣớc ta và thế giới. Với học sinh phổ thông ở trƣờng chuyên phải đƣợc trang bị các kiến thức cơ sở về các loại cấu trúc dữ liệu và trang bị các kiến thức tiên tiến nhất về giải thuật. Việc truyền đạt các kiến thức về một số giải thuật nhƣ: quay lui, nhánh cận, quy hoạch động, tham lam, các giải thuật trên đồ thị … là rất cần thiết cho học sinh trƣờng Chuyên cũng nhƣ trong việc bồi dƣỡng học sinh giỏi các trƣờng THPT (trung học phổ thông) để phát triển tƣ duy và lập trình giải các bài toán tin học. Hình thành những nét cơ bản của nghệ thuật đoán nhận giải thuật và nghệ thuật lập trình. Tạo lập và củng cố lòng say mê tìm hiểu và khám phá cho học sinh khi giải các bài toán tin. Để giải một bài toán thông thƣờng có nhiều cách tiếp cận. Mỗi cách tiếp cận khác nhau cho kết quả với độ tối ƣu khác nhau. Với nhiều bài toán việc tìm ra giải thuật tối ƣu không phải việc đơn giản, do đó một kĩ năng cần thiết để giải đƣợc một bài toán hoàn chỉnh là phải giải đƣợc bài toán ở kích thƣớc dữ liệu vừa phải. Đây là sẽ những bộ dữ liệu thử mang tính định hƣớng chiến lƣợc cho việc giải bài toán. Có rất nhiều bài toán, đặc biệt là bài toán tối ƣu, 2 Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên http://www.lrc-tnu.edu.vn/ có thể giải ngay bằng thuật toán duyệt toàn bộ hoặc một phần của một bài toán lớn. Với phƣơng pháp duyệt toàn bộ, điển hình là thuật toán quay lui có một nhƣợc điểm đó là độ phức tạp bài toán thƣờng lớn, do đó kích thƣớc bài toán giải đƣợc rất hạn chế. Để khắc phục nhƣợc điểm chúng ta thƣờng phải áp dụng kết hợp kĩ thuật nhánh cận (nhánh và cận). Việc áp dụng kĩ thuật nhánh cận vào các bài toán bài toán thƣờng khá trừu tƣợng và khó hiểu với học sinh THPT. Làm thế nào để có thể xây dựng được một “cận” để có thể đánh giá được “độ tốt” của “nhánh” đang xét ? Làm thế nào có thể kết hợp kĩ thuật nhánh cận vào các bài toán duyệt quay lui hiệu quả ? Do đó tôi thấy việc phân tích, đánh giá và định hƣớng cách tiếp cận một bài toán bằng kĩ thuật nhánh cận là rất cần thiết. Từ đó nâng cao chất lƣợng của việc dạy và học cho học sinh. Trong khuôn khổ luận văn thạc sĩ, tôi chọn đề tài nghiên cứu: “Phát triển các kĩ thuật nhánh cận và ứng dụng”. 2. Đối tƣợng và phạm vi nghiên cứu Kĩ thuật nhánh cận và ứng dụng để giải một số bài toán liệt kê và tìm phƣơng án tối ƣu. 3. Hƣớng nghiên cứu của đề tài - Giới thiệu tổng quan kĩ thuật nhánh cận và các kỹ thuật liên quan. - Tổ chức bài toàn theo kĩ thuật nhánh cận - Cách đánh giá cận của các bài toán khác nhau - Cài đặt chƣơng trình cho một số bài toán. 3 Số hóa bởi 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ă , tôi đ c s h ng ô . V ơn tôi xin ơ đ Sau đ Đ Công nghệ Thông tin và Truyền thông Thái Nguyên đ đ n thu n l n văn. ƣ - Khoa học Nguyễn Xuân Huy, ng n đ , đ ng viên, đ n thu n l t n vă p. Trong quá trình học tập, cũng nhƣ là trong quá trình làm luận văn, khó tránh khỏi sai sót, rất mong các Thầy, Cô thông cảm, bỏ qua. Đồng thời do trình độ cũng nhƣ kinh nghiệm thực tiễn còn hạn chế nên luận văn không thể tránh khỏi những thiếu sót, em rất mong nhận đƣợc ý kiến đóng góp Thầy, Cô để em học thêm đƣợc nhiều kinh nghiệm và sẽ hoàn thành tốt hơn. Em xin chân thành cảm ơn! 4 Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên http://www.lrc-tnu.edu.vn/ CHƢƠNG 1. TỔNG QUAN KĨ THUẬT NHÁNH CẬN 1.1. Giới thiệu chung Một trong những bài toán đặt ra trong thực tế là việc tìm ra một nghiệm thoả mãn một số điều kiện nào đó, và nghiệm đó là tốt nhất theo một chỉ tiêu cụ thể, nghiên cứu lời giải các lớp bài toán tối ƣu thuộc về lĩnh vực quy hoạch toán học. Tuy nhiên cũng cần phải nói rằng trong nhiều trƣờng hợp chúng ta chƣa thể xây dựng một thuật toán nào thực sự hữu hiệu để giải bài toán, mà cho tới nay việc tìm nghiệm của chúng vẫn phải dựa trên mô hình liệt kê toàn bộ các cấu hình có thể và đánh giá, tìm ra cấu hình tốt nhất. Việc liệt kê cấu hình có thể cài đặt bằng các phƣơng pháp liệt kê: Sinh tuần tự và tìm kiếm quay lui. Thuật toán quay lui (backtracking) là chiến lƣợc tìm nghiệm bài toán bằng cách xét tất cả các phƣơng án có thể. Đó là một quá trình tìm kiếm theo độ sâu trong một tập hợp các lời giải. Trong quá trình tìm kiếm, nếu ta gặp một hƣớng lựa chọn không thỏa mãn, ta quay lui về điểm lựa chọn nơi có các hƣớng khác và thử hƣớng lựa chọn tiếp theo. Khi đã thử hết các 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 đó và thử hƣớng lựa chọn tiếp theo tại đó. Quá trình tìm kiếm thất bại khi không còn điểm lựa chọn nào nữa. Đây là một thuật toán có thể áp dụng để giải rất nhiều bài toán với kích thƣớc dữ liệu thích hợp. Ƣu điểm của thuật toán là đảm bảo tìm ra nghiệm đúng chính xác. Tuy nhiên, hạn chế là độ phức tạp thƣờng lớn. Mô hình thuật toán quay lui là tìm kiếm trên một cây phân cấp. Nếu giả thiết rằng ứng với mỗi nút tƣơng ứng với một giá trị đƣợc chọn cho x[i] sẽ ứng với chỉ 2 nút tƣơng ứng với 2 giá trị mà x[i+1] có thể nhận thì cây n cấp sẽ có tới 2 n nút lá, con số này lớn hơn rất nhiều lần so với dữ liệu đầu vào n. 5 Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên http://www.lrc-tnu.edu.vn/ Chính vì vậy mà nếu nhƣ ta có thao tác thừa trong việc chọn x[i] thì sẽ phải trả giá rất lớn về chi phí thực thi thuật toán bởi quá trình tìm kiếm lòng vòng vô nghĩa trong các bƣớc chọn kế tiếp x[i+1], x[i+2], … Khi đó, một vấn đề đặt ra là trong quá trình liệt kê lời giải ta cần tận dụng những thông tin đã tìm đƣợc để loại bỏ sớm những phƣơng án chắc chắn không phải tối ƣu. Kỹ thuật đó gọi là kỹ thuật đánh giá nhánh cận trong tiến trình quay lui. Kĩ thuật Nhánh cận (Nhánh và cận – Branch and Bound) giúp chúng ta đánh giá đƣợc nghiệm, do có thể cắt bỏ đi những phƣơng án (nhánh) không cần thiết, việc tìm nghiệm tối ƣu sẽ nhanh hơn, cải thiện đƣợc độ phức tạp thuật toán. Những bài toán tìm một nghiệm, liệt kê hoặc bài toán tối ƣu là những lớp bài toán có thể giải bằng Kĩ thuật Nhánh cận. 1.2. Ý tưởng của thuật toán Nhánh cận là kỹ thuật xây dựng cây tìm kiếm phƣơng án tối ƣu, nhƣng không xây dựng toàn bộ cây mà sử dụng giá trị cận để hạn chế bớt các nhánh. Phƣơng án là các khả năng có thể của bài toán, những phƣơng án thỏa yêu cầu đƣợc gọi là nghiệm của bài toán. Trong quá trình duyệt qua tất cả các phƣơng án của bài toán, từ một nút có thể phát sinh ra nhiều nút con khác nhau, mỗi nút con này có thể có nhiều nút con khác nữa. Do đó, mỗi nút con này sẽ lại là gốc của một cây con. Quá trình tìm kiếm này sẽ tạo ra một cây tìm kiếm. Nếu ta có thể đánh giá để cắt bỏ đi một nhánh con không khả thi thì số lƣợng phƣơng án phải duyệt sẽ giảm đi đáng kể. Với mỗi nút trên cây ta sẽ xác định một giá trị cận. Giá trị cận là một giá trị gần với giá của các phƣơng án. Với bài toán tìm Min ta sẽ xác định cận [...]... từ (x1, x2, ,xk) nữa [4] Nhƣ vậy, với phƣơng pháp nhánh và cận, ta không phải duyệt toàn bộ các phƣơng án để tìm ra nghiệm tốt nhất mà bằng cách đánh giá các nghiệm mở rộng, ta có thể cắt bỏ đi những phƣơng án (nhánh) không cần thiết, do đó việc tìm nghiệm tối ƣu sẽ nhanh hơn Cái khó nhất trong việc áp dụng phƣơng pháp nhánh và cận là đánh giá đƣợc các nghiệm mở rộng, nếu đánh giá đƣợc tốt sẽ giúp... toán điển hình Những bài toán dƣới đây mang tính chất tiêu biểu cho lớp bài toán mà nó đại diện Từ đó giúp minh họa việc áp dụng các kĩ thuật nhánh cận vào các bài toán thực tế Hơn nữa, giúp chúng ta sẽ có cái nhìn tổng quát hơn cho những bài toán có thể áp dụng các kĩ thuật nhánh cận 2.2 Bài toán Ba lô Bài toán Ba lô (Knapsack Problem) hay còn gọi là bài toán cái túi đã đƣợc biết đến hơn một thế kỷ Nhƣng... http://www.lrc-tnu.edu.vn/ 14 CHƢƠNG II ÁP DỤNG KĨ THUẬT NHÁNH CẬN CHO MỘT SỐ BÀI TOÁN 2.1 Các bài toán khó Hiện này có nhiều bài toán có thể giải bằng các thuật toán trong thời gian đa thức theo kích thƣớc dữ liệu Ví dụ nhƣ: - Bài toán Tìm cây khung ngắn nhất, giải bằng thuật toán Prim có độ phức tạp thuật toán là O(n2) - Bài toán Tìm đƣờng đi ngắn nhất trong đồ thị, giải bằng thuật toán Dijkstra có độ phức tạp... chung lớn nhất của 2 số nguyên dƣơng m và n, giải bằng thuật toán Euclid có độ phức tạp O(m+n) Tuy nhiên còn rất nhiều các bài toán khó mà hiện nay chúng ta mới chỉ giải đƣợc bằng các thuật toán với độ phức tạp là hàm mũ theo kích thƣớc dữ liệu vào của bài toán Hàm mũ có dạng: an với a>1 và n là kích thƣớc dữ liệu của bài toán Với những bài toán phải giải bằng các thuật toán với độ phức tạp là hàm mũ... thị vô hƣớng G = (V, E) là một tập con các đỉnh của đồ thị S V sao cho mỗi cạnh của đồ thị có ít nhất một đầu mút trong S Bài toán đặt ra là: Cho đồ thị vô hƣớng G = (V, E) và số nguyên k Hỏi G có phủ đỉnh với kích thƣớc k hay không? Số hóa bởi Trung tâm Học liệu – Đại học Thái Nguyên http://www.lrc-tnu.edu.vn/ 16 Sau đây là cách áp dụng các kĩ thuật nhánh cận và tổ chức dữ liệu cho một số bài toán... đƣợc 1.3 Kĩ thuật tỉa nhánh Để có thể tỉa bớt nhánh (loại bỏ những hƣớng đi, trƣờng hợp) của một bài toán liệt kê bằng đệ quy ta có nhiều phƣơng pháp khác Nhƣng chủ yếu là dựa vào những dữ liệu đã biết, kết hợp với việc phán đoán để có thể định lƣợng cho các giá trị cụ thể trong từng trƣờng hợp Định lƣợng để đánh giá độ tối ƣu của một hƣớng đi (một nhánh) là một việc khó của kĩ thuật nhánh cận Ngƣời... chọn tiếp x[i+1]} ; end; end; end; begin Init; Attempt(1); ; end Với cấu trúc của kỹ thuật nhánh cận nhƣ trên, ta có thể dễ thấy Kỹ thuật này đã thêm vào cho thuật toán quay lui khả năng đánh giá theo từng bƣớc, nếu tại bƣớc thứ i, giá trị thử gán cho x[i] không có hi vọng tìm thấy cấu hình tốt hơn cấu hình BestSolution... http://www.lrc-tnu.edu.vn/ 13 1.5 Kết luận Kĩ thuật nhánh cận, cũng nhƣ nhiều kĩ thuật khác trong lập trình nó chỉ mang tính định hƣớng chiến lƣợc để giải bài toán Đây là không phải là một công cụ siêu việt để có thể giải tất cả các bài toán tìm nghiệm tối ƣu hay liệt kê Do đó, khi áp dụng, đòi hỏi ngƣời lập trình phải linh hoạt kết hợp thêm nhiều kĩ thuật, thuật toán khác nhau thì mới có thể đem lại... phân tích bài toán để tìm phƣơng án áp dụng kĩ thuật nhánh cận: Mô hình toán học của bài toán có dạng sau: Tìm n f * max{ f ( x) n cjxj : j 1 ajxj b, x j Z , j 1,2, , n} , (1) j 1 Trong đó : Z+ là tập các số nguyên không âm n c j x j : là tổng giá trị của các đồ vật đƣợc chọn j 1 n a j x j : là tổng trọng lƣợng của các đồ vật đƣợc chọn j 1 Kí hiệu D là tập hợp các phƣơng án của bài toán (1) n D {x=(x1... http://www.lrc-tnu.edu.vn/ 7 toán trên tập con các phƣơng án Hay nói một cách khác, g(a1, a2, …, ak) là cận dưới của giá trị hàm mục tiêu trên tập D(a1, a2, …, ak) Do đó, hàm g đƣợc gọi là hàm cận dƣới, và giá trị g(a1, a2, …, ak) đƣợc gọi là cận dƣới của tập D(a1, a2, …, ak) Do có thể đồng nhất tập D(a1, a2, …, ak) với phƣơng án bộ phận (a1, a2, …, ak) nên ta cũng gọi g(a1, a2, …, ak) là cận dƣới của phƣơng án bộ phận . chọn đề tài nghiên cứu: Phát triển các kĩ thuật nhánh cận và ứng dụng . 2. Đối tƣợng và phạm vi nghiên cứu Kĩ thuật nhánh cận và ứng dụng để giải một số bài toán liệt kê và tìm phƣơng án tối. điểm chúng ta thƣờng phải áp dụng kết hợp kĩ thuật nhánh cận (nhánh và cận) . Việc áp dụng kĩ thuật nhánh cận vào các bài toán bài toán thƣờng khá trừu tƣợng và khó hiểu với học sinh THPT cứu của đề tài - Giới thiệu tổng quan kĩ thuật nhánh cận và các kỹ thuật liên quan. - Tổ chức bài toàn theo kĩ thuật nhánh cận - Cách đánh giá cận của các bài toán khác nhau - Cài đặt chƣơng

Ngày đăng: 23/11/2014, 00:07

Từ khóa liên quan

Tài liệu cùng người dùng

Tài liệu liên quan