2012-07-06 31 views
8

Tôi cần triển khai trình giải mã Minesweeper. Tôi đã bắt đầu thực hiện tác nhân dựa trên quy tắc. Tôi đã triển khai một số quy tắc nhất định. Tôi có một chức năng heuristic để lựa chọn quy tắc phù hợp nhất cho tế bào hiện tại (với thông tin về các tế bào xung quanh) đang được điều trị. Vì vậy, đối với mỗi ô được chọn, nó có thể quyết định 8 ô xung quanh để mở chúng, để đánh dấu chúng hoặc không làm gì cả. Ý tôi là. tại thời điểm này, tác nhân nhận được như một đầu vào một số tế bào tiết lộ và quyết định phải làm gì với các tế bào xung quanh (hiện tại, tác nhân không biết, làm thế nào để quyết định tế bào nào cần xử lý).Dự án AI Minesweeper

Câu hỏi của tôi là, thuật toán nào cần thực hiện để quyết định ô cần xử lý?

Giả sử, đối với lần di chuyển đầu tiên, tác nhân sẽ tiết lộ một ô góc (hoặc một số khác, theo một số quy tắc cho lần di chuyển đầu tiên). Phải làm gì sau đó?

Tôi hiểu rằng tôi cần triển khai một số loại tìm kiếm. Tôi biết nhiều thuật toán tìm kiếm (BFS, DFS, A-STAR và những người khác), đó không phải là vấn đề, tôi chỉ không hiểu làm thế nào tôi có thể sử dụng ở đây các tìm kiếm này.

Tôi cần triển khai thực hiện theo nguyên tắc Trí tuệ nhân tạo: Cách tiếp cận hiện đại.

Trả lời

8

BFS, DFS và A * có thể không phù hợp ở đây. Những thuật toán này là tốt nếu bạn đang cố gắng lên kế hoạch cho một quá trình hành động khi bạn có kiến ​​thức đầy đủ về thế giới. Trong Minesweeper, bạn không có kiến ​​thức như vậy. Thay vào đó, tôi khuyên bạn nên sử dụng một số kỹ thuật suy luận hợp lý từ Phần III của cuốn sách, đặc biệt là sử dụng SAT hoặc các kỹ thuật trong Chương 10. Điều này sẽ cho phép bạn rút ra kết luận về nơi các mỏ đang sử dụng các sự kiện như thế nào? " một trong tám ô vuông sau đây là một mỏ, và chính xác hai trong số tám ô vuông sau là một mỏ. " Làm điều này ở mỗi bước sẽ giúp bạn xác định vị trí của các mỏ, hoặc nhận ra rằng bạn phải đoán trước khi tiếp tục.

Hy vọng điều này sẽ hữu ích!

+0

Tôi đã triển khai một số kỹ thuật này trong các quy tắc, tôi đã triển khai phương thức nhất định: treatCell (i_CellToTreat), nó khớp với quy tắc tốt nhất và thực hiện nó. Tôi chỉ không biết trong đó thứ tự để điều trị các tế bào tiết lộ, và cái nào tiếp theo của họ để lựa chọn để điều trị, tại thời điểm nó chỉ lặp đi lặp lại trong suốt bộ sưu tập của các tế bào tiết lộ và đối xử với họ. Nó hoạt động khá tốt trên một bảng nhỏ, nhưng tôi cần phải thực hiện một số thuật toán tốt hơn. – Nikita

Các vấn đề liên quan