繁体   English   中英

线性冲突启发式导致比A-Star for 15-Puzzle的曼哈顿启发式创建和探索更多节点吗?

[英]Can linear conflict heuristic cause more nodes to be created and explored than Manhattan heuristic with A-Star for 15-Puzzle?

我使用曼哈顿启发式和曼哈顿以及线性冲突启发式编码了15-puzzle的A-star算法。

我的问题是,对于某些特定的拼图实例,线性冲突会导致比单独使用a-Star的曼哈顿启发式创建和探索更多节点吗?

由于我尝试通过我的程序解决的大多数拼图实例需要<50 Moves使用曼哈顿的给定内存解决得体,并且解决更快将其与线性冲突组合作为启发式,需要> 50 Moves的实例导致程序运行无限期地挂断我的机器,但是对于一个需要42次移动的特定问题,我的程序在大约8秒内使用曼哈顿解决了但是使用线性冲突导致程序无限期地运行并挂断我的机器。

我一遍又一遍地浏览了我的代码,我在线性冲突或曼哈顿启发式代码中找不到错误。因此,这个一般性的问题要确保。

以下实例导致上述问题。

2,8,7,11                 //Takes 42 Moves to solve
5,0,4,15
13,9,14,3
1,10,6,12

曼哈顿启发式和具有线性冲突的曼哈顿都是可接受的启发式算法 ,即他们永远不会过高估计达到目标的努力。 此外,线性冲突的曼哈顿比简单的曼哈顿更有见地。

我们说如果每个节点n的h2(n)> = h1(n),则启发式h2占主导地位,或者比启发式h1更明智 在这种情况下, 使用h2作为启发式的A *将始终扩展由h1扩展的节点的子集 回答你的问题,A *与曼哈顿和线性冲突启发式无法扩展更多的节点 ,事实上, 无法扩展任何未被A *扩展的节点,简单的曼哈顿启发式 ,即由A *扩展的节点集曼哈顿线性冲突是由普通曼哈顿A *扩展的节点的子集

尝试使用调试器检查您的代码并找到这种情况,这可能会帮助您找到实现中的错误。

如果有更正式的答案,我建议您仔细阅读这篇文章

关于您的机器问题在困难问题中遇到困难,A *必须存储所有已关闭和打开的节点,从而导致内存的指数浪费。 要解决15-puzzle问题,需要进行迭代深化(IDA *),其中执行时间和内存消耗更好。

然而,正如FrankS101所述,使用具有线性冲突的曼哈顿距离启发式不可能扩展比仅仅使用manhttan距离更多的节点,它可能需要更多时间。 这是因为计算具有线性冲突的曼哈顿距离将使算法在每个节点“花费”更多时间,因为计算该启发式需要更多时间。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM