人工智能原理(3)

news2024/11/23 21:17:28

目录

一、搜索策略

1、引言

2、盲目搜索

3、启发式搜索

二、基于状态空间图搜索技术

1、图搜索基本概念

2、状态空间搜索

3、一般的图搜索算法

三、盲目搜索

1、广度优先搜索

2、深度优先搜索

3、有界深度搜索和迭代加深搜索

四、启发式算法

1、启发性信息和评估函数

2、A算法

3、A*算法

4、迭代加深A*算法

5、回溯策略和爬山法

五、问题规约和与或图启发式搜索

1、问题规约

2、与或图表示

3、与或图启发式搜索

六、博弈

1、概念

2、极大极小过程

3、α-β过程


一、搜索策略

1、引言

        搜索被列为人工智能研究的四个核心问题(知识的模型化和表示,启发式搜索,各种推理方法,人工智能系统和语言)

        应用:在专家系统、自然语言理解、自动程序设计、模式识别、机器人学、信息检索和博弈等领域都广泛使用搜索技术。

        搜索问题一般包括两个重要问题:搜索什么(搜索目标)和在哪里搜索(搜索空间)。

        由于人工智能中大多数问题的状态空间(也称搜索空间)在问题求解之前不是全部知道的,所以人工智能的搜索分成两个阶段:状态空间的生成阶段和该状态空间中对所求问题状态的搜索阶段。

        搜索根据是否使用启发式知识,搜索被分为盲目搜索和启发式搜索两种。

2、盲目搜索

        盲目搜索:指在问题的求解过程中,不运用启发性知识,只按照一般的逻辑法则或控制性知识,在预定的控制策略下进行搜索,在搜索过程中获得的中间信息不用来改进控制策略。

        特点:只按照规定的路线进行,缺乏对求解问题的针对性,需要进行全方位的搜索,没有选择最优的搜索途径。具有盲目性,效率较低。

        常见的盲目搜索:深度优先搜索和广度有限搜索。

3、启发式搜索

        启发式搜索:指在问题的求解过程中,为提高搜索效率,运用与问题有关的启发式知识,即解决问题的策略、技巧、窍门等实践经验和知识,来指导搜索朝着最有希望的方向前进,加快问题求解过程并找到最优解。

        常见的启发式搜索有:A算法和A*算法。

        搜索策略可以通过四个准则评价:完备性、时间复杂性、空间复杂性、最优性。

二、基于状态空间图搜索技术

1、图搜索基本概念

        (1)显式图和隐式图

                显式存储:把与问题有关的全部状态空间图,即相应的全部有关知识,都直接存入知识库,这种存储方式为显式存储或显式图。

                隐式存储:只存储与问题求解有关的部分知识,这种存储方式为隐式存储。

        (2)图搜索的基本思想

                图搜索就是一种在图中寻找路径的方法,这种寻找过程从图中的初始节点开始,至目标节点为止,其中初始节点和目标节点分别代表产生式系统的初始数据库和满足终止条件的数据库。

                图搜索方法:先把问题的初始状态作为当前状态,选择适用的算符对其进行操作,生成一组子状态,检查目标状态是否在其中出现,若出现,则搜索成功,找到问题的解,若不出现,则按照某种搜索策略从已生成的状态中再选一个状态作为当前状态。不断重复上述过程,直到目标状态出现或者不再有可供操作的状态及算符时为止。

