AI扫雷项目



我需要实现扫雷求解器。我已经开始实施基于规则的代理。我已经实施了某些规则。我有一个启发式函数,用于为正在处理的当前单元格(包含有关周围单元格的信息)选择最佳匹配规则。因此,对于每个选定的单元格,它可以决定 8 个环境单元格来打开它们、标记它们或不执行任何操作。我的意思是。目前,代理获得一些显示的细胞作为输入,并决定如何处理周围的细胞(目前,代理不知道如何决定处理哪个细胞)。

我的问题是,实施什么算法来决定治疗哪个细胞?

假设,对于第一个移动

,代理将显示一个角单元格(或其他一些,根据第一个移动的某个规则)。之后怎么办?

我知道我需要实现某种搜索。我知道许多搜索算法(BFS,DFS,A-STAR等),这不是问题,我只是不明白我如何在这里使用这些搜索。

我需要在人工智能的原则中实现它:一种现代方法。

BFS,DFS和A*在这里可能不合适。 如果你试图在你对世界有完全的了解时计划一个行动方案,这些算法是很好的。 在扫雷中,你没有这样的知识。

相反,我建议尝试使用本书第三部分的一些逻辑推理技术,特别是使用SAT或第10章中的技术。 这将使您使用诸如"以下八个方格中的一个是地雷,并且以下八个方格中的两个是地雷"之类的事实得出有关地雷的位置的结论。 在每一步执行此操作将帮助您确定地雷的位置,或者意识到在继续之前必须猜测。

希望这有帮助!

要使用《

人工智能:现代方法》的原理实现扫雷器求解器,您可以使用搜索算法与启发式算法相结合,就下一步要处理哪个细胞做出明智的决定。此问题的一种合适算法是 A 搜索算法*。A* 是一种最佳优先搜索算法,它同时使用到达节点的成本和达到目标的剩余成本估计值(启发式)来指导搜索。

以下是如何继续的概述:

状态表示:将扫雷棋板表示为具有隐藏单元格、显示单元格及其各自值(相邻地雷数量)的状态。您可以使用 2D 数组或基于图形的表示形式。

启发式函数

:开发一个启发式函数,用于估计扩展特定状态的成本或效用。启发式功能应引导搜索到最有希望揭示或标记的细胞。

A 搜索*

:实现 A* 搜索算法来探索扫雷板的状态空间。在每一步中,A* 根据到达该像元的已知成本和从该单元达到目标的估计成本(启发式)的组合来选择看起来最有希望的像元。

基于规则的代理:将 A* 搜索与基于规则的代理相结合。当 A* 搜索选择要处理的单元格时,应用现有的基于规则的代理的规则来决定是打开周围的单元格、将其标记为地雷还是不执行任何操作。

A* 搜索将指导求解者根据电路板的当前状态和估计的潜在结果做出明智的决策。然后,基于规则的代理将对所选单元及其周围环境进行操作,应用预定义的规则以继续探索电路板。

一开始,您可以从简单的启发式函数开始,例如考虑剩余隐藏像元的数量或相邻地雷的数量,但您可以随着时间的推移试验和改进启发式函数,以提高求解器的性能。

请记住,扫雷是NP完全的,这意味着有效地找到最佳解决方案具有挑战性。但是,与基本的随机移动或无知情的搜索算法相比,将 A* 搜索与适当的启发式搜索一起使用将显著提高求解器的成功机会。

请记住,基于规则的代理还可以利用在 A* 搜索期间收集的信息来做出有关细胞处理的更明智的决策,例如根据显示的细胞或检测到的地雷簇的模式调整规则。

最新更新