【人工智能 一种现代方法】搜索-复习

智能Agent

(1)理性Agent

Agent:通过传感器感知环境,通过动作执行器执行动作反馈到环境。

Agent感知序列是agent所收到的所有输入数据的完整历史。

Agent的行动选择取决于到目前时刻为止agent的整个感知序列。

Agent函数通过agent程序实现,agent函数是将感知序列映射到agent的行动。

理性依赖于:定义成功标准的性能度量;Agent对环境的先验知识;Agent可以完成的行动;Agent截止到此时的感知序列。

理性:产生好的行为,做正确的事。

理性Agent根据目前为止的感知和Agent具有的对环境的先验知识,选取最大化期望性能度量的动作。

理性的Agent需要收集信息(探索环境)和学习。

(2)PEAS和环境特性

设计智能体的第一步是把任务环境定义完整。

任务环境(PEAS):Performance measure、Environment、Actuators、Sensors(性能度量、环境、执行器、传感器)。

任务环境特性:

◼ 完全可观察/部分可观察

传感器能否检测到与action选择相关的所有方面?

◼ 确定性/随机性

环境的下一个状态是否完全由当前状态和agent的执行动作决定。

◼ 片断式/序列式

agent的经历是否可以分为原子片段,并且行动的选择是否只依赖于片段本身,不依赖于以前片段中的行动。

◼ 静态/动态

当agent选择action时,环境是否会发生变化。

◼ 离散/连续

区别取决于环境的状态、处理时间的方式以及agent的感知和动作。

◼ 单Agent/多Agent

环境是否包含其他agent,这些agent是否在根据当前agent的操作最大化某些性能度量。

◼ 已知的/未知的

已知的与未知的指的是 Agent(或设计人员)的知识状态,这里的知识则是指环境的“物理法则”。

(3)状态表示

原子表示:没有内部结构。

要素化表示:状态表示为变量或特征的集合。

结构化表示:状态包含对象,每个对象有自身的特征值,以及与其他对象的关系。

通过搜索进行问题求解

问题求解智能体:一种基于目标的agent。使用原子表示。

讨论的问题具有如下性质:环境是可观察的、确定的、已知的,问题解是一个行动序列。

(1)搜索问题形式化

初始状态:Agent的起始时的状态。

行动:AXTIONS(s),在状态s下可以执行的动作集合。

转移模型:对每个动作的描述,RESULT(s,a),在状态s下执行行动a后达到的状态;后继状态是从一给定状态出发通过单步行动可以到达的状态的集合。

初始状态、行动、转移模型定义了问题的状态空间,即从初始状态可以到达的所有状态的集合。状态空间是一个有向网络或图,结点表示状态,弧表示行动,一条路径是通过行动连接起来的一个状态序列。

目标测试:确定给定的状态是不是目标状态

路径耗散:为每条路径赋一个耗散值,即边加权。采用行动a从状态s走到状态s'所需要的单步耗散用c(s,a,s')表示。

问题的解就是从初始状态到目标状态的一组行动序列。解的质量由路径耗散函数度量,所有解里路径耗散值最小的解即为最优解。

边缘集:记录已经生成的但未被扩展的叶结点,frontier。

探索集:记录每个已被扩展的结点,explored。

搜索策略:如何选择将要扩展的状态,frontier中结点的排序。

树搜索和图搜索的区别在于,如果新生成的结点在探索集或者边缘集中,即已经生成过,那图搜索会丢弃掉这个新生成的结点。

搜索算法的评估:

完备性:当问题有解时,这个算法是否能保证找到解?

最优性:搜索策略是否能找到路径耗散最小的最优解?

时间复杂度:找到解需要花费多长时间?

空间复杂度:在执行搜索的过程中需要多少内存?

(2)无信息搜索策略(盲目搜索策略)

① BFS: Breadth-first search

宽度优先搜索是简单搜索策略,先扩展根结点,接着扩展根结点的所有后继,然后再扩展它们的后继,frontier是FIFO队列,依此类推。图搜索时,目标测试应用于结点被生成时,丢弃已经生成的新生成结点。(如果算法是在选择要扩展的结点时而不是在结点生成时进行目标检测,那么在目标被检测到之前深度d上的其他结点已经被扩展,这时时间复杂度应为O(bd+1)。)

② UCS: Uniform-cost search