2、状态空间搜索

        状态空间搜索:用搜索技术来求解问题的系统均定义一个状态空间,并通过适当的搜索算法在状态空间中搜索解答或解答路径。状态空间搜素的研究焦点在于设计高效的搜索算法,以降低搜索代价并解决组合爆炸问题。

        什么是状态空间图?

                假设有三枚硬币,用一个三维变量表示为[q1,q2,q3],其中qi=0为硬币正面,qi=1为硬币反面,所以一共出现有8种组合,互相的变换如下面的状态空间图。

        状态空间图:人工智能科学中,把这种描述问题的有向图称为状态空间图,简称状态图。状态图中,从初始节点到目标节点的一条路径,或者所找的目标节点,就是相应问题的一个解。

        问题状态空间表示法:“状态”+“操作”=“状态空间” 

        何为状态,操作,状态空间?

        状态:是指为了描述问题求解过程中不同时刻下状况间的差异,而引入的最少的一组变量的有序组合,表示形式为:S=[S_0,S_1,S_2,...S_n]^T,其中每一个S_i作为一个分量,当每个分量的值给定时,就得到一个具体的状态,状态的维数可以是有限的,也可以是无限的。另外,状态也可以表示成多元数组或其他形式,状态主要用于表示叙述性知识。

        操作:运算符或算符,它引起状态中某些分量发生改变,从而使问题由一个具体状态改变为另一个具体状态。操作指出状态之间的关系,用于反映过程性知识。

        状态空间:一个由问题的全部可能状态及其相互关系(即操作)所构成的有限集合。状态空间常记为二元组:(S,O)。其中S为问题求解(搜索)过程中的所有可能到达的合法状态构成的集合。O为操作算子的集合,操作算子的执行会导致问题状态的变迁。

3、一般的图搜索算法

        图搜索一般搜索过程由尼尔逊提出GRAPH SEARCH,是表达能力很强的一个搜索策略框架。

        在此过程中要用到OPEN表和CLOSE表,OPEN表用于待扩展的节点,节点进入由OPEN表中的排列顺序是由搜索策略决定,CLOSE表用于存放已经扩展的节点,当前节点进入CLOSE表的最后。

        图搜索一般过程如下

        (1)建立一个只含有初始节点S_0的搜索图G,把S_0放到OPEN表中。

        (2)建立CLOSE表,其初始为空表。

        (3)LOOP:若OPEN表为空表,则问题无解,失败并退出。

        (4)把OPEN表上的第一个节点移出并放进CLOSE表的后面,标记此节点为节点n(在CLOSE表的编号栏标记)

        组合爆炸问题:解题因素多时,因素的可能组合个数会爆炸性(指数级)增长,引起状态空间的急剧膨胀,解决组合爆炸问题的方法实际上就是选用好的搜索策略,使得只要搜索状态空间很小部分就能找到解答。

三、盲目搜索

1、广度优先搜索

        一层一层搜索,搜索完本层后所有结点才能进入下一层。OPEN表作为队列,先进先出,优先向横向方向发展,深度从0开始。

        广度优先搜索空间复杂度:O(b^d) (假设每层b个节点,一共为d层树)

        特点:总能找到目标节点,但时间,空间复杂度高,搜索效率低。

2、深度优先搜索

        沿着树的深度遍历树的节点,尽可能深的搜索树的分支。

         深度优先搜索空间复杂度:O(bd) (相较于广搜有所降低)

         特点:相对宽度优先需要的空间较少,但容易陷入无限循环,找不到最优解。

3、有界深度搜索和迭代加深搜索

        有界深度搜索:在深度搜索的基础上加上了深度上的限制d_m(状态空间的直径),当深度达到d_m时,如果还没有找到解答,也将停止对该分支的搜索,换到另外一个分支进行搜索。

        d_m的值可以进行改变,这就是迭代加深搜索的基本思想。

四、启发式算法

        正向推理:从初始问题出发向目标状态方向执行,用于状态空间的搜索。

        反向推理:从目标状态出发向初始状态方向执行,用于问题规约中。

1、启发性信息和评估函数

        启发式搜索:如果能在选择节点时能充分利用与问题有关的特征信息,估计出节点的重要性,就能在搜索时选择重要性较高的节点,以利于求得最优解。

        启发信息:与被解问题的某些特征值有关的控制信息(如解的出现规律,解的结构特征等)称为搜索的启发信息。

        评估函数:评估待扩展各节点在问题求解中的价值,即评估节点的重要性。

        评估函数公式:f(x)=g(x)+h(x)

        其中g(x)为初始节点到一个节点x的实际代价,h(x)从这个节点x到目标节点的最优路径的估计代价,体现了问题的启发式信息,h(x)称为启发式函数。

