Trí tuệ nhân tạo: Bài tập chuyển đĩa tháp Hà Nội thuật toán AKT

25 142 2
Trí tuệ nhân tạo: Bài tập chuyển đĩa tháp Hà Nội thuật toán AKT

Đ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

AKT thuật toán trí tuệ nhân tạo phần bài bao gồm cả chương trình

Trường Đại Học Công Nghiệp Hà Nội Khoa công nghệ thông tin - - BÀI TẬP LỚN: MƠN TRÍ TUỆ NHÂN TẠO Đề tài: Cài đặt tốn chuyển đĩa Giáo viên hướng dẫn: Nhóm: Thành viên nhóm: Hà Nội, ngày 28 tháng 12 năm 2021 MỤC LỤC LỜI NĨI ĐẦU Bài tốn Tháp Hà Nội nhà toán học Pháp Edouard Lucas nghĩ năm 1882 phổ biến vào năm 1883 dạng trị chơi Trị chơi khơng thú vị chỗ mang tên Hà Nội mà cịn hấp dẫn nhà nghiên cứu Tốn học Cơng nghệ thơng tin liên quan đến nhiều vấn đề Toán - Tin học Sau 100 năm, tốn Tháp Hà Nội có cải biên tổng qt hóa (trị chơi Tháp Hà Nội với nhiều cọc, trò chơi Tháp Hà Nội với đĩa màu, trò chơi Tháp Hà Nội với hạn chế hướng chuyển đĩa, trò chơi Tháp Hà Nội song song, …) Những cải biên tổng quát hóa dẫn đến vấn đề tốn học thú vị, chí dẫn tới nhiều tốn chưa có lời giải Dựa kiến thức mơn Trí tuệ nhân tạo, báo cáo với đề tài Cài đặt toán chuyển đĩa nhằm mục đích trình bày khơng gian trạng thái đồ thị toán, đặc biệt mơ tả thuật tốn tìm kiếm, lưu trữ đồ thị thực thuật tốn tìm kiếm Báo cáo gồm Phần mở đầu, hai chương tài liệu tham khảo Chương 1: Mơ tả tốn Chương 2: Ứng dụng thuật toán AKT toán chuyển đĩa CHƯƠNG 1: MƠ TẢ BÀI TỐN Đặt vấn đề Trong lĩnh vực nghiên cứu Trí tuệ nhân tạo, ta thường xuyên phải đối đầu với vấn đề (bài toán) tìm kiếm, ta phải có kỹ thuật tìm kiếm áp dụng để giải vấn đề Khi giải tốn phương pháp tìm kiếm, trước hết ta phải xác định khơng gian tìm kiếm bao gồm tất đối tượng thực việc tìm kiếm Nó khơng gian liên tục, chẳng hạn không gian véctơ thực n chiều, khơng gian đối tượng rời rạc Như vậy, ta xét việc biểu diễn vấn đề không gian trạng thái cho việc giải vấn đề quy việc tìm kiếm khơng gian trạng thái Một phương pháp biểu diễn vấn đề phù hợp sử dụng khái niệm trạng thái (state) toán tử (operator) Phương pháp giải vấn đề dựa khái niệm trạng thái toán tử gọi cách tiếp cận giải vấn đề nhờ không gian trạng thái Luật chơi Cho ba cọc 1, 2, Ở cọc ban đầu có n đĩa xếp theo thứ tự to dần từ lên Hãy dịch chuyển n đĩa sang cọc thứ cho: - Mỗi lần chuyển đĩa - Trong cọc không cho phép đĩa to nằm đĩa nhỏ Bài toán xác định biết đĩa nằm cọc Hay nói cách khác, có hai cách xác định: 1- Cọc chứa đĩa nào? Cọc chứa đĩa nào? Và cọc chứa đĩa 2- Đĩa lớn thứ i nàm cọc nào? (i = n) Như cách mô tả trạng thái tốn khơng nhất, vấn đề chọn cách mô tả để đạt mục đích dễ dàng Theo trên, với cách thứ ta phải dùng danh sách động số đĩa cọc khác thời điểm khác Cách thứ hai, nhìn qua khó mơ tả dựa vào khái niệm có thứ tự tốn học, cách mơ tả tốn hiệu Thật vậy, gọi x i cọc chứa đĩa lớn thứ i, xi∈{1, 2, 3}, i∈{1 n} Khi có thứ tự (x 1, x2, , xn) dùng làm dạng mơ tả trạng thái xét toán Với cách mơ tả này, Trạng thái đầu là: Hình 1: Mơ tả trạng thái ban đầu Trạng thái cuối là: Hình 2: Mơ tả trạng thái cuối Tốn tử Toán tử cách chuyển đĩa từ cọc sang cọc khác lần chuyển đĩa không đặt đĩa to đĩa nhỏ Chẳng hạn như: (ijk) => (ijj) (Chuyển đĩa A từ cọc k sang cọc j) (ijk) => (iik) (Chuyển đĩa B từ cọc j sang cọc i) Không gian trạng thái tốn Khơng gian trạng thái tập tất trạng thái có tập tốn tử tốn Q trình tìm kiếm lời giải tốn biểu diễn khơng gian trạng thái xem q trình dị tìm đồ thị, xuất phát từ trạng thái ban đầu, thông qua toán tử chuyển trạng thái, đến trạng thái gặp trạng thái đích khơng cịn trạng thái tiếp tục Khi áp dụng phương pháp tìm kiếm khơng gian trạng thái, người ta thường quan tâm đến vấn đề sau: - Kỹ thuật tìm kiếm lời giải - Phương pháp luận việc tìm kiếm - Chiến lược tìm kiếm Tuy nhiên, khơng phải phương pháp áp dụng để giải cho tất toán phức tạp mà cho lớp toán Việc chọn chiến lược tìm kiếm cho tốn cụ thể phụ thuộc nhiều vào đặc trưng tốn Các kỹ thuật tìm kiếm mù: Trong chiến lược tìm kiếm, khơng có hướng dẫn cho tìm kiếm, mà ta phát triển trạng thái cách hệ thống từ trạng thái ban đầu gặp trạng thái đích Có ba kỹ thuật tìm kiếm mù bản, tìm kiếm theo chiều rộng (Breath First Search), tìm kiếm theo chiều sâu (Depth First Search) tìm kiếm sâu dần Các kỹ thuật tìm kiếm kinh nghiệm (tìm kiếm heuristic): Với kỹ thuật tìm kiếm ta dựa vào kinh nghiệm hiểu biết vấn đề cần giải để xây dựng nên hàm đánh giá nhằm tìm đỉnh tiềm dẫn đến lời giải Trong số trạng thái chờ phát triển, ta chọn trạng thái đánh giá tốt để phát triển Do tốc độ tìm kiếm nhanh Khơng gian trạng thái bốn, Ký hiệu: K= (T, S, G, F) Trong đó, T: tập tất trạng thái có tốn S: trạng thái đầu G: tập trạng thái đích F: tập tốn tử Áp dụng với tốn chuyển đĩa ta có: T = { (x1, x2)/ xi ∈ {1, 2, 3} } S = (1, 1) G = {(3, 3)} F = Tập khả chuyển đĩa xác định phần trước Đồ thị toán chuyển đĩa với n=2 Chương trình áp dụng giải thuật AKT Để ước lượng trạng thái trò chơi, ta tính trạng thái cột thứ ba Tại trạng thái, số bước để đưa cột thứ ba trạng thái đích bao nhiêu? Ta thấy trạng thái cột thứ ba có số đĩa nằm vị trí nó, có số đĩa khơng nằm vị trí Số lượt để ta đưa cột thứ ba trạng thái đích tổng số lượt mang đĩa khơng vị trí khỏi cột thứ ba cộng với số lượt mang đĩa lại vào cho vị trí cột thứ ba Các trường hợp toán với trạng thái cột thứ 3: Hình 3: Đồ thị tốn chuyển đĩa với n = CHƯƠNG 2: ỨNG DỤNG THUẬT TOÁN AKT TRONG BÀI TỐN CHUYỂN ĐĨA Mơ tả thuật tốn AKT Theo thuật tốn AKT, chi phí đỉnh xác định: f(n) = g(n) + h(n) Đỉnh n chọn f(n) Việc xác định hàm ước lượng h(n) thực dựa theo: - Chọn toán tử xây dựng cung cho loại bớt đỉnh khơng liên quan tìm đỉnh có triển vọng - Sử dụng thêm thông tin bổ xung nhằm xây dựng tập OPEN cách lấy đỉnh tập OPEN Để làm việc người ta phải đưa độ đo, tiêu chuẩn để tìm đỉnh có triển vọng Các hàm sử dụng kỹ thuật gọi hàm đánh giá Sau số phương pháp xây dựng hàm đánh giá: - Dựa vào xác suất đỉnh đường tối ưu - Dựa vào khoảng cách, sai khác trạng thái xét với trạng thái đích thơng tin liên quan đến trạng thái đích Thuật toán: Vào: - Đồ thị G = (V, E) V tập đỉnh, E tập cung • f: V R+ ( f(n): hàm ước lượng) • Đỉnh đầu T0 tập đỉnh đích Ra: - Đường p: T0 TG Goal Phương pháp: Sử dụng danh sách CLOSE OPEN void AKT() { OPEN = {T0}, g(T0) = Tính h(T0), f(T0) = g(T0) + h(T0) while OPEN { n getNew(OPEN) // lấy đỉnh n cho f(n) → if(n = TG) then return True else { for each m A(n) { g(m) = g(n) + cost(m,n) Tính h(m), f(m) = g(m) + h(m) OPEN = OPEN {m} } } return False; } Ví dụ: Chọn hàm f(n) = g(n) + h(n) 10 Trong đó: h(n) thơng tin liên quan đến số đĩa cọc  Nếu cọc chưa có đĩa h =  Nếu cọc có đĩa nhỏ h =  Nếu cọc có đĩa to h =  Nếu cọc có đĩa đĩa nhỏ đĩa to h = Hình 4: Hình ảnh minh hoạ 11 Lưu trữ đồ thị Để lưu trữ đồ thị thực thuật tốn khác cần phải tìm cấu trúc liệu thích hợp để mơ tả đồ thị Việc chọn cấu trúc liệu để biểu diễn đồ thị có tác động lớn đến hiệu thuật tốn Vì vậy, việc chọn lựa cấu trúc liệu để biểu diễn đồ thị phụ thuộc vào tình cụ thể (bài tốn thuật tốn cụ thể) Danh sách kề biểu thị biểu đồ dạng mảng danh sách liên kết Chỉ số mảng đại diện cho đỉnh phần tử danh sách liên kết đại diện cho đỉnh khác tạo thành cạnh với đỉnh Tại lần di chuyển thứ g=1: h=2 h=3 Tại lần di chuyển thứ hai g=2: h=1 h=2 h=3 Tại lần di chuyển thứ ba g=3: h=1 h=0 h=2 12 Các bước thực 3.1 Xây dựng cột tạo đĩa protected override void OnPaint(PaintEventArgs e) // Vẽ giao diện cột { Graphics gr1 = e.Graphics; Pen pen = new Pen(Color.Black); // cột Point p1 = new Point(150, 400); Point p2 = new Point(150, 200); gr1.DrawLine(pen, p1, p2); // tạo cột thứ p1.X = 50; p1.Y = 400; // xác định tọa độ bắt đầu vẽ p2.X = 250; p2.Y = 400; // xác định tọa độ kết thúc vẽ gr1.DrawLine(pen, p1, p2); // tạo đáy thứ // cột p1.X = 450; p1.Y = 400; p2.X = 450; p2.Y = 200; gr1.DrawLine(pen, p1, p2); // vẽ cột thứ hai p1.X = 350; p1.Y = 400; p2.X = 550; p2.Y = 400; 13 gr1.DrawLine(pen, p1, p2);// vẽ đáy thứ // cột p1.X = 750; p1.Y = 400; p2.X = 750; p2.Y = 200; gr1.DrawLine(pen, p1, p2); // vẽ cột thứ hai p1.X = 650; p1.Y = 400; p2.X = 850; p2.Y = 400; gr1.DrawLine(pen, p1, p2);// vẽ đáy thứ } private void btnCreate_Click(object sender, EventArgs e) //Tạo đĩa cột { soDia = 2; rod = new Stack[4]; rod[1] = new Stack(soDia + 1); rod[2] = new Stack(soDia + 1); rod[3] = new Stack(soDia + 1); resRod = new Disk[soDia + 1]; for (int i = 1; i = 1; i ) { rod[1].Push(resRod[i]); } } 3.2 Thực thuật toán AKT private int TinhH() { Disk[] temp = rod[3].ToArray(); int x = soDia; int corDisk = 0, wroDisk = 0; int i = temp.Length - 1; while (i >= 0) { if (temp[i].valD == resRod[x].valD) { 15 corDisk++; } if (temp[i].valD != resRod[x].valD) { wroDisk++; } x ; i ; } return soDia + wroDisk - corDisk; } private void btnStart_Click(object sender, EventArgs e) { //Giải thuật AKT int g = 0; int hmin, fmin = 0; int rodDi = -1, rodDich = -1; { hmin = int.MaxValue; for (int i = 1; i vitrimoi) { while (lDick.Left + lDick.Width / > vitrimoi) { lDick.Left -= SPEED; Application.DoEvents(); } } // đếm số đĩa có cột đích int DCount = -1; for (int i = 1; i (ijj) (Chuyển đĩa A từ c? ? ?c k sang c? ? ?c j) (ijk) => (iik) (Chuyển đĩa B từ c? ? ?c j sang c? ? ?c. .. Ví dụ: Chọn hàm f(n) = g(n) + h(n) 10 Trong đó: h(n) thơng tin liên quan đến số đĩa c? ? ?c  Nếu c? ? ?c chưa c? ? đĩa h =  Nếu c? ? ?c có đĩa nhỏ h =  Nếu c? ? ?c có đĩa to h =  Nếu c? ? ?c có đĩa đĩa nhỏ đĩa to

Ngày đăng: 07/07/2022, 12:00

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

Tài liệu liên quan