Là một dự án thú vị, tôi đã thực hiện triển khai C # của Richard Korf - Tìm giải pháp tối ưu cho khối Rubik bằng cách sử dụng cơ sở dữ liệu mẫu.
https://www.cs.princeton.edu/cifts/archive/fall06/cos402/ con / korfrubik.pdf
Tôi thực sự có nó hoạt động, tôi chỉ đang cố gắng cải thiện giải pháp của tôi.
Một điều mà Korf liếc qua trong bài báo của mình là cách anh ta lưu trữ và lập chỉ mục vào cơ sở dữ liệu mẫu. Lý tưởng nhất, tôi nghĩ rằng chúng tôi muốn sử dụng một thể hiện của khối rubik để tạo một chỉ mục thành một mảng.
Câu hỏi của tôi là về cách tốt nhất để tạo ra chỉ số này.
Giải pháp của tôi là tạo ra một hàm băm hoàn hảo tối thiểu. Điều này liên quan đến việc giữ TẤT CẢ các hình khối trong bộ nhớ cho đến khi tôi phát hiện ra toàn bộ cơ sở dữ liệu mẫu sau đó tạo ra một hàm băm hoàn hảo tối thiểu dựa trên điều đó. MPH mất vài giờ để chạy tùy thuộc vào kích thước cơ sở dữ liệu mẫu, nhưng tôi chỉ cần thực hiện một lần kể từ khi tôi lưu nó vào đĩa. Cuối cùng, tôi có thể vứt bỏ các khối chỉ lưu trữ MPH. Bằng cách đó, tôi có thể lấy khối rubik ngẫu nhiên, áp dụng mẫu, sau đó tra chỉ số mảng trong MPH để có chiều dài giải pháp ước tính.
Tôi tin rằng Korf và Shultz mô tả một cách tốt hơn để xác định chỉ số của khối lập phương trong bài báo năm 2005 của họ có tên là "Tìm kiếm theo chiều rộng quy mô lớn"
https://www.aaai.org/Papers/AAAI/2005/AAAI05-219.pdf
Bài viết này mô tả một thuật toán để tạo ra một chỉ mục dựa trên thứ tự từ điển của một hoán vị. Về cơ bản, bạn có thể lấy hoán vị {1, 2, 3} và chỉ ra rằng nó là nhỏ nhất với chỉ số là 0. {1, 3, 2} tiếp theo với chỉ số là 1, v.v.
Tôi cảm thấy mình có thể áp dụng thuật toán này cho khối rubik để lấy chỉ mục của nó trong cơ sở dữ liệu mẫu, nhưng tôi gặp khó khăn trong việc tìm ra cách nó hoạt động trong thực tế.
Ví dụ, cơ sở dữ liệu mẫu chỉ chứa tất cả các khối rubik đã được dán cạnh. Có chính xác 88.179.840 khối trong bộ này. Bất kỳ khối vuông nào trên khối rubik đều có thể ở một trong 24 trạng thái khác nhau. Trạng thái của hình khối góc thứ 8 có thể được tính dựa trên 7 hình khối khác vì vậy các hình khối trong cơ sở dữ liệu chỉ có các góc có 7 giá trị trong khoảng từ 0 đến 23
ví dụ: {0, 3, 6, 9, 12, 15, 18, 21} định nghĩa khối "đã giải quyết" với tất cả các nhãn dán được loại bỏ.
nếu tôi xoay mặt trước 90 độ thì hoán vị có thể là: {0, 3, 11, 23, 12, 15, 8, 20}
Có cách nào để đưa một chỉ mục ra khỏi những hoán vị này không?