2、A算法

        每一步都按照评估函数来对OPEN表中的节点排序,为A算法,又称启发式搜索算法。

具体方法参见:启发式搜索算法:A算法(全局、局部择优算法)+A*算法 解决八数码问题

3、A*算法

        搜索法总能找到最短(代价最小)的解答路径,则称为算法有可采纳性,广度优先搜索就是可采纳的,但是效率不高。

        定义h`(n)为实际代价,h(n)为估计代价。

        当h(x)<h`(x)时,h(x)弱,则OPEN表中节点排序误差较大,易产生较大搜索。

        当h(x)>h`(x)时,h(x)强,使A*算法失去可采纳性,从而不能找到最短解答路径。

        当h(x)=h`(x),可以确保产生最小的搜索图,且搜索到的解答路径是最短的。但这是不可能的。

        设计h(x)时,若g(x)=0,则搜索接近深度优先搜索,h(x)=0则搜索接近广度优先搜索。

        可以在设计h(x)时添加一个\omega使f(x)=g(x)+\omegah(x),通过增大减小\omega的值来满足深度或广度搜索。

4、迭代加深A*算法

        设置一个限制值C,当节点n的子节点n`的f(n`)<C时,才扩展n`节点入栈,并更新C的值(取C和f(n`)较小者)。

         算法终止条件:找到目标节点或栈空且限制值C=∞。

5、回溯策略和爬山法

        回溯策略:保存每次扩展出的子节点,并按照h(x)的值从小到大排列,如此,相当于爬山过程中记住途中的岔路口,只要当前路径搜索失败就回溯到时序上最近的岔路口,向另一路径方向搜索,以保证最后到达最高峰(目标状态)

        爬山法:选h(x)最小的子节点进行扩展(贪心算法),适合单一极值问题,不适合多极值问题,不一定获得最优解。

五、问题规约和与或图启发式搜索

1、问题规约

        问题规约:复杂问题变换为若干较为简单的子问题(本原问题)后再加以分别求解。

         问题规约是一种广义的状态空间搜索技术,其状态空间可表示为三元组:SP=(S_0,O,P)

        S_0是初始问题,即要求解问题。

        P是本原问题集,其中每一个问题都不用证明,如公理,已知事实。

        O是操作算子集,它是一组变换规则,通过一个操作算子把一个问题化为若干个子问题。

        变换三种情况:

        (1)状态变迁——导致问题从上一状态到下一状态,类似一般图搜索技术中操作算子的作用

        (2)问题分解——分解问题为需同时解决子问题,不改变问题状态

        (3)基于状态变迁的问题分解——先导致状态变迁,再实现问题分解,两个过程联合执行

2、与或图表示

        与或图就是用于表示此类求解过程的一种方法,是一种树图的形式。

         “与”树:“与”关系中任何一个子问题无解,则原问题无解。

        “或”树:“或”关系只有当全部子问题无解时,原问题才无解。

        K-连接:用于表示从父节点到子节点间的连接,并以圆弧指示同父子节点之间的“与”关系,K为这些子节点的个数,一个父节点可以有多个外向的K-连接,K大于1的连接为超链接,K等于1时退化为普通链接,而当所有超链接的K都等于1时,与或图退化为一般图。

        根、叶、终节点:根节点和叶节点不需要解释,终节点是指当问题规约伴随问题分解后,目标状态不再由单一节点表示,而是由一组节点联合表示,能用于联合表示目标状态的节点为终节点,终节点必然是叶节点,非终节点的叶节点往往指示了解答搜索的失败。

        解图生成:在与或图搜索过程中,从根节点开始选一外向连接,并从该链接指向的每个子节点出发,再选一外向连接,如此反复进行,直到所有外向连接都指向终节点为止。

