机器智能(二)

1、搜索问题求解agent:信息处理的软件部分是搜索求解的算法,包含三个部分:形式化、搜索(得到seq,包含多个action,相当于行为序列)、执行

2、状态空间(初始状态、行动、转移模型)、目标、路径消耗

3、举例:真空吸尘器:
a、状态:机器人的位置和灰尘位置
b、初始状态:任何状态
c、行动:向左向右吸尘
d、转移模型:状态+行动->新状态
e、目标测试:检查所有位置是否干净
f、路径消耗:1)行动

4、树搜索算法:从初始状态/已知状态开始,通过行动不断地搜索其他状态,直到找到目标状态(成功)或者没有行动可执行为止(失败)。是一类基于树结构的搜索算法(如深度优先和广度优先等)。递归,注意终止条件
根节点:初始状态;连线:行动;节点:状态空间中的状态

5、图搜索:图搜索不会重复搜索节点,树搜索允许重复搜索节点。图搜索是特殊的树搜索。

6、前沿节点:当前的不重复的叶子节点,也可以理解为队列里没有出队的节点

7、节点数据结构:
a、对应状态空间中的状态(state)
b、节点的父节点(parent)
c、父节点生成该节点所采取的行动(action)
d、从初始状态到该节点的路径消耗(path-cost)

8、节点在队列中的排列顺序,决定了搜索算法的种类

9、搜索策略:
a、搜索策略是指搜索树节点选择的搜索顺序
①、FIFO:先进先出
②、LIFO:后进先出
③、优先级队列
b、哈希表:快速有效检测重复状态

10、算法性能:
a、性能评价标准:
①、完备性(如果问题存在解,算法即可以找到解)
②、最优性(找到的解释最优解)
③、时间复杂度(花费的时间)
④、空间复杂度(内存的消耗,而不是硬盘)
b、(树搜索)时间复杂度:入队的节点数量决定,即搜索过程中产生的节点数目
c、(树搜索)空间复杂度:队列存储最多的状态,即内存中存储的最多节点数量
d、(树搜索)时间空间复杂度通常小于状态空间数量|V|+|E|(点和边的和),因为一个只入队一次。

11、无信息搜索策略:
除了问题定义中提供的状态信息外没有任何附加信息,算法只能区分状态是不是目标状态,而无法比较非目标状态的好坏(即不知道是否靠近目标状态)
a、宽度优先搜索:是一个先进先出的队列,先扩展根结点,再扩展根结点的所有后继,然后再扩展它们的后继。
入队时做目标检测好,省时,因为当前节点如果确定是最优的,以后的节点就不需要再入队了;时间复杂度b^d,空间复杂度近似于时间而小于。类似广度优先搜索。
①、完备的,搜索所有节点
②、条件最优的,当树的代价与深度成正比是最优的
③、时间复杂度为b^d,高
④、空间复杂度为b^d,内存需求大
b、一致代价搜索:
①、扩展未扩展节点中代价最小的,这个代价是真实值。
②、实现:队列按照代价从小到大排列;代价小的先出队,代价大的后出队
③、出队时做目标检测;因为入队时不能保证是最优的,但出队时可以
④、时间复杂度高于宽度优先搜索,因为在插入队列时要对原队列中的节点比较
⑤、空间复杂度同宽度优先搜索
⑥、如果更新距离时距离变短,短于其前一个节点能否把节点往前移?
⑦、当入队节点代价小的时候,会放到队列前面,确保每次出队都是代价最小的。
⑧、类似贪心算法,就是广度优先与优先队列的结合。
队列为空时,一个节点入队,入队的时候对距离进行更新;
队列不为空时,一个节点出队,马上进行检测是不是目标节点,如果不是,将其子节点加入队列,同时要检测是否需要更新距离;
当检测到目标节点的时候停止。
入队的时候如果发现更好的距离就覆盖掉原来的距离。
c、深度优先搜索:
首先扩展最深的为扩展节点,用LIFO队列来存储节点。
①、不存在完备性
②、当深度有限的时候最优
③、空间复杂度小
d、深度受限搜索:
深度受限搜索设定一个最大深度dmax,当搜索深度大于dmax的时候立即回溯,从而避免了在无穷状态空间中陷入深度无限的分支。和宽度优先搜索基本没什么区别,在于设置不设置深度限制,即一开始有一个深度限制,每深入一层减一,减到0为止。
①、不能保证最优性
②、时间复杂度b^d
③、空间复杂度bd(分枝数量深度)
e、迭代加深的深度优先算法:
一个不断加深深度的深度优先算法。
不断加深深度,每一次都从根节点开始调用深度优先探索。
①、结合了深度优先搜索和宽度优先搜索
②、继承了宽度优先搜索能搜索到最优解的优势
③、空间复杂度同深度优先一样小
④、时间复杂度同深度优先在同一个数量级,大的不多。

发布了275 篇原创文章 · 获赞 160 · 访问量 4万+

猜你喜欢

转载自blog.csdn.net/qq_40851744/article/details/104739983