下面的与或图中 s 为起始节点,s可以到达n1、n2,n1连接n3、n4,n2连接n4、n5,n3连接n6、n8,n6连接n8,n7连接n4、n5、n9、n10,其中n8、n9、n10为终节点,节点旁标的是启发函数 h ( n )的值。设每条边的耗散值为1,试画出用 AO 算法求解该问题时每一步的搜索图 G ,并在其 中标明每个节点的 q 值(或 h ( s , n )值)、有标记的连接符和 SOLVED 标记。(要写出步骤)
时间: 2024-02-03 19:12:32 浏览: 139
首先,我们需要初始化起始节点s,设置其q值为0,连接符为起点符号‘^’,并将其标记为SOLVED。
接下来,我们选取q值最小的节点n1作为当前节点,将其标记为SOLVED,并考虑其相邻的节点n3和n4。计算它们的q值,并将它们标记为n1的连接符号‘->’。
n3的q值为:q(n1) + 1 + h(n3) = 0 + 1 + 6 = 7
n4的q值为:q(n1) + 1 + h(n4) = 0 + 1 + 4 = 5
将它们加入到开放列表中,并按q值从小到大排序。
此时开放列表为:
n4(5)->n3(7)
我们取出q值最小的节点n4作为当前节点,将其标记为SOLVED,并考虑其相邻的节点n5和n7。计算它们的q值,并将它们标记为n4的连接符号‘->’。
n5的q值为:q(n4) + 1 + h(n5) = 5 + 1 + 2 = 8
n7的q值为:q(n4) + 1 + h(n7) = 5 + 1 + 8 = 14
将它们加入到开放列表中,并按q值从小到大排序。
此时开放列表为:
n5(8)->n3(7)->n7(14)
我们取出q值最小的节点n5作为当前节点,将其标记为SOLVED,并考虑其相邻的节点n4和n9。由于n4已经标记为SOLVED,因此我们只计算n9的q值,并将其标记为n5的连接符号‘->’。
n9的q值为:q(n5) + 1 + h(n9) = 8 + 1 + 0 = 9
将其加入到开放列表中,并按q值从小到大排序。
此时开放列表为:
n3(7)->n9(9)->n7(14)
我们取出q值最小的节点n3作为当前节点,将其标记为SOLVED,并考虑其相邻的节点n6和n8。计算它们的q值,并将它们标记为n3的连接符号‘->’。
n6的q值为:q(n3) + 1 + h(n6) = 7 + 1 + 3 = 11
n8的q值为:q(n3) + 1 + h(n8) = 7 + 1 + 0 = 8
将它们加入到开放列表中,并按q值从小到大排序。
此时开放列表为:
n8(8)->n9(9)->n6(11)->n7(14)
我们取出q值最小的节点n8作为当前节点,将其标记为SOLVED,并发现它是终节点之一。因此,我们找到了一条从起始节点s到终节点n8的最短路径,其长度为8。
最终搜索图G如下所示:(其中,S表示起始节点,F表示终节点)
```
0^
|
s(0)
/ \
n1(1) n2(3)
| |
n3(7) n4(5)
|\ /| \
n6(11)n5(8)n7(14)
| |
n8(8) n9(9)
|
F(10)
```
注:由于AO算法是基于A*算法的,因此它的搜索图也是一个有向无环图。在搜索时,不会发生回溯操作。
阅读全文