3、与或图启发式搜索

        与或图中搜索的解图,不是由相邻节点间路径连接成的解路径,所以估算评估函数f(n)的第一分量g(n)没有意义,只需要算第二分量h(n),此时h(n)是对最小解图代价的估计。

        此时f(n)=K+h(n_1)+h(n_2)+...+h(n_k)

        算法应用的若干问题:

         (1)从局部解图中选择加以扩展的节点:鉴于与或图搜索是解图而非解路径,所以选择f(n)=h(n)的值最小的节点加以扩展并不一定会加速搜索过程,而应选择导致解图代价发生较大变化的节点优先加以扩展以使搜索的注意力快速地聚焦到实际代价较小的候选解图上。

        (2)AO*算法可采纳性:AO*算法应用要求遵从以下约束:总能满足h(n)\leqslant h^*(n)且满足h(n)满足单调限制条件,应用AO*算法一定能找到代价最小的解图。

六、博弈

1、概念

        二人零和:在博弈中只有“敌、我”二方,且双方的利益完全对立,其赢得函数之和为零,即\phi _1+\phi_2=0,其中\phi_1为我方赢得利益,\phi_2为敌方赢得利益。

        博弈三种结局:

        (1)我胜:\phi_1>0,敌败:\phi_2<0

        (2)我负:\phi_1<0,敌胜:\phi_2>0

        (3)平局:\phi_1=\phi_2=0

        全信息:博弈双方都了解当前的格局及过去的历史。

        非偶然:博弈双方都根据得失大小进行分析,选取我方赢得最大,敌方赢得最小的对策,而不是偶然的随机对策。

2、极大极小过程

        极大极小过程是考虑双方博弈若干步之后,从可能的走法中选一步相对好的走法来走,即从有限的搜索深度范围内进行求解。

        静态估价函数e(x),以便对棋局的态势做出评估,博弈双方分别为MAX为MIN,其中p代表棋局,对于有利于MAX方态势,e(p)取正,对于有利于MIN方态势,e(p)取负,态势均衡时,e(p)取零。

        博弈树:博弈过程可以采用与或树进行知识表达。不同级别(深度)的节点,分别交替属于敌我双方,在博弈树生成过程中,敌我双方轮流进行扩展的,新生成的子节点,双方交替出现。

3、α-β过程

       α-β过程首先使搜索树某一部分达到最大深度,这时计算某些MAX节点的α值,或者某些MIN节点的β值,随着搜索的继续,不断修改个别节点的α或β值。对任意节点,当某一后继节点的最终值给定时,就可以确定该节点的α或β值,当该结点的其他后继节点的最终值给定时,就可以该结点的α或β值进行修正。

        MAX节点的α值永不下降,MIN节点的β值永不增加。

        在α-β过程中可以及时剪掉一些无用分枝,来提高算法的效率。

        

参考视频:【人工智能教程】3.1 - 搜索策略引言_哔哩哔哩_bilibili

参考书籍:《人工智能原理》丁世飞

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

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

相关文章

容器技术发展和编排技术演进之路

目录 Jail 时代 1979 年 贝尔实验室发明 chroot 2000 年 FreeBSD 4.0 发行 FreeBSD Jail 2001 年 Linux VServer 发行 2004 年 Solaris Containers 发行 云时代 2006 年 google 推出 Process Containers 2008 年 LXC 推出 2011 年 CloudFoundry 推出 Warden 2013 年 LMCTFY 启动…

JavaScript 【DOM】

【DOM】 原创内容&#xff0c;转载请注明出处&#xff01; 一、DOM基本概念 DOM&#xff08;Document Object Model&#xff0c;文档对象模型&#xff09;是 JavaScript 操作 HTML 文档的接口&#xff0c;使文档操作变得非常优雅、简便。 DOM 最大的特点就是将 HTML 文档表示…

Pycharm找不到Conda可执行文件路径(Pycharm无法导入Anaconda已有环境)

