【发布时间】:2012-02-26 18:59:54
【问题描述】:
我正在尝试为以下问题找到最佳解决方案
- 每个节点内表示的数字表示为
(x,y)。 - 节点的相邻节点始终具有
y值,即(当前节点y 值+1)。 - 当我们从一个节点转到其相邻节点时,
x值的更改成本为 1 - 如果
x的值没有变化,则从节点到其相邻节点没有成本。 - 没有两个具有相同
y值的节点被认为是相邻的。
最优解是成本最低的,我正在考虑使用 A* 寻路算法来寻找最优解。
我的问题,对于这类问题,A* 是一个不错的选择吗,或者我应该看看其他任何算法,而且我正在考虑使用递归方法来计算启发式成本,但我觉得它不是个好主意。
这是我认为启发式函数将是这样的示例
- 节点的启发式权重 = Min(其子节点的启发式权重)
- 子节点也是如此。
但据我所知,启发式是一个近似值,所以我认为就启发式函数而言,我的方向是错误的
【问题讨论】:
-
启发式必须是可接受的(否则它不会是A*,而只是A),而不仅仅是“近似”。它还应该快速计算,否则你失去的比你得到的多。最重要的是,它应该是“有用的”——如果所有成本都是非负的,那么恒定的零启发式将起作用,但随后 A* 会降级为 BFS。
-
那么你对我目前的启发式有什么看法
-
嗯,你可以在 O(n) 中完成(只发生一次),这不是非常糟糕,但它确实意味着接触每个节点(并记住所有结果)所以 A* 种失去优势。毕竟,关键是 not 探索整个节点空间(所以它是 not O(1) 摊销的)。也正如所写的那样,它只有 0 或 1,并不完全“有用”,也许你错过了 +1?
标签: algorithm graph-algorithm path-finding a-star heuristics