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。
或者我不对吗?
在我的情况下什么是启发式函数(在图表上找到最佳路径)?
答案 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)
到目标的实际距离。
请注意,例如曼哈顿距离启发式迷宫是可以接受的。
希望能解决你的困惑。