在使用Pycharm时发现无法导入Anaconda创建好的环境&#xff0c;会出现找不到Conda可执行文件路径的问题。 解决 在输入框内输入D:\anaconda3\Scripts\conda.exe&#xff0c;点击加载环境。 注意前面目录是自己Anaconda的安装位置&#xff0c;之后就可以找到Anaconda的现有环…

STM32F407使用Helix库软解MP3并通过DAC输出,最精简的STM32+SD卡实现MP3播放器

只用STM32单片机SD卡耳机插座&#xff0c;实现播放MP3播放器&#xff01; 看过很多STM32软解MP3的方案&#xff0c;即不通过类似VS1053之类的解码器芯片&#xff0c;直接用STM32和软件库解码MP3文件&#xff0c;通常使用了labmad或者Helix解码库实现&#xff0c;Helix相对labm…

Mariadb高可用MHA

本节主要学习了Mariadb高可用MHA的概述&#xff0c;案例如何构建MHA 提示&#xff1a;以下是本篇文章正文内容&#xff0c;下面案例可供参考 一、概述 1、概念 MHA&#xff08;MasterHigh Availability&#xff09;是一套优秀的MySQL高可用环境下故障切换和主从复制的软件。…

如何使用Kali Linux进行渗透测试?

1. 渗透测试简介 渗透测试是通过模拟恶意攻击&#xff0c;评估系统、应用或网络的安全性的过程。Kali Linux为渗透测试人员提供了丰富的工具和资源&#xff0c;用于发现漏洞、弱点和安全风险。 2. 使用Kali Linux进行渗透测试的步骤 以下是使用Kali Linux进行渗透测试的基本…

搭建WebDAV服务手机ES文件浏览器远程访问

文章目录 1. 安装启用WebDAV2. 安装cpolar3. 配置公网访问地址4. 公网测试连接5. 固定连接公网地址6. 使用固定地址测试连接 有时候我们想通过移动设备访问群晖NAS 中的文件,以满足特殊需求,我们在群辉中开启WebDav服务,结合cpolar内网工具生成的公网地址,通过移动客户端ES文件…

【Unity每日一记】进行发射,位置相关的方法总结

&#x1f468;‍&#x1f4bb;个人主页&#xff1a;元宇宙-秩沅 &#x1f468;‍&#x1f4bb; hallo 欢迎 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! &#x1f468;‍&#x1f4bb; 本文由 秩沅 原创 &#x1f468;‍&#x1f4bb; 收录于专栏&#xff1a;uni…

绘制世界地图or中国地图

写在前面 在8月初,自己需要使用中国地图的图形,自己就此也查询相关的教程,自己也做一下小小总结,希望对自己和同学们有所帮助。 最终图形 这个系列从2022年开始,一直更新使用R语言分析数据及绘制精美图形。小杜的生信笔记主要分享小杜学习日常!如果,你对此感兴趣可以加…

【C++面向对象】--- 继承 的奥秘(下篇)

个人主页&#xff1a;平行线也会相交&#x1f4aa; 欢迎 点赞&#x1f44d; 收藏✨ 留言✉ 加关注&#x1f493;本文由 平行线也会相交 原创 收录于专栏【C之路】&#x1f48c; 本专栏旨在记录C的学习路线&#xff0c;望对大家有所帮助&#x1f647;‍ 希望我们一起努力、成长&…

自动化测试用例设计实例

在编写用例之间&#xff0c;笔者再次强调几点编写自动化测试用例的原则&#xff1a; 1、一个脚本是一个完整的场景&#xff0c;从用户登陆操作到用户退出系统关闭浏览器。 2、一个脚本脚本只验证一个功能点&#xff0c;不要试图用户登陆系统后把所有的功能都进行验证再退出系统…

CAS 的执行流程 ?CAS 中 ABA 问题如何解决 ?CAS 在 Java 中有哪些实现类 ?

