第 1 章 搜索问题

传教士和野人问题
有3个传教士和3个野人来到河边准备渡河,河岸有一条船,每次至多可供2人乘渡。问传教士为了安全起见,应如何规划摆渡方案,使得任何时刻,在河的两岸以及船上的野人数目总是不超过传教士的数目(但允许在河的某一岸只有野人而没有传教士)?

搜索策略选取规则的方式
  • 无信息引导的搜索策略:不考虑给定问题所具有的特定知识,系统根据事先确定好的某种固定排序,依次调用规则或随机调用规则,属于盲目搜索的方式。
  • 有信息引导的搜索策略:考虑问题领域可应用的知识,动态地确定规则的排序,优先调用较合适的规则使用,称为启发式搜索策略。

回溯策略

将规则给出一个固定的排序,在搜索时,对当前状态依次检测每一条规则,在当前状态未使用过的规则中找到第一条可应用规则,应用于当前状态,得到的新状态重新设置为当前状态,并重复以上搜索。如果当前状态无规则可用,或者所有规则已经被试探过仍未找到问题的解,则将当前状态的前一个状态设置为当前状态。重复以上搜索,直到找到问题的解,或者试探了所有可能后仍找不到问题的解为止。

用递归法实现回溯策略
  • 如果找到目标,结束;
  • 如果状态不合法,则回溯;
  • 计算可应用规则集,依某种原则(任意排序或启发式准则)排序后赋给某个变量;
  • 规则用完未找到目标,回溯;
  • 取第一条可应用规则;
  • 删去第一条规则,减少可应用规则表的长度;
  • 调用规则作用于当前状态,生成新状态;
  • 对新状态递归调用本过程;
  • 递归调用失败,则转移调用另一规则进行测试;
  • 过程返回解路径规则表;
改进后的递归算法

防止环路和节点过深

  • 设置当前状态;
  • 检测当前状态是否存在状态表中,若存在,表示有环路,回溯;
  • 找到目标,返回
  • 状态不合法,返回
  • 计算状态表的长度,即搜索的深度,若大于给定的值,回溯;
  • 计算可应用规则集,依某种原则排序后赋给某个变量;
  • 循环规则集,如果规则用完未找到目标,回溯;
  • 取第一条可应用规则;
  • 删除第一条规则,减少可应用规则表的长度;
  • 将规则应用于当前状态,生成新状态;
  • 将新状态加入状态表
  • 递归调用本过程;
  • 递归调用失败,则转移调用另一规则进行测试;
  • 过程返回解路径规则表;

图搜索策略

将所有搜索过的状态都记录下来的搜索方法称为“图搜索算法”。

  • 结点深度:根结点的深度为0,其他结点的深度规定为父结点深度加1,即 dn+1 = dn + 1;
  • 路径:设一结点序列为(n0,n1,···,ni,···,nk),对 i = 1,2,···,k,若任一结点ni-1都具有一个后继结点ni,则该结点序列称为从结点n0到结点nk长度为k的一条路径;
  • 路径耗散值:令C(ni,nj)为结点ni到nj这段路径(或弧线)的耗散值,一条路径的耗散值等于连接这条路径各结点间所有弧线耗散值的总和;
  • 扩展一个结点:后继结点操作符(相当于可应用规则)作用到结点(对应于某一状态描述)上,生成出其所有后继节点(新状态),并出连接弧线的耗散值(相当于使用规则的代价),这个过程叫做扩展一个结点。
图搜索算法

你可能感兴趣的:(第 1 章 搜索问题)