A *算法和启发式函数。在图上找到最佳路径。

时间:2014-04-10 22:09:23

标签: algorithm graph language-agnostic heuristics

Wiki说,启发式函数是估计当前节点到目标节点的距离。

但此代码中没有函数heuristic_cost_estimate的说明:link to wikiperida

AM我是对的?... 例如,我有3个顶点的图形。我必须从每个顶点到目标顶点有3个启发式,我设置了顶点设置?

矩阵(重量):

0 5 2
1 0 3
1 2 0

每个顶点的启发式函数(值表示从当前顶点到目标的启发式成本,例如从2到目标的成本将为3):

5 3 4

这是奇怪的假设,不是吗?我不知道顶点会是什么目标。如何在此步骤中设置启发式功能?

OR?... 我有3个顶点和9个启发式。

图表矩阵:

0 5 2
1 0 3
1 2 0

启发式费用:

0 5 10
5 0 10
3 8 0

这意味着这一点。如果3是目标,则从1到目标的启发式成本将为3.如果2是目标,则从1到2(目标)的成本将为5。

或者我不对吗?

在我的情况下什么是启发式函数(在图表上找到最佳路径)?

1 个答案:

答案 0 :(得分:2)

启发式函数是一个函数 h:V->R ,其中V是您的顶点,R是实数。换句话说 - 启发式函数为每个顶点提供一个值 - 估计它与它的接近程度'到目标。

不能总是使用启发式功能,您需要在图表上提供一些信息才能使用它们。

例如,如果要解决迷宫,则矩阵中的每个单元格(不是墙)都是顶点,相邻单元格之间的可能移动表示边缘。
在这个例子中 - 启发式函数可以是manhattan distances - 在给定目标单元t的情况下 - 启发式是h(v) = |t.x - v.x| + |t.y - v.y|

如果你不知道你的目标有多接近 - 你不能使用任何启发式功能,你没有信息。 (事实上​​,你可以使用的唯一启发式方法是非信息性的,h(v) = 0每个v - 但这是毫无意义的。)

另请注意,为了使A *在您的启发式函数中最佳(让它为h),您需要它是可接受的 - 这意味着对于每个顶点v:{{ 1}},其中h(v) <= d(v,target)是从d(v,target)到目标的实际距离。
请注意,例如曼哈顿距离启发式迷宫是可以接受的。

希望能解决你的困惑。