一致代价搜索扩展的是路径消耗g(n)最小的结点n,这可以通过将边缘结点集组织成按g值排序的队列来实现。目标检测应用于结点被选择扩展时,如果在结点加入frontier之前进行目标测试,将错失路径最短的解。图搜索丢弃路径消耗高的结点。当所有的单步耗散都相等的时候,一致代价搜索与宽度优先搜索类似,除了算法终止条件,宽度优先搜索在找到解时终止,而一致代价搜索则会检查目标深度的所有结点看谁的代价最小;这样,在这种情况下一致代价搜索在深度d无意义地做了更多的工作。

③ DFS: Depth-first search

深度优先搜索总是扩展搜索树的当前边缘结点集中最深的结点,LIFO队列。回溯搜索中是DFS的一种变形,每次只产生一个后继而不是生成所有后继;每个被部分扩展的结点要记住下一个要生成的结点。图搜索时,目标测试应用于结点被生成时,丢弃已经生成的新生成结点。

④ DLS: Depth-limited search

深度受限搜索:对DFS设置界限k,当深度大于k,结点不会被扩展。

⑤ IDS: Iterative deepening search

迭代加深的深度优先搜索:不断增大深度限制k,首先为0,接着为1,然后为2,依此类推——直到找到目标。当深度界限达到d,即最浅的目标结点所在深度时,就能找到目标结点。

⑥ BS: Bidirectional search

双向搜索:同时运行两个搜索,一个从初始状态向前搜索同时另一个从目标状态向后搜索——希望它们在中间某点相遇,此时搜索终止。目标测试替换为检查两个方向的搜索的边缘结点集是否相交;如果交集不为空就找到了一个解。

(3)有信息搜索策略(启发式搜索策略)

最佳优先搜索:结点根据评价函数f(n)选择扩展,评估值最低的结点被选择首先进行扩展。

启发函数:h(n)=结点n到目标结点的最小代价路径的代价估计值

Uniform Cost:f(n) = g(n)

Greedy Best-First:f(n) = h(n)

A*:f(n) = g(n) + h(n)

① GBFS:Greedy best-first search

贪婪最佳优先搜索试图扩展离目标最近的结点,f(n) = h(n)。

②A* 搜索

f(n) = g(n) + h(n)=经过结点n的最小代价解的估计代价。

保障A* 搜索最优性的第一个条件是h(n)是一个可采纳启发式。可采纳启发式是指h(n)从不会过高估计到达目标的代价。因为g(n)是当前路径到达结点n的实际代价,而f(n)=g(n)+ h(n), f(n)永远不会超过经过结点n的解的实际代价。

