我有简单的图表,我需要找到此图表的启发式费用。
图表是(矩阵表示):
0 1 2 0 0 0 0
1 0 0 3 3 2 0
3 0 0 2 0 0 0
0 3 1 0 1 0 0
0 3 0 1 0 6 0
0 2 0 0 6 0 2
0 0 0 0 0 2 0
图片:
括号中的值表示当前目标顶点的顶点的启发式成本。
绿色顶点开始,红色顶点是目标。
我创建了这个遗传成本矩阵:
0 2 6 3 1 9 5
9 0 2 4 6 4 1
1 3 0 5 2 9 4
3 1 5 0 1 7 8
0 6 2 1 0 10 14
2 1 6 3 7 0 5
1 4 3 2 1 3 0
我必须解释一下。该矩阵表示:例如,目标顶点是7;我们在矩阵中找到第7行;第1列中的值表示从1个顶点到7个顶点的启发式成本(7为目标); 5nd col中的值意味着从5个顶点到7个顶点的heurisitc成本(7是目标);如果5是目标,我们将使用5行等...
这种基本没有任何成本的成本。我不知道如何找到良好的启发式成本。这是个问题。
总结:
首先,我的算法找到了错误的路径(因为可能是错误的启发式)。它发现1-3-4-5(长度5),但最好是1-2-5(长度4)。
另外,老师说,我的启发式成本阻止算法找到好的路径,但不能帮助他。我将他所说的翻译成英文有问题,但他说有些想法:“你的启发式一定不能高估最佳路径”。这是什么意思?
所以问题是:如何在我的案例中找到良好的启发式成本?
答案 0 :(得分:1)
我将把我的评论作为答案。
首先,请注意"过高估计最佳路径"表示从某个节点v到目标的最短路径长度为k
,但h(v)=k'
为k'>k
。在这种情况下,启发式过高估计了路径的长度。对一个或多个节点执行此操作的启发式方法称为“#34;不允许”#34;并且A *无法保证找到具有此类启发式的最短路径。
An admissible heuristic function(永不过高估计)保证为A *提供最佳路径。
对于所有v
,最简单的可允许启发式是h(v)= 0。请注意,在这种情况下,A *实际上表现得像Dijsktra's Algorithm(基本上是一个统一的A *)。
您可以找到更多信息性启发式算法,一个示例是首先预处理图形并找到从每个节点到目标的最短未加权路径。这可以通过BFS有效地完成。将某个v
到目标的未加权距离表示为uwd(v)
。
现在,您可以创建一个uwd(v) * MIN_WEIGHT
的启发式算法,其中MIN_WEIGHT
是图表中最小的边缘权重。