770 likes | 1.62k Views
CHƯƠNG 3. TÌM KIẾM HEURISTIC. NỘI DUNG. Thuật giải Heuristic: đặc tính và nguyên lý. Heuristic là gì? Tìm kiếm theo heuristic. Giải thuật Best First Search (BFS). Giải thuật A*. Chiến lược Minimax. Chiến lược cắt tỉa Alphabeta. Đặc tính thuật giải Heuristic. Tìm lời giải tốt.
E N D
CHƯƠNG 3 TÌM KIẾM HEURISTIC
NỘI DUNG • Thuật giải Heuristic: đặc tính và nguyên lý. • Heuristic là gì? • Tìm kiếm theo heuristic. • Giải thuật Best First Search (BFS). • Giải thuật A*. • Chiến lược Minimax. • Chiến lược cắt tỉa Alphabeta.
Đặc tính thuật giải Heuristic • Tìm lời giải tốt. • Thời gian giải chấp nhận được. • Thuật giải tự nhiên gần gũi với cách suy nghĩ và hành động của con người.
Nguyên lý thuật giải Heuristic • Nguyên lý vét cạn thông minh: là dựa vào cách tìm đặc biệt để tìm lời giải. • Nguyên lý tham lam (greedy): lấy tiêu chuẩn tối ưu của bài toán (toàn cục) làm tiêu chuẩn của từng bước giải (cục bộ) để tìm lời giải. • Nguyên lý thứ tự: thực hiện hành động dựa trên một thứ tự hợp lý để tìm lời giải.
Ví dụ về cách giải theo nguyên lý tham lam (greedy) Bài toán: • Hãy tìm một hành trình cho một người giao hàng đi qua n điểm khác nhau. • Mỗi điểm đi qua một lần và trở về điểm xuất phát. • Sao cho tổng chiều dài đoạn đường cần đi là ngắn nhất. • Giả sử rằng có con đường nối trực tiếp giữa hai điểm bất kỳ.
Một lời giải Hành trình tìm được: 14 Hành trình tối ưu: 10 (1->2->5->4->3->1)
Ví dụ về cách giải theo nguyên lý thứ tự Bài toán: • Một công ty có 3 máy: M1, M2, M3 và 6 công việc với thời gian thực hiện tương ứng là: t1=2, t2=5, t3=8, t4=1, t5=5, t6=1. • Hãy đưa ra một phương án phân công hoàn thành 6 công việc trên sớm nhất.
Cách giải tối ưu • Sắp xếp các công việc theo thứ tự giảm dần về thời gian. • Lần lượt sắp xếp các việc theo thứ tự đó vào máy còn nhiều thời gian nhất.
Heuristic là gì? • Là một ước lượng về khả năng dẫn đến lời giải. • Là những tri thức được rút tỉa từ những kinh nghiệm, “trực giác” của con người. • Có thể là những tri thức “đúng” hay “sai”. • Là những meta knowledge và “thường đúng”.
Heuristic dùng để làm gì? • Trong những bài toán tìm kiếm trên không gian trạng thái, có 2 trường hợp cần đến heuristic: • Vấn đề có thể không có nghiệm chính xác do các mệnh đề không phát biểu chặt chẽ hay thiếu dữ liệu để khẳng định kết quả. • Vấn đề có nghiệm chính xác nhưng phí tổn tính toán để tìm ra nghiệm là quá lớn (hệ quả của việc bùng nỗ tổ hợp). => Heuristic giúp tìm kiếm đạt kết quả với chi phí thấp hơn.
Heuristic dùng trong SSS? • Tìm kiếm trên không gian trạng thái theo chiều nào? Sâu hay rộng? • Tìm theo Heuristic: Heuristic định hướng quá trình tìm kiếm theo hướng mà “nó” cho rằng khả năng đạt tới nghiệm là cao nhất. Không “sâu” cũng không “rộng”.
Kết quả của tìm kiếm với Heuristic • Việc tìm kiếm theo định hướng của heuristic có kết quả tốt hay xấu tùy theo heuristic “đúng” hay “sai”. • Heuristic có khả năng bỏ xót nghiệm. • Heuristic càng tốt càng dẫn đến kết quả nhanh và tốt. Làm sao tìm được Heuristic tốt ?
Tìm kiếm leo đồi theo Heuristic • Leo đồi dốc đứng đi mỗi bước lâu hơn leo đồi đơn giản. • Leo đồi dốc đứng đến kết quả nhanh hơn leo đồi đơn giản. • Cả hai phương pháp leo đồi đều bị kẹt khi gặp điểm cực đại địa phương.
Thủ tục leo đồi đơn giản Procedure leo đồi đơn giản; Begin If (start = goal) Then return success Else CS := start While (CS has other children) BETTER := other children If (BETTER = Goal) Return success If (BETTER better than CS) Then CS := BETTER; EndIf EndWhile Return (fail); EndIf End;
Thủ tục leo đồi dốc đứng Procedure leo dốc đứng; Begin If (start = goal) Then return success Else CS := start While (CS has children) THEBEST := The best of children If (THEBEST = Goal) Return success If (THEBEST better than CS) CS := THEBEST; EndIf EndWhile Return (fail); EndIf End;
Ví dụ về bài toán leo đồi Bài toán xếp khối: • Cho một cột gồm các khối xếp chồng lên nhau như hình và các thao tác chuyển khối: • Lấy một khối ở đỉnh một cột bất kỳ và đặt nó lên một chỗ trống tạo thành một cột mới. • Chỉ cho phép tạo ra tối đa 2 cột mới (tổng cộng 3 cột). • Lấy một khối ở đỉnh một cột và đặt nó lên đỉnh một cột khác. • Hãy xác định số thao tác ít nhất để biến đổi cột cho thành cột kết quả.
Cách giải 1 • Ứng với mỗi trạng thái, giá trị Heuristic được tính như sau: • Cộng 1 điểm cho mỗi khối ở vị trí đúng so với trạng thái đích. • Trừ 1 điểm cho mỗi khối đặt ở vị trí sai.
Cách giải 2 • Ứng với mỗi trạng thái, giá trị Heuristic được tính như sau: • Cộng 1 điểm cho mỗi khối ở vị trí đúng so với trạng thái đích. • Trừ 1 điểm cho mỗi khối đặt ở vị trí sai. • Đối với khối phụ trợ (khối nằm bên dưới khối hiện tại) đúng cộng 1 điểm ngược lại trừ 1 điểm. => Phương pháp leo đồi không bị kẹt do hàm heuristic tốt hơn
BestFirstSearch • Best First search vs Depth First & Breath First. • Best First search tương tự như Depth First & Breath First nhưng phần tử được xét tiếp theo là phần tử có giá trị heuristic tốt nhất. • Cần có một hàm đánh giá các trạng thái để xác định giá trị heuristic cho các trạng thái. • Không gian trạng thái vẫn không thay đổi về “toàn cục” tuy nhiên thường Heuristic search có không gian trạng thái làm việc nhỏ hơn Depth First và Breath First. Tại sao??
BestFirstSearch (tt) • Do sự định hướng các trạng thái kế tiếp theo hướng có khả năng tìm ra nghiệm nhanh hơn nên số trạng thái xét dư thừa sẽ hạn chế sinh ít trạng thái con hơn. • Điều này cũng là nguyên nhân làm cho Best First Search có thể dẫn đến kết quả là “nghiệm phụ” thay vì “nghiệm tối ưu”.
Procedure Best_First_Search; Begin open:=[start]; close:=[]; While (open<>[]) Do Begin Lấy phần tử đầu tiên X khỏi Open If X là goal then return path từ start đến X sinh ra các nút con của X; For mỗi nút con Y của X Do Case Y không có trong open hay close: gán giá trị heuristic cho Y; đưa Y vào open Case Y đã có trong Open: if đến được Y bằng một path ngắn hơn then gán path ngắn hơn này cho Y trên Open Case Y đã có trong close: if đến được Y bằng một path ngắn hơn then xóa Y khỏi danh sách Close; thêm Y vào danh sách Open; EndIf; EndFor Đưa X vào close; Xếp thứ tự các trạng thái trên Open theo giá trị Heuristic EndWhile return failure; EndProc;
Hàm lượng giá trị Heuristic • Hàm lượng giá trị Heuristic là hàm ước lượng phí tổn để đi từ trạng thái hiện tại đến trạng thái goal. • Cơ sở để xác định hàm lượng giá trị là dựa vào tri thức/kinh nghiệm thu thập được. • Hàm lượng giá trị cho kết quả đúng (gần thực tế) hay sai (xa giá trị thực) sẽ dẫn đến kết quả tìm được tốt hay xấu.
Hàmlượnggiá trị Heuristic (tt) • Không có chuẩn mực cho việc đánh giá một hàm lượng giá trị Heuristic. Lý do: • Không có cấu trúc chung cho hàm lượng giá trị. • Tính đúng/sai thay đổi liên tục theo từng vấn đề cụ thể. • Tính đúng/sai thay đổi theo từng tình huống cụ thể trong một vấn đề. • Có thể dùng nhiều hàm lượng giá khác nhau theo tình huống cần hàm lượng giá trị về các hàm lượng giá trị.
Ví dụ Hàm lượng giá trị Heuristic • Xét bài toán 8 pussle với goal là: • Heuristic 1: Tổng số miếng sai vị trí. • Heuristic 2: Tổng khoảng cách sai vị trí của từng miếng. • Heuristic 3: Số cặp hoán đổi vị trí nhân cho 2.
Việc chọn lựa hàm Heuristic là khó khăn và có ý nghĩa quyết định đối với tốc độ của giải thuật
Cấu trúc Hàm lượng giá trị Heuristic • Xét lại hoạt động của giải thuật Best First Search: • Khi có 2 nút cùng có giá trị kỳ vọng đạt đến mục tiêu bằng nhau thì nút có path từ nút bắt đầu đến nút đó ngắn hơn sẽ được chọn trước như vậy nút này có giá trị Heuristic tốt hơn. • Hay nói cách khác hàm lượng giá trị Heuristic cho nút gần start hơn là tốt hơn nếu kỳ vọng đến goal là bằng nhau.
Cấu trúc Hàm lượng giá trị Heuristic… • Vậy chọn nút nào nếu kỳ vọng của 2 nút khác nhau: • Nút kỳ vọng tốt hơn nhưng xa start, hay • Nút kỳ vọng xấu hơn nhưng gần goal. • Hàm lượng giá bao gồm cả 2 mục tiêu trên , và có cấu trúc: F(n) = G(n) + H(n). • G(n): phí tổn thực từ start đến n • H(n): phí tổn ước luợng heuristic từ n đến goal.
Vídụ–Bestfirstsearch • Xét ví dụ là bài toán 8 puzzle với: Mụctiêu Bắtđầu • Hàmlượnggiá: F(n) = G(n) + H(n) VớiG(n): sốlầnchuyểnvịtrítileđãthựchiện H(n): Sốtilenằmsaivịtrí NútXcógiátrịheuristictốthơnnútYnếuF(x) < F(y). TacóhoạtđộngcủagiảithuậtBestFirstsearchtrênnhưhìnhsau:
ĐánhgiágiảithuậtHeuristic • Admissibility – Tính chấp nhận Một giải thuật Best first search có hàm đánh giá F(n) = G(n) + H(n) với n : Trạng thái bất kỳ G(n) : Phí tổn thực đi từ nút bắt đầu đến nút n H(n) : Phí tổn ước lượng heuristic đi từ nút n đến goal Được gọi là giải thuật A hay AKT • Một giải thuật tìm kiếm được xem là admissible nếu tìm thấy đường đi ngắn nhất đến trạng thái đích nếu nó tồn tại. • Một giải thuận tìm kiếm có hàm F(n)=G(n) được gọi là giải thuật AT Giải thuật A*: Là giải thuật A với hàm heuristic H(n) luôn luôn giá trị thực đi từ n đến goal.
ĐánhgiágiảithuậtHeuristic • Monotonicity – Đơn điệu Một hàm heuristic H(n) được gọi là monotone (đơn điệu) nếu: • ni, nj : nj là nút con cháu của ni ta cóH(ni)-H(nj) Cost(ni,nj)=Cost(ni)-Cost(nj) • Đánh giá heuristic của đích là 0 : H(goal) = 0. Giải thuật A có hàm H(n) monotone là giải thuật A* và Admissible • Informedness – tính cung cấp thông tin Xét 2 hàm heuristic H1(n) và H2(n) nếu ta có H1(n) H2(n) với mọi trạng thái n thì H2(n) được cho là informed hơn H1(n).
Chiếnlượcminimax • Giải thuật tìm kiếm Heuristic với các hàm heuristic chỉ thích hợp cho các bài toán không có tính đối kháng. Như các trò chơi chỉ có một người chơi: Puzzle, tìm lối ra mê cung, bài toán n quân hậu,… • Các trò chơi có tính đối kháng cao, thường là các trò chơi 2 người chơi như: tic tac toa, caro, cờ quốc tế,… giải thuật trên không có tác dụng vì: Đối phương không bao giờ đi theo con đường cho ta có thể đi đến goal • Cần phải có một giải thuật khác phù hợp hơn. Chiến lược MINIMAX • Chiến lược Minimax (được thể hiện bằng giải thuật minimax) dựa trên 2 giả thiết sau: • Cả 2 đối thủ có cùng kiến thức như nhau về không gian trạng thái của trò chơi • Cả 2 đối thủ có cùng mức cố gắng thắng như nhau
Giảithuậtminimax • Chiến lược Minimax Hai đối thủ trong trò chơi có tên là MAX và MIN • Max: biểu diễn cho mục đích của đối thủ này là làm lớn tối đa lợi thế của mình • Min: biểu diễn cho mục đích của đối thủ này là làm nhỏ tối đa lợi thế của đối phương. Trên cây tìm kiếm sẽ phân lớp thành các lớp Max và Min. Với một node n bất kỳ, • Nếu nó thuộc lớp Max thì gán cho nó giá trị Max của các node con • Nếu nó thuộc lớp Min thì gán cho nó giá trị nhỏ nhất của các node con.
Giảithuậtminimax–vídụ • Bài toán que diêm Một tập que diêm ban đầu đặt giữa 2 người chơi. Lần lượt đi xen kẽ. Người đến lượt đi phải chia nhóm que diêm theo nguyên tắc: • Chia thành 2 nhóm có số que khác nhau Goal: người nào đến lượt mà không chia được là thua. MINIMAX • Không gian trạng thái của trò chơi được phát triển toàn bộ, các node lá được gán giá trị 1 nếu là MAX thắng và 0 nếu là MIN thắng. • Với một node bất kỳ nếu thuộc lớp MAX gán cho nó giá trị lớn nhất của các node con. Nếu thuộc lớp MIN gán cho nó giá trị nhỏ nhất của các node con.
1 7 Minimax–bàitoánquediêm MIN 1 1 1 6-1 5-2 4-3 MAX 0 1 0 1 5-1-1 4-2-1 3-2-2 3-3-1 MIN 0 1 0 4-1-1-1 3-2-1-1 2-2-2-1 MAX 0 1 MIN 3-1-1-1-1 2-2-1-1-1 0 2-1-1-1-1-1 MAX
Minimaxvớiđộsâugiớihạn • Minimax như đã xét buộc phải có toàn bộ không gian trạng thái đã được triển khai để có thể gán trị cho các nút lá và tính ngược lại Không khả thi với các bài toán lớn vì không gian trạng thái là quá lớn. Giới hạn không gian trạng thái lại theo một độ sâu nào đó và giới hạn các node con theo một qui tắc nào đó. • Đây là chiến lược thông thường của các người chơi cờ: khả năng tính trước bao nhiêu nước. • Khi đó ta chỉ triển khai các nút con đến độ sâu giới hạn. • Đánh giá cho các nút này như là nút lá bằng một hàm lượng giá Heuristic. • áp dụng chiến lược minimax cho việc đánh giá các nút cấp trên. • Kỹ thuật này gọi là nhìn trước K bước với K là độ sâu giới hạn.
Vídụ: BàitoánTicTacToa • Hàm lượng giá heuristic E(n) = X(n) – O(n) với • X(n) số khả năng thắng của quân X. • O(n) số khả năng thắng của quân O Xcó 6 khảnăngthắng E(n) = 6 - 5 = 1 Ocó 5 khảnăngthắng VớihàmHeuristictrênXsẽcốlàmchoE(n) lớnnhất (MAX) vàOlàmchoE(n) nhỏnhất (MIN). Triểnkhaibàitoánvới 2 bướcnhìntrước.
Minimax với 2 bước nhìn trước Trích từ Nilsson (1971). C 4 – Tìm kiếm Heuristic
Hai luật cắt tỉa dựa trên các giá trị alpha và beta • Quá trình tìm kiếm có thể kết thúc bên dưới một nút MIN nào có giá trị beta nhỏ hơn hoặc bằng giá trị alpha của một nút cha MAX bất kỳ của nó. • Quá trình tìm kiếm có thể kết thúc bên dưới một nút MAX nào có giá trị alpha lớn hơn hoặc bằng giá trị beta của một nút cha MIN bất kỳ của nó.
Ví dụ cắt tỉa Anpha-Beta (tt) • A có β = 3 (Trị nút A sẽ không lớn hơn 3) • B bị cắt tỉa β, vì 5 > 3 • C có α = 3 (Trị nút C sẽ không nhỏ hơn 3) • D bị cắt tỉa α, vì 0 < 3 • E bị cắt tỉa α, vì 2 < 3 • Trị nút C là 3