第二个条件,略强于第一个的条件被称为一致性,只作用于在图搜索中使用A*算法。如果对于每个结点n和通过任一行动a生成的n的每个后继结点n',从结点n到达目标的估计代价不大于从n到n'的单步代价与从n'到达目标的估计代价之和:h(n)≤c(n,a,n')+h(n'),则启发式h(n)是一致的,一致的启发式函数是可采纳的。

A*有如下性质:如果h(n)是可采纳的,那么A*的树搜索版本是最优的;如果h(n)是一致的,那么图搜索的A*算法是最优的。

 (4)设计可采纳的启发式

  • 松弛问题

减少了行动限制的问题称为松弛问题。松弛问题增加了状态空间的边。所以,一个松弛问题的最优解代价是原问题的可采纳的启发式。更进一步,由于得出的启发式是松弛问题的确切代价,那么它一定遵守三角不等式,因而是一致的。松弛问题的最优路径的真实代价是原问题的最优路径的估计代价,是可采纳的,也是一致的

多个可采纳的启发式怎么选择: max

  • 从子问题设计模式数据库

子问题的解代价小于完整问题的解代价,因而是可采纳的。模式数据库:对每个可能的子问题实例存储解代价。接着,对搜索中遇到的每个完整状态,在数据库里查找出相应的子问题,得到其可采纳的启发式。数据库本身的构造是通过从目标状态向后搜索并记录下每个遇到的新模式的代价完成的;搜索的开销分摊到许多子问题实例上。每个数据库都能产生一个可采纳的启发式,这 些启发式可以取最大值的方式组合使用。相加得到的启发式不是可采纳的。

不相交的模式数据库:两个子问题的代价之和仍然是求解整个问题的代价的下界。

  • 从经验中学习

利用机器学习算法从大量已知解的问题去学习一个模型。

超越经典搜索

  1. 局部搜索

纯粹的最优化问题: 根据目标函数找到最佳状态。不关心到达目标的路径,只关注解状态。

  • 爬山法(贪婪局部搜索)
    1. 最陡爬山法:简单的循环过程,不断向值增加的方向持续移动。算法在到达一个“峰顶”时终止,即邻接状态中没有比它值更高的。算法不维护搜索树,因此当前结点的数据结构只需要记录当前状态和目标函数值。爬山法不会考虑与当前状态不相邻的状态。

困境:

山脊问题:造成一系列局部极大值,局部极大值是一个比它的每个邻接结点都高的峰顶,但是比全局最大值要小。

高原问题:一块平的局部极大值。

    1. 随机爬山法在上山移动中随机地选择下一步;被选中的概率可能随着上山移动的陡峭程度不同而不同,这种算法通常比最陡上升算法的收敛速度慢不少,但是在某些状态空间地形图上它能找到更好的解。
    2. 首选爬山法随机地生成后继结点直到生成一个优于当前结点的后继。这个算法在后继结点很多的时候是个好策略。
    3. 随机重启爬山法:通过随机生成初始状态来导引爬山法搜索,直到找到目标。如果每次爬山法搜索成功的概率为p,那么需要重新开始搜索的期望次数为1/p。
  • 模拟退火

模拟退火是把爬山法和随机行走以某种方式结合,和首选爬山法相关,都是随机产生后继。只是它没有选择最佳移动,选择的是随机移动。如果该移动使情况改善,该移动则被接受。否则,算法以某个小于1的概率接受该移动。如果移动导致状态“变坏”,概率则成指数级下降。这个概率也随“温度”T降低而下降:开始T高的时候可能允许“坏的”移动,T越低则越不可能发生。如果调度让T下降得足够慢,算法找到全局最优解的概率逼近于1。

  • 局部束搜索

它从k个随机生成的状态开始,每一步全部k个状态的所有后继状态全部被生成。如果其中有一个是目标状态,则算法停止。否则,它从整个后继列表中选择k个最佳的后继,重复这个过程。

不同于多次随机重启的并行,在随机重启搜索中,每个搜索的运行过程是独立的。局部束搜索中并行的搜索线程之间不是独立的,有用的信息在并行的搜索线程之间传递。

  • 遗传算法

遗传算法是维护大量状态种群的随机爬山搜索。新的状态通过杂交和变异产生,杂交把来自种群的状态对结合在一起,是随机束算法的变形。从k个随机生成的状态(初始种群)开始,它通过把两个父状态结合来生成后继,而不是通过修改单一状态进行。每个状态都由它的适应度函数给出评估值。对于好的状态,适应度函数应返回较高的值。被选择进行繁殖的概率直接与个体的适应度成正比,按照概率随机地选择两对进行配对繁殖,产生杂交的后代,最后后代的每个位置都会按照某个小的独立概率随机变异。

  1. 连续空间的局部搜索

只有首选爬山法和模拟退火法可以处理连续的状态和动作空间。

  • 将连续问题离散化。
  • 使用梯度进行求解,梯度上升x ← x + αÑf(x)或下降法x ← x - αÑf(x)。
  • 牛顿法,x ← x – g(x)/ g '(x)。
  • 约束优化问题。
  1. 考虑动作的不确定性

动作导致的状态是不确定的,转移模型RESULT返回一组可能的状态。

问题的解不再是一个动作序列,而是一个应急规划/条件规划

  • 与或搜索树

与或搜索问题的解是一棵子树:每个叶子上都有目标结点;在或结点上确定一个动作;在与结点上包含所有可能后果。

  1. 考虑环境的可观察性
  • 完全不可观察

如果Agent感知不到任何信息,称之为无传感问题。

信念状态:整个信念状态空间包含物理状态的每个可能集合。如果物理状态有N个状态,那么这个无传感问题有2N个信念状态。

信念状态空间搜索问题的形式化:

初始(信念)状态:物理状态中所有状态的集合。

行动ACTIONS(b):假设Agent的信念状态b={s1,s2},但ACTIONSP (s1)≠ ACTIONSP (s2);Agent就不确定哪个行动是合法的。如果非法行动不影响环境,那么在当前信念状态b下的任一物理状态采取行动的并集是安全的。如果非法行动导致世界末日,只允许交集可能更安全。

转移模型RESULT(b,a):行动后生成新的信念状态的过程称为预测。

目标测试GOAL-TEST:Agent需要一个确保生效的规划,意味着一个信念状态满足目标仅当其中所有的物理状态都满足GOAL-TEST。

路径开销

  • 部分可观察

PERCEPT(s)函数,返回给定状态的感知信息。如果感知本身是不确定的,则PERCEPT(s)函数返回所有可能感知信息的集合。通过感知确定初始信念状态。

对于转移模型,可以将导致从一个信念状态转移到另一信念状态的一个特定行动看做是分为三个阶段发生的。RESULT(b,a)返回可能的结果信念状态构成的集合。预测给定信念状态b的活动a,预测的信念状态为b’;观察预测阶段确定预测信念状态里可观察到的感知o的集合;更新阶段对于每个可能的感知信息确定可能得到的信念状态。

 (5)脱机与联机

脱机搜索:计算出完整的方案(然后“闭着眼睛”执行该方案),脱机搜索只涉及计算过程,不涉及动作执行过程。

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

Agent不清楚自身的状态和行动的结果,这时的Agent面临联机搜索问题。

脱机算法在状态空间的一部分扩展一个结点后,能马上跳到状态空间的另一部分扩展另一个结点。联机算法只会扩展它实际占据的结点。为了避免遍历整个搜索树去扩展下一个结点,按照局部顺序扩展结点看来更好一些,深度优先搜索具有这个性质——联机深度优先搜索。 

博弈搜索

  1. 形式化博弈问题

S0:初始状态,定义开始时的格局。

PLAYER(s):定义状态s下该谁行动。

ACTIONS(s):定义状态s下的合法移动集合。

RESULT(s,a):转移模型,定义行动的结果。

TERMINAL-TEST(s):终止测试,游戏结束返回真,否则返回假。游戏结束的状态称为终止状态。

UTILITY(s,p):效用函数,定义游戏者p在终止状态s下的数值。零和博弈是指所有棋手的收益之和在每个棋局实例中都相同。

  1. 博弈树

由初始状态、ACTIONS函数和RESULT函数确定;结点是状态;边是移动

  1. 极小极大算法(MinMax算法)

从游戏结果回溯,Max选择让效用最大的行动,Min选择效用最小的行动。极小极大算法对博弈树执行完整的深度优先探索。如果树的最大深度是m,在每个结点合法的行棋有b个,时间复杂度是O(bm)。一次性生成所有的后继的算法,空间复杂度是O(bm),而每次生成一个后继的算法,空间复杂度是O(m)。

  1. 多人博弈中的最优决策

若博弈有三个人A,B和C参与,则每个结点都与一个向量〈vA,vB,vC〉相关联。对于终止状态,这个向量代表着从每个人角度出发得到的状态效用值;最简单的实现方法就是让函数UTILITY返回一个效用值向量。

  1. a-b剪枝

a = 到目前为止路径上MAX获得的最佳值(即极大值)

β = 到目前为止路径上MIN获得的最佳值(即极小值)

v = 当前结点所搜索过的子结点中的最佳值

在min结点,若当前搜索过的子结点的最小值v小于等于a,则剪去该min的其余子结点,返回v在max结点,若当前搜索过的子结点的最大值v大于等β,则剪去该max的其余子结点,返回v。

a剪枝:如果一个MIN节点的β值小于或等于它的某一个MAX祖先节点的a值,则剪枝发生在该MIN节点之下:终止这个MIN节点以下的搜索过程。这个MIN节点最终的倒推值就确定为这个β值。

β剪枝:如果一个MAX节点的a值大于或者等于它的某一个MIN祖先节点的β值,则剪枝发生在该MAX节点之下.终止这个MAX节点以下的搜索过程。该MAX节点的最终返回值可以置成它的a值。

行期排序:设博弈树的分支因子都为b,搜索深度为m。最坏情况:需要检查O(bm)个结点,退化成Minimax算法;最好情况:如果MAX结点的MIN子结点按回传值的降序排列,MIN结点的MAX子结点按回传值的升序排列,只需检查O(bm/2) 个结点;一般情况,如果结点随机排序,平均需要检查O(b3m/4)个结点。

  1. 考虑有限时间和空间
  • 用估计棋局效用值的启发式评估函数EVAL取代效用函数Utility,用截断测试取代终止测试。函数EVAL(s):对于给定的棋局s,返回对博弈的期望效用值的估计。EVAL(s) > 0:有利于MAX,值越大越对MAX有利;EVAL(s) < 0:有利于MIN,值越小越对MIN有利;EVAL(s) = 0:中立。截断方式:设置固定的深度限制,深度值设定必须符合游戏规则许可的时间;迭代加深,直到时间用完。
  • 向前剪枝的一种方法是柱搜索:在每一层,只考虑最好的n步行棋可能,并不是考虑所有行棋招数,但无法保证最佳的行棋不被裁剪掉。
  1. 随机博弈

带机会结点的博弈树:把确定性博弈中的极小极大值一般化为期望极小极大值。期望值是所有可能结果的平均值。

约束满足问题

(1)形式化:

变量集合:X={X1 , …, Xn }

值域集合:D={D1 , …, Dn }

约束集合:C

在CSP中,算法可以进行约束传播,缩小其他变量值域,也可以搜索,选择变量赋值。约束传播与搜索可以交替进行,也可以将约束传播作为搜索前的预处理步骤。

局部相容性:增强约束图中各部分局部相容性会导致不相容的结点取值被删除。

结点相容:如果单个变量的值域中的所有取值满足它的一元约束,就称此变量是结点相容的。如果网络中每个变量都是结点相容的,则此网络是结点相容的。

弧相容:若对Xi的每个赋值,Xj都存在某个取值满足弧(Xi,Xj)的二元约束,则称Xi关于Xj是弧相容的。如果每个变量关于其它变量都是弧相容的,则称该网络是弧相容的。

路径相容:对{Xi, Xj}的每一个相容赋值{Xi=a, Xj=b},Xm都有合适的取值同时使得{Xi,Xm}和{Xm,Xj}是相容的,则称集合{Xi,Xj}关于Xm是路径相容的。

k相容:给定k个变量{x1,...,xk},对于{x1,...,xk-1}的每一个相容赋值,xk都有合适的取值使得{x1,xk},...,{xk-1 ,xk }是相容的,则称{x1,...,xk-1 }关于xk是k相容的。

全局约束可涉及任意个约束变量。Alldiff约束表示所有相关变量必须取不同的值。资源约束,atmost约束,检测值域的最小值之和可以检测相容性。

(2)CSP的回溯搜索的形式化

回溯搜索用于深度优先搜索中,它每次为一变量选择一个赋值,当没有合法的值可以赋给某变量时就回溯。

Initial state:the empty assignment, {}

Actions(s):中动作的数量等于未赋值的变量数

Transition model:为未分配的变量赋值,如果没有合法的分配,则失败

Goal test:当前任务已完成,满足所有约束条件

Path Cost

(3)提高回溯搜索效率

变量的次序:优先选择剩余值数量最少的变量,选择剩余值数量多的变量容易使得剩余值数量少的变量的值域变为空值域。

如果剩余值数量相同:最大度变量优先,优先选择对其他变量约束最多的变量,通过选择与其它未赋值变量约束最多的变量来试图降低未来的分支因子。

值的次序:最少约束值优先,选择的取值应尽可能少地删除邻居变量的有效值。

前向检验:一个变量X赋值后,对每个相邻变量Y根据弧相容推理从值域删除与X不相容的值,如果某个变量值域变为空,就回溯。

更早地检测失败:维护弧相容,当变量X赋值后,INFERENCE调用AC-3,从与X相邻的所有未赋值变量开始,进行约束传播,一旦某个变量的值域变为空,则AC-3调用失败并立即回溯。

(4)CSP的局部搜索 逃离高原

禁忌搜索:将最近访问过的状态记录在表中,并禁止算法再回到那些状态。

模拟退火也可以用于逃离高原。

约束加权:每个约束都有一个数字权重Wi,初始都为1。搜索的每一步,算法都选择修改一个变量的值,使得违反的约束权重和最小化。接着增加当前赋值违反的约束的权重值。这给高原增加了地形,并且它随着时间的进行不断给难于解决的约束增加权重。

问题改变时局部搜索更容易。

  1. CSP问题结构

独立的子问题:独立性可以简单地通过在约束图中寻找连通子图来确定。每个连通子图对应于一个子问题CSPi。如果Si是CSPi的一个解,那么∪iSi是∪iCSPi的一个解。假设变量共n个,每个子问题c个变量一共n/c个子问题,每个子问题的复杂性为O(dc),总工作量为O(dcn/c),不分解的情况下为O(dn)。

树形结构:求解树结构CSP时,首先任意选择一个变量为树的根,选择变量顺序,这样每个变量在树中出现在父结点之后。

基于删除节点的方法:先对部分变量(环割集)赋值,使剩下的变量能形成一颗树。

基于合并结点的方法:树分解将约束图分解为相关联的子问题,每个子问题独立求解,再把得到的结果合并起来。

树分解必须满足的条件:原问题中的每个变量至少在一个子问题中出现。 原问题中的两个变量若有约束相连,它们至少同时出现在一个子问题中(连同 它们的约束)。如果一个变量出现在树中的两个子问题中,那么它必须出现在连接这两个子问题的路径上的所有子问题里。

树分解CSP的求解:每个子问题被视为一个巨型变量,它的值域是这个子问题的所有解的集合。用前面给出的树算法来求解连接这些子问题的约束,它们的共享变量要取相同的值。

  • 2
    点赞
  • 39
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值