版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第1章、搜索问题有许多智力问题(如梵塔问题、旅行商问题、八皇后问题、农夫过河问题等)许多实际问题(如最优路径规划、人力排班、装箱问题、机器人行动规划等)
都可以归结为在某一状态空间中搜索目标或路径的问题。1第1章、搜索问题有许多智力问题(如梵塔问题、旅行商问题、八皇22334455问题:如何解决这类问题?这类问题不能用简单的数学公式/数学方程来描述,属于非结构化问题。难以获得求解所需的全部信息;更没有现成的算法可供求解使用属于组合爆炸问题,稍大规模的问题就超出了人类的认知负荷解决方法:利用计算机的超人计算能力,通过不断试探搜索找到问题的(最优)解。优点建模简单6问题:如何解决这类问题?这类问题不能用简单的数学公式/数具体方法:状态空间法状态:是指问题状态的的向量表示(x,y,z,….)。问题有初始状态,有目标状态有些状态可能是非法的,问题不可能发展到那种状态问题表示为向量,向量就是在Euclidean空间,因此问题的初始状态和目标状态都是此空间中的点。此类问题的特征是找出从初始状态到目标状态的路径,方法是通过一个状态向另一个状态的转换实现的。7具体方法:状态空间法状态:是指问题状态的的向量表示(x,y问题状态的表示方法(一)8问题状态的表示方法(一)8问题状态的表示方法(二)9问题状态的表示方法(二)9问题状态的变迁10问题状态的变迁10问题状态的表示方法11问题状态的表示方法11问题状态的变迁12问题状态的变迁12搜索问题---主要内容内容: 状态空间的搜索问题。搜索方式:盲目搜索启发式搜索关键问题: 如何利用知识,尽可能有效地找到问题的解(最佳解),寻找过程就是搜索。13搜索问题---主要内容内容:13状态空间法1.状态空间表示方法状态(State):求解过程中每一步问题状况的表示Sk=Sk0,Sk1…)当对每一个分量都给以确定的值时,就得到了一个具体的状态。操作(Operator):也称为算符,它是把问题从一种状态变换为另一种状态的手段。。操作可以是一个机械步骤,一个运算,一条规则或一个过程。状态空间(Statespace):用来描述一个问题的全部状态以及这些状态之间的相互关系。常用表示为(S,F,G)其中,S为问题的所有初始状态的集合;F为操作的集合;G为目标状态的集合。状态空间也可用一个赋值的有向图来表示,称为状态空间图,其中节点表示问题的状态,有向边表示操作。14状态空间法1.状态空间表示方法状态(State):求解过程状态空间法求解问题的基本过程:首先为问题选择适当的“状态”及“操作”的形式化描述方法;然后从某个初始状态出发,每次使用一个“操作”,递增地建立起操作序列,直到达到目标状态为止;此时,由初始状态到目标状态所使用的算符序列就是该问题的一个解。
状态空间法2.状态空间问题求解15状态空间法求解问题的基本过程:状态空间法15修道士(Missionaries)和野人(Cannibals)问题(简称M-C问题)。设在河的一岸有三个野人、三个修道士和一条船,修道士想用这条船把所有的人运到河对岸,但受以下条件的约束:修道士和野人都会划船,但每次船上至多可载两个人;在河的任一岸,如果野人数目超过修道士数,修道士会被野人吃掉。
如果野人会服从任何一次过河安排,请规划一个确保修道士和野人都能过河,且没有修道士被野人吃掉的安全过河计划。
状态空间法3.状态空间的例子16修道士(Missionaries)和野人(Cann
解:首先选取描述问题状态的方法。在这个问题中,需要考虑两岸的修道士人数和野人数,还需要考虑船在左岸还是在右岸。从而可用一个三元组来表示状态S=(m,c,b)其中,m表示左岸的修道士人数,c表示左岸的野人数,b表示左岸的船数。右岸的状态可由下式确定:右岸修道士数m'=3-m右岸野人数c'=3-c右岸船数b'=1-b在这种表示方式下,m和c都可取0、1、2、3中之一,b可取0和1中之一。因此,共有4×4×2=32种状态。状态空间法3.状态空间的例子17解:首先选取描述问题状态的方法。在这个问题中,需
这32种状态并非全有意义,除去不合法状态和修道士被野人吃掉的状态,有意义的状态只有16种:S0=(3,3,1)S1=(3,2,1)S2=(3,1,1)S3=(2,2,1)S4=(1,1,1)S5=(0,3,1)S6=(0,2,1)S7=(0,1,1)S8=(3,2,0)S9=(3,1,0)S10=(3,0,0)S11=(2,2,0)S12=(1,1,0)S13=(0,2,0)S14=(0,1,0)S15=(0,0,0)有了这些状态,还需要考虑可进行的操作。操作是指用船把修道士或野人从河的左岸运到右岸,或从河的右岸运到左岸。每个操作都应当满足如下条件:一是船至少有一个人(m或c)操作,离开岸边的m和c的减少数目应该等于到达岸边的m和c的增加数目;二是每次操作船上人数不得超过2个;三是操作应保证不产生非法状态。因此,操作应由条件部分和动作部分:条件:只有当其条件具备时才能使用动作:刻划了应用此操作所产生的结果。
18这32种状态并非全有意义,除去不合法状态和修道士操作的表示:用符号Pij表示从左岸到右岸的运人操作用符号Qij表示从右岸到左岸的操作其中:i表示船上的修道士人数j表示船上的野人数操作集本问题有10种操作可供选择:F={P01,P10,P11,P02,P20,Q01,Q10,Q11,Q02,Q20}下面以P01和Q01为例来说明这些操作的条件和动作。操作符号条件动作P01b=1,m=0或m=3,c≥1b=0,c=c-1Q01b=0,m=0或m=3,c≤2b=1,c=c+1
19操作的表示:19搜索问题S0Sg20搜索问题S0Sg20如何实现搜索?讨论的问题:有哪些常用的搜索算法。问题有解时能否找到解。找到的解是最佳的吗?什么情况下可以找到最佳解?求解的效率如何。21如何实现搜索?讨论的问题:211.1回溯策略例:皇后问题221.1回溯策略例:皇后问题22()23()23()Q((1,1))24()Q((1,1))24()QQ((1,1))((1,1)(2,3))25()QQ((1,1))((1,1)(2,3))25()Q((1,1))((1,1)(2,3))26()Q((1,1))((1,1)(2,3))26()QQ((1,1))((1,1)(2,3))((1,1)(2,4))27()QQ((1,1))((1,1)(2,3))((1,1()QQ((1,1))((1,1)(2,3))((1,1)(2,4))Q((1,1)(2,4)(3.2))28()QQ((1,1))((1,1)(2,3))((1,1()QQ((1,1))((1,1)(2,3))((1,1)(2,4))((1,1)(2,4)(3.2))29()QQ((1,1))((1,1)(2,3))((1,1()Q((1,1))((1,1)(2,3))((1,1)(2,4))((1,1)(2,4)(3.2))30()Q((1,1))((1,1)(2,3))((1,1)()((1,1))((1,1)(2,3))((1,1)(2,4))((1,1)(2,4)(3.2))31()((1,1))((1,1)(2,3))((1,1)()((1,1))((1,1)(2,3))((1,1)(2,4))((1,1)(2,4)(3.2))Q((1,2))32()((1,1))((1,1)(2,3))((1,1)()((1,1))((1,1)(2,3))((1,1)(2,4))((1,1)(2,4)(3.2))Q((1,2))Q((1,2)(2,4))33()((1,1))((1,1)(2,3))((1,1)()((1,1))((1,1)(2,3))((1,1)(2,4))((1,1)(2,4)(3.2))Q((1,2))Q((1,2)(2,4))Q((1,2)(2,4)(3,1))34()((1,1))((1,1)(2,3))((1,1)()((1,1))((1,1)(2,3))((1,1)(2,4))((1,1)(2,4)(3.2))Q((1,2))Q((1,2)(2,4))Q((1,2)(2,4)(3,1))Q((1,2)(2,4)(3,1)(4,3))35()((1,1))((1,1)(2,3))((1,1)递归的思想(续)当前状态目标状态g36递归的思想(续)当前状态目标状态g36一个递归的例子intListLenght(LIST*pList){ if(pList==NULL)return0; elsereturnListLength(pList->next)+1;}NULLpLIST12337一个递归的例子intListLenght(LIST*pL回溯搜索算法 BACKTRACK(DATA)
DATA:当前状态。 返回值:从当前状态到目标状态的路径 (以规则表的形式表示) 或FAIL。38回溯搜索算法 BACKTRACK(DATA)38回溯搜索算法递归过程BACKTRACK(DATA)1, IFTERM(DATA)RETURNNIL;2, IFDEADEND(DATA)RETURNFAIL;3, RULES:=APPRULES(DATA);4, LOOP:IFNULL(RULES)RETURNFAIL;5, R:=FIRST(RULES);6, RULES:=TAIL(RULES);7, RDATA:=GEN(R,DATA);8, PATH:=BACKTRACK(RDATA);9, IFPATH=FAILGOLOOP;10, RETURNCONS(R,PATH);39回溯搜索算法递归过程BACKTRACK(DATA)39存在问题及解决办法解决办法:对搜索深度加以限制记录从初始状态到当前状态的路径当前状态问题:深度问题死循环问题40存在问题及解决办法解决办法:当前状态问题:40回溯搜索算法1BACKTRACK1(DATALIST)
DATALIST:从初始到当前的状态表(逆向) 返回值:从当前状态到目标状态的路径 (以规则表的形式表示) 或FAIL。41回溯搜索算法1BACKTRACK1(DATALIST)41回溯搜索算法11, DATA:=FIRST(DATALIST)2, IFMENBER(DATA,TAIL(DATALIST)) RETURNFAIL;
3, IFTERM(DATA)RETURNNIL;4, IFDEADEND(DATA)RETURNFAIL;5, IFLENGTH(DATALIST)>BOUND RETURNFAIL;6, RULES:=APPRULES(DATA);7,LOOP:IFNULL(RULES)RETURNFAIL;8, R:=FIRST(RULES);42回溯搜索算法11, DATA:=FIRST(DATALIS回溯搜索算法1(续)9, RULES:=TAIL(RULES);10, RDATA:=GEN(R,DATA);11, RDATALIST:=CONS(RDATA,DATALIST);12, PATH:=BACKTRCK1(RDATALIST)13, IFPATH=FAILGOLOOP;14, RETURNCONS(R,PATH);43回溯搜索算法1(续)9, RULES:=TAIL(RULE一些深入的问题失败原因分析、多步回溯QQ44一些深入的问题失败原因分析、多步回溯QQ44一些深入问题(续)回溯搜索中知识的利用 基本思想(以皇后问题为例): 尽可能选取划去对角线上位置数最少的。QQQQ322345一些深入问题(续)回溯搜索中知识的利用QQQQ31.2图搜索策略问题的引出回溯搜索:只保留从初始状态到当前状态的一条路径。图搜索:保留所有已经搜索过的路径。
461.2图搜索策略问题的引出46一些基本概念节点深度: 根节点深度=0 其它节点深度=父节点深度+1012347一些基本概念节点深度:012347一些基本概念(续1)路径 设一节点序列为(n0,n1,…,nk),对于i=1,…,k,若节点ni-1具有一个后继节点ni,则该序列称为从n0到nk的路径。路径的耗散值 一条路径的耗散值等于连接这条路径各节点间所有耗散值的总和。用C(ni,nj)表示从ni到nj的路径的耗散值。48一些基本概念(续1)路径48一些基本概念(续1)扩展一个节点 生成出该节点的所有后继节点,并给出它们之间的耗散值。这一过程称为“扩展一个节点”。49一些基本概念(续1)扩展一个节点49一般的图搜索算法1,G=G0(G0=s),OPEN:=(s);2,CLOSED:=();3,LOOP:IFOPEN=()THENEXIT(FAIL);4,n:=FIRST(OPEN),REMOVE(n,OPEN), ADD(n,CLOSED);5,IFGOAL(n)THENEXIT(SUCCESS);6,EXPAND(n)→{mi},G:=ADD(mi,G);50一般的图搜索算法1,G=G0(G0=s),OPEN:=一般的图搜索算法(续)7,标记和修改指针: ADD(mj,OPEN),并标记mj到n的指针; 计算是否要修改mk、ml到n的指针; 计算是否要修改ml到其后继节点的指针;8,对OPEN中的节点按某种原则重新排序;9,GOLOOP;51一般的图搜索算法(续)7,标记和修改指针:51节点类型说明…...…...…...…...…...mjmkml52节点类型说明…...…...…...…...…...mjmk修改指针举例123456s53修改指针举例123456s53修改指针举例(续1)123456s54修改指针举例(续1)123456s54123456修改指针举例(续2)s55123456修改指针举例(续2)s55123456修改指针举例(续3)s56123456修改指针举例(续3)s561.3无信息图搜索过程深度优先搜索宽度优先搜索571.3无信息图搜索过程深度优先搜索57深度优先搜索1,G:=G0(G0=s),OPEN:=(s),CLOSED:=();2,LOOP:IFOPEN=()THENEXIT(FAIL);3,n:=FIRST(OPEN);4,IFGOAL(n)THENEXIT(SUCCESS);5,REMOVE(n,OPEN),ADD(n,CLOSED);6,IFDEPTH(n)≥DmGOLOOP;7,EXPAND(n)→{mi},G:=ADD(mi,G);8,IF目标在{mi}中THENEXIT(SUCCESS);9,ADD(mj,OPEN),并标记mj到n的指针;10,GOLOOP;58深度优先搜索1,G:=G0(G0=s),OPEN:=(s1238476523184765591232359231847652318476528314765231847652831476528316475283147652831647528316475283714658321476528143765283145761237846512384765283641752831675483214765283714652814376528314576123456789abcd12384765目标6023232832深度优先搜索的性质一般不能保证找到最优解当深度限制不合理时,可能找不到解,可以将算法改为可变深度限制最坏情况时,搜索空间等同于穷举图搜索是一个通用的与问题无关的方法61深度优先搜索的性质一般不能保证找到最优解61宽度优先搜索1,G:=G0(G0=s),OPEN:=(s),CLOSED:=();2,LOOP:IFOPEN=()THENEXIT(FAIL);3,n:=FIRST(OPEN);4,IFGOAL(n)THENEXIT(SUCCESS);5,REMOVE(n,OPEN),ADD(n,CLOSED);6,EXPAND(n)→{mi},G:=ADD(mi,G);7,IF目标在{mi}中THENEXIT(SUCCESS);8,ADD(OPEN,mj),并标记mj到n的指针;9,GOLOOP;62宽度优先搜索1,G:=G0(G0=s),OPEN:=(s23184765231847652831476523184765283147652831647528314765283164752831647528371465832147652814376528314576123784651238476512567312384765目标82341876546323232832宽度优先搜索的性质当问题有解时,一定能找到解当问题为单位耗散值,且问题有解时,一定能找到最优解方法与问题无关,具有通用性效率较低属于图搜索方法64宽度优先搜索的性质当问题有解时,一定能找到解641.4启发式图搜索利用知识来引导搜索,达到减少搜索范围,降低问题复杂度的目的。启发信息的强度强:降低搜索工作量,但可能导致找不到最 优解弱:一般导致工作量加大,极限情况下变为 盲目搜索,但可能可以找到最优解***651.4启发式图搜索利用知识来引导搜索,达到减少搜索范围,降希望:引入启发知识,在保证找到最佳解的情况下,尽可能减少搜索范围,提高搜索效率。***66希望:***66基本思想定义一个评价函数f,对当前的搜索状态进行评估,找出一个最有希望的节点来扩展。***67基本思想定义一个评价函数f,对当前的搜索状态进行评估,找出一1,启发式搜索算法A(A算法)评价函数的格式: f(n)=g(n)+h(n) f(n):评价函数 h(n):启发函数***681,启发式搜索算法A(A算法)评价函数的格式:***68符号的意义g*(n):从s到n的最短路径的耗散值h*(n):从n到g的最短路径的耗散值f*(n)=g*(n)+h*(n):从s经过n到g的最短路径的耗散值g(n)、h(n)、f(n)分别是g*(n)、h*(n)、f*(n)的估计值***69符号的意义g*(n):从s到n的最短路径的耗散值***69A算法1,OPEN:=(s),f(s):=g(s)+h(s);2,LOOP:IFOPEN=()THENEXIT(FAIL);3,n:=FIRST(OPEN);4,IFGOAL(n)THENEXIT(SUCCESS);5,REMOVE(n,OPEN),ADD(n,CLOSED);6,EXPAND(n)→{mi},
计算f(n,mi):=g(n,mi)+h(mi);
70A算法1,OPEN:=(s),f(s):=g(s)+h(A算法(续) ADD(mj,OPEN),标记mj到n的指针; IFf(n,mk)<f(mk)THENf(mk):=f(n,mk),
标记mk到n的指针; IFf(n,ml)<f(ml,)THENf(ml):=f(n,ml), 标记ml到n的指针, ADD(ml,OPEN);7,OPEN中的节点按f值从小到大排序;8,GOLOOP;71A算法(续) ADD(mj,OPEN),标记mj到n的指…...…...…...…...…...mjmkmlnab72…...…...…...…...…...mjmkmlnab7Closed表Open表73Closed表Open表73一个A算法的例子定义评价函数: f(n)=g(n)+h(n) g(n)为从初始节点到当前节点的耗散值 h(n)为当前节点“不在位”的将牌数
2831647512384765***74一个A算法的例子定义评价函数:2831h计算举例 h(n)=42
831
64751234576
8***75h计算举例 h(n)=428312831647528314765283164752831647523184765283147652831476528371465832147652318476523184765123847651238476512378465s(4)A(6)B(4)C(6)D(5)E(5)F(6)G(6)H(7)I(5)J(7)K(5)L(5)M(7)目标123456762832832832爬山法(局部搜索算法)f(n)=h(n)77爬山法(局部搜索算法)f(n)=h(n)77分支界限法 如果对于任何n,f(n)=g(n),h(n)=078分支界限法78动态规划算法 如果对于任何n,当h(n)=0时,求s->t的最短路径,对某一中间结点I,只要考虑s到I的最短路径分支,其余路径不考虑,A算法就成为了动态规划算法。79动态规划算法792,最佳图搜索算法A*(A*算法)在A算法中,如果满足条件: h(n)≤h*(n) 则A算法称为A*算法。***802,最佳图搜索算法A*(A*算法)在A算法中,如果满足条件:A*条件举例8数码问题h1(n)=“不在位”的将牌数h2(n)=将牌“不在位”的距离和2
831
64751234576
8将牌1:1将牌2:1将牌6:1将牌8:2***81A*条件举例8数码问题28312A*算法的性质A*算法的假设
设ni、nj是任意两个节点,有:C(ni,nj)>其中为大于0的常数几个等式f*(s)=f*(t)=h*(s)=g*(t)=f*(n)其中s是初始节点,t是目标节点,n是s到t的最佳路径上的节点。***82A*算法的性质A*算法的假设几个等式***82A*算法的性质(续1)定理1.1: 对有限图,如果从初始节点s到目标节点t有路径存在,则算法A一定成功结束。***83A*算法的性质(续1)定理1.1:***83A*算法的性质(续2)引理1.1: 对无限图,若有从初始节点s到目标节点t的路径,则A*不结束时,在OPEN表中即使最小的一个f值也将增到任意大,或有f(n)>f*(s)。***84A*算法的性质(续2)引理1.1:***84A*算法的性质(续3)引理1.2: A*结束前,OPEN表中必存在f(n)≤f*(s)。存在一个节点n,n在最佳路径上。f(n)=g(n)+h(n)=g*(n)+h(n)≤g*(n)+h*(n)=f*(n)=f*(s)***85A*算法的性质(续3)引理1.2:存在一个节点n,n在***A*算法的性质(续3)定理1.2: 对无限图,若从初始节点s到目标节点t有路径存在,则A*一定成功结束。引理1.1:A*如果不结束,则OPEN中所有的n有f(n)>f*(s)引理1.2:在A*结束前,必存在节点n,使得f(n)≤f*(s)所以,如果A*不结束,将导致矛盾。***86A*算法的性质(续3)定理1.2:引理1.1:A*如果不结束A*算法的性质(续4)推论1.1: OPEN表上任一具有f(n)<f*(s)的节点n,最终都将被A*选作扩展的节点。由定理1.2,知A*一定结束,由A*的结束条件,OPEN表中f(t)最小时才结束。而f(t)≥f*(t)=f*(s)所以f(n)<f*(s)的n,均被扩展。得证。***87A*算法的性质(续4)推论1.1:由定理1.2,知A*A*算法的性质(续5)定理1.3(可采纳性定理): 若存在从初始节点s到目标节点t有路径,则A*必能找到最佳解结束。***88A*算法的性质(续5)定理1.3(可采纳性定理):***8可采纳性的证明由定理1.1、1.2知A*一定找到一条路径结束设找到的路径s→t不是最佳的(t为目标)则:f(t)=g(t)>f*(s)由引理1.2知结束前OPEN中存在f(n)≤f*(s)的节点n,所以f(n)≤f*(s)<f(t)因此A*应选择n扩展,而不是t。与假设A*选择t结束矛盾。得证。***89可采纳性的证明由定理1.1、1.2知A*一定找到一条路径结束A*算法的性质(续6)推论1.2: A*选作扩展的任一节点n,有f(n)≤f*(s)。由引理2.2知在A*结束前,OPEN中存在节点n’,f(n’)≤f*(s)设此时A*选择n扩展。如果n=n’,则f(n)≤f*(s),得证。如果n≠n’,由于A*选择n扩展,而不是n’,所以有f(n)≤f(n’)≤f*(s)。得证。***90A*算法的性质(续6)推论1.2:由引理2.2知在A*结束前A*算法的性质(续7)定理1.4:设对同一个问题定义了两个A*算法A1和A2,若A2比A1有较多的启发信息,即对所有非目标节点有h2(n)>h1(n),则在具有一条从s到t的路径的隐含图上,搜索结束时,由A2所扩展的每一个节点,也必定由A1所扩展,即A1扩展的节点数至少和A2一样多。简写:如果h2(n)>h1(n)(目标节点除外),则A1扩展的节点数≥A2扩展的节点数***91A*算法的性质(续7)定理1.4:设对同一个问题定义了两个AA*算法的性质(续7)注意:
在定理1.4中,评价指标是“扩展的节点数”,也就是说,同一个节点无论被扩展多少次,都只计算一次。***92A*算法的性质(续7)注意:***92定理1.4的证明使用数学归纳法,对节点的深度进行归纳(1)当d(n)=0时,即只有一个节点,显然定理成立。(2)设d(n)≤k时定理成立。(归纳假设)(3)当d(n)=k+1时,用反证法。设存在一个深度为k+1的节点n,被A2扩展,但没有被A1扩展。而由假设,A1扩展了n的父节点,即n已经被生成了。因此当A1结束时,n将被保留在OPEN中。93定理1.4的证明使用数学归纳法,对节点的深度进行归纳93定理1.4的证明(续1)所以有:f1(n)≥f*(s)即:g1(n)+h1(n)≥f*(s)所以:h1(n)≥f*(s)-g1(n)另一方面,由于A2扩展了n,有f2(n)≤f*(s)(引理1.2)即:h2(n)≤f*(s)–g2(n)(A)由于d(n)=k时,A2扩展的节点A1一定扩展,有g1(n)≤g2(n)(因为A2的路A1均走到了)所以:h1(n)≥f*(s)-g1(n)≥f*(s)–g2(n)(B)比较A、B两式,有h1(n)≥h2(n),与定理条件矛盾。故定理得证。94定理1.4的证明(续1)所以有:f1(n)≥f*(s)对h的评价方法平均分叉树 设共扩展了d层节点,共搜索了N个节点,则:
其中,b*称为平均分叉树。b*越小,说明h效果越好。实验表明,b*是一个比较稳定的常数,同一问题基本不随问题规模变化。95对h的评价方法平均分叉树95对h的评价举例例:8数码问题,随机产生若干初始状态。使用h1: d=14,N=539, b*=1.44;d=20,N=7276, b*=1.47;使用h2: d=14,N=113, b*=1.23; d=20,N=676, b*=1.2796对h的评价举例例:8数码问题,随机产生若干初始状态。96A*的复杂性一般来说,A*的算法复杂性是指数型的,可以证明,当且仅当以下条件成立时: abs(h(n)-h*(n))≤O(log(h*(n))) A*的算法复杂性才是非指数型的,但是通常情况下,h与h*的差别至少是和离目标的距离成正比的。***97A*的复杂性一般来说,A*的算法复杂性是指数型的,可以证明,3,A*算法的改进问题的提出: 因A算法第6步对ml类节点可能要重新放回到OPEN表中,因此可能会导致多次重复扩展同一个节点,导致搜索效率下降。***983,A*算法的改进问题的提出:***98s(10)A(1)B(5)C(8)G目标631118一个例子:OPEN表CLOSED表s(10)s(10)A(7)B(8)C(9)A(7)s(10)B(8)C(9)G(14)A(5)C(9)G(14)C(9)G(12)B(7)G(12)A(4)G(12)G(11)B(8)s(10)A(5)B(8)s(10)C(9)A(5)s(10)B(7)C(9)s(10)A(4)B(7)C(9)s(10)***99s(10)A(1)B(5)C(8)G目标631118一个例出现多次扩展节点的原因在前面的扩展中,并没有找到从初始节点到当前节点的最短路径,如节点A。s(10)A(1)B(5)C(8)G目标631118***100出现多次扩展节点的原因在前面的扩展中,并没有找到从初始节点到解决的途径对h加以限制能否对h增加适当的限制,使得第一次扩展一个节点时,就找到了从s到该节点的最短路径。对算法加以改进能否对算法加以改进,避免或减少节点的多次扩展。***101解决的途径对h加以限制***101改进的条件可采纳性不变不多扩展节点不增加算法的复杂性***102改进的条件可采纳性不变***102对h加以限制定义:一个启发函数h,如果对所有节点ni和nj,其中nj是ni的子节点,满足 h(ni)-h(nj)≤c(ni,nj) h(t)=0 或h(ni)≤c(ni,nj)+h(nj) h(t)=0则称h是单调的。h(ni)ninjh(nj)c(ni,nj)***103对h加以限制定义:一个启发函数h,如果对所有节点ni和nj,h单调的性质定理1.5: 若h(n)是单调的,则A*扩展了节点n之后,就已经找到了到达节点n的最佳路径。 即:当A*选n扩展时,有g(n)=g*(n)。***104h单调的性质定理1.5:***104定理1.5的证明设n是A*扩展的任一节点。当n=s时,定理显然成立。下面考察n≠s的情况。设P=(n0=s,n1,n2,…,nk=n)是s到n的最佳路径P中一定有节点在CLOSED中,设P中最后一个出现在CLOSED中的节点为nj,则nj+1在OPEN中。105定理1.5的证明设n是A*扩展的任一节点。当n=s时,定理显定理1.5的证明(续1)由单调限制条件,对P中任意节点ni有:h(ni)≤C(ni,ni+1)+h(ni+1)
g*(ni)+h(ni)≤g*(ni)+C(ni,ni+1)+h(ni+1)由于ni、ni+1在最佳路径上,所以:g*(ni+1)=g*(ni)+C(ni,ni+1)带入上式有:g*(ni)+h(ni)≤g*(ni+1)+h(ni+1)从i=j到i=k-1应用上不等式,有:g*(nj+1)+h(nj+1)≤g*(nk)+h(nk)即:f(nj+1)≤g*(n)+h(n)
注意:(nj在CLOSED中,nj+1在OPEN中)106定理1.5的证明(续1)由单调限制条件,对P中任意节点ni有定理1.5的证明(续2)重写上式:f(nj+1)≤g*(n)+h(n)另一方面,A*选n扩展,必有:f(n)=g(n)+h(n)≤f(nj+1)比较两式,有:g(n)≤g*(n)但已知g*(n)是最佳路径的耗散值,所以只有:g(n)=g*(n)。得证。107定理1.5的证明(续2)重写上式:f(nj+1)≤g*(h单调的性质(续)定理1.6: 若h(n)是单调的,则由A*所扩展的节点序列其f值是非递减的。即f(ni)≤f(nj)。
***108h单调的性质(续)定理1.6:***108定理1.6的证明由单调限制条件,有:h(ni)–h(nj)≤C(ni,nj)=f(ni)-g(ni)=f(nj)-g(nj)
f(ni)-g(ni)-f(nj)+g(nj)≤C(ni,nj)=g(ni)+C(ni,nj)
f(ni)-g(ni)-f(nj)+g(ni)+C(ni,nj)≤C(ni,nj)f(ni)-f(nj)≤0,得证。***109定理1.6的证明由单调限制条件,有:=f(ni)-g(nih单调的例子8数码问题:h为“不在位”的将牌数1 h(ni)-h(nj)=0 (nj为ni的后继节点)-1 h(t)=0 c(ni,nj)=1满足单调的条件。 ***110h单调的例子8数码问题:***110对算法加以改进一些结论:OPEN表上任以具有f(n)<f*(s)的节点定会被扩展。A*选作扩展的任一节点,定有f(n)≤f*(s)。***111对算法加以改进一些结论:***111改进的出发点OPEN=(…………)f*(s)f值小于f*(s)的节点f值大于等于f*(s)的节点fm:到目前为止已扩展节点的最大f值,用fm代替f*(s)h(n)==0fornodesinNEST***112改进的出发点OPEN=(…………)f*(修正过程A1,OPEN:=(s),f(s)=g(s)+h(s),fm:=0;2,LOOP:IFOPEN=()THENEXIT(FAIL);3,NEST:={ni|f(ni)<fm} IFNEST≠()THENn:=NEST中g最小的节点 ELSEn:=FIRST(OPEN), fm:=f(n);4,…,8:同过程A。***113修正过程A1,OPEN:=(s),f(s)=g(s)+hs(10)A(1)B(5)C(8)G目标631118前面的例子:OPEN表CLOSED表fms(0+10)s(0+10)10A(6+1)B(3+5)C(1+8)s(0+10)C(1+8)10A(6+1)B(2+5)s(0+10)C(1+8)B(2+5)10A(3+1)s(0+10)C(1+8)B(2+5)A(3+1)10G(11+0)***114s(10)A(1)B(5)C(8)G目标631118前面的h的单调化方法如果令: f(n)=max(f(n的父节点),g(n)+h(n)) 则容易证明,这样处理后的h是单调的。***115h的单调化方法如果令:***115搜索算法的讨论1.弱方法盲目搜索算法产生组合爆炸启发搜索算法属于弱方法,不能保证找到解2.算法分析数学分析统计分析程序分析分析指标:时间和空间***116搜索算法的讨论1.弱方法***116作业1.28数码问题.Figure1.17h1(n)=“不在位”的将牌数DrawoutthesearchingtreeusingA***117作业1.28数码问题.Figure1.17***117第1章、搜索问题有许多智力问题(如梵塔问题、旅行商问题、八皇后问题、农夫过河问题等)许多实际问题(如最优路径规划、人力排班、装箱问题、机器人行动规划等)
都可以归结为在某一状态空间中搜索目标或路径的问题。118第1章、搜索问题有许多智力问题(如梵塔问题、旅行商问题、八皇1192120312141225问题:如何解决这类问题?这类问题不能用简单的数学公式/数学方程来描述,属于非结构化问题。难以获得求解所需的全部信息;更没有现成的算法可供求解使用属于组合爆炸问题,稍大规模的问题就超出了人类的认知负荷解决方法:利用计算机的超人计算能力,通过不断试探搜索找到问题的(最优)解。优点建模简单123问题:如何解决这类问题?这类问题不能用简单的数学公式/数具体方法:状态空间法状态:是指问题状态的的向量表示(x,y,z,….)。问题有初始状态,有目标状态有些状态可能是非法的,问题不可能发展到那种状态问题表示为向量,向量就是在Euclidean空间,因此问题的初始状态和目标状态都是此空间中的点。此类问题的特征是找出从初始状态到目标状态的路径,方法是通过一个状态向另一个状态的转换实现的。124具体方法:状态空间法状态:是指问题状态的的向量表示(x,y问题状态的表示方法(一)125问题状态的表示方法(一)8问题状态的表示方法(二)126问题状态的表示方法(二)9问题状态的变迁127问题状态的变迁10问题状态的表示方法128问题状态的表示方法11问题状态的变迁129问题状态的变迁12搜索问题---主要内容内容: 状态空间的搜索问题。搜索方式:盲目搜索启发式搜索关键问题: 如何利用知识,尽可能有效地找到问题的解(最佳解),寻找过程就是搜索。130搜索问题---主要内容内容:13状态空间法1.状态空间表示方法状态(State):求解过程中每一步问题状况的表示Sk=Sk0,Sk1…)当对每一个分量都给以确定的值时,就得到了一个具体的状态。操作(Operator):也称为算符,它是把问题从一种状态变换为另一种状态的手段。。操作可以是一个机械步骤,一个运算,一条规则或一个过程。状态空间(Statespace):用来描述一个问题的全部状态以及这些状态之间的相互关系。常用表示为(S,F,G)其中,S为问题的所有初始状态的集合;F为操作的集合;G为目标状态的集合。状态空间也可用一个赋值的有向图来表示,称为状态空间图,其中节点表示问题的状态,有向边表示操作。131状态空间法1.状态空间表示方法状态(State):求解过程状态空间法求解问题的基本过程:首先为问题选择适当的“状态”及“操作”的形式化描述方法;然后从某个初始状态出发,每次使用一个“操作”,递增地建立起操作序列,直到达到目标状态为止;此时,由初始状态到目标状态所使用的算符序列就是该问题的一个解。
状态空间法2.状态空间问题求解132状态空间法求解问题的基本过程:状态空间法15修道士(Missionaries)和野人(Cannibals)问题(简称M-C问题)。设在河的一岸有三个野人、三个修道士和一条船,修道士想用这条船把所有的人运到河对岸,但受以下条件的约束:修道士和野人都会划船,但每次船上至多可载两个人;在河的任一岸,如果野人数目超过修道士数,修道士会被野人吃掉。
如果野人会服从任何一次过河安排,请规划一个确保修道士和野人都能过河,且没有修道士被野人吃掉的安全过河计划。
状态空间法3.状态空间的例子133修道士(Missionaries)和野人(Cann
解:首先选取描述问题状态的方法。在这个问题中,需要考虑两岸的修道士人数和野人数,还需要考虑船在左岸还是在右岸。从而可用一个三元组来表示状态S=(m,c,b)其中,m表示左岸的修道士人数,c表示左岸的野人数,b表示左岸的船数。右岸的状态可由下式确定:右岸修道士数m'=3-m右岸野人数c'=3-c右岸船数b'=1-b在这种表示方式下,m和c都可取0、1、2、3中之一,b可取0和1中之一。因此,共有4×4×2=32种状态。状态空间法3.状态空间的例子134解:首先选取描述问题状态的方法。在这个问题中,需
这32种状态并非全有意义,除去不合法状态和修道士被野人吃掉的状态,有意义的状态只有16种:S0=(3,3,1)S1=(3,2,1)S2=(3,1,1)S3=(2,2,1)S4=(1,1,1)S5=(0,3,1)S6=(0,2,1)S7=(0,1,1)S8=(3,2,0)S9=(3,1,0)S10=(3,0,0)S11=(2,2,0)S12=(1,1,0)S13=(0,2,0)S14=(0,1,0)S15=(0,0,0)有了这些状态,还需要考虑可进行的操作。操作是指用船把修道士或野人从河的左岸运到右岸,或从河的右岸运到左岸。每个操作都应当满足如下条件:一是船至少有一个人(m或c)操作,离开岸边的m和c的减少数目应该等于到达岸边的m和c的增加数目;二是每次操作船上人数不得超过2个;三是操作应保证不产生非法状态。因此,操作应由条件部分和动作部分:条件:只有当其条件具备时才能使用动作:刻划了应用此操作所产生的结果。
135这32种状态并非全有意义,除去不合法状态和修道士操作的表示:用符号Pij表示从左岸到右岸的运人操作用符号Qij表示从右岸到左岸的操作其中:i表示船上的修道士人数j表示船上的野人数操作集本问题有10种操作可供选择:F={P01,P10,P11,P02,P20,Q01,Q10,Q11,Q02,Q20}下面以P01和Q01为例来说明这些操作的条件和动作。操作符号条件动作P01b=1,m=0或m=3,c≥1b=0,c=c-1Q01b=0,m=0或m=3,c≤2b=1,c=c+1
136操作的表示:19搜索问题S0Sg137搜索问题S0Sg20如何实现搜索?讨论的问题:有哪些常用的搜索算法。问题有解时能否找到解。找到的解是最佳的吗?什么情况下可以找到最佳解?求解的效率如何。138如何实现搜索?讨论的问题:211.1回溯策略例:皇后问题1391.1回溯策略例:皇后问题22()140()23()Q((1,1))141()Q((1,1))24()QQ((1,1))((1,1)(2,3))142()QQ((1,1))((1,1)(2,3))25()Q((1,1))((1,1)(2,3))143()Q((1,1))((1,1)(2,3))26()QQ((1,1))((1,1)(2,3))((1,1)(2,4))144()QQ((1,1))((1,1)(2,3))((1,1()QQ((1,1))((1,1)(2,3))((1,1)(2,4))Q((1,1)(2,4)(3.2))145()QQ((1,1))((1,1)(2,3))((1,1()QQ((1,1))((1,1)(2,3))((1,1)(2,4))((1,1)(2,4)(3.2))146()QQ((1,1))((1,1)(2,3))((1,1()Q((1,1))((1,1)(2,3))((1,1)(2,4))((1,1)(2,4)(3.2))147()Q((1,1))((1,1)(2,3))((1,1)()((1,1))((1,1)(2,3))((1,1)(2,4))((1,1)(2,4)(3.2))148()((1,1))((1,1)(2,3))((1,1)()((1,1))((1,1)(2,3))((1,1)(2,4))((1,1)(2,4)(3.2))Q((1,2))149()((1,1))((1,1)(2,3))((1,1)()((1,1))((1,1)(2,3))((1,1)(2,4))((1,1)(2,4)(3.2))Q((1,2))Q((1,2)(2,4))150()((1,1))((1,1)(2,3))((1,1)()((1,1))((1,1)(2,3))((1,1)(2,4))((1,1)(2,4)(3.2))Q((1,2))Q((1,2)(2,4))Q((1,2)(2,4)(3,1))151()((1,1))((1,1)(2,3))((1,1)()((1,1))((1,1)(2,3))((1,1)(2,4))((1,1)(2,4)(3.2))Q((1,2))Q((1,2)(2,4))Q((1,2)(2,4)(3,1))Q((1,2)(2,4)(3,1)(4,3))152()((1,1))((1,1)(2,3))((1,1)递归的思想(续)当前状态目标状态g153递归的思想(续)当前状态目标状态g36一个递归的例子intListLenght(LIST*pList){ if(pList==NULL)return0; elsereturnListLength(pList->next)+1;}NULLpLIST123154一个递归的例子intListLenght(LIST*pL回溯搜索算法 BACKTRACK(DATA)
DATA:当前状态。 返回值:从当前状态到目标状态的路径 (以规则表的形式表示) 或FAIL。155回溯搜索算法 BACKTRACK(DATA)38回溯搜索算法递归过程BACKTRACK(DATA)1, IFTERM(DATA)RETURNNIL;2, IFDEADEND(DATA)RETURNFAIL;3, RULES:=APPRULES(DATA);4, LOOP:IFNULL(RULES)RETURNFAIL;5, R:=FIRST(RULES);6, RULES:=TAIL(RULES);7, RDATA:=GEN(R,DATA);8, PATH:=BACKTRACK(RDATA);9, IFPATH=FAILGOLOOP;10, RETURNCONS(R,PATH);156回溯搜索算法递归过程BACKTRACK(DATA)39存在问题及解决办法解决办法:对搜索深度加以限制记录从初始状态到当前状态的路径当前状态问题:深度问题死循环问题157存在问题及解决办法解决办法:当前状态问题:40回溯搜索算法1BACKTRACK1(DATALIST)
DATALIST:从初始到当前的状态表(逆向) 返回值:从当前状态到目标状态的路径 (以规则表的形式表示) 或FAIL。158回溯搜索算法1BACKTRACK1(DATALIST)41回溯搜索算法11, DATA:=FIRST(DATALIST)2, IFMENBER(DATA,TAIL(DATALIST)) RETURNFAIL;
3, IFTERM(DATA)RETURNNIL;4, IFDEADEND(DATA)RETURNFAIL;5, IFLENGTH(DATALIST)>BOUND RETURNFAIL;6, RULES:=APPRULES(DATA);7,LOOP:IFNULL(RULES)RETURNFAIL;8, R:=FIRST(RULES);159回溯搜索算法11, DATA:=FIRST(DATALIS回溯搜索算法1(续)9, RULES:=TAIL(RULES);10, RDATA:=GEN(R,DATA);11, RDATALIST:=CONS(RDATA,DATALIST);12, PATH:=BACKTRCK1(RDATALIST)13, IFPATH=FAILGOLOOP;14, RETURNCONS(R,PATH);160回溯搜索算法1(续)9, RULES:=TAIL(RULE一些深入的问题失败原因分析、多步回溯QQ161一些深入的问题失败原因分析、多步回溯QQ44一些深入问题(续)回溯搜索中知识的利用 基本思想(以皇后问题为例): 尽可能选取划去对角线上位置数最少的。QQQQ3223162一些深入问题(续)回溯搜索中知识的利用QQQQ31.2图搜索策略问题的引出回溯搜索:只保留从初始状态到当前状态的一条路径。图搜索:保留所有已经搜索过的路径。
1631.2图搜索策略问题的引出46一些基本概念节点深度: 根节点深度=0 其它节点深度=父节点深度+10123164一些基本概念节点深度:012347一些基本概念(续1)路径 设一节点序列为(n0,n1,…,nk),对于i=1,…,k,若节点ni-1具有一个后继节点ni,则该序列称为从n0到nk的路径。路径的耗散值 一条路径的耗散值等于连接这条路径各节点间所有耗散值的总和。用C(ni,nj)表示从ni到nj的路径的耗散值。165一些基本概念(续1)路径48一些基本概念(续1)扩展一个节点 生成出该节点的所有后继节点,并给出它们之间的耗散值。这一过程称为“扩展一个节点”。166一些基本概念(续1)扩展一个节点49一般的图搜索算法1,G=G0(G0=s),OPEN:=(s);2,CLOSED:=();3,LOOP:IFOPEN=()THENEXIT(FAIL);4,n:=FIRST(OPEN),REMOVE(n,OPEN), ADD(n,CLOSED);5,IFGOAL(n)THENEXIT(SUCCESS);6,EXPAND(n)→{mi},G:=ADD(mi,G);167一般的图搜索算法1,G=G0(G0=s),OPEN:=一般的图搜索算法(续)7,标记和修改指针: ADD(mj,OPEN),并标记mj到n的指针; 计算是否要修改mk、ml到n的指针; 计算是否要修改ml到其后继节点的指针;8,对OPEN中的节点按某种原则重新排序;9,GOLOOP;168一般的图搜索算法(续)7,标记和修改指针:51节点类型说明…...…...…...…...…...mjmkml169节点类型说明…...…...…...…...…...mjmk修改指针举例123456s170修改指针举例123456s53修改指针举例(续1)123456s171修改指针举例(续1)123456s54123456修改指针举例(续2)s172123456修改指针举例(续2)s55123456修改指针举例(续3)s173123456修改指针举例(续3)s561.3无信息图搜索过程深度优先搜索宽度优先搜索1741.3无信息图搜索过程深度优先搜索57深度优先搜索1,G:=G0(G0=s),OPEN:=(s),CLOSED:=();2,LOOP:IFOPEN=()THENEXIT(FAIL);3,n:=FIRST(OPEN);4,IFGOAL(n)THENEXIT(SUCCESS);5,REMOVE(n,OPEN),ADD(n,CLOSED);6,IFDEPTH(n)≥DmGOLOOP;7,EXPAND(n)→{mi},G:=ADD(mi,G);8,IF目标在{mi}中THENEXIT(SUCCESS);9,ADD(mj,OPEN),并标记mj到n的指针;10,GOLOOP;175深度优先搜索1,G:=G0(G0=s),OPEN:=(s12384765231847651761232359231847652318476528314765231847652831476528316475283147652831647528316475283714658321476528143765283145761237846512384765283641752831675483214765283714652814376528314576123456789abcd12384765目度优先搜索的性质一般不能保证找到最优解当深度限制不合理时,可能找不到解,可以将算法改为可变深度限制最坏情况时,搜索空间等同于穷举图搜索是一个通用的与问题无关的方法178深度优先搜索的性质一般不能保证找到最优解61宽度优先搜索1,G:=G0(G0=s),OPEN:=(s),CLOSED:=();2,LOOP:IFOPEN=()
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024年ABPLC培训教程:为工业4.0时代做好准备
- 《轻轻地》教案与2024年教育趋势
- 人教部编版《道德与法治》二年级上册第10课《我们不乱扔》精美课件(第1课时)
- 第47届世界技能大赛江苏省选拔赛工业设计技术项目技术工作文件
- 2023年度淄博市职业技能大赛竞赛方案(砌筑)
- 《创意中国龙》课件:2024年全新演绎中华民族精神
- 《陆游生平上课》课件
- 2024-2025年河南中考物理试卷及答案
- 2024年全球视野下的SWOT分析法课件解析
- 山羊兹拉特草原课件:2024年教学新视角
- 2024届高考英语复习语法填空课件
- 原地8字舞龙课课件高一上学期体育与健康人教版
- 如何有效应对学习中的困难和挑战
- 医院感染管理培训课件消毒剂的选择与使用
- 平台分销返佣合作协议
- 中国城市行政代码
- 低纤维蛋白原血症的护理查房
- 数学4教材介绍
- 全国大学生职业生涯规划大赛
- 肩关节镜术的健康宣教
- 关于学校安全保卫工作存在的问题及对策
评论
0/150
提交评论