第五章人工智能教程以及答案。
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
图5-4子问题替换集合
图5-5各结点后继只含一个K连接弧
三 AO*算法
AO*算法要能处理与图,它应找出一条路径,即从该图的开始结点出 发到达代表解状态的一组结点。注意,可能需要到达多个解状态,因为 一与弧的每条臂要引至它自身的结点。
在扩展搜索一与或图时,每步需做三件事; (1)遍历图,从初始结点开始,顺沿当前最短路径,积累在此路径上但
未扩展的结点集。 (2)从这些未扩展结点中选择一个并扩展之。将其后继结点加入图中,
计算每一后继结点的f值(只需计算h,不管g)。图5-14 AO*算法的 运行。 (3)改变最新扩展结点的f估值,以反映由其后继结点提供的新信息。 将这种改变往后回传至整个图。在往后回攀图时,每到一结点就判断 其后继路径中哪一条最有希望,并将它标 记为目前可能解图的一 部分。这样可能引起目前最短路 的变动。
(i)从S中挑选一个结点,该结点在G中的子孙均不在S中出现(换句话说,保证 对于每一正在处理的结点,是在处理其任一祖先之前来处理该结点的),称 此结点为CURRENT并把它从S中去掉。
(ii)计算始于CURRENT的每条弧的耗费。每条弧的耗费等于在该弧末端每一结 点的h值之知和加上该弧身的耗费。从刚刚计算过的始于CURRENT的所有弧费 中选出极小耗费作为CURRENT的新h值。
一 问题归约描述
用一个三元组(S0,O,P)来描述
S0初始问题,即要求解的问题。 P是本原问题集,其中的每一个问题是不证明的,自然成 立的,如公理、已知事实等,或已证明过的。 O是操作算了集,通过一个操作算子把一个问题化成若干个 子问题。
二 与或图表示
用与或图可以方便地把问题归约为子问题替换集合。例如,假 设问题A既可通过问题C1与C2,也可通过问题C3,C4和C5,或者 由单独求解问题C6来解决,如图5-10所示。图中节点表示要 求解的问题或子问题。
O是操作算子集,利用它将一个状态转化为另一个状态
例5-1 梵塔问题
起源于印度传说的梵塔问题是:有三根针和n个大小不 同的盘片。开始盘片都是叠在第一根针上,从下到上按由 大到小的顺序串叠。要求每次只移动最顶上的一个盘片到 另一根针上,且大盘不得压在小盘上,直到把所有盘片移 到第三根针上。以三圆盘为例,如图5-1所示。
三 启发式搜索法
启发式搜索法的 基本思想是在搜 索路径的控制信 息中增加关于被 解问题的某些特 征,用于指导搜 索向最有希望到 达目标结点的方 向前进。
用启发式知识指 导排序可划分为 二种方式:局部 排序和全局排序。
第二节 问题归约法
思想
问题归约法是不同于状态空间法的另一种 问题描述和求解的方法。归约法把复杂的 问题变换为若干需要同时处理的较为简单 的子问题后再加以分别求解:只有当这些 子问题全部解决时,问题才算解决,问题 的解答由子问题的解答联合构成。
图5-1 三盘片梵塔
用状态(i, j, k)表示最大盘片C在第i根针上,盘片B在第j根 针上,最小盘片A在第k根针上。如果同一根针有二片以上的 盘片,则假设较大的在下面。 如(1,1,2)表示C和B在第1根针上,且B在C的上面,而A在 第2根针上。
用M(N,i, j)表示操作算子,即把盘片N从第I根针移到 j根针上。如M(A,1,2)实现的操作是把盘片A从第1根针 移到第2根针上,即使状态(1,1,1)变成状态(1,1
第五章 状态空间搜索
第五章 状态空间搜索
1 Contents 2
状态空间搜索 问题归约法
3
博弈树搜索
Click to add title in here
第一节 状态空间搜索
一 问题的状态空间表示
三元组(S,O,G)
1
S是状态集合,状态是某种事实的符号或数据,问题的初始状态是S 的非空子集 G也是S的非空子集,表示目标状态集。它可以是若干具体的状态, 也可以是对某些状态性质的描述
问题解决
问题状态以三元组(m, c, b) 表示,m为传教士在左岸或船上 的实际人数,c为野人在左岸或 船上的实际人数,b指示船是否 在左岸(1,0)
在船上人数不得超过载重限量 2个人,任何时刻(包括两岸、 船上)野人数目不得超过传教 士的安全约束
图5-3
二 状态空间的穷搜索法
广度优先搜索算法 深度优先搜索算法
,2)。而不允许接着进行M(B,1,2)操作,使状态(1,
1,2)变为状态(1,2,2),因为这违反了小片必须在大
片上的规则。
三盘片梵塔状态空间图
图5-2
例5-2 传教士和野人问题
问 题
设有三个传教士和三个野人来到河边, 打算乘一只船从右岸渡到左岸去。该船的 负载能力为两人。在任何时候,如果野人 人数超过传教士人数,那么野人就会把传 教士吃掉。他们怎样才能用这条船安全地 把所有人都渡过河去?
AO*算法描述
(1)设开始状态结点为INIT,G={INIT},计算h(INIT)。 (2)在INIT标为SOLVED(成功)之前,或INIT的h值变得大于FUTILITY(失
败)之前,重复下述过程: a.跟踪始于INIT的已带标记的弧,挑选出现在此路径上但未扩展的结 点之一扩展,称新挑选的结点NODE。 b.生成NODE的后继结点,则对不是NODE祖先的每一后继结点(称 SUCCESSOR)应做下述事项: (i)把SUCCESSOR加到图G中。 (ii)如果SUCCESSOR是一目标结点,那么将其标记为SOLVED,并 赋0作为SUCCES-SOR的h值。 (iii)若SUCCESSOR不是目标结点,则计算它的h值。 c.将最新发现的信息向图的上部回传,具体做法是:设S为一结点 集,它含有已作了SOLVED标记的结点,或包含其h值已经改变因而 需要回传至其父结点的那些结点。置S的初值为NODE。重复下述过 程,直至S为零。
(iii)把在上一步计算出来的带极小耗费的ቤተ መጻሕፍቲ ባይዱ标记出始于CURRENT的最佳路径。
(iv)如果穿过新的带标记弧与CURRENT连接的所有结点均标为SOLVEO,则把 CURRENT标为SOLVED。图5-16 逆向传播
(v)若CURRENT已标为SOLVED,或CURRENT的耗费刚才已经改变,那么应把其新 状态往回传至图。因此,要把CURRENT的所有祖先加到S 中。