人工智能——图搜索



一.数据驱动和目标驱动搜索

以下情况建议使用目标驱动搜索:

(1)目标或假设是在问题陈述中给出的。例如定理的证明,目标就是定理。

(2)与问题数据匹配的规则非常多,会产生大量分支。

(3)问题数据不是给定的,目标驱动搜索可以引导如何获取数据。

以下情况建议使用数据驱动搜索:

(1)问题的初始陈述给出了所有或大部分数据。

(2)潜在目标的数量非常庞大。

(3)难以组成目标或假设。

总而言之,要考虑的主要因素就是分支因子(即每个方向新状态的平均数量)。

二.盲目搜索

1.回溯搜索

回溯搜索就是从起始状态出发沿一条路径前进,要么达到目标,要么到达死端。如果到达死端,它便回溯到路径上含有尚未分析过兄弟的最近节点。这种回溯思想被应用到其他算法。

2.宽度优先搜索

算法如下:

(1)把起始节点放到OPEN表中;

(2)如果OPEN表是个空表,则失败退出,否则继续;

(3)把第一个节点nOPEN表中取出,放入CLOSE表中;

(4)扩展节点n,如果没有后继节点,则转向(2);

(5)把n的后继节点中不在OPENCLOSE表中的放到OPEN表的末端,这些后继节点要有指向父节点n的指针;

(6)如果n的任意一个后继节点是一个目标节点,成功推出;否则,转向(2)。

显而易见,宽度优先搜索方法能够保证找到一条到目标节点的最短路径。

递归形式的宽度优先搜索略。

3.深度优先搜索

含有深度界限的深度优先搜索:

1)把起始节点放到OPEN表中;

2)如果OPEN表是个空表,则失败退出,否则继续;

3)把第一个节点nOPEN表中取出,放入CLOSE表中;

4)扩展节点n,如果节点n的深度等于最大深度,或者n没有后继节点,则转向(2);

5)把n的后继节点中不在OPENCLOSE表中的放到OPEN表的首端,这些后继节点要有指向父节点n的指针;

6)如果n的任意一个后继节点是一个目标节点,成功推出;否则,转向(2)。

可以看出,与宽度优先的唯一区别就是新节点放在open表的开始还是结尾。

分支过程:如果含有多条路径,要找最优,则可以简单地利用分支过程降低复杂度。找到目标后,记录下路径长度为MIN,若搜索到的节点路径大于MIN,则放弃搜索,回溯到其他节点;如果小于MIN,这把较小值赋给MIN

递归形式的深度优先搜索算法:
OPENCLOSE为全局变量;

Depthsearch(){

如果OPEN表为空,return fail

current=OPEN中的第一个值;

If(current==goal)  return success;

else{

OPEN表中移除current,放入CLOSE表中;

current的孩子节点中的不是OPENCLOSE表中的添加到OPEN的开头;

}

Depthsearch();

}

还可以进一步简化这个过程:用递归本身来组织状态空间中的状态和路径,而不用显式的OPEN表,用全局变量CLOSE来探测重复状态并防止死循环:

CLOSE为全局变量;

Depthsearch(){
if (current==goal)  return success;

Add current to CLOSE;

While(current has unexamined child){

Child =next unexamined child;

If (child not a member of closed){

If(depthsearch(child)==success) return success;

}

}

Return fail;

}

4.等代价搜索

寻找具有最小代价的解答路径,是宽度优先搜索的推广:

(1)把起始节点放入OPEN表中,如果是目标节点,则成功退出,否则令g(s)=0

(2)如果OPEN是空表,则失败退出;

(3)从OPEN表中选择一个g(i)最小的节点,如果几个节点都合格,有目标节点就选目标节点成功退出,否则选一个节点iOPEN表中移出放入CLOSE表中;

(4)扩展节点i,如果没有后继节点,则转向第(2)步;

(5)对于节点i的每个后继节点j,计算g(j)=g(i)+c(i,j),并把所有后继节点j放入OPEN表中,提供回到节点i的指针;

(6)转向第(2)步。

