多种方法解决八数码难题
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Heuristic Search
问题重述
Problem Retelling
八数码问题描述
3×3九宫棋盘,放置数码为1 -8的8个棋牌,剩下一个空格,只能通过棋牌向空格的移动 来改变棋盘的布局。 要求:根据给定初始布局(即初始状态)和目标布局(即目标状态),如何移动棋牌才能从 初始布局到达目标布局,找到合法的走步序列。
八数码难题(8-puzzle problem)
2
8
3
1
2
3
1
7
6
4
5
8
7 6
4
5
(初始状态)
(目标状态)
宽度优先
Width First
宽度优先搜索算法解决八数码难题
它是从根节点(起始节点)开始,按层进行搜索,也就是按 层来扩展节点。所谓按层扩展,就是前一层的节点扩展完毕后才 进行下一层节点的扩展,直到得到目标节点为止。 这种搜索方式的优点是,只要存在有任何解答的话,它能保 证最终找到由起始节点到目标节点的最短路径的解,但它的缺点 是往往搜索过程很长。
s
宽度优先搜索
2 2 8 3 1 4 7 6 5 5 2 8 3 1 6 4 7 5
2 3 1 8 4 7 6 5
1
1 2 3 8 4 7 6 5 4 2 3 1 8 4 7 6 5 9 2 3 4 1 8 7 6 5 (目标状态)
2 3 1 8 4 7 6 5
7 2 8 3 1 4 7 6 5
3
3 4 5
3 5 4 5
3 4 5 6
L(5) 1 2 3 7 8 4 7 6 5
M(7) 1 2 3 7 8 4 6 5
八数码难题的有序搜索树
启发式搜索算法解决八数码难题 A*搜索算法
在图搜索过程中,如果第8步的重排OPEN表是依据f(n)=g(n)+h(n)进行的,则称 该过程为A算法。在A算法中,如果对所有的n存在h(n)≤h*(n),则称h(n)为h*(n)的下 界,它表示某种偏于保守的估计。采用h*(n)的下界h(n)为启发函数的A算法,称为 A*算法。当h=0时,A*算法就变为有序搜索算法。 在A算法中,如果满足条件: (1): g(n)是对g*(n)的估计,且g(n)>0; (2) :h(n)是h*(n)的下界,即对任意节点n均有0≤h(n)≤h*(n),则A算法称为A*算 法。
13 1 2 3 8 4 7 6 5
2 8 3 7 1 4 6 5 2 8 3 7 1 4 6 5
11 2 8 3 1 4 5 7 6 2 8 3 1 4 5 7 6
1 2 3 7 8 4 6 5
1 2 3 8 4 7 6 5
深度优先搜索算法代码演示
深度优先搜索的性质
• 一般不能保证找到最优解 • 当深度限制不合理时,可能找不到解,可以将算法改为 可变深度限制 • 最坏情况时,搜索空间等同于穷举 • 与回溯法的差别:图搜索 • 是一个通用的与问题无关的方法
h(n)=P(n)的搜索树
H 2 3 1 8 4 7 6 5
A*搜索算法代码演示
在八数码难题中, 令估价函数 f(n)=d(n)+p(n) ,启发函数h(n)=p(n),p(n)为不在 位的棋子与其目标位置的距离之和,则有p(n)≤h*(n),满足A*算法的限制条件。 w(n)表示不在位的棋子数,不够贴切,错误选用节点加以扩展。 更接近于h*(n)的 h(n),其值是节点n与目标状态节点相比较,每个错位棋子在假设不受阻拦的情况 下,移动到目标状态相应位置所需走步的总和。(n)比w(n)更接近于h*(n),因为p(n) 不仅考虑了错位因素,还考虑了错位的距离(移动次数)。 说明h值越大,启发功 能越强, 搜索效率越高.特别地: (1)h(n)=h*(n) 搜索仅沿最佳路径进行, 效率最高. (2)h(n)=0 无启发信息, 盲目搜索, 效率低. (3)h(n)>h*(n)
谢谢观赏
深度优先搜索算法解决八数码难题
它是从根节点开始,首先扩展最新产生的节点,即沿着搜索树的深度发展下 去,一直到没有后继结点处时再返回,换一条路径走下去。就是在搜索树的每一层 始终先只扩展一个子节点,不断地向纵深前进直到不能再前进(到达叶子节点或受 到深度限制)时,才从当前节点返回到上一级节点,沿另一方向又继续前进。这种 方法的搜索树是从树根开始一枝一枝逐渐形成的。 由于一个有解的问题树可能含有无穷分枝,深度优先搜索如果误入无穷分枝 (即深度无限),则不可能找到目标节点。为了避免这种情况的出现,在实施这一 方法时,定出一个深度界限,在搜索达到这一深度界限而且尚未找到目标时,即返 回重找,所以,深度优先搜索策略是不完备的。另外,应用此策略得到的解不一定 是最佳解(最短路径)。
W=3 P=5 f=7
W=5 P=6 f=7
S 1 初始 2 8 3 1 6 4 7 5
h*=5,g*=0 W=4 P=5 f=5
h*--从节点n到目标节点g 的最短路径耗散值。 g*--从初始节点s到节点n 的最短路径耗散值。 W—不在位将牌数之和。 P—每个不在位将牌移动 到目标状态相应位置所 需走步的总和。
开始 读入棋局初始状态
A*算法框图
是否可解?
是 初始状态加入OPEN表
否
在OPEN表中找到评价值最小的节点,作为当前节点 是 是目标节点
否 扩展新状态,把不重复的新状态加入OPEN表中 当前节点从OPEN表移除 输出结果 结束
1 2 3 8 4 7 6 5 (目标状态)
黑色数字表示不 在位的将牌数 A 2 8 3 1 6 4 7 5 D 2 8 3 1 4 7 6 5
开始
有序搜索算法框图
把S放入OPEN表,计算 估价函数f(s)
OPEN表为空?
是
失败
否
选取OPEN表中f值最小的节点i放入CLOSE表
i为目标节点吗
是
失败
否 扩展i,得后继结点j,计算f(j),提供返回节点i的指 针,利用f(j)对OPEN表重新排序,调整亲子关系及指 针
1 2 3 8 4 7 6 5 (目标状态)
八数码难题
汇报时间:2018年10月 汇报人:马玥 PPT制作者:何帅帅 代码编辑调试者:尹迅、马玥
01 问题重述 Problem Retelling
目 录
CONTENTS
02 问题分析 Problem Analysis
03 宽度优先 Width First
04 深度优先 Depth First
05 启发式搜索
黑色数字表示不 在位的将牌数 A(6) 2 8 3 1 6 4 7 5 D(5) 2 8 3 3 1 4 7 6 5 G(6) 8 3 2 1 4 7 6 5 H(7) 2 8 3 7 1 4 6 5
S(4) 初始 2 8 3 1 1 6 4 7 5 B(4) 2 2 8 3 1 4 7 6 5 E(5) 2 1 8 7 6 I(5) 2 1 8 7 6 K(5) 1 2 8 7 6 4 C(6) 2 8 3 1 6 4 7 5 F(6) 2 8 3 1 4 7 6 5 J(7) 2 3 1 8 4 7 6 5
启发式搜索
Heuristic Search
启发式搜索算法解决八数码难题 有序搜索(A算法)
评价函数:f(n) = g(n) + h(n) (其中n是被评价的节点) g*(n) :表示从初始节点s到节点n 的最短路径的耗散值。 h*(n):表示从节点n到目标节点g的最短路径的耗散值。 f*(n) =g*(n)+h*(n):表示从初始节点s经过节点n到目标节点g的最短路径的耗散值。 而f(n)、g(n)和h(n)则分别表示是对f*(n)、g*(n)和h*(n)三个函数值的估计值,是一种 预测。 A算法就是利用这种预测,来达到有效搜索的目的。它每次按照f(n)值的大小对 OPEN表中的元素进行排序,f值小的节点放在前面,而f值的大的节点则被放在 OPEN表的后面,这样每次扩展节点时,总是选择当前f值最小的节点来优先扩展。
2 3 1 8 4 7 6 5 2 2 8 3 1 4 7 6 5 12 2 3 1 8 4 7 6 5
1
1 2 3 8 4 7 6 5 2 3 1 8 4 7 6 5 (目标状态)
6 2 8 3 1 4 7 6 5 8
9 2 8 3 1 4 7 6 5 10 2 8 1 4 3 7 6 5 2 8 1 4 3 7 6 5
…
4
2 8 3 1 6 4 7 5 2 8 3 6 4 1 7 5
…
1 2 3 7 8 4 6 5
1 2 3 8 4 7 6 5
…
ቤተ መጻሕፍቲ ባይዱ
…
设深度界限dm=4
3 2 8 3 1 6 4 7 5 4 2 8 3 1 6 4 7 5 2 8 3 6 4 1 7 5 5 2 8 3 1 6 4 7 5 2 8 3 1 6 7 5 4 7 8 3 2 1 4 7 6 5 8 3 2 1 4 7 6 5
6 2 8 3 1 4 7 6 5
8 1 2 3 8 4 7 6 5
10 2 8 3 1 6 4 7 5
11 2 8 3 1 6 4 7 5
12 2 8 3 1 4 5 7 6
13 2 8 1 4 3 7 6 5
14
15
8 3 2 1 4 7 6 5
2 8 3 7 1 4 6 5
16 1 2 3 7 8 4 6 5
2 B C 2 8 3 h*=4,g*=1 2 8 3 1 4 W=3 1 6 4 P=4 7 6 5 f=5 7 5 E 3 2 3 1 8 4 7 6 5
h*=3,g*=2 W=3 P=3 f=5
W=5 P=6 f=7
F 2 8 3 1 4 7 6 5
W=4 P=5 f=7
G h*=2,g*=3
2 3 4 W=4 W=2 P=4 1 8 4 P=2 f=7 7 6 5 f=5 I 5 1 2 3 h*=1,g*=4 8 4 W=1 P=1 7 6 5 f=5 K J 1 2 3 h*=0,g*=5 1 2 3 W=2 8 4 W=0 7 8 4 P=2 P=0 7 6 5 f=5 6 5 f=7
17 1 2 3 8 4 7 6 5
从图中得,解的路径是S->3->8->17
宽度优先搜索算法代码演示
宽度优先搜索的性质
• 当问题有解时,一定能找到解 • 当问题为单位耗散值,且问题有解时,一定能找到最优 解 • 方法与问题无关,具有通用性 • 效率较低 • 属于图搜索方法
深度优先
Depth First
深度优先搜索算法解决八数码难题
1 2 3
8
7 6
4
5 2 2 8 3 1 4 7 6 5 2 8 3 1 4 7 6 5 2 8 3 1 4 7 6 5
2 3 1 8 4 7 6 5 2 3 1 8 4 7 6 5
1
(目标状态) 3 2 8 3 1 6 4 7 5 2 8 3 1 6 4 7 5
2 3 1 8 4 7 6 5 1 2 3 8 4 7 6 5
问题重述
Problem Retelling
八数码问题描述
3×3九宫棋盘,放置数码为1 -8的8个棋牌,剩下一个空格,只能通过棋牌向空格的移动 来改变棋盘的布局。 要求:根据给定初始布局(即初始状态)和目标布局(即目标状态),如何移动棋牌才能从 初始布局到达目标布局,找到合法的走步序列。
八数码难题(8-puzzle problem)
2
8
3
1
2
3
1
7
6
4
5
8
7 6
4
5
(初始状态)
(目标状态)
宽度优先
Width First
宽度优先搜索算法解决八数码难题
它是从根节点(起始节点)开始,按层进行搜索,也就是按 层来扩展节点。所谓按层扩展,就是前一层的节点扩展完毕后才 进行下一层节点的扩展,直到得到目标节点为止。 这种搜索方式的优点是,只要存在有任何解答的话,它能保 证最终找到由起始节点到目标节点的最短路径的解,但它的缺点 是往往搜索过程很长。
s
宽度优先搜索
2 2 8 3 1 4 7 6 5 5 2 8 3 1 6 4 7 5
2 3 1 8 4 7 6 5
1
1 2 3 8 4 7 6 5 4 2 3 1 8 4 7 6 5 9 2 3 4 1 8 7 6 5 (目标状态)
2 3 1 8 4 7 6 5
7 2 8 3 1 4 7 6 5
3
3 4 5
3 5 4 5
3 4 5 6
L(5) 1 2 3 7 8 4 7 6 5
M(7) 1 2 3 7 8 4 6 5
八数码难题的有序搜索树
启发式搜索算法解决八数码难题 A*搜索算法
在图搜索过程中,如果第8步的重排OPEN表是依据f(n)=g(n)+h(n)进行的,则称 该过程为A算法。在A算法中,如果对所有的n存在h(n)≤h*(n),则称h(n)为h*(n)的下 界,它表示某种偏于保守的估计。采用h*(n)的下界h(n)为启发函数的A算法,称为 A*算法。当h=0时,A*算法就变为有序搜索算法。 在A算法中,如果满足条件: (1): g(n)是对g*(n)的估计,且g(n)>0; (2) :h(n)是h*(n)的下界,即对任意节点n均有0≤h(n)≤h*(n),则A算法称为A*算 法。
13 1 2 3 8 4 7 6 5
2 8 3 7 1 4 6 5 2 8 3 7 1 4 6 5
11 2 8 3 1 4 5 7 6 2 8 3 1 4 5 7 6
1 2 3 7 8 4 6 5
1 2 3 8 4 7 6 5
深度优先搜索算法代码演示
深度优先搜索的性质
• 一般不能保证找到最优解 • 当深度限制不合理时,可能找不到解,可以将算法改为 可变深度限制 • 最坏情况时,搜索空间等同于穷举 • 与回溯法的差别:图搜索 • 是一个通用的与问题无关的方法
h(n)=P(n)的搜索树
H 2 3 1 8 4 7 6 5
A*搜索算法代码演示
在八数码难题中, 令估价函数 f(n)=d(n)+p(n) ,启发函数h(n)=p(n),p(n)为不在 位的棋子与其目标位置的距离之和,则有p(n)≤h*(n),满足A*算法的限制条件。 w(n)表示不在位的棋子数,不够贴切,错误选用节点加以扩展。 更接近于h*(n)的 h(n),其值是节点n与目标状态节点相比较,每个错位棋子在假设不受阻拦的情况 下,移动到目标状态相应位置所需走步的总和。(n)比w(n)更接近于h*(n),因为p(n) 不仅考虑了错位因素,还考虑了错位的距离(移动次数)。 说明h值越大,启发功 能越强, 搜索效率越高.特别地: (1)h(n)=h*(n) 搜索仅沿最佳路径进行, 效率最高. (2)h(n)=0 无启发信息, 盲目搜索, 效率低. (3)h(n)>h*(n)
谢谢观赏
深度优先搜索算法解决八数码难题
它是从根节点开始,首先扩展最新产生的节点,即沿着搜索树的深度发展下 去,一直到没有后继结点处时再返回,换一条路径走下去。就是在搜索树的每一层 始终先只扩展一个子节点,不断地向纵深前进直到不能再前进(到达叶子节点或受 到深度限制)时,才从当前节点返回到上一级节点,沿另一方向又继续前进。这种 方法的搜索树是从树根开始一枝一枝逐渐形成的。 由于一个有解的问题树可能含有无穷分枝,深度优先搜索如果误入无穷分枝 (即深度无限),则不可能找到目标节点。为了避免这种情况的出现,在实施这一 方法时,定出一个深度界限,在搜索达到这一深度界限而且尚未找到目标时,即返 回重找,所以,深度优先搜索策略是不完备的。另外,应用此策略得到的解不一定 是最佳解(最短路径)。
W=3 P=5 f=7
W=5 P=6 f=7
S 1 初始 2 8 3 1 6 4 7 5
h*=5,g*=0 W=4 P=5 f=5
h*--从节点n到目标节点g 的最短路径耗散值。 g*--从初始节点s到节点n 的最短路径耗散值。 W—不在位将牌数之和。 P—每个不在位将牌移动 到目标状态相应位置所 需走步的总和。
开始 读入棋局初始状态
A*算法框图
是否可解?
是 初始状态加入OPEN表
否
在OPEN表中找到评价值最小的节点,作为当前节点 是 是目标节点
否 扩展新状态,把不重复的新状态加入OPEN表中 当前节点从OPEN表移除 输出结果 结束
1 2 3 8 4 7 6 5 (目标状态)
黑色数字表示不 在位的将牌数 A 2 8 3 1 6 4 7 5 D 2 8 3 1 4 7 6 5
开始
有序搜索算法框图
把S放入OPEN表,计算 估价函数f(s)
OPEN表为空?
是
失败
否
选取OPEN表中f值最小的节点i放入CLOSE表
i为目标节点吗
是
失败
否 扩展i,得后继结点j,计算f(j),提供返回节点i的指 针,利用f(j)对OPEN表重新排序,调整亲子关系及指 针
1 2 3 8 4 7 6 5 (目标状态)
八数码难题
汇报时间:2018年10月 汇报人:马玥 PPT制作者:何帅帅 代码编辑调试者:尹迅、马玥
01 问题重述 Problem Retelling
目 录
CONTENTS
02 问题分析 Problem Analysis
03 宽度优先 Width First
04 深度优先 Depth First
05 启发式搜索
黑色数字表示不 在位的将牌数 A(6) 2 8 3 1 6 4 7 5 D(5) 2 8 3 3 1 4 7 6 5 G(6) 8 3 2 1 4 7 6 5 H(7) 2 8 3 7 1 4 6 5
S(4) 初始 2 8 3 1 1 6 4 7 5 B(4) 2 2 8 3 1 4 7 6 5 E(5) 2 1 8 7 6 I(5) 2 1 8 7 6 K(5) 1 2 8 7 6 4 C(6) 2 8 3 1 6 4 7 5 F(6) 2 8 3 1 4 7 6 5 J(7) 2 3 1 8 4 7 6 5
启发式搜索
Heuristic Search
启发式搜索算法解决八数码难题 有序搜索(A算法)
评价函数:f(n) = g(n) + h(n) (其中n是被评价的节点) g*(n) :表示从初始节点s到节点n 的最短路径的耗散值。 h*(n):表示从节点n到目标节点g的最短路径的耗散值。 f*(n) =g*(n)+h*(n):表示从初始节点s经过节点n到目标节点g的最短路径的耗散值。 而f(n)、g(n)和h(n)则分别表示是对f*(n)、g*(n)和h*(n)三个函数值的估计值,是一种 预测。 A算法就是利用这种预测,来达到有效搜索的目的。它每次按照f(n)值的大小对 OPEN表中的元素进行排序,f值小的节点放在前面,而f值的大的节点则被放在 OPEN表的后面,这样每次扩展节点时,总是选择当前f值最小的节点来优先扩展。
2 3 1 8 4 7 6 5 2 2 8 3 1 4 7 6 5 12 2 3 1 8 4 7 6 5
1
1 2 3 8 4 7 6 5 2 3 1 8 4 7 6 5 (目标状态)
6 2 8 3 1 4 7 6 5 8
9 2 8 3 1 4 7 6 5 10 2 8 1 4 3 7 6 5 2 8 1 4 3 7 6 5
…
4
2 8 3 1 6 4 7 5 2 8 3 6 4 1 7 5
…
1 2 3 7 8 4 6 5
1 2 3 8 4 7 6 5
…
ቤተ መጻሕፍቲ ባይዱ
…
设深度界限dm=4
3 2 8 3 1 6 4 7 5 4 2 8 3 1 6 4 7 5 2 8 3 6 4 1 7 5 5 2 8 3 1 6 4 7 5 2 8 3 1 6 7 5 4 7 8 3 2 1 4 7 6 5 8 3 2 1 4 7 6 5
6 2 8 3 1 4 7 6 5
8 1 2 3 8 4 7 6 5
10 2 8 3 1 6 4 7 5
11 2 8 3 1 6 4 7 5
12 2 8 3 1 4 5 7 6
13 2 8 1 4 3 7 6 5
14
15
8 3 2 1 4 7 6 5
2 8 3 7 1 4 6 5
16 1 2 3 7 8 4 6 5
2 B C 2 8 3 h*=4,g*=1 2 8 3 1 4 W=3 1 6 4 P=4 7 6 5 f=5 7 5 E 3 2 3 1 8 4 7 6 5
h*=3,g*=2 W=3 P=3 f=5
W=5 P=6 f=7
F 2 8 3 1 4 7 6 5
W=4 P=5 f=7
G h*=2,g*=3
2 3 4 W=4 W=2 P=4 1 8 4 P=2 f=7 7 6 5 f=5 I 5 1 2 3 h*=1,g*=4 8 4 W=1 P=1 7 6 5 f=5 K J 1 2 3 h*=0,g*=5 1 2 3 W=2 8 4 W=0 7 8 4 P=2 P=0 7 6 5 f=5 6 5 f=7
17 1 2 3 8 4 7 6 5
从图中得,解的路径是S->3->8->17
宽度优先搜索算法代码演示
宽度优先搜索的性质
• 当问题有解时,一定能找到解 • 当问题为单位耗散值,且问题有解时,一定能找到最优 解 • 方法与问题无关,具有通用性 • 效率较低 • 属于图搜索方法
深度优先
Depth First
深度优先搜索算法解决八数码难题
1 2 3
8
7 6
4
5 2 2 8 3 1 4 7 6 5 2 8 3 1 4 7 6 5 2 8 3 1 4 7 6 5
2 3 1 8 4 7 6 5 2 3 1 8 4 7 6 5
1
(目标状态) 3 2 8 3 1 6 4 7 5 2 8 3 1 6 4 7 5
2 3 1 8 4 7 6 5 1 2 3 8 4 7 6 5