Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 14 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
14
Dung lượng
326,5 KB
Nội dung
BÀI THU HOẠCH MÔN PHƯƠNG PHÁP NGHIÊN CỨU KHOA HỌC TRONG TIN HỌC Đề tài : “Tìm hiểu về thuật toán Heuristic và ứng dụng trong việc giải quyết một số bài toán” Bùi Duy Linh – CHK7 Bùi Duy Linh – CHK7 Phương pháp nghiên cứu khoa học trong tin học MỤC LỤC MỤC LỤC 2 LỜI MỞ ĐẦU Đối với nhiều bài toán, hoặc không có lời giải, hoặc độ phức tạp tính toán là hàm mũ, hoặc là bài toán NP-đầy đủ…, có nghĩa là nó không có lời giải khả thi, thì thông thường thay vì tìm lời giải tối ưu cho chúng, chúng ta cố gắng tìm lời giải có thể chấp nhận được, đáp ứng được yêu cầu của thực tế. Các lời giải này chính là các thuật toán Heuristic. Các thuật toán tìm kiếm luôn luôn đóng vai trò quan trọng trong việc giải các bài toán tin học. Các thuật toán loại này rất phong phú, có thể kể đến như: vét cạn, đệ quy quay lui, nhánh cận, nhị phân…Tuy nhiên, khi gặp những bài toán có không gian tìm kiếm lớn (đặc biệt trong các trò chơi cờ) thì các thuật toán tìm kiếm thông thường không cho kết quả hoặc kết quả không tối ưu (do những hạn chế về thời gian và bộ nhớ). Một hướng tiếp cận độc đáo có thể đáp ứng được đòi hỏi cho nhiều bài toán loại này là dùng thuật toán Heuristic. Để hiểu rõ hơn về thuật toán này, em đã có bài “Tìm hiểu về thuật toán Heuristic”. Trong quá trình làm bài không tránh khỏi sự thiếu xót, em rất mong được sự góp ý của thầy giáo và các bạn. 2 | P a g e Bùi Duy Linh – CHK7 Phương pháp nghiên cứu khoa học trong tin học I – Khái quát về thuật toán Heuristic Thuật ngữ Heuristic xuất phát từ tiếng Hy Lạp là ″heuriskein″ có nghĩa là ″tìm kiếm″ hoặc ″phát minh″. Chắc chắn chúng ta vẫn còn nhớ câu chuyện về nhà bác học Archimedes. Khi phát hiện ra định luật về trọng lượng riêng, ông đã trần truồng chạy ra đường và kêu lớn ″tôi tìm ra rồi″. Thực ra, lúc đó ông đã kêu lên ″heureka″, về sau này người ta đổi từ này thành ″eureka″. Thuật ngữ Heuristic được Feigenbaum Feldman định nghĩa như sau: ″Heuristic là các quy tắc, phương pháp, chiến lược, mẹo giải hay phương cách nào đó nhằm làm giảm khối lượng tìm kiếm lời giải trong không gian bài toán cực lớn ″. Tư tưởng chính để giảm khối lượng tìm kiếm là thay vì ″loại bỏ các hướng tìm kiếm chắc chắn không dẫn đến lời giải″, ta hãy ″chọn đi theo hướng có nhiều khả năng dẫn đến lời giải″. Do thuật toán Heuristic được con người sử dụng thường mang đặc trưng của những gợi ý hay lời khuyên, nên các phương pháp dựa trên Heuristic đôi khi không chỉ ra con đường trực tiếp để đạt tới mục đích. Nhiều kết quả nghiên cứu trong trí tuệ nhân tạo cho thấy rằng, tuy có nhiều điểm mạnh nổi bật, nhưng trong một vài lĩnh vực nghiên cứu nào đó thì các phương pháp Heuristic còn bộc lộ những điểm yếu nhất định. Điều phức tạp chính là vì mọi chương trình máy tính phải đảm bảo chắc chắn kết thúc công việc (theo định nghĩa một thuật toán phải đảm bảo tính đúng và tính dừng). Vì vậy, nếu nói rằng một chương trình nào đó sử dụng Heuristic thì kết luận về tính dừng chỉ đúng trong đa số các trường hợp. Do đó, trong phần lớn trường hợp giải quyết bài toán, các chương trình Heuristic có lúc cho kết quả mong đợi, đôi khi lại không. 3 | P a g e Bùi Duy Linh – CHK7 Phương pháp nghiên cứu khoa học trong tin học Các Heuristic không chỉ tác động đến các chiến lược tìm kiếm, mà còn ảnh hưởng quyết định tới các chiến lược điều khiển (hướng tìm kiếm trong không gian bài toán và xử lý cạnh tranh). Đối với những bài toán trí tuệ phức tạp, số khả năng có thể lớn tới mức không thể có một máy tính nào dầu hiện đại đến mấy đáp ứng nổi. Do vậy, thủ tục duyệt toàn thể không thể chấp nhận được. Trong phần lớn các bài toán chứng minh định lý sử dụng logic, số khả năng cần phải xét trở lên vô hạn. Việc lựa chọn một nước đi tốt nhất trong trò chơi đòi hỏi phải tìm kiếm trong khoảng 10 40 khả năng khác nhau, thậm chí đối với chơi cờ, số khả năng cỡ 10 120 . Một cách xử lý tốt trong những trường hợp này là sử dụng thao tác rút gọn các hướng tìm kiếm. Vấn đề quan trọng là ở chỗ, chúng ta biết khai thác khéo léo thông tin tại mỗi trạng thái để tìm ra thứ tự ưu tiên và đẩy nhanh quá trình tìm kiếm. Thông thường ta gắn với mỗi trạng thái của bài toán với một số đo (một hàm đánh giá) nào đó để đánh giá mức độ gần đích của nó. Một kỹ thuật Heuristic được coi là hợp lý khi nó cho phép tiến hành đánh giá các khả năng để làm rõ khả năng nào tốt hơn các khả năng còn lại. Những ví dụ điển hình về các hàm đánh giá là các ước lượng khoảng cách đường chim bay từ một đỉnh nào tới đỉnh đích trong bài toán xác định đường đi ngắn nhất, hay các đánh giá ước lượng mức độ quan trọng của các quân cờ trong mỗi thế cờ dựa trên tổ hợp các trọng số của chúng… 4 | P a g e Bùi Duy Linh – CHK7 Phương pháp nghiên cứu khoa học trong tin học II - Ứng dụng thuật toán Heuristic vào giải quyết một số bài toán 1- Bài toán người đưa thư Bài toán: Để tiết kiệm thời gian đi đưa thư trong một địa phương. Người đưa thư phải đi qua tất cả các điểm cần phát thư rồi trở về vị trí ban đầu với đường đi ngắn nhất. Bài toán có thể phát biểu lại như sau: Giả sử có một đồ thị có trọng số dương, tìm đường đi ngắn nhất qua tất cả các đỉnh của đồ thị rồi trở về đỉnh ban đầu. Hạn chế khi sử dụng giải thuật tối ưu : Đồ thị có n đỉnh, khi đó thuật toán tối ưu cho bài toán này sẽ là thuật toán tìm đường đi ngắn nhất cho chu trình Haminton. Do đó thuật toán tối ưu sẽ có độ phức tạp là O( n!) là Không thể thực hiện thuật toán. -> cần Tìm một thuật giải Heuristic cho bài toán này. Theo kinh nghiệm của con người trong thực tế thì khi ta đi trên những đoạn đường ngắn nhất thì cuối cùng ta sẽ có một hành trình ngắn nhất là “sử dụng nguyên lý tham lam”. - Thuật giải bài toán sử dụng nguyên lý tham lam: - Ví dụ về thuật giải trên: 5 | P a g e Bùi Duy Linh – CHK7 Phương pháp nghiên cứu khoa học trong tin học Với một đ thồ ị trọng số dương như hình bên. Nếu ta xuất phát từ đ nh sỉ ổ 1, thì đ nh tiỉ ếp theo phải đ n là 2 ( vìế cạnh 1-2 có trọng số nhỏ nhất so với các đ nh chỉ ưa đ nế của 1), như vậy tiếp theo ta sẽ đ n các đ nh theo thế ỉ ứ tự là 5, 3, 4, và trở về 1. Như vậy đ ng đi ngườ ắn nhất theo giải thuật trình bày trên tìm đ c là:ượ 1 + 3 + 2 + 1+ 7 = 14 Cài đ t thuặ ậ t toán. - Ta có dạng ma trận hóa của đ thồ ị trong ví dụ ở mục 3, như hình bên: - Chương trình đ c viượ ết trên môi trường visual C++ 6.0. - Input: một ma trận vuông bằng file “graph.txt “ có dạng như hình bên, hay nhập ma trận bằng tay. - Output: đ ng đi theo thuườ ật giải Heuristic, và chi phí của đ ng đi đó.ườ - Tổ chức dữ liệu chương trình: (hình bên) + n: là biến cho biết số đ nh cỉ ủa đ thồ ị. + G: dùng đ trể ỏ tới các giá trị của ma trận. + v[Gr.n + 1]: dùng đ lể ưu trữ đ ng đi theo thuườ ật giải Heuristic. + Gr.G[ i][j ]: đ thồ ị dưới dạng ma trận. + x: là đ nh đ u tiên xuỉ ầ ất phát. + initGraph(Graph &Gr): Hàm dùng đ khể ởi tạo một đ thồ ị mới từ cấu trúc đã tổ chức. 6 | P a g e Bùi Duy Linh – CHK7 Phương pháp nghiên cứu khoa học trong tin học + ReadGraph(Graph &Gr): dùng đ đ c đ thể ọ ồ ị từ file .txt + inputHandle( Graph &Gr): dùng đ nhể ập đ thồ ị bằng tay. + outputGraph(Graph Gr): dùng đ xuể ất đ thồ ị đã đ c nhượ ập ra màn hình. + testGraph(int a, int* v, Graph Gr): Kiểm tra điểm đang duyệt có trùng với điểm đã duyệt trên ma trận không. Đ c gượ ọi trong hàm topNear(…). + topNear(int a, Graph Gr, int* v) : Hàm tìm đ nh kỉ ế tiếp theo thuật giải Heuristic. Đ c gượ ọi lại trong hàm FindWay(…) . 7 | P a g e Bùi Duy Linh – CHK7 Phương pháp nghiên cứu khoa học trong tin học + FindWay(int x, Graph Gr, int* v): Hàm tìm đ ng đi theo giườ ải thuật Heuristic. Dựa theo cách tìm đ ng đi có trườ ọng số nhỏ nhất đ đi bể ước tiếp theo. - Giao diện chương trình: console Aplication. Khi thực thi, chương trình sẽ yêu cầu chọn nhập ma trận đ thồ ị bằng tay hay bằng file “graph.txt”. Ví dụ như hình trên chọn nhập ma trận bằng file txt. Ta nhập tiếp đ nh bỉ ắt đ u (ầ ở đây nhập 1), thì chương trình sẽ cho ra đáp án cho ví dụ trên: Đ ng đi là: 1 – 2 – 5 – 3 – 4 – 1ườ Chi phí cho đ ng đi này theo giườ ải thuật Heuristic là: 14. 8 | P a g e Bùi Duy Linh – CHK7 Phương pháp nghiên cứu khoa học trong tin học Nếu như chọn cách nhập ma trận bằng tay thì ta phải nhập từng giá trị của ma trận vào. - Nhấn ESC đ thoát khể ỏi chương trình, Phím bất kỳ đ tiể ếp tục chương trình với cách duyệt từ đ nh khác.ỉ Đánh giá thu ậ t gi ả i Heuristic c ủ a bài toán: - Ưu điểm: Thuật giải Heuristic cho bài toán người đ a thư ư có đ phộ ức tạp O(n 2 ) tốt hơn rất nhiều so với thuật toán tối ưu ( có đ phộ ức tạp O( n!) ). - Nhược điểm: thuật giải có những hạn chế, chưa cho ra lời giải chính xác. -> K ế t lu ậ n : Thuật giải Heuristic cho bài toán người đưa thư tuy chưa đưa ra được lời giải chính xác cho bài toán, nhưng nó cho ra một lời giải có thể chấp nhận được với độ phức tạp thấp hơn nhiều so với thuật toán tối ưu. 9 | P a g e Bùi Duy Linh – CHK7 Phương pháp nghiên cứu khoa học trong tin học 2 - Bài toán tô màu cho đồ thị Giả sử G = là một đồ thị không định hướng. Yêu cầu tô màu cho tất cả các đỉnh của G sao cho hai đỉnh được nối bằng một cung thì phải có hai màu khác nhau. Có thể thấy rằng bài toán tô màu này sao cho số màu được dùng là ít nhất là một bài toán NP-đầy đủ. Lúc này, ta tìm một lời giải tốt có thể chấp nhận được theo một thuật toán heuristic như sau: Ban đầu chọn một màu và một đỉnh xuất phát. Ta tô màu đỉnh này và tất cả các đỉnh khác có thể tô được mà vẫn thoả mãn điều kiện của bài toán. Chúng ta chọn màu mới và một đỉnh xuất phát mới (chưa được tô), ta tô đỉnh này và tất cả các đỉnh khác (còn chưa được tô) có thể tô được bằng màu thứ hai, và cứ như vậy…cho đến khi tô hết các đỉnh của G thì thôi. Bài tập: Các ô vuông thần bí Kế tục thành công của trò chơi với khối lập phương thần bí, Ngài Rubik sáng tạo ra dạng phẳng của trò chơi này gọi là trò chơi các ô vuông thần bí. Đây là một bảng gồm 8 ô vuông bằng nhau (xem Hình 1). Chúng ta xét bảng trong đó mỗi ô vuông có một màu khác nhau. Các màu được ký hiệu bởi tám số nguyên dương đầu tiên (xem Hình 1). Trạng thái của bảng được cho bởi dãy ký hiệu màu của các ô được viết lần lượt theo chiều kim đồng hồ bắt đầu bởi ô ở góc trái trên và kết thúc tại ô ở góc trái dưới. Ví dụ, trạng thái của bảng trong hình 1 được cho bởi dãy (1, 2, 3, 4, 5, 6, 7, 8). Trạng thái này 10 | P a g e [...]... cứu khoa học trong KẾT LUẬN Thuật toán Heuristic tuy có nhiều điểm mạnh nổi bật, nhưng trong một vài lĩnh vực nghiên cứu nào đó thì các phương pháp Heuristic còn bộc lộ những điểm yếu nhất định, vì vậy chúng ta phải tìm hiểu kỹ thuật toán để có thể áp dụng vào từng trường hợp cụ thể nhằm thu được kết quả tốt nhất 13 | P a g e Bùi Duy Linh – CHK7 tin học Phương pháp nghiên cứu khoa học trong TÀI LIỆU... luôn có thể chuyển về một trạng thái bất kỳ bằng cách dùng các phép biến đổi cơ bản nói trên Hãy viết chương trình tìm các phép biến đổi cơ bản để chuyển bảng từ trạng thái khởi đầu cho trong hình 1 về một trong các trạng thái cho trước (Câu A), bạn sẽ được thêm hai điểm nếu số lượng phép biến đổi tìm được không vượt quá 300 (Câu B) Dữ liệu vào: file INPUT.TXT chứa 8 số nguyên dương trong dòng đầu tiên... trạng thái đích Dữ liệu ra: trong dòng đầu tiên của file OUTPUT.TXT chứa một số L là số lượng 11 | P a g e Bùi Duy Linh – CHK7 tin học Phương pháp nghiên cứu khoa học trong phép biến đổi của dãy các phép biến đổi tìm được Trong L dòng tiếp theo phải ghi dãy tên các phép biến đổi cơ bản theo trình tự thực hiện, mỗi tên ghi ở vị trí đầu tiên của mỗi dòng Ví dụ về dữ liệu vào và dữ liệu ra: 12 | P a g e... được kết quả tốt nhất 13 | P a g e Bùi Duy Linh – CHK7 tin học Phương pháp nghiên cứu khoa học trong TÀI LIỆU THAM KHẢO 1 Phan Dũng, Phương pháp luận sáng tạo khoa học kỹ thuật, Nhà xuất bản TP.HCM-1998 2 Hoàng Kiếm, Giải một bài toán trên máy tính như thế nào (tập 1, 2, 3), Nhà xuất bản Giáo dục 2001, 2002, 2004 14 | P a g e ... học trong thái khởi đầu (hay trạng thái đích) Có thể dùng 3 phép biến đổi cơ bản đối với bảng có tên là′A′, ′B′, ′C′: ′A′: đổi chỗ dòng trên và dòng dưới Ví dụ sau phép biến đổi ′A′thì hình 1 thành: ′B′: thực hiện một phép hoán vị vòng quanh sang phải Ví dụ sau phép biến đổi ′B′ thì hình 1 thành: ′C′: quay theo chiều kim đồng hồ bốn ô giữa Ví dụ sau phép biến đổi ′C′ thì hình 1 thành: Biết rằng từ một . BÀI THU HOẠCH MÔN PHƯƠNG PHÁP NGHIÊN CỨU KHOA HỌC TRONG TIN HỌC Đề tài : Tìm hiểu về thuật toán Heuristic và ứng dụng trong việc giải quyết một số bài toán Bùi Duy Linh. thể đáp ứng được đòi hỏi cho nhiều bài toán loại này là dùng thuật toán Heuristic. Để hiểu rõ hơn về thuật toán này, em đã có bài Tìm hiểu về thuật toán Heuristic . Trong quá trình làm bài không. là một bài toán NP-đầy đủ. Lúc này, ta tìm một lời giải tốt có thể chấp nhận được theo một thuật toán heuristic như sau: Ban đầu chọn một màu và một đỉnh xuất phát. Ta tô màu đỉnh này và tất