Thuật toán tìm kiếm leo đồi

6 7.2K 157
Thuật toán tìm kiếm leo đồi

Đang tải... (xem toàn văn)

Thông tin tài liệu

Thuật toán tìm kiếm leo đồi

Thuật toán tìm kiếm leo đồiN.V.TTrong lập trình giải toán, các thuật toán tìm kiếmđóng một vai trò cực kỳ quan trọng và rất quen thuộc đối với chúng ta. Trongbài viết này, xin trình bày với bạn đọc một trong số các thuật toán tìm kiếmphổ biến: "Thuật toán leo đồi (Hill Climbing Search).Trước hết, ta nghiên cứu bài toán sau: Trò chơi n2-1số (n ∈ N, n > 1).Bài toán: Có n2-1 số mangcác giá trị từ 1 tới n2-1 được sắp xếp vào một lưới các ô vuông kíchthước n x n. Mỗi số đó được gọi là một quân cờ và lướiô đó được gọi là bàn cờ. Có một vị trí của bàn cờ bỏ trống. Mỗi lần di chuyểnquân, người chơi được phép chuyển một quân ở vị trí ô tiếp giáp cạnh với ôtrống vào ô trống.Yêucầu: Từ mộttrạng thái ban đầu (sự sắp xếp ban đầu của các quân trên bàn cờ), hãy thực hiệncác nước đi hợp lệ để thu được trạng thái kết thúc (trạng thái đích cần đạtđược).Vídụ: với trò chơi 8 số ta minh họa trạng thái ban đầu và trạng thái kết thúcqua các hình vẽ dưới đây:Đểgiải bài toán này, chúng ta sẽ nghĩ ngay tới việc xây dựng một cây tìm kiếm màgốc của cây tương ứng với trạng thái xuất phát của bàn cờ. Các đỉnh khác củacây tương ứng với các trạng thái thu được do việc thực hiện các nước đi hợp lệ(các nước đi được phép thực hiện là: lên trên, xuống dưới, sang trái và sangphải). Với ví dụ trên, ta có cây tìm kiếm sau: Tiếpđó, ta chỉ việc áp dụng các thuật toán thông dụng như: thuật toán tìm kiếm theochiều rộng hoặc thuật toán tìm kiếmtheo chiều sâu để tìm ra lời giải.Việcsuy nghĩ như trên xem ra có tính khả thi (đơn giản, dễ cài đặt), tuy nhiên, dễnhận thấy rằng nếu số n lớn hơn, ta sẽ phải phát triển một số quá lớn các trạngthái trước khi phát hiện ra trạng thái đích. Những hạn chế về mặt thời gian và dung lượng bộ nhớ không cho phépthực hiện điều đó.Trongthực tế, có nhiều bài toán mà số các trạng thái của nó là rất lớn (như cờ vua,cờ tướng .), thì việc giải bài toán chỉ có thể thực hiện nếu bằng một cách nàođó ta lược bỏ những trạng thái thừa, không cần thiết nhằm giảm số lượng trạngthái cần phát triển. Để làm được điều đó, phải sử dụng khéo léo các thông tin phản hồi nảy sinh trong quá trìnhtìm kiếm (các thông tin này còn gọi là thông tin cảm tính: HeuristicInformation). Cách làm này được đưa ra nhằm mục đích lựa chọn được hướng tìmkiếm tốt nhất tại mỗi bước theo nghĩa: hướng đi đó nhanh dẫn tới trạng tháiđích nhất và nhằm giảm công sức tìm kiếm.Thuậttoán tìm kiếm leo đồi đã đáp ứng được yêu cầu trên. Nội dung thuật toán được môtả như sau:Bước 1: Nếu trạng thái đầu trùngvới trạng thái đích thì dừng ngay, ngược lại thì chuyển sang bước 2.Bước 2: Sử dụng các quy tắc biến đổi để tạo ra 1 tập hợp các trạng tháitừ trạng thái hiện thời (trong bài toán trên ta có 4 quy tắc biến đổi tương ứngvới 4 phép di chuyển quân). Bước 3: Với mỗi trạng thái trongtập hợp vừa tạo ra kiểm tra xem đó có phải là trạng thái đích hay không? Nếuphải thì ngừng việc tìm kiếm, nếu không phải thì ta kiểm tra xem trạng thái mớinày có tốt hơn (gần trạng thái đích hơn) so với trạng thái đã có hay không? Nếuquả thật như vậy thì ghi nhận trạng thái này, ngược lại thì bỏ qua.Bước 4: Trong các trạng thái đượctạo ra (sau khi thực hiện các thao tác ở bước 3), ta ưu tiên phát triển trạngthái tốt nhất (trạng thái tốt nhất là trạng thái có tiềm năng dẫn tới đíchnhanh nhất).Bướcnày nhằm mục đích chuyển hướng tìm kiếm lời giải nhanh đến đích nhất.Bước 5: Lặp lại từ bước 2.Đếnđây bạn đọc có thể nhận thấy thuật toán tìm kiếm leo đồi thực chất là thuậttoán tìm kiếm theo chiều sâu, song tại mỗi bước ta sẽ ưu tiên chọn một trạngthái có hứa hẹn nhanh tới đích nhất để phát triển trước. Vấn đề quan trọng là ởchỗ biết khai thác khéo léo thông tinphản hồi để xác định hướng đi tiếp và đẩy nhanh quá trình tìm kiếm.Thông thường ta gắn mỗi trạng thái của bài toán với một số đo (1 hàm đánh giá)nào đó nhằm đánh giá mức độ gần đíchcủa nó.Nhưvậy: Nếu trạng thái hiện thời là u, theo bước 4 của thuật toán trên thì trạngthái v sẽ được phát triển tiếp theo nếu vẻ kề(u) và hàm đánh giá của vđạt gía trị max (hoặc min).Phầntiếp theo sẽ trình bày cụ thể thuật toán để giải bài toán trên. Trong bài toánnày, ta sẽ sử dụng hàm đánh giá ký hiệu là h với ý nghĩa: h(u) cho biết số cácchữ số trong trạng thái u không trùng với vị trí của nó trong trạng thái đích.Trạng thái có tiềm năng dẫn tới đích nhanh nhất (được ưu tiên phát triển trước)là trạng thái có hàm đánh giá h đạt giá trị min.Thuậttoán cho trò chơi n2-1 số được mô tả như sau : Input: Trạng thái ban đầu u0và trạng thái đích ut1. P:={u0} ;{P để lưu các trạng thái chờphát triển được tổ chức dưới dạng Stack }Q:=Φ ;{để lưu các trạng thái đãphát triển được tổ chức dưới dạng hàng đợi Queue}P:= Φ ;{P để lưu tạm thời các trạngthái kề với trạng thái đang xét}found:=false;2. While (P # y) and (not found) do2.1.Loại bỏ trạng thái u ở đỉnh stack P và đặt nó vào hàng đợi Q:Pop(P,u);Ađ(u,Q);2.2.if u=ut then found:= trueelse For v ẻ kề (u) doif(v ẽ P U Q) and (h(v)<= max {h(w)| w ờ P U Q } thenBeginfather (v):=u;Ađ (v,P?);End;if P <> f thenBeginSắp xếp các trạng thái trong P theotrật tự tăng của hàm h;Chuyển các trạng thái trong P vàođỉnh của stack P sao cho trạng thái có giá trị hàm h nhỏ nhất ở đỉnh của P;End;Output: Nếu found = false thì bàitoán không có lời giải.Nếu found = true thì lời giải là đường đi từu0 tới ut được xác định bằng cách sửdụng hàm father.Chú ý:Saukhi chuyển các trạng thái từ P vào P thì P= fh(v 1) ≤ h(v 2) ≤ ≤ h(vk) Vớiví dụ trên, cây tìm kiếm được hình thành bởi tìm kiếm leo đồi có các trạng tháiđược phát triển như hình vẽ dưới (nét đậm thể hiện hướng tìm kiếm), các số ghicạnh mỗi đỉnh là giá trị của hàm h tại đỉnh đó.Thuậttoán này có tên gọi là thuật toán tìm kiếm leo đồi, vì tư tưởng của nó tương tựnhư trường hợp: Một người ở vị trí chân đồi u0 và muốn leo lên đỉnhđồi tại vị trí ut. Anh ta chọn một đỉnh cao nhất trong số các đỉnhmà anh ta có thể đến được (từ vị trí đang đứng) để leo lên, tại vị trí này anhta lại chọn một đỉnh cao nhất như bước trước để leo lên. Quá trình cứ lặp lạinhư vậy cho đến khi tới được đích ut.Nhận xét: Thuật toán này đơn giản,dễ cài đặt và tỏ ra có nhiều hiệu quả. Bạn đọc có thể tự lập trình để giải bàitoán trên, kết quả khá tuyệt vời! Tuy nhiên, thuật toán này không phù hợp vớicác bài toán có giá trị hàm đánh giá độtnhiên thay đổi khi đến ngưỡng nào đó. Một số hiện tượng sẽ nảy sinhtrong quá trình tìm kiếm được ghi nhận như sau:*Có cực đại địa phương, là nơiđạt được lời giải tốt hơn các lời giải lân cận, nhưng chưa phải là lời giải tốttrên tổng thể. Như vậy phải có biện pháp ghi nhớ lại nhiều đường đi đề phòngkhi cần đi lại đường cũ.*Có vùng lời giải như cao nguyên bằngphẳng, không thể xác định được ngay hướng nào tốt hơn nếu chỉ so sánhvùng lân cận (các trạng thái của bài toán có hàm đánh giá xấp xỉ bằng nhau).Khi đó cần có bước nhảy xa để thoát khỏi vùng bằng phẳng.Có đỉnh hình chóp, đó là trạng thái được lựa chọn tốt hơn vùnglân cận nhưng không vượt qua được theo bất kỳ hướng nào. Để xử lý hiện tượngnày, nên chuyển theo đồng thời vài hướng.Cực đại địa phương Cao nguyên ChópMinh họa cựctrị địa phương khi giải bài toán bằng thuật toán leo đồi.Như vậy: Thuật toán này chỉ làphương pháp giải quyết cục bộ, để tăng tính tối ưu, có thể sử dụng phối hợp nóvới các thuật toán tìm kiếm khác. . tìm kiếm sau: Tiếpđó, ta chỉ việc áp dụng các thuật toán thông dụng như: thuật toán tìm kiếm theochiều rộng hoặc thuật toán tìm kiếmtheo chiều sâu để tìm. Thuật toán tìm kiếm leo đồiN.V.TTrong lập trình giải toán, các thuật toán tìm kiếm óng một vai trò cực kỳ quan trọng

Ngày đăng: 11/09/2012, 15:26

Hình ảnh liên quan

Vớiví dụ trên, cây tìmkiếm được hình thành bởi tìmkiếm leo đồi có các trạng tháiđược phát triển như hình vẽ dưới (nét đậm thể hiện hướng tìm kiếm), các số ghicạnh mỗi đỉnh là  giá trị của hàm h tại đỉnh đó. - Thuật toán tìm kiếm leo đồi

iv.

í dụ trên, cây tìmkiếm được hình thành bởi tìmkiếm leo đồi có các trạng tháiđược phát triển như hình vẽ dưới (nét đậm thể hiện hướng tìm kiếm), các số ghicạnh mỗi đỉnh là giá trị của hàm h tại đỉnh đó Xem tại trang 5 của tài liệu.
Có đỉnh hình chóp, đó là trạngthái được lựa chọn tốt hơn vùnglân cận nhưng không vượt qua được theo bất kỳ hướng nào - Thuật toán tìm kiếm leo đồi

nh.

hình chóp, đó là trạngthái được lựa chọn tốt hơn vùnglân cận nhưng không vượt qua được theo bất kỳ hướng nào Xem tại trang 6 của tài liệu.

Từ khóa liên quan

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

Tài liệu liên quan