人工智能学习(1)--回溯策略:

王朝other·作者佚名  2006-01-30
窄屏简体版  字體: |||超大  

回溯策略:

通过对回溯策略的学习后,可以看出求解过程种呈现出递归过程的性质,因此用递归算法描述回溯控制下的产生式系统能抓住特点,简单有效.

1..实现回溯策略的有效方式是应用的递归过程去支持搜索和回溯。

令PATH、SNL、n、n' 为局部变量:

· PATH--节点列表,指示解答路径;

· SNL--当前节点扩展出的子节点列表;

MOVE-FIRST(SNL)--把SNL表首的节点移出,作为下一次要加以扩展的节点;

· n、n'--分别指示当前考察和下一次考察的节点。

该递归过程的算法就取名为BACKTRACK(n),参数n为当前被扩展的节点,算法的初次调用式是BACKTRACK(s),s即为初始状态节点。算法的步骤如下:

(1) 若n是目标状态节点,则算法的本次调用成功结束,返回空表;

(2) 若n是失败状态,则算法的本次调用失败结束,返回'FAIL';

(3) 扩展节点n,将生成的子节点置于列表SNL,并按评价函数f(k) = h(k)的值从小到大排序(k指示子节点);

(4) 若SNL为空,则算法的本次调用失败结束,返回'FAIL';

(5) n'= MOVE-FIRST(SNL);

(6) PATH = BACKTRACK(n');

(7) 若PATH ='FAIL', 返回到语句(4);

(8) 将n'加到PATH表首,算法的本次调用成功结束,返回PATH。

该递归回溯算法中,失败状态通常意指三种情况:(1)不合法状态(如传教士和野人问题中所述的那样),(2)旧状态重现(如八数码游戏中某一棋盘布局的重现,会导致搜索算法死循环),(3)状态节点深度超过预定限度(例如八数码游戏中,指示解答路径不超过6步)。失败状态实际上定义了搜索过程回溯的条件;另一种回溯条件是搜索进入"死胡同",由该算法的第(4)句定义。由于回溯是递归算法,解答路径的生成是从算法到达目标状态后逆向进行的,首先产生空表,然后每回到算法的上一次调用就在表首加入节点n',直到顶层调用返回不包含初始状态节点s的解答路径。

影响回溯算法效率的关键因素是回溯次数。鉴于回溯是搜索到失败状态时的一种弥补行为,只要能准确地选择下一步搜索考察的节点,就能大幅度减少甚至避免回溯。所以,设计好的启发式函数h(n)是至关重要的。

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
 
© 2005- 王朝網路 版權所有 導航