5.与或图搜索

与常规的图搜索相比,与或图搜索需要多保存一些记录。检查或后继节点的方法与回溯中一样:一旦找到了沿或节点把目标连接到起始节点的一条路径,那么这个问题就解决了。如果一条路径失败,那么算法可以回溯并试验另一个分支。在检查与节点时,要证明与节点为真就必须证明这个节点的所有与后继都为真。 

下面给出目标驱动的深度优先的与或图搜索算法:

先定义节点:

class Node{

Node Parent;  //指向父节点指针

Int Value;  //False=0,True=1,不确定=2

Int type;  //当前节点类型,与=0,或=1

Int child_number;  //子节点数目

Int child_check;  //已检查子节点数目

}

在建立图时,把节点转换成纯粹的与节点或者或节点,例如:

 

(1)把头结点放入OPEN表中,如果头结点为真或假,则成功退出;

(2)如果OPEN为空则失败退出,如果头结点为真或假,则成功退出;

(3)移出OPEN中第一个元素i,放入CLOSE中,current=i

(4)如果current为真:

a.父节点是与,把父节点已检查子节点数目加一,如果父节点已检查数目等于父节 点的子节点数目,则current=父节点,返回(2);

b.父节点是或,父节点为真,current=父节点,并删除currentOPEN表中的所有 子节点,返回(2);

(5)如果current为假:

a.父节点是与,父节点为假,current=父节点,并删除currentOPEN表中的所有子节点,返回(2);

b.父节点是或,把父节点已检查子节点数目加一,如果父节点已检查数目等于父节点的子节点数目,则父节点为假,current=父节点,返回(2);

(6)如果current不确定:

a.如果还有子节点,把子节点放入OPEN表中,返回(2);

b.如果没有子节点,则让current为假,返回(5);

三.启发式搜索

1.估价函数f(n)

f(n)=g(n)+h(n)

其中,g(n)是从任意状态n到起始状态的路径长度,h(n)是状态n到目标距离的启发性估计。估价函数的g(n)分量是这种搜索带有更多的宽度优先性,这防止了搜索被错误的评估所误导:如果启发对一条无法到达目标的路径上的状态连续给出“好的”评估,那么g值会上升来控制f,从而迫使搜索返回一条较短的解路径,这保证算法不会永久迷失。

当然,也可以让g(n)=0,来更快地找到目标;或则让h(n)=0,就是宽度优先搜索。

2.A算法

算法如下:

与宽度优先搜索不同之处就是:要对对OPEN表中的所有元素按照f进行排序,如果某个节点已经存在于OPENCLOSE表中,如果f值较小,则修改已存在节点的f值。还可以把OPENCLOSE表维护为堆或左撇子树来提高效率。

3.A星算法

我们定义一个估价函数:f星(n)=g星(n)+h星(n)

其中:g星(n)是从起始节点到节点n的最短路径代价,h星(n)是从n到目标的最短路径的实际代价。这样f星(n)就是从起始节点经过节点n到达目标的最优路径的实际代价。

可采纳的算法:如果在任何图中只要存在从起始节点到达目标状态的最优路径,搜索算法就可以找到这样的路径,那么这个算法就是可采纳的算法。

算法:如果在A算法中使用的评估函数满足h(n)<=h星(n),这种算法就称为A星算法。

所有的S星算法都是可采纳的。

四.博弈中的启发式搜索

1.可穷举搜索的极小极大过程

在状态可以穷举的博弈中,主要难点是如何考虑对手的动作。一简单方式是假定对手具有相同的关于状态空间的知识。MAX代表棋手,MIN代表对手,MAX总是最大化他的优势,MIN总是使MAX的优势最小。

如下图所示,每个叶子节点有一个01的值,代表MIN取胜或MAX取胜。极小极大搜索根据下面的规则沿连续的父节点向上传播这些值:

如果父节点是一个MAX节点,那么把孩子中的最大值赋给它;如果父节点是一个MIN节点,那么把孩子中的最小值赋给它。于是赋给每个状态的值表示了这个棋手可以期望达到的最佳状态值,算法就按此值来选择移动方法。

 

