1、启发式搜索算法 A启发式搜索算法 ASnng 目标状态节点 ng初始状态节点 S节点 n搜索图 Gh(n): n-ng的估计最小路径代价g(n):s-n的实际路径代价f(n):s-n-ng的 估计 最小路径代价=+启发式搜索算法 A 【 评价函数 f(n)=g(n)+h(n) (掌握) 】 n:搜索图 G中的节点; f(n): G中从 s经 n到 ng,估计的最小路径代价; g(n): G中从 s到 n,目前实际的路径代价; h(n):从 n到 ng,估计的最小路径代价; h(n)值: 依赖于启发式知识加以计算 ; h(n)称为 启发式函数 (掌握意义!)。 如何用评价函数来实现 A算法 ?
2、( 掌握!)启发式搜索算法 A 算法 A的设计与一般图搜索相同,划分为二个阶段: 1、初始化 建立只包含初始状态节点 s的搜索图 G:=s OPEN:=s CLOSE:= 2、搜索循环 通过循环地执行该算法,搜索图会因不断有新节点加入而逐步长大,直到搜索到目标节点。启发式搜索算法 A 算法 A的设计与一般图搜索类似,划分为二个阶段: 1、初始化 2、搜索循环 MOVE-FIRST(OPEN):取出 OPEN表首的节点 n 扩展出 n的子节点 , 插入搜索图 G和 OPEN表 对每个子节点 ni ,计算 f(n, ni)=g(n, ni )+h(ni ) 适当的标记和修改指针(子节点 父节点 )
3、 排序 OPEN表(评价函数 f(n)的值排序)启发式搜索算法 A 扩展出 n的子节点 ,插入搜索图 G和 OPEN表 对每个子节点 ni ,计算 f(n, ni )=g(n, ni )+h(ni ) 适当的标记和修改指针 (子节点 父节点 ) (i)全新节点: f(ni )=f(n, ni ) (ii)已出现在 OPEN表中的节点 (iii)已出现的 CLOSE表中的节点 IF f(ni )f(n, ni ) THEN 修改指针指向新父结点 n f(ni )=f(n, ni ) 排序 OPEN表( f(n)值从小到大排序)算法 A1.建立一个只包含起始节点 S的搜索图 G, 把 S放到一个叫
4、 OPEN的未扩展节点表中;建立一个叫做 CLOSE的已扩展节点表,其初始为空表;开始把 S放入 Open表Open表是否为空?把第一个节点 (n)从 Open表移至 Close表n为目标节点把 n的后继节点 n放入 Open表的末端,提供返回节点 n的指针修改指针方向重排 Open表失败成功算法 A1.建立一个只包含起始节点 S的搜索图 G,把 S放到一个叫 OPEN的未扩展节点表中;建立一个叫做 CLOSE的已扩展节点表,其初始为空表;开始把 S放入 Open表Open表是否为空?把第一个节点 (n)从 Open表移至 Close表n为目标节点把 n的后继节点 n放入 Open表的末端,提
5、供返回节点 n的指针修改指针方向重排 Open表失败成功2.若 OPEN表是空表,则失败退出 ;算法 A1.建立一个只包含起始节点 S的搜索图 G,把 S放到一个叫 OPEN的未扩展节点表中;建立一个叫做 CLOSE的已扩展节点表,其初始为空表;开始把 S放入 Open表Open表是否为空?把第一个节点 (n)从 Open表移至 Close表n为目标节点把 n的后继节点 n放入 Open表的末端,提供返回节点 n的指针修改指针方向重排 Open表失败成功2.若 OPEN表是空表,则失败退出 ;3.选择 OPEN表上的第一个节点,把它从OPEN表移出并放进 CLOSE表中,称此节点为节点 n;算
6、法 A1.建立一个只包含起始节点 S的搜索图 G,把 S放到一个叫 OPEN的未扩展节点表中;建立一个叫做 CLOSE的已扩展节点表,其初始为空表;开始把 S放入 Open表Open表是否为空?把第一个节点 (n)从 Open表移至 Close表n为目标节点把 n的后继节点 n放入 Open表的末端,提供返回节点 n的指针修改指针方向重排 Open表失败成功2.若 OPEN表是空表,则失败退出 ;3.选择 OPEN表上的第一个节点,把它从OPEN表移出并放进 CLOSE表中,称此节点为节点 n;4.若 n为一目标节点,则有解成功退出,此解是追踪图 G中沿着指针从 n到 S这条路径而得到的;算法
7、 A1.建立一个只包含起始节点 S的搜索图 G,把 S放到一个叫 OPEN的未扩展节点表中;建立一个叫做 CLOSE的已扩展节点表,其初始为空表;开始把 S放入 Open表Open表是否为空?把第一个节点 (n)从 Open表移至 Close表n为目标节点把 n的后继节点 n放入 Open表的末端,提供返回节点 n的指针修改指针方向重排 Open表失败成功2.若 OPEN表是空表,则失败退出 ;3.选择 OPEN表上的第一个节点,把它从OPEN表移出并放进 CLOSE表中,称此节点为节点 n;4.若 n为一目标节点,则有解成功退出,此解是追踪图 G中沿着指针从 n到 S这条路径而得到的;5.扩
8、展节点 n,同时生成不是 n的祖先的那些子节点的集合 M, 把 M的这些成员作为 n的后继节点添入图 G中; 对于 M中每个子节点 ni,计算 f(n,ni) = g(n,ni) + h(ni);算法 A开始把 S放入 Open表Open表是否为空?把第一个节点 (n)从 Open表移至 Close表n为目标节点把 n的后继节点 n放入 Open表的末端,提供返回节点 n的指针修改指针方向重排 Open表失败成功6.对那些未曾在 G中出现过的 M成员(全新结点)设置一个通向 n的指针。把 M的这些成员加进 OPEN表。对已经在 OPEN表上的每一个 M成员, 比较子节点 ni经由新、老父节点的
9、评价函数值f(n,ni)、 f(ni);若 f(n,ni) f(ni), 则令 f(ni) = f(n,ni), 并移动子节点指向老父节点的指针,改为指向新父节点。对已在 CLOSE表上的每个 M成员,作与第 2类同样的处理,并把这些子结点从 CLOSE表移出,重新加入 OPEN表。算法 A开始把 S放入 Open表Open表是否为空?把第一个节点 (n)从 Open表移至 Close表n为目标节点把 n的后继节点 n放入 Open表的末端,提供返回节点 n的指针修改指针方向重排 Open表失败成功6.对那些未曾在 G中出现过的 M成员(全新结点)设置一个通向 n的指针。把 M的这些成员加进
10、OPEN表。对已经在 OPEN表上的每一个 M成员, 比较子节点 ni经由新、老父节点的评价函数值f(n,ni)、 f(ni);若 f(n,ni) f(ni), 则令 f(ni) = f(n,ni), 并移动子节点指向老父节点的指针,改为指向新父节点。对已在 CLOSE表上的每个 M成员,作与第 2类同样的处理,并把这些子结点从 CLOSE表移出,重新加入 OPEN表。7.按 f(n)排序 OPEN表中的节点, f(n)值最小者排在首位 ,重排 OPEN表;8.转 2。此过程生成一个明确的图 G(搜索图 )和一个 G的子集 T(搜索树 )。启发式算法 A实例 八数码游戏 1) 设计评价函数 f
11、(n) f(n)=d(n)+w(n), d(n):节点 n在搜索图中的节点深度,对 g(n)的度量; w(n):代表启发式函数 h(n), 其值是节点 n与目标状态节点 ng相比较,错位的棋牌个数(不考虑空格);初始布局 目标布局移动数码5674832158642731启发式算法 A实例 八数码游戏 1) 设计评价函数 f(n) f(n)计算实例=56748321 58642731h(n): n-ng的最小路径代价g(n):s-n的最小路径代价f(n):s-n-ng的最小路径代价+注: W(S)不考虑空格w(s):错位的棋牌个数d(s):当前节点深度f(s)=+初始布局 s目标布局 ng启发式
12、算法 A实例 八数码游戏( 1)搜索术语 1、节点深度 根节点 指示 初始状态 ,令其深度为 0; 搜索图中的其他节点的 深度 dn就可以递归地定义为其 父节点深度 dn-1加 1: dn= dn-1+1。根节点深度 =0第 n-1层节点 dn-1第 n层节点 dn= dn-1+1搜索图 G启发式算法 A实例 八数码游戏=初始布局 s目标布局 ng56748321 58642731w(s):错位的棋牌个数d(s):当前节点深度f(s)=h(n): n-ng的最小路径代价g(n):s-n的最小路径代价f(n):s-n-ng的最小路径代价+注: W(S)不考虑空格= 0 + 4= 4 1) 设计评
13、价函数 f(n) f(n)计算实例)4(586427301s 初始化OPEN:=s4CLOSE:=)4(586427301s 循环 1CLOSE:=s4)4(586427301s)6(586427031a)4(586407321b)6(586427310c循环 1CLOSE:=s4OPEN:=abc)4(586427301s)6(586427031a)4(586407321b)6(586427310c循环 1CLOSE:=s4OPEN:=abca6b4c6)4(586427301s)6(586427031a)4(586407321b)6(586427310c循环 1CLOSE:=s4OPEN:
14、=abca6b4c6b4a6)4(586427301s)6(586427031a)4(586407321b)6(586427310c循环 2)4(586427301s)6(586427031a)4(586407321b)6(586427310c循环 2CLOSE:=s4b4)4(586427301s)6(586427031a)4(586407321b)6(586427310c)5(506487321e)5(586470321d)6(586047321i循环 2CLOSE:=s4b4OPEN:=a6c6dei)4(586427301s)6(586427031a)4(586407321b)6(58
15、6427310c)5(506487321e)5(586470321d)6(586047321i循环 2CLOSE:=s4b4OPEN:=a6c6d5e5i6)4(586427301s)6(586427031a)4(586407321b)6(586427310c)5(506487321e)5(586470321d)6(586047321i循环 2CLOSE:=s4b4OPEN:=d5e5a6c6i6)4(586427301s)6(586427031a)4(586407321b)6(586427310c)5(506487321e)5(586470321d)6(586047321i循环 3CLOSE
16、:=s4b4d5)4(586427301s)6(586427031a)4(586407321b)6(586427310c)5(506487321e)5(586470321d)6(586047321i循环 3CLOSE:=s4b4d5OPEN:=e5a6c6i6jk)7(586471320j)6(580476321k)4(586427301s)6(586427031a)4(586407321b)6(586427310c)5(506487321e)5(586470321d)6(586047321i)7(586471320j)6(580476321k循环 3CLOSE:=s4b4d5OPEN:=e5
17、a6c6i6j7k6)4(586427301s)6(586427031a)4(586407321b)6(586427310c)5(506487321e)5(586470321d)6(586047321i)7(586471320j)6(580476321k循环 3CLOSE:=s4b4d5OPEN:=e5a6c6i6k6j7)4(586427301s)6(586427031a)4(586407321b)6(586427310c)5(506487321e)5(586470321d)6(586047321i)7(586471320j)6(580476321k循环 4CLOSE:=s4,b4,d5,e
18、5)4(586427301s)6(586427031a)4(586407321b)6(586427310c)5(506487321e)5(586470321d)6(586047321i)7(586471320j)6(580476321k循环 4CLOSE:=s4,b4,d5,e5OPEN:=a6c6i6k6j7lm)5(560487321l)7(056487321m)4(586427301s)6(586427031a)4(586407321b)6(586427310c)5(506487321e)5(586470321d)6(586047321i)5(560487321l)7(056487321
19、m)7(586471320j)6(580476321k循环 4CLOSE:=s4,b4,d5,e5OPEN:=a6c6i6k6j7lmc6i6k6j7l5m7)4(586427301s)6(586427031a)4(586407321b)6(586427310c)5(506487321e)5(586470321d)6(586047321i)5(560487321l)7(056487321m)7(586471320j)6(580476321k循环 4CLOSE:=s4,b4,d5,e5OPEN:=l5a6c6i6k6j7m7)4(586427301s)6(586427031a)4(5864073
20、21b)6(586427310c)5(506487321e)5(586470321d)6(586047321i)5(560487321l)7(056487321m)7(586471320j)6(580476321k CLOSE:=s4,b4,d5,e5,l5循环 5)4(586427301s)6(586427031a)4(586407321b)6(586427310c)5(506487321e)5(586470321d)6(586047321i)5(560487321l)7(056487321m)7(586471320j)6(580476321k CLOSE:=s4,b4,d5,e5,l5循环
21、 5OPEN:=a6c6i6k6j7m7n)5(567480321n)4(586427301s)6(586427031a)4(586407321b)6(586427310c)5(506487321e)5(586470321d)6(586047321i)5(560487321l)7(056487321m)5(567480321n)7(586471320j)6(580476321k CLOSE:=s4,b4,d5,e5,l5循环 5OPEN:=a6c6i6k6j7m7n5)4(586427301s)6(586427031a)4(586407321b)6(586427310c)5(506487321
22、e)5(586470321d)6(586047321i)5(560487321l)7(056487321m)5(567480321n)7(586471320j)6(580476321k CLOSE:=s4,b4,d5,e5,l5循环 5OPEN:=n5a6c6i6k6j7m7)4(586427301s)6(586427031a)4(586407321b)6(586427310c)5(506487321e)5(586470321d)6(586047321i)5(560487321l)7(056487321m)5(567480321n)7(586471320j)6(580476321k循环 6CL
23、OSE:=s4,b4,d5,e5,l5,n5)4(586427301s)6(586427031a)4(586407321b)6(586427310c)5(506487321e)5(586470321d)6(586047321i)5(560487321l)7(056487321m)5(567480321n567481320)7(o )5(567408321g)7(586471320j)6(580476321k循环 6CLOSE:=s4,b4,d5,e5,l5,n5)4(586427301s)6(586427031a)4(586407321b)6(586427310c)5(506487321e)5
24、(586470321d)6(586047321i)5(560487321l)7(056487321m)5(567480321n)7(586471320j)6(580476321k循环 6CLOSE:=s4,b4,d5,e5,l5,n5OPEN:=a6c6i6k6j7m7og567481320)7(o )5(567408321g)4(586427301s)6(586427031a)4(586407321b)6(586427310c)5(506487321e)5(586470321d)6(586047321i)5(560487321l)7(056487321m)5(567480321n567481
25、320)7(o )5(567408321g)7(586471320j)6(580476321k循环 6CLOSE:=s4,b4,d5,e5,l5,n5OPEN:=a6c6i6k6j7m7o7g5)4(586427301s)6(586427031a)4(586407321b)6(586427310c)5(506487321e)5(586470321d)6(586047321i)5(560487321l)7(056487321m)5(567480321n567481320)7(o )5(567408321g)7(586471320j)6(580476321k循环 6CLOSE:=s4,b4,d5,
26、e5,l5,n5OPEN:=g5a6c6i6k6j7m7o7循环 7成功结束)4(586427301s)6(586427031a)4(586407321b)6(586427310c)5(506487321e)5(586470321d)6(586047321i)5(560487321l)7(056487321m)5(567480321n567481320)7(o)5(567408321g)7(586471320j)6(580476321k循环 7成功结束)4(586427301s)6(586427031a)4(586407321b)6(586427310c)5(506487321e)5(5864
27、70321d)6(586047321i)5(560487321l)7(056487321m)5(567480321n567481320)7(o)5(567408321g)7(586471320j)6(580476321k586427031586407321586427310506487321586470321586047321560487321056487321567480321567481320567408321586427301最理想搜索图 G判断失误)4(586427301s)6(586427031a)4(586407321b)6(586427310c)5(506487321e)5(586470321d)6(586047321i)5(560487321l)7(056487321m)5(567480321n567481320)7(o )5(567408321g)7(586471320j)6(580476321k人工智能基础