báo cáo môn trí tuê nhân tạo bài toán n-puzzle sử dụng thuật toán a

16 5.3K 14
báo cáo môn trí tuê nhân tạo bài toán n-puzzle sử dụng thuật toán a

Đ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

TRƯỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘI VIỆN CÔNG NGHỆ THÔNG TIN VÀ TRUYỀN THÔNG BÁO CÁO BÀI TẬP LỚN Giải toán N-Puzzle sử dụng thuật toán A* Giáo viên: ThS Phạm Văn Hải Nhóm số 2: Đặng Vũ Hạnh 20080899 Trần Bá Tùng 20083041 Nguyễn Huy Triển 20082751 Phạm Việt Phong 20083429 Phùng Ngọc Duy 20101256 Nguyễn Anh Tuấn 20102772 Hà Nội, Tháng 08 năm 2013 Lời nói đầu Chọn đề tài với mong muốn áp dụng kiến thức học tập nghiên cứu để bắt tay xây dựng ứng dụng cụ thể Việc giúp chúng em hiểu sâu thuật toán hơn, sử dụng linh hoạt để xử lý tốn tìm kiếm q trình học tập , nghiên cứu công việc sau Sử dụng thuật tốn thơng minh người, kết hợp với tốc độ xử lý liệu máy tính để tạo nên thiết bị hồn hảo, từ thuật tốn nhỏ hình thành ý tưởng lớn Lập trình cho thiết bị thay công việc người tương lai A Thuật tốn A* I Tìm hiểu thuật tốn Thuật toán A* trường hợp Best First Search nên ta tìm hiểu trực quan BFS trước bắt tay vào A* để có nhìn chung thuật tốn tìm kiếm tối ưu Khái niệm 1.1 Thuật tốn tìm kiếm tối ưu – Best First Search Thuật tốn tìm kiếm ưu tiên tối ưu kết hợp hai thuật tốn tìm kiếm theo chiều sâu thuật tốn tìm kiếm theo chiều rộng, cho phép người dùng đường thời điểm, đồng thời xem xét hướng khác Nếu nhận thấy hướng khơng có triển vọng bằn đường cịn lại ta chuyển sang theo đường Tại bước thuật toán BFS ta chọn theo trạng thái có khả cao số trạng thái xét thời điểm đó, với phương pháp ta ưu tiên vào nhánh tìm kiếm có khả cao Tư tưởng chủ đạo Best First Search giúp ta khơng bị vịng luẩn quẩn sâu vào hướng mà ta phát hướng ngày tệ , chí tệ đường ta chưa không tiếp tục hướng nưa mà chọn theo hướng tốt tập hợp chưa a Cài đặt giải thuật BFS Heap: Tập hợp biến động đối tượng theo thứ tự ưu tiên định, đối tượng đặc trưng khóa thể mức độ ưu tiên nó, thơng thường tập hợp dối tượng thao tác để chọn đối tượng có độ ưu tiên cao để xử lý tiếp tục Heap cấu trúc liệu trừu tượng , với thao tác đưa phần tử vào Heap (Insert) , lấy phần tử có độ ưu tiên lớn (Remove) , đưa nút có khóa K vị trí theo chiều hướng đến gốc (UnHeap), đưa nút có khóa K vị trí theo chiều hướng đến (các nút lá) (DownHeap) Dưới hình ảnh hai cách biểu diễn Heap, dễ nhận thấy hình ảnh biểu diễn mảng Heap phép biểu diễn theo thứ tự tăng dần - Cài đặt giải thuật BFS Để cài đặt thuật giải theo BFS , ta thường dùng tập hợp: + OPEN: Tập chứa trạng thái sinh chưa xét đến, OPEN hàng đợi ưu tiên (priority queue) mà phần tử có độ ưu tiên cao phần tử tốt Hàng đợi ưu tiên thường cài đặt Heap + CLOSE: Tập chứa trạng thái xét đến, ta cần lưu trữ trạng thái nhớ để phòng trường hợp trạng thái sinh qua trình duyệt lại trùng hợp với trạng thái xét tới trước Khi khơng gian tìm kiếm có dạng ta khơng cần sử dụng tới tập - Cài đặt + Đặt OPEN chứa trạng thái khởi đầu Cho đến tìm trạng thái đích khơng cịn nút tập OPEN vịng lặp thực duyệt trạng thái tiếp theo, bước: + Chọn trạng thái tốt Tbest OPEN ( xóa trạng thái Tbest khỏi OPEN) +Nếu Tbest trạng thái kết thúc +Nếu Tbest khơng phải trạng thái tốt nhất, tạo trạng thái Tn Tbest Đối với trạng thái kết tiếp, thực tính hàm chi phí f(Tn) thêm Tn vào OPEN Hình ảnh minh họa BFS 1.2 Thuật tốn tìm kiếm A* a Khái niệm Khơng giống thuật tốn Dijkstra , A* thuật tốn tìm đường từ điểm tới điểm, từ nút khởi đầu đến nút đích cho trước tới nút thỏa mãn điều kiện không sử dụng để tìm giải pháp cho vấn đề tìm đường ngắn học thuyết đồ thị Về chất, thuật toán làm việc giống Dijkstra Nhưng hiệu A* sử dụng hàm đánh giá bổ sung ( đánh giá heuristic) để ước lượng tuyến đường tốt qua nút (Việc lựa chọn trạng thái phụ thuộc vào hàm lượng giá này) A* Là ví dụ cho thuật toán Best first search, thuật tốn đầy đủ, ln tìm thấy lời giải tốn có lời giải b Đăt vấn đề: Vấn đề đưa giống với vấn đề giải thuật tốn tìm đường ngắn Dijkstra Cho đồ thị ( đồ thị có hướng trọng số không âm) hai node đồ thị (gọi điểm bắt đầu điểm cuối), cần tìm đường có chi phí từ đầu tới cuối nhỏ đường có thể, kết danh sách node cần qua để tới đích với chi phí nhỏ c Thuật toán Hai tập OPEN CLOSE giống Best First Search Có thể nói , thuật tốn A* hoạt đông tương tự Dijkstra thực Hơn bước cân nhắc chọn nút có chi phí thấp tâp OPEN để định hướng cho bước tiếp theo, chọn nút có nhiều khả dẫn đến đường ngắn cần tìm Khái niệm “ nhiều khả “ đánh giá hàm heuristic Nếu hàm đánh giá xác thuật tốn tối ưu Nếu hàm đánh giá tồi dẫn tới thuật tốn thực chí tồi tệ Dijkstra Cụ thể hơn, A* hoạt động vịng lặp ( xét lại trạng thái xét trước đó) Tuy sử dụng thuật toán lựa chọn tương tự Dijkstra với khác biệt hàm heuristic A* hoạt động hiệu d Độ tốt lời giải thuật toán A* Độ tốt trạng thái tính dựa hai giá trị mà ta gọi h (n)và g(n) h(n) ước lượng chi phí từ trạng thái trạng thái đích Cịn g(n) chiều dài quãng đường từ trạng thái ban đầu tới trạng thái xét Một điểm cần lưu ý g chi phí thực cịn h chi phí ước lượng Dưới hình ảnh mơ tả khái qt thuật tốn, cách tính giá trị cho số node đồ thị Kết hợp g (n)và h(n) ta có hàm tổng chi phí ước lượng cho quãng đường từ nốt xuất phát tới nốt đích dọc theo đường trạng thái Công thức ước lượng: f(n) = g(n)+h(n) Nếu giá trị f(n) thấp độ ưu tiên n cao Hai giá trị quy ước khơng âm để thuận tiện cho q trình tính tốn e Cài đặt Pseudo Code: Ứng dụng A* thuật toán hay sử dụng để giải vấn đề tìm đường game, đồ, tìm đường ngắn cho người máy vượt chướng ngại vật dễ dàng cài đặt lại mang tính hiệu cao II Phân tích tốn Vấn đề Bài tốn N-Puzzle Bài toán quen thuộc, với nhiều phiên khác puzzle, 15 puzzle… Ở mức độ thấp puzzle, tốn bao gồm bảng 3x3 ô số đánh từ 1>8 Ở trạng thái bắt đầu, thứ tự ô số xếp ngẫu nhiên, nhiệm vụ người giải phảo đưa chúng thứ tự ban đầu xếp theo thứ tự tăng dần từ trái qua phải Xây dựng giải pháp Bài tốn xây dựng bảng vng theo kích thước n x n (với puzzle n=3 với 15 puzzle n=4) Số lượng trạng thái ban đầu hoán vị n x n phần tử Như , giá trị n tăng lên khơng gian trạng thái toán tăng lên nhanh Do vậy, phụ thuộc vào cách chọn hàm đánh giá, không kết hợp với kỹ thuật bổ sung tốn với n>3 lâu tìm kết khơng thể thực q trình tìm lời giải khơng gian trạng thái q lớn - Bài toán Puzzle Dễ dàng nhận thấy rằng, trạng thái tốn có tối đa cách di chuyển sang trạng thái khác ( trái , phải, lên , xuống)- trạng thái con, để trở trạng thái thỏa mãn yêu cầu (trạng thái đích) trạng thái phải tn theo quy luật Xét ví dụ trạng thái sau: Duyệt qua ô theo thứ tự từ trái sang phải đếm tổng số có giá trị nhỏ sau theo thứ tự duyệt Xét i=1, ta thấy có nằm sau có giá trị nhỏ : n1 = Xét i=2, có giá trị nằm sau nhỏ 6: n2=5 Xét i=3, có giá trị nằm sau nhỏ 4: n3=3 Xét i=4, có 4giá trị nằm sau nhỏ 7: n2=4 Xét i=5, i =6 có giá trị nhỏ n5= n6 = Xét i=7, n7 =1 Và giá trị n8=0 Tính tổng : N = n1 + n2 + n3 +….+ n8 = 7+5+3+4+2+2+1+0 =24 Ta nhận thấy N giá trị chia hết cho ( số chẵn) Đưa bảng ô vuông vừa xét dạng biểu diễn theo hàng ngang sau, ta tiến hành di chuyển mảng giá trị N tăng lên theo nguyên lần Từ kết luận rằng, để quay trạng thái ban đầu trạng thái toán phải thỏa mãn cho giá trị N số chẵn Ta gọi cấu hình hợp lệ - Bài tốn 15 puzzle Phân tích tương tự tốn puzzle ta nhận 15 puzzle có nhiều điểm khác biệt, giá trị N không chẵn trước mà thay đổi chẵn – lẻ liên tục Mỗi lần ta di chuyển ô số giá trị N tăng giảm theo số lẻ, lần di chuyển trống dịng ta làm thay đổi giá trị N đơn vị Với hai trường hợp lên, ta rút kết luận điều kiện ban đầu toán sau: Với n lẻ: cần N số chăn Với n chẵn: N số chẵn trống nằm dịng chẵn từ xuống, N số lẻ ô trống nằm dòng lẻ từ xuống - Thuật giải Hàm ước lượng bổ sung? Để áp dụng thuật toán A* , ta cần có hàm heuristic để ước lượng giá trị trạng thái bảng số Ta sử dụng giải thuật Manhattan để xây dựng hàm đánh giá chi phí, giá trị hàm heuristic tính tổng số sai lệch ô số trạng thái so với trạng thái đích Manhattan tên quận New York - Mỹ, thành phố kế ngang dọc bàn cớ lớn, thuận tiện cho giao thông, khoảng hai điểm quận tính khoảng cách đo đo dọc theo cạnh vng góc đường Cũng vậy, dùng Manhattan để đo khoảng cách sai lệch việc đếm hướng ngang dọc cho đường từ vị trí xét ( vị trí tại) với vị trí ( trạng thái đích) ngắn Và đặc điểm đặc biệt mà người ta lấy tên quận để đặt tên cho phương pháp tính khoảng cách Tìm trạng thái đích? Ta nhận để xác định tọa độ ( trạng thái đích) có giá trị Id ma trận vng kích thước n x n ta sử dụng cơng thức sau: RowId = Id / n; ColId = Id % n; Tính giá chi phí từ trạng thái tới trạng thái đích theo hàm lượng giá sử dụng phương pháp tính khoảng cách Manhattan, xét vng xi có tọa độ đích (row1, col1) trạng thái (row2, col2) Giá trị khoảng theo hàm ước lượng: h= |row1 – row2| - |col1 – col2| B Cài đặt 10 I Xây dựng ứng dụng Để minh họa cho tốn, nhóm xây dựng ứng dụng ghép hình ảnh Phương pháp giải tốn Sử dụng hàm đánh giá chi phí: f(n) = g(n) + h(n); Giá trị : g(n): chi phí từ node gốc tơi node tại, h(n): chi phí ước lượng từ nút tới đích Loại bỏ vịng lặp Để đảm bảo giải thuật A* hoàn chỉnh phải khử vịng lặp Bằng cách, nút sinh ra, ta kiểm tra trạng thái chúng có tồn hai tập OPEN CLOSE hay khơng trước thêm vào tập hợp OPEN để tránh việc xét lại phương án xét trước Để tăng tốc độ duyệt tìm nút trùng lặp nên sử dụng tập hash bảng băm đem so sánh Hàm ước lượng Heuristic h(n) Hàm ước lượng : h(n) = h1+ h2 ( h1 tổng chi phí ngắn để đưa sai vị trí theo khoảng cách Manhattan, h2 hàm chặn) Gọi x khoảng cách theo chiều dọc sai vị trí, y khoảng cách theo chiều ngang sai vị trí h2 cơng thêm max(x,y) với có (x+y)>1 Cấu trúc chương trình Đây hình ảnh mơ tả cách tổng quát lớp project chương trình minh họa nhóm: 11 a Class Puzzle thành phần project, chứa giao diện chương trình thao tác quan trọng int[] calculator(Image img, int wt, int ht) : Tính kích thước nhỏ sau cắt ảnh 12 void initUI() : Khởi tạo giao diện ứng dụng void loadImage(URL url): Lấy hình ảnh theo địa lưu trữ void loadImage(String url): Lấy hình ảnh theo tên đường dẫn void actionPerformed(ActionEvent e) : Sự kiện bắt click chuột hình Image scaleImage(Image sourceImage, int width, int height): Căn chỉnh hình ảnh cho phù hớp int canMove(int id) : Kiểm tra xem node di chuyển hay không boolean Test(int[] val, int posBlank): Kiểm tra xem trạng thái ban đầu có sau tạo ngẫu nhiên có thỏa mãn u cầu hay khơng b Class Point int check() boolean move() : Dịch chuyển c Class MyEvent ActionEvent Pop() : void Push(ActionEvent e) void popAll() boolean hasLog() d Class TreeNode Void updateG(Tree t) rePlaceFather(TreeNode t, Tree tree) final int h(int finish[]) final int f() boolean isSame(int[] n): So sánh trạng thái boolean isSameOpen(TreeNode[][] hash, Tree t) ArrayList findPart(TreeNode[][] hash, int[] finish, Tree t) e Class Tree void addOpen(TreeNode t) : Thêm Node vào tập hợp OPEN void addHash(TreeNode n): Thêm Node vào tập hợp HASH 13 TreeNode getOpen() : Lấy Node từ danh sách OPEN void AStar() : Cài đặt thuật toán tìm kiếm A* void start(TreeNode st, TreeNode fn) : Tiến hành thực hiên tìm kiếm void stop(): Kết thúc trình tìm kiếm ( thời gian quy định trình tìm kiếm kết thúc) Vấn đề tồn - Hàm đánh giá Heuristic chưa đánh giá hoàn chỉnh, sử dụng mức thâp - Duyệt tìm mức cao, phần tử hash có số phần tử lớn nên thuật tốn bị chậm Hướng phát triển - Tìm hàm ước lượng tối ưu hơn, đánh giá giá trị tốt sử dụng mức cao - Xây dựng hàm băm tối ưu để tăng tốc tìm kiếm - Tiếp tục nghiên cứu thuật tốn , áp dụng cho cơng việc học tập – nghiên cứu sau Sử dụng sản phẩm II Đây hình giao diện chương trình - Trong mục lựa chọn, chọn độ khó phù hợp - Nếu bạn muốn sử dụng hình ảnh mặc đỉnh chương trình ấn vào nút “Tạo mới” để bắt đầu chơi, không chọn nút “Chọn ảnh” để lấy hình ảnh máy tính lên chương trình 14 Một File Open Dialog lên, chọn tới file ảnh mà bạn muốn sử dụng nhấn “Open” - Trong bước dịch chuyển hình ảnh, bạn sử dụng nút điều hướng công cụ để trở trạng thái bước trước Trong trường hợp muốn chương trình tự động xếp dựa thuật tốn A* cài đặt trước ấn nút “ Sắp xếp ” 15 ... lai A Thuật tốn A* I Tìm hiểu thuật tốn Thuật toán A* trường hợp Best First Search nên ta tìm hiểu trực quan BFS trước bắt tay vào A* để có nhìn chung thuật tốn tìm kiếm tối ưu Khái niệm 1.1 Thuật. .. dòng lẻ từ xuống - Thuật giải Hàm ước lượng bổ sung? Để áp dụng thuật toán A* , ta cần có hàm heuristic để ước lượng giá trị trạng thái bảng số Ta sử dụng giải thuật Manhattan để xây dựng hàm... boolean hasLog() d Class TreeNode Void updateG(Tree t) rePlaceFather(TreeNode t, Tree tree) final int h(int finish[]) final int f() boolean isSame(int[] n): So sánh trạng thái boolean isSameOpen(TreeNode[][]

Ngày đăng: 23/10/2014, 23:47

Từ khóa liên quan

Mục lục

  • Lời nói đầu

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

Tài liệu liên quan