2.固定层深的极小极大过程

即探索到n层,然后给每个叶子节点赋一个启发值。

3.a-b过程

即对固定层深的极小极大搜索过程进行修剪。

 

它与分支过程思想类似:先沿着一条路径搜索到底,比如搜索完A,B,E,K,L后,E的值为3,由于F最小为5,故F的另一个分支就不用再搜索。同样,由于B的值为3,而C的值最大为0,故C的另一个分支也不用再搜索,D的另一个分支也不用再搜索。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://xiahunao.cn/news/1379976.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

手机声音同步到另一部手机_手机数据同步、丢失不再可怕

日常生活中&#xff0c;我们使用手机最大的难题可能就是手机资料的丢失了。熊孩子玩手机在你不注意的情况下把照片删掉了&#xff0c;换新手机资料的同步更是麻烦&#xff0c;还有甚者就是手机丢了&#xff0c;里面的数据资料全面化为泡影&#xff0c;想哭都没地儿哭。而现在不…

互联网日报 | 华为发布首款商用台式机;京东健康正式登陆港交所;苹果推出首款头戴式耳机...

今日看点 ✦ 京东健康港交所上市&#xff0c;募资265亿港元、总市值超3400亿港元 ✦ 华为发布首款商用台式机&#xff0c;商用PC布局更进一步 ✦ 淘宝特价版注册“1元更香”商标&#xff0c;每月最后一周定为“1元更香节” ✦ 大众汽车&#xff08;安徽&#xff09;正式揭牌&am…

富士康登陆A股 工业互联网的盛宴

富士康工业互联网&#xff08;FII&#xff09;于6月8日登陆A股&#xff0c;开盘大涨44.01%&#xff0c;报19.83元&#xff0c;目前FII总市值达3905亿元&#xff0c;超过海康威视、美的集团等企业&#xff0c;位居A股市值第14名&#xff0c;同时也成为A股市值最高的科技企业。 …

要闻君说: 百度云喜提信息安全首证;紫光展锐携5G芯片进击2019MWC;OPPO首发5G手机惊艳亮相……...

关注并标星星CSDN云计算 每周三次&#xff0c;打卡即read 更快、更全了解泛云圈精彩news go go go 大家好&#xff01;偶是要闻君。活动多多、新闻不少&#xff0c;精神饱满的周一&#xff0c;学起来&#xff01;&#xff01;&#xff01; 文/要闻君 一年一度&#xff0c;十分…

LVS/DR+Keepalived负载均衡实战(一)

引言 负载均衡这个概念对于一个IT老鸟来说再也熟悉不过了&#xff0c;当听到此概念的第一反应是想到举世闻名的nginx&#xff0c;但殊不知还有一个大名鼎鼎的负载均衡方案可能被忽略了&#xff0c;因为对于一般系统来说&#xff0c;很多应用场合中采用nginx基本已经满足需求&a…

【Java】数据交换 Json 和 异步请求 Ajax

&#x1f384;欢迎来到边境矢梦的csdn博文&#xff0c;本文主要讲解Java 中 数据交换和异步请求 Json&Ajax 的相关知识&#x1f384; &#x1f308;我是边境矢梦&#xff0c;一个正在为秋招和算法竞赛做准备的学生&#x1f308; &#x1f386;喜欢的朋友可以关注一下&#…

go语言从0基础到安全项目开发实战

一.环境搭建并helloworld 搭建环境比较简单 1.1安装SDK 到以下链接下 Go下载 - Go语言中文网 - Golang中文社区 下载windows版本64位zip包 https://studygolang.com/dl/golang/go1.20.7.windows-amd64.zip 1.2配置环境变量 不配置的话就只能在bin目录下才能运行go命令 …

linux安装ftp

一、安装 参考博客 https://blog.csdn.net/dafeigecsdn/article/details/126518069 rpm -qa |grep vsftpd # 查看是否安装ftp yum -y install vsftpd # 安装vsftpuseradd -d /home/lanren312 lanren312 # 指定在/home目录下创建用户 passwd lanren312 # 给用户设置密码 # 输…

