人工智能第四章——超越经典搜索(局部搜索)

摘要

本文讨论的是人工智能里面的局部搜索策略,本文会讲明白:
1)什么是局部搜索?
2)一些局部搜索策略
3)动作具有不确定性时、无传感器时、部分可观察时,怎么搜索?
4)联机搜索

前言

无需多言,以一针见血,画龙点睛为第一要务。

一、局部搜索

在之前章节中讨论的无信息搜索和有信息搜索都是在可观察、确定的、已知的环境之下的搜索。
本章将不受这些环境性质的约束。讨论局部搜索(local search)算法

局部搜索不关心路径代价,但是关注解状态。比如八皇后问题,不关心是怎么到目的状态的,只关心最终布局对不对,许多重要应用都有这样的性质,如作业空间调度,自动程序设计等。

局部搜搜:不关心路径,从单个当前节点(而不是多条路径)出发,通常只移动到它的邻近状态。一般情况下不保留搜索路径。
虽然局部搜索算法不是系统化的,但是有两个关键优点:
1)通常只用常数级的内存;2)通常能在系统化算法不适用的很大或无限的(连续的)状态空间中找到合理的解。
此外,局部搜索算法对于解决纯粹的最优化问题十分有用,其目标是根据目标函数找到最佳状态。

如果存在解,最优的局部搜索算法总能找到全局最大/最小值

二、一些局部搜索算法

2.1 爬山法(最陡上升版本)

简单的循环过程,不断向值增加的方向移动,即“登高”,在到达一个“峰顶”(邻接状态中没有比它更高的)的时候终止。

算法不会考虑与当前状态不相邻的状态,算法不维护搜索树,当前节点的数据结构只记录当前状态和目标函数值。

例子:八皇后问题(当前状态指的是一个棋盘放着8个皇后的冲突状态),而且每一次生成新状态(后继节点)是通过:移动某一个(不是多个)皇后到这列的另一个可能方格中,所以每个状态有7*8=56个后继。 但是,爬山法会经常陷入困境。

爬山法有时被称为贪婪局部搜索,因为它只是选择邻居中状态最好的一个,而不考虑下一步怎么走。

在遇到:
1)局部极大值;2)山脊;3)高原 的情况下,爬山法都会到达无法再取得进展的地点。

设置允许侧向移动的次数,可以提高爬山法的成功率,但是相应的平均步数会增加。

2.2 随机爬山法

爬山法的变形。
随机爬山法在上山移动中随机选择下一步;被选中的概率可能随着上山移动的陡峭程度不同而不同。这种算法通常比最陡上升算法的收敛速度慢不少,但是在某些状态空间地形图上它能找到更好的解。

这里写图片描述
图2.2 爬山法

2.3 首选爬山法

实现了随机爬山法,随机地生成后继节点直到生成一个优于当前节点的后继。这个算法在后继节点很多的时候(比如上千个)是个好策略。

2.4 随机重启爬山法

之前的三个爬山法都是不完备的,经常会在局部极大值卡住。

随机重启爬山法(random restart hill climbing),
它通过随机生成初始状态来导引爬山法搜索,直到找到目标。
这种算法完备的概率接近1.原因:它最终会生成一个目标状态来作为初始状态。

2.5 模拟退火算法

爬山法不完备,因为会碰到局部极大值
随机走是完备的(因为完全等概率选择后续节点,不受局部极大值影响),但是效率极低。

模拟退火算法:把爬山法和随机行走以某种方式结合,同时得到效率和完备性。

这里写图片描述
图2.5 模拟退火算法

2.6 局部束搜索

改编自束搜索(是基于路径的算法啊)

这里写图片描述
图2.6 局部束搜索

内存有限,但是内存中只保存一个节点又有点极端。

局部束搜索(loca beam search)算法记录k个状态而不是只记录一个,它从k个随机生成的状态开始,每一步全部k个状态的所有后继全被生成。如果其中有一个是目标状态,则算法停,否则从整个后继列表(注意:是整个,这时候不再分开来看)中选择k个最佳后继,重复之。

但是这样的局部束搜索缺乏多样性,很快就会聚集到状态空间中的一小块区域内,使得搜索代价比高昂的爬山法版本还多。
随机束搜索(stochastic beam search)与随机爬山法类似,并不是选最好的k个,而是随机选择k个,其中选中概率是状态值的递增函数(正比)。随机束搜索类似于自然选择。

2.7 遗传算法

Genetic algorithm,或GA,是随机束搜索的一个变形。
把两个父状态结合来生成后继,而不是通过修改单一状态进行。这和随机剪枝搜索一样,与自然选择类似,除了我们现在处理的是有性繁殖而不是无性繁殖。

像束搜索一样,GA从k个随机状态开始,称之为种群。
每个状态都由适应度函数给出评估值。有杂交,变异操作。

遗传算法:结合了上山趋势,随机探索,和在并行搜索线程之间交换信息。

三、特殊情况下的局部搜索(动作不确定,无传感器,部分可观察)

3.1 连续空间中的局部搜索

在讨论过的算法里面,除了首选爬山法和模拟退火,没有一个能够处理连续的状态和动作空间,因为连续空间的分支因子是无限的。
1)梯度
2)约束优化(凸多边形区域)约束最优化问题的难点取决于约束和目标函数的性质。

3.2 环境是不确定的或部分可观察的情况

如果环境是不确定的或部分可观察(甚至无观察)的,则Agent无法断定自己处于什么状态。

如果环境是不确定的,感知信息告知Agent某一行动的结果到底是什么。如果环境是部分可观察的,感知信息可缩小Agent可能的状态范围

这里写图片描述
图3.2:应急规划

3.3 完全不可观察

如果Agent感知不到任何信息,我们称之为无传感问题。这时,Agent无法断定自己的物理状态。

动作序列

这里写图片描述
图3.3 无传感问题

四、联机搜索

脱机搜索:计算出完整的方案(然后“闭着眼睛”执行该方案),脱机搜索只涉及计算过程,不涉及动作执行过程
联机搜索:计算和动作执行交替进行。 先采取某个行动,然后观察环境变化并且计算出下一行动。

联机搜索:计算和动作执行交替进行。 先采取某个行动,然后观察环境变化并且计算出下一行动。

联机深度优先搜索

这里写图片描述
联机搜索&脱机搜索

五、一些想法

好想实现这些算法啊。一时技痒,很想写出代码来。但是时间约束,只能往后稍稍了。

此外,我觉得现在到第四章,就开始变难了,有些东西要仔细研究才能理解。。。以后还要多花些功夫,深入研究,体会。走不得捷径。

六、文末诗词

雨昏青草湖边过,花落黄陵庙里啼。

游子乍闻征袖湿,佳人才唱翠眉低。
——郑谷 《鹧鸪》

猜你喜欢

转载自blog.csdn.net/weixin_39278265/article/details/80924331