目录 1. CAS 的执行流程 2. CAS 中的 ABA 问题 3. 如何解决 CAS 中的 ABA 问题 4.CAS 在Java 中的实现类有哪些 1. CAS 的执行流程 CAS 比较并替换的大致流程是这样的&#xff1a; 它有三个操作单位&#xff1a;V&#xff08;内存值&#xff09;&#xff0c;A&#xff08;…

【C++】做一个飞机空战小游戏(八)——生成敌方炮弹(rand()和srand()函数应用)

[导读]本系列博文内容链接如下&#xff1a; 【C】做一个飞机空战小游戏(一)——使用getch()函数获得键盘码值 【C】做一个飞机空战小游戏(二)——利用getch()函数实现键盘控制单个字符移动【C】做一个飞机空战小游戏(三)——getch()函数控制任意造型飞机图标移动 【C】做一个飞…

Iceberg 学习笔记

本博客对应于 B 站尚硅谷教学视频 尚硅谷数据湖Iceberg实战教程&#xff08;尚硅谷&Apache Iceberg官方联合推出&#xff09;&#xff0c;为视频对应笔记的相关整理。 1. Iceberg简介 1.1 概述 为了解决数据存储和计算引擎之间的适配的问题&#xff0c;Netflix 开发了 I…

【算法题】螺旋矩阵IV (求解n阶折线蛇形矩阵)

一、问题的提出 n阶折线蛇形矩阵的特点是按照图1所示的方式排列元素。n阶蛇形矩阵是指矩阵的大小为nn&#xff0c;其中n为正整数。 题目背景 一个 n 行 n 列的螺旋矩阵可由如图1所示的方法生成&#xff0c;观察图片&#xff0c;找出填数规律。填数规则为从 1 开始填到 nn。 …

如何使用AIGC人工智能辅助开发?

文章目录 引言AIGC辅助开发的应用场景代码生成图像识别与生成自然语言处理视频剪辑与生成 AIGC辅助开发的实现步骤数据准备模型选择模型训练结果评估与优化应用开发 AIGC辅助开发的优势与局限优势局限 未来展望总结 &#x1f389;欢迎来到AIGC人工智能专栏~如何使用AIGC人工智能…

计算机网络----CRC冗余码的运算

目录 1. 冗余码的介绍及原理2. CRC检验编码的例子3. 小练习 1. 冗余码的介绍及原理 冗余码是用于在数据链路层的通信链路和传输数据过程中可能会出错的一种检错编码方法&#xff08;检错码&#xff09;。原理&#xff1a;发送发把数据划分为组&#xff0c;设每组K个比特&#…

【Python】解决“Tk_GetPixmap: Error from CreateDIBSection”闪退问题

解决Python使用Tkinter的Notebook切换标签时出现的“Tk_GetPixmap: Error from CreateDIBSection 操作成功完成”闪退问题 零、问题描述 在使用Tkinter的Notebook控件时&#xff0c;对其标签进行切换&#xff0c;发现切换不了&#xff0c;一切换就报如下图错误&#xff1a; …

Python学习笔记_基础篇(五)_数据类型之字典

一.基本数据类型 整数&#xff1a;int 字符串&#xff1a;str(注&#xff1a;\t等于一个tab键) 布尔值&#xff1a; bool 列表&#xff1a;list 列表用[] 元祖&#xff1a;tuple 元祖用&#xff08;&#xff09; 字典&#xff1a;dict 注&#xff1a;所有的数据类型都存在想对…

3. 爬取自己CSDN博客列表(分页查询)(网站反爬虫策略,需要在代码中添加合适的请求头User-Agent,否则response返回空)

文章目录 步骤打开谷歌浏览器输入网址按F12进入调试界面点击网络&#xff0c;清除历史消息按F5刷新页面找到接口&#xff08;community/home-api/v1/get-business-list&#xff09;接口解读 撰写代码获取博客列表先明确返回信息格式json字段解读 Apipost测试接口编写python代码…