昨天看人工智能,几页A*算法的证明过程看了我几个小时,结果后来几句话就可以很直观的证明出来了.
首先是在一个有穷图中,弧必然要>某个正数,其次,对于节点n的估价函数h^(n)必须<=实际的估价函数h(n),
这样就保证了A*的可接纳性,也就是一定可以找到一条最优路径
其次,假设s2是s1的后继,则必须保证一致性(单调的性质),也就是g^(s2) - g^(s1) >= h^(s1) - h^(s2),也就
是F^(s2) >= F^(s1),一致性使得A*在每扩展节点N都可以找到达到N的一条最优秀路径。
对于一致性使得A*在扩展节点N的时候可以找到N的最优秀路径,我的直观的证明是这样的:
1)由于每次A*是取F^(x)最小的点,所以A*总是沿着已经扩展了的F^(x)点集的边缘向外扩展
2) 由于一致性,保证了F^(s2) >= F^(s1),所以在扩展F^(s2)之前,所有可能是s2父节点都将会被扩展(这是因
为s2父节点的F^肯定不大于s2的F^),按照这个推理,直到最顶层的n0(开始节点),他本身就是最小代价路
径了,于是s2所计算的F^自然会是最小值,而且由于可接纳性保证了可以找到最优(最小代价)路径,当扩展
s2的时候,就自然等于找到了s2的最优(最小代价)路径。当然可能有人会说,那如果s2的父亲节点的F^和s2
一样,而却先扩展了s2呢?对于这样的情况,由于一致性,s2父亲节点扩展的节点肯定 >= 他本身,所以s2依
然是最优的。
上面的过程非常不规范,谈不上证明吧,但是对于理解却很有帮助,因为真的比书上的证明过程直观得多了,
呵呵
首先是在一个有穷图中,弧必然要>某个正数,其次,对于节点n的估价函数h^(n)必须<=实际的估价函数h(n),
这样就保证了A*的可接纳性,也就是一定可以找到一条最优路径
其次,假设s2是s1的后继,则必须保证一致性(单调的性质),也就是g^(s2) - g^(s1) >= h^(s1) - h^(s2),也就
是F^(s2) >= F^(s1),一致性使得A*在每扩展节点N都可以找到达到N的一条最优秀路径。
对于一致性使得A*在扩展节点N的时候可以找到N的最优秀路径,我的直观的证明是这样的:
1)由于每次A*是取F^(x)最小的点,所以A*总是沿着已经扩展了的F^(x)点集的边缘向外扩展
2) 由于一致性,保证了F^(s2) >= F^(s1),所以在扩展F^(s2)之前,所有可能是s2父节点都将会被扩展(这是因
为s2父节点的F^肯定不大于s2的F^),按照这个推理,直到最顶层的n0(开始节点),他本身就是最小代价路
径了,于是s2所计算的F^自然会是最小值,而且由于可接纳性保证了可以找到最优(最小代价)路径,当扩展
s2的时候,就自然等于找到了s2的最优(最小代价)路径。当然可能有人会说,那如果s2的父亲节点的F^和s2
一样,而却先扩展了s2呢?对于这样的情况,由于一致性,s2父亲节点扩展的节点肯定 >= 他本身,所以s2依
然是最优的。
上面的过程非常不规范,谈不上证明吧,但是对于理解却很有帮助,因为真的比书上的证明过程直观得多了,
呵呵