留言 | 关于 | 联系
基础数学 语言相关算法实现 其它知识
返回首页
当前位置: 首页 > 程序设计 > 算法实现 > 人工智能学习(1)--回溯策略

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

时间:2010-03-26 20:50来源:网络 作者:iampolaris 点击:
人工智能学习之回溯策略,讲述了用递归算法描述回溯控制下的产生式系统。

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

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

令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)是至关重要的。

顶一下
(6)
85.7%
踩一下
(1)
14.3%
发表评论
评价:
验证码:点击我更换图片
推荐内容