20220209学速写

抖音上学速写感觉不太行呀。虽然看起来简单但感觉手很笨&#xff0c;感觉从基础入门后开始讲的&#xff0c;而我还缺少基础。。。

人物速写示范(30张图)

人物速写示范&#xff08;30张图&#xff09; 2007/01/11 10:59 扫描自《叶老师速写教学示范》——湖北美术出版社叶军&#xff0c;1964年生于湖北沙市&#xff0c;毕业于湖北美术学院&#xff0c;学士学位。现为湖北美术学院副教授&#xff0c;中国画系副主任&#xff0c;研究…

学习速写的方法有哪些?如何快速学会速写?

本文由“学美术上美术集网校”原创,图片素材来自网络,仅供学习分享 学习速写的方法有哪些?如何快速学会速写?很多初学绘画者,包括有些已经进行过一些素描训练的学画青少年想画速写,总感到无从下手。在与这些初学绘画者的接触中,我总是尽量告诉他们一些速写方面的训练方…

Vscode 速写 HTML

Vscode 速写 HTML 文章目录 Vscode 速写 HTML1. 快速生成HTML结构2. 快速生成标签3. 生成指定标签4. 插件 1. 快速生成HTML结构 输入 ! 后按 Tab <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name&qu…

速写篇—速写打型需要几步?这5步准确起型~

速写怎么打好型&#xff1f;速写打型需要哪些步骤&#xff1f;很多小伙伴在学习美术速写的时候都会遇到各种问题今天美术集网校带大家了解下速写如何打好型&#xff1a; 画速写人物真的很难吗?如果你画的人物得不到高分&#xff0c;你可能需要考虑一下是不是打形没有画好&…

速写想要拿高分?这些要点能提分~

速写怎么画&#xff1f;怎么画速写才能提高分&#xff1f;很多小伙伴在学习美术都会遇到各种问题今天美术集网校带大家了解下速写提高分的方法吧&#xff1a; 速写想要取得高分&#xff0c;首先就要先突破难点&#xff0c;找到短板&#xff0c;逐个克服才能更好的把握速写。 首…

学速写的步骤来啦,零基础学习更简单

最近美术集小编收到了很多新手学习速写的问题点&#xff0c;想要学习速写&#xff0c;应该从哪些步骤开始呢&#xff1f;今天广州美术集网校就帮大家整理了一些画速写的步骤&#xff0c;掌握好这些步骤&#xff0c;速写的学习就像开了加速器&#xff1a; ​ 第一&#xff0c;我…

先别急着练速写,人物慢写才是第一步

人物慢写怎么画&#xff1f;人物慢写和速写的区别在哪里&#xff1f;很多小伙伴在学习速写都会遇到各种问题今天美术集网校带大家了解下人物速写和慢写的区别之处吧&#xff1a; ​ 想要学好速写&#xff0c;我们就要先了解速写&#xff0c;慢写是学习速写的第一步&#xff0c…

25个速写素描Procreate笔刷

这套画笔套装共包含25支Procreate画笔&#xff0c;其中包括9个线条笔刷、7支孵化笔刷、5个条纹画笔、煤炭画笔和3个填充画笔。每支笔都对笔的压力和倾斜度非常敏感&#xff0c;能够精确地捕捉你的绘画动作&#xff0c;让你轻松实现所需的效果。

风格速写(代码敲累了)

就这样吧&#xff0c;外面下着雨&#xff0c;电脑待着机&#xff0c; 而我充着电

美术集速写模特姿势参考大全,又酷又飒的姿势你画过了吗?

我们平常画的速写模特一般都是站姿、坐姿、或者蹲姿&#xff0c;这些都是最经常练习到的&#xff0c;今天美术集给大家分享一波养眼的动态速写&#xff0c;快看看这些速写姿势你都画过了没有&#xff1f; 首先&#xff0c;来一波正常速写图&#xff1a; 接来下就是比较冷门的速…