本文主要是介绍人工智能原理第三章课后习题(仅供参考),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
3.1 为什么某些问题只能通过搜索进行求解?什么类型的问题可作为搜索问题?
有这样一类问题:具有初始状态和目标状态,每个状态可以看作一个黑盒子,其状态空间能够表示为一棵树或一张图,这类问题的求解是通过搜索找到一个从初始状态到目标状态的最短路径,而无法用传统的数学方法进行求解。这类问题称为搜索问题,其求解过程就是搜索。有很多问题属于搜索问题,一类是人类发明的智力游戏,另一类是现实世界的问题。其中人类发明的智力游戏包括八码难题、八皇后难题、汉诺塔、传教士和食人族问题。已知一个问题的初始状态和目标状态,找到一个操作序列,使得问题的状态能从初始状态转移到目标状态即为搜索问题。
因为某些问题是指既不能通过数学建模解决,又没有其他算法可以套用或者非遍历所有情况才能得出正确结果。这时就需要采用搜索算法来解决问题。搜索就是一种通过穷举所有解的状态,来求得题目所要求的解或者最优解的方法。
搜索的基本概念:
1.状态:对某一系统在某一时刻的数学描述。
2.动作:从当前时刻状态转移到下一时刻所处状态的操作。
3.状态转移:对某一时刻的状态进行动作后所达到的状态。
4.路径:一个状态序列,该序列被一系列动作所连接。
5.目标测试:评估当前状态是否是所求解的目标状态。
3.2 请给出一个本书之外的搜索问题的例子,智力游戏或现实世界的例子均可。
现在只有两只杯子,容量分别是:5升和7升,问题是:在只用这两个杯子的前提下,如何才能得到4升水?假设:水可以无限使用。
这个问题网上有很多求解方法,这里尝试使用搜索算法进行求解。设5L的杯子为X,7L的水杯为Y。根据题意列方程可以得到aX+bY=V,这里a,b分别代表两个杯子的系数。而V则代表我们期望量得的水的体积。本题中V=4,因此可以得到a5+b7=4。因此这里X和Y两个杯子的所有状态就可以表示出来。即:
两个体积分别为max_X、max_Y的杯子。杯子里当前分别有水量x、y。允许的操作有装满一个杯子、倒空一个杯子、将一个杯子中的水倒入另一个杯子。现在想要通过这两个杯子,获取指定体积的水,需要经过哪些操作?
解题思路:
一、当前水杯状态分别为(x,y)。即分别有x升水和y升水。那么只通过一步操作,写出所有可能的下一步水杯状态。
将杯子x的水倒空
将杯子y的水倒空
将杯子x装满水
将杯子y装满水
将杯子x的水倒入y,直至x的水被倒空或者y被倒满
将杯子y的水倒入x,直至y的水被倒空或者x被倒满
二、通过递归调用广度优先搜索算法,寻找可能的路径。
3.3 为什么搜索问题的状态采取原子式表征?是否还需要其它的方式?
搜索问题中状态的表征主要采用原子式表征。所谓原子式表征,指的是每个状态的表征是个黑盒子,不考虑其内部结构。例如,寻找起点至终点间的最短行驶路径问题,所需关心的是主要是两点之间的路径而不是每个节点的内部结构。因此,这类问题就可以采用原子式子表征。而搜索问题关心的主要是两点之间的路径而不是每个节点的内部结构。
3.4 搜索问题的状态空间可抽象为一张图或一棵树,图和树有什么区别?
树是图的特例,它是任意两个节点之间连通且没有闭环的图。
3.5 搜索问题的形式化有什么作用?
问题的形式化是在给定目标下确定需要考虑哪些行动和状态的过程。通过形式化,搜索和执行就完成了对智能体的简单设计。我们能够更清晰地理解问题的本质、明确任务的目标、并最终解决问题。形式化为后续问题求解过程提供了规范化和系统化,使得问题的解决更加科学和有效。
在对问题进行形式化后,需要对问题求解,而一个解就是一个行动序列,所以搜索算法的工作的就是考虑各种可能的行动序列。可能的行动序列从搜索树中根结点的初始状态出发,连线表示行动,结点对应问题的状态空间中的状态。
一个搜索问题可以通过五个元素给出形式化的定义:
**初始状态。**状态用 s 表述,初始状态也是状态的一种,上述罗马尼亚问题的初始状态可以描述为 In(Arad)。
**可能的行动。**行动用 a 表述,对于一个特殊状态 s,ACTIONS(s) 返回在状态 s 下可以执行的动作集合。例如,在状态 In(Arad) 下可能的行动为: {Go(Sibiu), Go(Timisoara), Go(Zerind)}。
**转移模型。**转移模型用 RESULT(s, a) 表述,表示在状态 s 下执行行动 a 后达到的状态。通常也用术语后继状态来表示从一给定状态出发通过单步行动可以到达的状态集合。例如:RESULT(In(Arad), Go(Zerind)) = In(Zerind)。
**目标测试。**确定给定的状态是不是目标状态。在罗马尼亚问题中,目标状态集是一个单元素集合 {In(Bucuresti)}。
路径代价。采用行动 a 从状态 s 走到状态 s’ 所需要的单步代价表述为 c(s,a,s’),路径代价就代表从初始状态到目标状态的单步代价总和。
通过形式化的定义搜索问题,则搜索问题的解描述为一组让初始状态转变为目标状态的行动序列,而搜索问题的最优解描述为使得路径代价最小的一组让初始状态转变为目标状态的行动序列。
3.6 叙述树搜索算法和图搜索算法的相同和不同之处。
相同之处:
搜索空间: 无论是树搜索算法还是图搜索算法,它们都面临着一个搜索空间,其中包含可能的状态或节点。
搜索策略: 树搜索算法和图搜索算法都使用搜索策略来导引搜索过程,例如深度优先搜索、广度优先搜索、启发式搜索等。
目标: 两种算法的目标都是在搜索空间中找到特定的解决方案或达到特定的目标状态。
都有个开放表frontier用于存储所有的叶节点,并先用problem的初始状态对开放表进行初始化以形成树的初始根节点。
不同点:
数据结构: 树搜索算法通常针对树结构的搜索空间,其中每个节点有一个父节点,而图搜索算法可以处理具有任意连接结构的图形搜索空间。
重复状态: 在树搜索算法中,由于状态之间的关系是树形的,因此不会出现重复访问状态的情况。但在图搜索算法中,由于状态之间的关系是任意连接的,可能会出现重复访问状态的情况,因此需要额外的措施来避免循环。(另外加入封闭表explored,当扩展所选择的节点时,仅当不在frontier或explored中时,才能将生成节点添加到frontier中)
3.7 拉斯维加斯算法是一种随机化算法,请查阅相关文献,并了解该算法求解八皇后难题的步骤。并讨论该方法与本章讲述的求解八皇后难题的两种形式化方法的区别。
拉斯维加斯算法解释: 拉斯维加斯算法 (Las Vegas) 是另一种随机算法,因此它具备随机算法最为重要的特征之一 —— 基于随机数进行求解。与蒙特卡洛算法 (Monte Carlo) 一样,拉斯维加斯算法也不是一种具体的算法,而是一种思想。但不同的是,拉斯维加斯算法在生成随机值的环节中,会不断的进行尝试,直到生成的随机值令自己满意。在这过程中也许会一直无法产生这样的随机值,因此拉斯维加斯算法的时间效率通常比蒙特卡洛算法来的低,并且最终可能无法得到问题的解,但是一旦算法找到一个解,那么这个解一定是问题的正确解。
答:纯拉斯维加斯随机算法求解思路——对于n后问题的任何一个解而言,每一个皇后在棋盘上的位置无任何规律,不具有系统性,而更像是随机放置的,由此想到拉斯维加斯算法。在棋盘上相继的各行中随机地放置皇后,并注意使新放置的皇后与已放置的皇后互不攻击,直至n个皇后均已相容地放置好,或已没有下一个皇后的可放置位置时为止。
3.8 论述无信息搜索和有信息搜索的之间的相同与不同之处
人工智能中的搜索策略大体分为两种:无信息搜索和有信息搜索。无信息搜索是指我们不知道接下来要搜索的状态哪一个更加接近目标的搜索策略,因此也常被成为盲目搜索;而有信息搜索则是用启发函数f(n)来衡量哪一个状态更加接近目标状态,并优先对该状态进行搜索,因此与无信息搜索相比往往能够更加高效得解决问题。
相同之处:
搜索目标: 无论是无信息搜索还是有信息搜索,它们的最终目标都是找到问题的解决方案或达到特定的目标状态。
搜索空间: 两种搜索方法都面临着一个搜索空间,其中包含可能的状态或节点,搜索过程都是在这个搜索空间中进行的。
搜索策略: 无论是无信息搜索还是有信息搜索,它们都使用搜索策略来引导搜索过程。例如,深度优先搜索、广度优先搜索等策略可以同时用于两种类型的搜索。
不同之处:
信息利用: 无信息搜索不利用有关问题结构或目标位置的任何额外信息,它只是按照某种规则对搜索空间进行探索,如深度优先搜索、广度优先搜索等。而有信息搜索则利用问题的特定信息,例如启发函数(heuristic function)提供的关于状态的额外信息,来指导搜索过程,例如启发式搜索算法(如A*算法)。
搜索效率: 由于有信息搜索利用了问题的额外信息来指导搜索过程,通常能够更快地找到解决方案或达到目标状态,因此在搜索效率上通常优于无信息搜索。有信息搜索可以更加智能地选择搜索方向,从而减少搜索空间的大小和搜索时间。
适用性: 无信息搜索通常适用于搜索空间结构简单、无额外信息可用或难以利用的情况,而有信息搜索则适用于搜索空间结构复杂、有关问题结构的额外信息可用的情况。在解决实际问题时,根据问题的特性和可用信息的不同,选择合适的搜索方法是至关重要的。
3.9 有信息搜索的评价函数f(n) = g(n) + h(n)的含义是什么?可分为几种情况?
无信息搜索指的是搜索过程中除了问题本身之外没有任何其它信息,其过程只是关心搜索的步骤,每搜索一步所作的只是生成后继并判断是否有目标节点。无信息搜索也被称为盲目搜索,蛮力搜索或穷举搜索。无信息搜索根据某种搜索策略遍历后继节点,并依次检查每个后继节点是否为目标节点。搜索策略的区分是依据节点扩展的顺序来定义的。其主要策略是:宽度优先搜索、深度优先搜索、迭代深化搜索、回溯深度优先搜索以及双向搜索等。
有信息搜索是在搜索过程中依据问题提供的特有信息、或动态生成的有用信息,用以引导其搜索策略沿着有希望的搜索路径尽快找到目标。与无信息搜索不同的是,有信息搜索生成一个评价函数,用于搜索的代价估计,具有最低代价的节点被优先扩展。
评价函数记为f(n) = g(n) + h(n)
其中g(n)是从初始节点到节点n之间的路径代价,而h(n)则是节点n到目标节点之间路径的最低估计代价,称为启发式函数。
从评价函数可以看出,有信息搜索策略可以分为如下三种情况:
- 仅考虑路径代价,即f(n) = g(n);(统一代价搜索)
- 只依据启发式函数,即f(n) = h(n);(贪婪搜索)
- 兼顾路径代价与启发式函数,即f(n) = g(n) + h(n);(A*搜索)
3.10 能否找到一个通用的、适用于所有搜索问题的启发式函数h(n)?为什么?
无信息搜索是人工智能中的一种搜索策略,指在搜索过程中没有关于问题域或目标状态的额外信息可供使用。因此,它也被称为盲目搜索。无信息搜索的目的是通过枚举所有可能的状态和操作来找到解决问题的路径。 其搜索策略包括: 广度优先搜索(BFS):从起始状态开始,先扩展所有与该状态相邻的状态,然后扩展这些状态对应的相邻状态,以此类推,直到找到目标状态。 深度优先搜索(DFS):从起始状态开始,尽可能地深入搜索树,直到找到目标状态或无法继续向下搜索时返回上一层。 迭代加深搜索(IDS):在深度优先搜索的基础上,多次进行深度搜索,逐渐增加搜索深度,直到找到目标状态。 代价一致搜索(UCS):每个状态有一个代价,代价一致搜索通过比较代价函数来选择下一个需要扩展的节点,以此逐步接近目标状态。 有界深度优先搜索(DLS):限制搜索树的深度,只搜索指定的深度,如果目标状态还没有被找到,则放弃继续向下搜索。 双向搜索(Bidirectional Search):从起始状态和目标状态两个方向同时开始搜索,并在中间某个状态处进行合并。 这些搜索策略之间的差异主要取决于它们扩展节点的顺序、搜索路径和搜索效率。
有信息搜索(Informed Search)又被称为启发式搜索(Heuristically Search),是指在搜索过程中使用问题域或目标状态的特定知识来指导搜索方向和决策,从而更有效地进行问题求解。启发式函数(Heuristic Function)是有信息搜索中用于衡量搜索状态的优先级的一种函数。启发式函数通过估计当前状态到目标状态的代价,为每个搜索状态分配一个计算出来的启发式评价值,从而指导搜索过程朝着更有希望到达目标的方向展开。有信息搜索和启发式函数之间密不可分,启发式函数是有信息搜索的基础。它利用了问题域或目标状态的特定知识来指导搜索方向和决策。在通过启发式函数计算出的启发式评价值的帮助下,有信息搜索可以更加高效地找到最优解或接近最优解。但是需要注意的是,启发式函数并不总是能够提供准确的搜索信息,因此需要根据具体问题来制定和选择合适的启发式函数。
Solving a problem is a sequence of actions, and search is the process of looking for the actions to reach the goal.
求解一个问题就是一系列动作,并且搜索是为达到目标寻找这些动作的过程。
Uninformed search is also called blind search: the typical algorithms are Breadth-first, Uniform-cost, and Depth-first.
无信息搜索亦被称为盲目搜索:其代表性算法是宽度优先、一致代价、以及深度优先。
Informed search is also known as heuristic search: Best-first search is according to an evaluation function, Its special cases are Greedy Search and A* search.
有信息搜索也被称为启发式搜索:最佳优先搜索依赖于评价函数,其特例是贪婪搜索和A*搜索。
Time and space complexity are some key points for a search algorithm.
时间和空间复杂性是搜索算法的一些关键点
这篇关于人工智能原理第三章课后习题(仅供参考)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!