Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 20 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
20
Dung lượng
579,47 KB
Nội dung
Giáo trình Nhập mơn trí tuệ nhân tạo TRƯỜNG ĐẠI HỌC ĐÀ LẠT KHOA TỐN –TIN Trương Chí Tín GIÁO TRÌNH NHẬP MƠN TRÍ TUỆ NHÂN TẠO Đà Lạt, 04 - 2009 LỜI MỞ ĐẦU Giáo trình “Nhập mơn Trí tuệ nhân tạo” viết dành cho sinh viên ngành Tốn – Tin, Tin học Cơng nghệ thơng tin Để đọc giáo trình này, sinh viên cần có kiến thức lôgic, cấu trúc liệu thuật tốn Nội dung giáo trình gồm chương: Chương 1: Khái niệm trí tuệ nhân tạo Chương 2: Các phương pháp giải vấn đề Chương 3: Biểu diễn xử lý tri thức Chương 4: Lập trình lơgic Chương giới thiệu tóm tắt lịch sử hình thành phát triển khái niệm chung nhất, lĩnh vực nghiên cứu ứng dụng trí tuệ nhân tạo Chương trình bày phương pháp biểu diễn giải vấn đề bản: biểu diễn vấn đề không gian trạng thái đồ thị thông thường, đồ thị VÀ/HOẶC, phương pháp xác định trực tiếp lời giải, phương pháp thử – sai (trong trình bày phương pháp tìm kiếm theo chiều rộng, chiều sâu, theo hướng cực tiểu giá thành đồ thị, thuật giải di truyền, phương pháp GPS, …) kỹ thuật heuristic Chương đề cập đến phương pháp biểu diễn tri thức bằng: lôgic, luật sinh, mạng ngữ nghĩa, khung phương pháp xử lý tri thức suy diễn dựa lôgic tất định bất định Chương giới thiệu kỹ thuật lập trình lơgic thơng qua ngơn ngữ lập tình Prolog Cuối chương có phần tập nhằm củng cố kiến thức lý thuyết rèn luyện kỹ thực hành cho học viên Các phần in chữ nhỏ dành cho học viên đọc thêm Chắc chắn tài liệu không tránh khỏi sơ suất, tác giả mong nhận chân thành biết ơn ý kiến đóng góp q báu bạn đồng nghiệp độc giả nhằm làm cho giáo trình hồn chỉnh lần tái sau Đà lạt, 04 - 2009 Tác giả MỤC LỤC Lời mở đầu CHƯƠNG I KHÁI NIỆM VỀ TRÍ TUỆ NHÂN TẠO I.1 Lược sử hình thành phát triển I.2 Những lĩnh vực nghiên cứu trí tuệ nhân tạo (TTNT) I.3 Những ứng dụng TTNT CHƯƠNG II CÁC PHƯƠNG PHÁP GIẢI QUYẾT VẤN ĐỀ II.1 Các phương pháp xác định trực tiếp lời giải II.1.1 Phương pháp giải xác II.1.2 Phương pháp giải gần II.1.3 Phương pháp giải không tường minh, đệ qui II.1.4 Phương pháp qui hoạch động II.2 Các phương pháp thử – sai II.2.1 Phương pháp vét cạn, nguyên lý mắt lưới, phương pháp sinh thử, phương pháp nhánh cận a Phương pháp vét cạn b Nguyên lý mắt lưới c Phương pháp sinh thử d Phương pháp nhánh cận II.2.2 Phương pháp ngẫu nhiên a Phương pháp Monte - Carlo b Thuật giải di truyền GA II.2.3 Nguyên lý mê cung II.2.4 Các phương pháp biểu diễn giải vấn đề không gian trạng thái đồ thị a Biểu diễn vấn đề khơng gian trạng thái b Phương pháp tìm kiếm lời giải c Các dạng đặc biệt thường gặp: tìm kiếm theo chiều rộng, chiều sâu, sâu dần, cực tiểu AT II.2.5 Quy toán toán chiến lược tìm kiếm đồ thị VÀ / HOẶC a Quy toán toán b Biểu diễn toán dạng đồ thị VÀ / HOẶC c Các phương pháp tìm kiếm VÀ / HOẶC: 8 8 11 13 13 13 14 15 16 17 17 18 20 22 22 27 28 32 32 33 tìm kiếm theo chiều rộng, chiều sâu, cực tiểu II.2.6 Phương pháp GPS II.3 Kỹ thuật Heuristic II.3.1 Các thuật giải tìm kiếm tối ưu đồ thị với tri thức heuristic a Thuật giải AKT b Thuật giải A* c Các ví dụ II.3.2 Nguyên lý tham lam II.3.3 Nguyên lý hướng đích, phương pháp leo núi II.3.4 Nguyên lý thứ tự, nguyên lý trùng khớp Bài tập CHƯƠNG III BIỂU DIỄN VÀ XỬ LÝ TRI THỨC III.1 Khái niệm biểu diễn xử lý tri thức III.1.1 Từ liệu đến tri thức III.1.2 Một số đặc trưng tri thức III.1.3 Phân loại tri thức III.1.4 Các phương pháp biểu diễn tri thức III.1.5 Các phương pháp xử lý diễn tri thức III.2 Một số phương pháp biểu diễn tri thức III.2.1 Biểu diễn tri thức nhờ lôgic III.2.2 Biểu diễn tri thức nhờ luật sinh 63 III.2.3 Biểu diễn tri thức nhờ mạng ngữ nghĩa III.2.4 Biểu diễn tri thức Frame III.3 Xử lý tri thức tất định phương pháp suy diễn lôgic III.3.1 Các chế lập luận với tri thức tất định III.3.2 Thuật toán Vương Hạo III.3.3 Thuật toán Robinson III.3.4 Thuật toán suy diễn tiến III.3.5 Thuật toán suy diễn lùi III.4 Xử lý tri thức bất định phương pháp suy diễn logic III.4.1 Các chế lập luận với tri thức bất định không xác III.4.2 Phân bố khả xuất khái luật phép toán nối kết chúng Bài tập 34 40 42 44 44 44 45 48 51 52 55 59 59 60 60 60 60 61 61 64 64 65 65 65 69 72 74 78 78 78 79 CHƯƠNG IV LẬP TRÌNH LƠGIC IV.1 Giới thiệu ngơn ngữ lập trình lơgic Prolog 80 IV.1.1 Mở đầu 80 IV.1.2 Vị từ, kiện, qui tắc, mục tiêu Prolog 81 IV.1.3 Cấu trúc chương trình Prolog 83 IV.2 Danh sách, đệ qui, lát cắt Prolog 87 IV.2.1 Danh sách 87 IV.2.2 Đệ qui, chế quay lui tìm nghiệm bội Prolog 87 IV.2.3 Lát cắt Prolog 89 IV.3 Các ví dụ 92 IV.3.1 Bài toán “Tháp Hà Nội” 92 IV.3.2 Bài toán xử lý vi phân ký hiệu 93 IV.3.3 Bài tốn suy luận lơgic 94 IV.4 Phụ lục: Vài vị từ chuẩn Prolog 96 Bài tập 105 Tài liệu tham khảo 110 Chương – Khái niệm Trí tuệ nhân tạo Chương I KHÁI NIỆM VỀ TRÍ TUỆ NHÂN TẠO I.1 Lược sử hình thành phát triển * Trí tuệ nhân tạo (TTNT hay AI – Artificial Intelligence) ngành lĩnh vực cơng nghệ thơng tin Có nhiều quan điểm trí tuệ nhân tạo - Năm 1950, Alan Turing đưa “trắc nghiệm thông minh” để nhận biết máy tính có thơng minh hay khơng Tuy vậy, theo ơng ta, máy tính thất bại trắc nghiệm thơng minh thơng minh - Theo quan điểm Minsky, trí tuệ nhân tạo ngành khoa học nhằm nghiên cứu, mơ máy tính hành vi tư thông minh tương tự người Nó giúp máy tính có khả nhận thức, suy luận phản ứng Có hai hướng tiếp cận trí tuệ nhân tạo: dùng máy tính để bắt chước trình xử lý người thiết kế máy tính thơng minh độc lập với cách suy nghĩ người - Từ điển bách khoa toàn thư Webster định nghĩa: “Trí tuệ khả năng: Phản ứng cách thích hợp với tình thơng qua hiệu chỉnh hành vi cách thích đáng; Hiểu rõ mối liên hệ qua lại kiện giới bên nhằm đưa hành động phù hợp để đạt tới mục đích đó” - Theo nhà tâm lý học nhận thức q trình hoạt động trí tuệ người bao gồm thao tác bản: Xác định tập đích (goal) cần đạt tới; Thu thập kiện (facts) luật suy diễn (inference rules) để đạt tới tập đích đặt ra; Thu gọn (prunning) trình suy luận nhằm xác định cách nhanh chóng tập luật suy diễn sử dụng để đạt tới đích trung gian đó; Áp dụng chế suy diễn (tiến lùi) cụ thể (inference mechanisms), dựa thao tác thu gọn trình suy luận kiện trung gian tạo ra, để dẫn dắt từ kiện ban đầu đến đích đặt * TTNT đời dựa thành ngành tâm lý học nhận thức, lơgic hình thức, … Từ 2000 năm trước, nhà triết học tâm lý Chương – Khái niệm Trí tuệ nhân tạo học cố gắng tìm hiểu cách thức, chế trình nhớ, học tập, nhận thức suy lý - Vào đầu năm 50 kỷ XX, nhờ đời cải tiến liên tục hiệu suất hoạt động máy tính, xuất xu hướng khơng nghiên cứu trí tuệ mặt lý thuyết mà kiểm nghiệm kết lý thuyết thơng minh máy tính Trong thời gian đầu hình thành, nhiều cơng trình lý thuyết TTNT chưa kiểm nghiệm triển khai thực tế chưa có ngơn ngữ lập trình đặc trưng cho TTNT, hạn chế kỹ thuật máy tính, giới hạn nhớ đặc biệt tốc độ thực vấn đề bùng nổ tổ hợp nảy sinh thuật tốn tìm kiếm lời giải cho tốn khó TTNT - Dựa thành kỹ thuật phần cứng, với xuất ngơn ngữ lập trình đặc thù cho TTNT, chuyên xử lý ký hiệu hình thức phục vụ cho lập trình lơgic IPL.V, LISP (viết tắt LISt Processing, Mc Cathy đại học MIT đề xuất năm 1960), PLANNER, PROLOG (viết tắt PROgramming in LOGic, Alain Colmerauer nhóm cơng ông đại học Marseilles xây dựng năm 1972), nhiều giả thuyết hay kết thú vị lý thuyết TTNT có điều kiện kiểm nghiệm trở thành sản phẩm tin học cụ thể thị trường mang tính thơng minh, hoạt động nhóm chuyên gia nhiều kinh nghiệm lĩnh vực hẹp y học, địa chất, dạy – học, chơi cờ, Chẳng hạn sản phẩm, chương trình: dẫn xuất kết luận hệ hình thức, chứng minh định lý hình học phẳng, tính tích phân bất định, giải phương trình đại số sơ cấp, chơi cờ (Samuel), phân tích chữa bệnh tâm lý (ELIZA), chuyên gia y khoa (MYCIN đại học Stanford), phân tích tổng hợp tiếng nói, điều khiển Robot theo đồ án “Mắt - tay”, thăm dị khống sản (PROSPECTOR) Khi sử dụng sản phẩm chuyên dụng thông minh này, đặc biệt lần đầu tiên, ta khơng khỏi ngạc nhiên tính “thơng minh” đến mức đơi ta có cảm giác chúng vượt trội hẳn khả người không chuyên nghiên cứu lĩnh vực đặc thù - Trong năm 1990, ngành TTNT phát triển mạnh theo hướng: sở tri thức hệ chuyên gia, xử lý ngôn ngữ tự nhiên, lý thuyết nhận dạng hình ảnh, tiếng nói ứng dụng vào kỹ thuật đa phương tiện, siêu văn bản, mạng nơron, máy học, lý thuyết mờ lập luận xấp xỉ, lập trình tiến hố, khai thác tri thức từ liệu, * Có vài dấu hiệu quan trọng trí tuệ máy khả năng: học; mô hành vi sáng tạo người; trừu tượng hóa, tổng qt hóa suy diễn; tự giải thích hành vi; thích nghi với tình gồm khả thu Chương – Khái niệm Trí tuệ nhân tạo nạp liệu tích hợp, rút tri thức từ liệu; xử lý biểu diễn hình thức (các ký hiệu tượng trưng, danh sách); vận dụng tri thức heuristics sẵn có; xử lý thơng tin bất định, khơng đầy đủ, khơng xác, Trí tuệ máy khác trí tuệ người chỗ khơng thể nhìn trước phần hay tồn thể q trình giải tình khơng tự sinh heuristics thân chúng * TTNT gồm phương pháp kỹ thuật sau: phương pháp biểu diễn giải vấn đề; kỹ thuật heuristics; phương pháp biểu diễn xử lý tri thức; phương pháp học nhận dạng, xử lý ngơn ngữ tự nhiên ngơn ngữ lập trình cho TTNT TTNT kế thừa kỹ thuật tin học truyền thống như: xử lý danh sách, kỹ thuật đệ qui quay lui, cú pháp hình thức, Trong hệ thống TTNT có thành phần liên quan mật thiết với nhau: phương pháp biểu diễn vấn đề tri thức, phương pháp tìm kiếm khơng gian tốn, chiến lược thu hẹp không gian lời giải suy diễn I.2 Những lĩnh vực nghiên cứu trí tuệ nhân tạo I.2.1 Từ thuật toán đến thuật giải * Đặc trưng thuật tốn (Algorithm): u cầu thỏa mãn nghiêm ngặt tính chất: xác định, hữu hạn, đắn Ưu điểm: tốn giải thuật tốn có độ phức tạp không đa thức áp dụng tốt thực tế Nhược điểm: thuật tốn có phức tạp đa thức áp dụng với không gian toán nhỏ; thực tế, lớp toán khó chưa có thuật tốn giải chưa biết thuật toán giải hiệu rộng nhiều Một hướng để giải khó khăn mở rộng tính xác định, tính đưa vào thêm thơng tin đặc trưng tốn, đưa vào máy tính kiểu kinh nghiệm “tư duy” người ước lượng, để thu thuật giải heuristic * Đặc trưng thuật giải heuristic: độ phức tạp bé, cho phép nhanh chóng tìm lời giải, khơng phải ln ln tìm mà tìm thấy lời giải đa số trường hợp; vả lại, lời giải chưa hay tối ưu mà thường gần hay gần tối ưu I.2.2 Phân loại phương pháp giải vấn đề * Biểu diễn vấn đề: Xét vấn đề: A → B Chương – Khái niệm Trí tuệ nhân tạo - Dạng chuẩn: Cho A, B tìm → (hai loại thuật tốn, chương trình: thuật tốn cần xác định trước → thuật tốn tổng qt để tìm →) - Cho A, →, tìm B (suy diễn tiến) - Cho B, →, tìm A (suy diễn lùi) * Nhóm phương pháp xác định trực tiếp lời giải: phương pháp xác, phương pháp xấp xỉ gần đúng, phương pháp không tường minh, đệ qui, nguyên lý qui hoạch động * Nhóm phương pháp xác định gián tiếp lời giải tìm kiếm lời giải: - Phương pháp thử – sai: vét cạn, nguyên lý mắt lưới, phương pháp nhánh cận, sinh thử lời giải, phương pháp ngẫu nhiên (phương pháp Monte – Carlo, thuật giải di truyền GA), nguyên lý mê cung (dạng đệ qui), vét cạn dần (dưới dạng lặp) cách quay lui xác định dần thơng tin tốn q trình giải thơng qua cấu trúc khơng tuyến tính (chẳng hạn: cây, đồ thị đồ thị VÀ/HOẶC phương pháp tìm kiếm: theo chiều rộng, sâu, sâu dần, cực tiểu AT), phương pháp GPS, … - Phương pháp heuristic trí tuệ nhân tạo: hướng tiếp cận quan trọng để xây dựng hệ thống TTNT Nó bao gồm phương pháp kỹ thuật tìm kiếm có sử dụng tri thức đặc biệt từ thân lớp tốn cần giải nhằm rút ngắn q trình giải nhanh chóng đến kết mong muốn khơng chắn cách giải tối ưu lại có tính khả thi điều kiện thiết bị có thời gian yêu cầu Trong kỹ thuật người ta thường sử dụng kỹ thuật heuristis định lượng thông qua hàm đánh giá Chúng ta minh họa phương pháp heuristics thông qua phương pháp vét cạn thông minh (tìm kiếm tối ưu bổ sung tri thức đặc trưng toán đồ thị tổng quát: AKT, A*), nguyên lý tham lam, nguyên lý hướng đích (thuật giải leo núi), nguyên lý thứ tự, nguyên lý khớp nhất, … Những thông tin heuristic gián tiếp đưa vào máy tính thơng qua người Vậy máy tính tự tạo “tri thức”, biết suy luận, chứng minh, tự học qua kinh nghiệm, máy có khả rút tri thức vận dụng chúng vào việc giải tốn hay khơng ? Các phương pháp trí tuệ nhân tạo giúp máy tính thực chừng mực vấn đề đặt trên: phương pháp biểu diễn Chương – Khái niệm Trí tuệ nhân tạo xử lý tri thức, lập trình tiến hố, mạng neuron nhân tạo, máy học, khai thác tri thức từ liệu, … I.2.3 Biểu diễn xử lý tri thức Có phương pháp biểu diễn xử lý tri thức - liệu tích hợp: phương pháp hình thức sử dụng cách tiếp cận logic (lơgic cổ điển - tất định: lôgic mệnh đề, lôgic vị từ; lôgic bất định: lôgic xác suất, lôgic khả xuất, lôgic mờ), luật sinh (thường dùng hệ chuyên gia), mạng ngữ nghĩa, ba liên hợp OAV, cách biểu diễn khung (hay dàn - Frame), Các hệ chuyên gia thể việc kết hợp phương pháp biểu diễn phương pháp xử lý tri thức (ví dụ: DENDRAL, MOLGEN, PROSPECTOR, MYCIN, ) I.2.4 Xử lý ngôn ngữ tự nhiên, ngôn ngữ lập trình dựa việc xử lý danh sách, ký hiệu lập trình logic: ngơn ngữ lập trình LISP, PROLOG có hạn chế chi phí lớn khó phát triển hệ thống; cịn CLIPS nhằm biểu diễn tri thức theo hướng đối tượng xử lý luật suy dẫn Ta thấy khác lập trình truyền thống lập trình xử lý ký hiệu TTNT qua bảng so sánh I.1 Lập trình truyền thống - Xử lý liệu - Dữ liệu nhớ đánh địa số Lập trình xử lý ký hiệu lơgic - Xử lý tri thức - liệu tích hợp - Tri thức cấu trúc nhớ làm việc theo ký hiệu - Xử lý theo thuật toán - Xử lý theo thuật giải heuristics chế lập luận - Định hướng xử lý đại lượng định lượng số - Định hướng xử lý đại lượng định tính, logic, ký hiệu tượng trưng, danh sách - Xử lý theo lô - Xử lý theo chế độ tương tác cao (hội thoại, theo ngôn ngữ tự nhiên, ) - Không giải thích q trình thực - Có thể tự giải thích hành vi hệ thống q trình thực Bảng I.1 I.2.5 Lý thuyết nhận dạng theo hướng thống kê, cấu trúc, đại số heuristics gồm: nhận dạng hình ảnh âm (HEARSAY-II, …) I.2.6 Lập trình tiến hố, mạng nơron, máy học, khai thác liệu - Lập trình tiến hóa (Revolution Programming) sử dụng ý tưởng qui luật tiến hoá học thuyết di truyền ngành sinh học: hợp lý, thích Chương – Khái niệm Trí tuệ nhân tạo nghi tốt với mơi trường có khả tồn lâu dài trình đào thải, sinh tồn; số đặc điểm hệ trước di truyền, ảnh hưởng đến hệ sau thông qua lai chéo; xuất vài cá thể có đặc điểm khác hẳn (hoặc trội lại đặc điểm tiềm tàng) với hệ trước chúng thông qua đột biến, … Khởi điểm hướng nghiên cứu thuật giải di truyền (GA Genetic Algorithm) Ưu điểm thuật giải GA áp dụng toán chưa biết thuật tốn hay chưa có thuật giải khả dĩ, hiệu để giải Có thể xem GA thuộc vào lớp thuật tốn ngẫu nhiên thơng qua việc tạo ngẫu nhiên quần thể ban đầu vị trí lai chéo hay tỉ lệ lai chéo đột biến chúng - Mạng nơron nhân tạo (hay vắn tắt mạng nơron, ANN Artificial Neural Networks) mơ mơ hình chế hoạt động hưng phấn ức chế thần kinh để điều khiển hoạt động người Mơ hình ANN gồm nhiều lớp, phải có lớp nhập (input layer) lớp xuất (output layer), ngồi có nhiều lớp ẩn (hidden layers) trung gian Mỗi lớp gồm nhiều nút Các kích thích từ mơi trường ngồi truyền vào mạng thơng qua nút lớp nhập Tổng hợp kích thích (phụ thuộc trọng số mà mạng cần học), vượt q ngưỡng đó, gây kích thích (hưng phấn hay ức chế) đến nút lớp Cứ thế, trình tiếp tục lan truyền đến lớp xuất Một mơ hình ANN thường ứng dụng nhiều thực tế mạng nơron lan truyền ngược Lặp lại trình này, dựa việc cập nhật trọng số qua hệ cho giảm dần sai số giá trị thật giá trị mạng kết xuất Qua số hệ luyện, mạng học trọng số thích hợp Ưu điểm phương pháp luyện mạng ANN áp dụng toán chưa biết thuật tốn hay chưa có thuật giải khả dĩ, hiệu để giải - Máy học (LM - Learning Machine) trình rút qui luật từ liệu, chẳng hạn học thông qua lôgic, học quan sát dựa độ đo phù hợp, học dựa định danh thông qua độ đo hỗn loạn thơng tin trung bình, … Ta dùng ANN để ứng dụng vào máy học - Khai thác liệu (DM - Data Mining) nhằm rút tri thức từ liệu thô, chẳng hạn đo độ phụ thuộc lớp thuộc tính xác định vào lớp thuộc tính phổ biến khác tập liệu thô cho trước thông qua luật kết hợp, I.3 Những ứng dụng TTNT - Điều khiển học, Robotic, giao diện người máy thơng minh - Trị chơi máy tính - Thiết bị điện tử thơng minh nhờ sử dụng lôgic mờ - Hệ chuyên gia trong: giáo dục, y khoa, địa chất, quản lý, … - Xử lý ngơn ngữ tự nhiên Chương – Khái niệm Trí tuệ nhân tạo - Nhận dạng hình ảnh, âm thanh, … Các hệ thống xử lý tri thức liệu tích hợp: cho phép xử lý đồng thời tri thức liệu (cơ sở liệu suy diễn, biểu diễn luật đối tượng, hệ hỗ trợ định) Mơ hình hố giải pháp giải tốn Chương II - Các phương pháp giải vấn ñeà Chương II CÁC PHƯƠNG PHÁP GIẢI QUYẾT VẤN ĐỀ II.1 Các phương pháp xác định trực tiếp lời giải Đặc điểm phương pháp xác định trực tiếp lời giải thông qua thủ tục tính tốn bước để có lời giải Có ba loại phương pháp để xác định trực tiếp lời giải Loại thứ áp dụng để giải toán biết cách giải cơng thức xác (như cơng thức toán học) Loại thứ hai dùng cho tốn biết cách giải cơng thức xấp xỉ (như công thức xấp xỉ phương pháp tính) Loại thứ ba áp dụng vào tốn biết cách giải khơng tường minh thơng qua hệ thức truy hồi hay kỹ thuật đệ qui II.1.1 Phương pháp giải xác: thơng qua cơng thức giải xác Chẳng hạn, thuật tốn giải phương trình bậc hai II.1.2 Phương pháp giải xấp xỉ: thơng qua công thức giải gần Chẳng hạn, phương pháp lặp tính tích phân xác định theo cơng thức hình thang học phần “Phương pháp tính” II.1.3 Phương pháp giải không tường minh: thông qua hệ thức truy hồi kỹ thuật đệ qui * Thao tác đệ qui F(x) đối tượng x ∈ D Xét hai trường hợp: - Nếu đối tượng x thuộc tập đặc biệt X0 (X0 ⊂ D) mà biết cách giải đơn giản thực thao tác sơ cấp tương ứng; - Ngược lại, trước hết thực thao tác G(x) đó, biến đổi x thành x’= H(x) ∈ D thực thao tác tương tự F(x’) x’, sau thực thêm thao tác K(x) x, cho sau số hữu hạn bước này, điểm xn(‘) rơi vào tập X0 F(x) //x ∈ D { if (x ∈ X0) ThaoTácSơCấp(x); else ⎨ G(x); x’ = H(x); // điều kiện dừng //H(x) ∈ D Chương II - Các phương pháp giải vấn đề } ⎬ F(x’); K(x); // lời gọi đệ qui Các thao tác đệ qui thường gặp tin học là: định nghĩa đệ qui, hàm thủ tục đệ qui, thuật toán đệ qui * Chú ý: Khi thiết kế thao tác đệ qui, ta cần có hai phần: - Phần sở (phần neo hay điều kiện dừng): thao tác sơ cấp biết cách thực tập X0 ⊂ D - Phần gọi đệ qui F(x’): cần phải bảo đảm sau số hữu hạn bước biến đổi x ta gặp điều kiện dừng: H(H( … H(x))) = x0 ∈ X0 - Trên đây, ta xét đệ qui đuôi trực tiếp Các trường hợp phức tạp chút đệ qui nhánh trực tiếp đệ qui gián tiếp (hay đệ qui hỗ tương) xét tương tự * Ví dụ 1a (dãy số Fibonacci): Ở đầu tháng thứ có cặp thỏ đời (F(0) = 0, F(1) = 1) Giả sử: - Cứ sau tháng cặp thỏ (từ sau hai tháng tuổi) sinh thêm cặp thỏ con; - Các thỏ không chết Hỏi số cặp thỏ F(n) sau n tháng bao nhiêu? Ta có cơng thức truy hồi để tính F(n) sau: F(0) = 0; F(1) = (X0 = ⎨0; 1⎬) F(n) = F(n-1) + F(n-2), ∀n ≥ Để tính F(n), ta thực theo cách sau: - Thuật toán đệ qui sau có độ phức tạp thuật tốn với số phép cộng O(F(n)) = O(((1+ )/2)n): độ phức tạp mũ, lớn, không khả thi ! Nguyên Fibonaci_De_Qui(n) { if (n ≤ 1) return n; else return (Fibonaci_De_Qui(n-1) + Fibonaci_De_Qui(n-2)); } - Thuật tốn lặp sau có độ phức tạp thuật toán với số phép cộng O(n): hiệu nhiều ! Ta khử đệ qui cách dùng vòng lặp vài biến phụ dùng chế ngăn xếp Nguyên Fibonacci_Lặp(n) { if (n==0 or n==1) return n; else { j = 1; Truoc = 0; HienTai = 1; while (j < n) { Sau = Truoc + HienTai; Truoc = HienTai; Chương II - Các phương pháp giải vấn đề 10 HienTai = Sau; j = j + 1; } return Sau; } } - Tìm cơng thức tường minh từ hệ thức truy hồi F(n) = [( 1+ n 1− n ) +( ) ] 2 * Phương pháp tổng qt tìm cơng thức tường minh cho Fn từ hệ thức truy hồi tuyến tính (hệ số hằng): Fn = b1 Fn-1 + b2 Fn-2 , ∀n ≥ với trị {F0, F1} cho trước Gọi {Φ1, Φ2} nghiệm đa thức đặc trưng tương ứng: Φ 2- b1Φ - b2=0 n Khi đó: Fn = c1 Φ1 + c2 Φ2n , (c1, c2 xác định từ điều kiện đầu F0, F1) * Nhận xét: Trong nhiều tốn khó, ta dùng chiến lược “Chia để trị” để tách thành nhiều tốn có cách giải tốn ban đầu thơng qua kỹ thuật đệ qui - Ví dụ 1b: Tráo đổi hai phần a[1 k] a[k+1 n] mảng a gồm n phần tử (khơng thiết có độ dài nhau) mà không dùng mảng phụ Nếu k ≤ n-k trước tiên trao đổi hai phần a[1 k] a[n-k n]; sau mảng a[1 n-k], ta cần tráo đổi k phần tử đầu với phần lại Trường hợp k ≥ n-k, giải tương tự, TraoHaiPhanBangNhau(a, Tu1, Tu2, SoPTuTrao) { for (i=1; i ≤ SoPTuTrao; i++) DoiCho(a[Tu1+i], a[Tu2+i]); } TraoHaiPhanBatKy(a, n, k) // k >= { i = 1; j = n; while (k >= i) { if (k < (i+j)/2) { TraoHaiPhanBangNhau(a, i, i+j-k, k-i+1); j = i + j - k - 1; } else { TraoHaiPhanBangNhau(a, i, k+1, j-k); i = i + j - k; } } } Chương II - Các phương pháp giải vấn đề 11 II.1.4 Phương pháp qui hoạch động: * Ý tưởng nguyên lý qui hoạch động: nghiệm toán (của toán) kết hợp nghiệm toán nhỏ (trong trường hợp rời rạc có tính đệ qui nghiệm n bước có từ lời giải k bước trước lời giải n-k bước) Ta thường dùng phương pháp để giải toán tối ưu mà thỏa mãn nguyên lý Có thể xem nguyên lý tối ưu thể tốt phương pháp chia để trị việc giải vấn đề Khi thực tính tốn phương pháp qui hoạch động, để thực tính tốn bước thứ n, nên tận dụng kết tính buớc trước thông qua hệ thức truy hồi vài biến phụ để lưu kết trung gian trước (chẳng hạn, xét tập: tính tất số tổ hợp Ckn, với k: ≤ k ≤ n) * Mơ hình tốn học ngun lý tối ưu - Định nghĩa II.1 (hàm phân tích được): Cho hàm f: D → R, D ⊂ Rn, D1 = {x1 ∈ R1: ∃y∈Rn-1 & (x1,y)∈D}, D(x1) = {y ∈ Rn-1 : (x1, y) ∈ D} ∀ x1 ∈ D1 Ta nói hàm f phân tích tồn hai hàm g: R2 → R h: Rn-1 → R1 cho: f(x1, y) = g(x1, h(y)), ∀ x = (x1, y) ∈ D, x1 ∈ D1, y ∈ D(x1) Hàm g đơn điệu không giảm theo biến thứ hai: ∀ x1 ∈ D1, ∀ z1, z2 ∈ R1: z1 ≥ z2 ⇒ g(x1, z1) ≥ g(x1, z2) (thật cần: ∀ x1 ∈ D1, ∀ z1, z2 ∈ R1, ∃ y1, y2 ∈ D(x1): z1 = h(y1), z2 = h(y2), z1 ≥ z2 ⇒ g(x1, z1) ≥ g(x1, z2)) - Mệnh đề II.1: Cho f hàm phân tích (trong định nghĩa II.1) Khi đó, ta có: opt f ( x) = opt [ g ( x1 , opt [h( y )])] x∈D x1∈D1 y∈D ( x1 ) - Nhận xét: Kết mệnh đề cho phép ta đưa việc tối ưu hàm nhiều biến tối ưu hàm theo biến thành phần có số chiều bé Ta thường gặp trường hợp hàm g có dạng tuyến tính theo biến thứ hai: g(x1, z) = r(x1) + z f có dạng cộng tính theo thành phần: f(x1, x2, …, xn) = r(x1) + r(x2) + … + r(xn) * Ví dụ (bài toán người giao hàng Salesman): Hàng ngày, người giao hàng phải chuyển hàng qua n địa điểm, địa điểm lần, quay lại địa điểm xuất phát Bài toán đặt là: làm để có hành trình với đường ngắn Ta biểu diễn toán đồ thị định hướng G = (V, A), với V={1, 2, …, n} độ dài cung C(i,j) > 0, (i,j) ∈ A C(i,j) = ∞, (i,j) ∉ A Không tính tổng qt, ta giả sử đường xuất phát từ đỉnh Bất kỳ đường (chấp nhận được) người giao hàng phân thành: cung (1,k) với k ∈ V\{1} đường từ k tới qua đỉnh thuộc V\{1} lần Nếu đường ngắn đường từ k tới đỉnh qua đỉnh thuộc V\{1, k} phải ngắn Do Chương II - Các phương pháp giải vấn đề 12 ngun lý tối ưu thỏa mãn Gọi d(j, S) độ dài đường ngắn từ j đến đỉnh qua đỉnh k ∈ S (∀S ⊂ V S ≠ ∅) lần Ta có cơng thức truy hồi: Nghiệm tối ưu cần tìm là: Rõ ràng, d(j, ∅) = C(j,1), ∀ j ∈ [2, n] Từ công thức truy hồi trên, ta tính d(j, S) với S chứa đỉnh Từ đó, ta tính d(j, S) với S chứa đỉnh, Cứ tiếp tục, ta tính d(k, S) với S = V\{1,k}, ∀ k ∈ [2, n] Từ đó, ta tìm d (1, V \ {1}) = (C (1, k ) + d (k , V \ {1, k})) 2≤ k ≤ n d ( j , S ) = (C ( j , k ) + d (k , S \ {k})) k∈S nghiệm tối ưu - Cụ thể, xét đồ thị định hướng có đỉnh độ dài cung cho ma trận C sau: ⎛0 ⎜ ⎜5 ⎜6 ⎜ ⎜8 ⎝ 10 13 15 9 20 10 12 ⎞ ⎟ ⎟ ⎟ ⎟ ⎟ ⎠ Ta có: d(2, ∅) = C(2,1) = d(3, ∅) = C(3,1) = d(4, ∅) = C(4,1) = Từ cơng thức truy hồi, ta tính được: d(2, {3}) = C(2,3) + d(3, ∅) = 15 d(2, {4}) = C(2,4) + d(4, ∅) = 18 d(3, {2}) = C(3,2) + d(2, ∅) = 18 d(3, {4}) = C(3,4) + d(4, ∅) = 20 d(4, {2}) = C(4,2) + d(2, ∅) = 13 d(4, {3}) = C(4,3) + d(3, ∅) = 15 Tương tự: d(2, {3, 4}) = min{C(2,3) + d(3, {4}), C(2,4) + d(4, {3})} = {29, 25} = 25 d(3, {2, 4}) = min{C(3,2) + d(2, {4}), C(3,4) + d(4, {2})} = {31, 25} = 25 d(4, {2, 3}) = min{C(4,2) + d(2, {3}), C(4,3) + d(3, {2})} = {23, 27} = 23 Cuối cùng, ta có: d(1, {2, 3, 4}) = min{ C(1,2) + d(2, {3, 4}), C(1,3) + d(3, {2, 4}), C(1,4) + d(4, {2, 3})} = {35, 40, 43} = 35 Để tìm hành trình ngắn nhất, gọi K(j,S) đỉnh k, đạt cơng thức truy hồi để tính d(j,S) Từ đó, ta có: K(1, {2, 3, 4}) = K(2, {3, 4}) = K(4, {3}) = Vậy đường {1, 2, 4, 3, 1} ngắn đạt giá trị 35 13 Chương II - Các phương pháp giải vấn đề Tương tự, áp dụng ngun lý qui hoạch động để giải tốn sau - Ví dụ (bài tốn ba lơ): ba lơ chứa khối lượng w Có n loại đồ vật đánh số 1, 2, …, n Mỗi đồ vật loại i có khối lượng có giá trị ci (các trị w, ai, ci nguyên dương, i = 1, 2, …, n) Cần xếp đồ vật vào ba lô để ba lơ có giá trị lớn Giả sử loại đồ vật có đủ nhiều để xếp (bài tập) II.2 Các phương pháp thử - sai II.2.1 Phương pháp vét cạn, nguyên lý mắt lưới, phương pháp sinh thử, phương pháp nhánh cận * Bài tốn 1: Tìm tập LờiGiải = ⎨x ∈ D: tính chất P(x) đúng⎬ (BT1) a Phương pháp vét cạn * Thuật toán vét cạn V1.1: giải BT1 { B1: LờiGiải = ∅; B2: Trong D ≠ ∅ thực hiện: x ← get(D); //lấy khỏi D phần tử x if (P(x)) LờiGiải = LờiGiải ∪ {x}; B3: if (LờiGiải == ∅) write(“Khơng có lời giải”); else XuấtLờiGiải(LờiGiải); } * Chú ý: - Nếu hạn chế miền D bé thuật tốn chạy nhanh * Ví dụ 4: Cho trước số M, K nguyên dương Tìm số nguyên dương x, y, z cho: Thay chọn D = {(x,y,z) ∈ N3 ∩ [1;M-2]3} (N tập số tự nhiên), ta lấy: D = ⎧ x+ y+z = M ⎨ 3 ⎩x + y + z = K {(x,y,z) ∈ N3 ∩ [1; min{M-2; K − }]3} Khi lập trình, ta thể miền D vòng for theo x, y, z: Tìm_xyz(M, K) { Max = min(M-2, pow(K-2,1.0/3)); for (x = 1; x ≤ Max; x++) for (y = 1; y ≤ Max; y++) for (z = 1; z ≤ Max; z++) if (x+y+z==M && pow(x,3)+ pow(y,3)+ pow(z,3) == K) XuấtLờiGiải(x,y,z); } Thật ra, cải tiến chương trình để thu hẹp miền D (bài tập) ! Chương II - Các phương pháp giải vấn đề - 14 Dựa vào thuật tốn trên, ta sửa đổi chút để giải tốn tìm kiếm lời giải sau: * Bài tốn 2: Tìm lời giải x0∈ D: mệnh đề P(x0) (BT2) Thuật tốn tìm lời giải V1.2: giải BT2 { Trong D ≠ ∅ thực hiện: { x ← get(D); //lấy khỏi D phần tử x if (P(x)) { XuấtLờiGiải(x); Dừng; // điểm khác với thuật tốn V1 } } write(“Khơng có lời giải”); } * Đối với lớp toán mà tìm điều kiện đủ Q(x) cho lời giải x, ta dùng thuật giải sau: với x ∈ D mà Q(x) xuất lời giải Chú ý rằng, ngồi lời giải trên, D cịn chứa lời giải khác mà không thỏa điều kiện đủ ! Nguyên lý mắt lưới sau thể ý tưởng b Nguyên lý mắt lưới: * Ý tưởng: Những cá lớn kích thước mắt lưới lớn lại lưới ! Để giải tốn (1), chứng minh được: “nếu tìm điều kiện Q(x) với vài x thuộc miền D có kích thước nhỏ ε P(y) với y ∈ miền đó” thì: Chia lưới D thành n miền Di (mỗi miền Di có kích thước nhỏ ε) Với i = n, xét tồn x∈ Di mà Q(x) P(x) * Ví dụ 5: Tìm nghiệm gần (với độ xác eps > 0) phương trình f(x) = miền [a, b], với f hàm liên tục Ta biết f(xi).f(xi+1) < 0, với [xi, xi+1] ⊂ [a, b] abs(xi+1-xi) < eps xk =(xi+1+x i)/2 sai khác với nghiệm xác phương trình f(x) = không eps/2 (một điều kiện đủ để tìm nghiệm phương trình liên tục) - Thuật giải tìm nghiệm gần đúng: Nghiem_Gan_Dung(a, b, eps) { Sai_so = 1e-3; n = (b-a)/eps; xi = a;