概述
搜索算法实际上是根据初始条件和扩展规则构造一棵“解答树”并寻找符合目标状态的节点的过程。
一个具体的问题抽象成一个图论的模型——树,即搜索算法的使用第一步在于搜索树的建立。
初始状态对应着根节点,目标状态对应着目标结点。完成搜索的过程就是找到一条从根结点到目标结点的路径,找出一个最优的解。
优化策略
(1)减少节点数,思想:尽可能减少生成的节点数
(2)定制回溯边界,思想:定制回溯边界条件,剪掉不可能得到最优解的子树
主要有盲目搜索,启发式搜索,博弈搜索
案例场景
在农夫过河问题中找到最优过河策略
解决:广度搜索,通过形式化状态空间,采用元组形式表达空间状态形式,通过施加限制条件,遍历所有可行方案,从中找出最优解决方案。
优化:可以采用双向广度搜索,由目标状态出发,逆向搜索。
在棋类游戏中,如何选择最优的下棋策略
解决:博弈搜索,深度,广度搜索。棋类对战游戏往往是博弈搜索。其中又以零和博弈为主。通过迭代搜索构建搜索树,得到结果。
优化:状态空间多,搜索树庞大,通过剪枝算法减去不必要的扩展节点,从而减少迭代深度和计算广度,同时,采用更好的评价函数,可以减少计算。
罗马尼亚度假问题
解决:深度,广度搜索,启发式搜索。每一个城市节点作为搜索树的一个状态节点,可以遍历整个搜索树得到结果,但时间空间复杂度太高。
优化:可以采用启发式搜索,用欧氏距离衡量状态节点的好坏,从而使每一步尽可能的得到最优的状态节点,以最快的速度收敛到目标。
八数码问题
解决:广度搜索,启发式搜索,csp算法。最经典的就是回溯算法,遍历构造整个搜索树,但时空开销大,可以进行一些细微改进。
优化:进行剪枝,将整个棋盘表示为一个矩阵,在每次放下皇后时,将棋盘上皇后可以攻击的位置进行标注,在每次放下皇后之后,检查剩余的行和列是否可以继续放下皇后,若存在某一行均处在皇后的攻击范围内,则退回下一步,搜索下一个位置,通过增加一个判定函数可以有效减少无效的搜索分支,预先判断棋盘的可摆放位置。提高算法的效率。
扫地机器人寻路
解决:深度有限搜索,扫地机器人属于人机交互类,真实世界具有状态空间,具体表现为脏与不脏,对应机器人的动作状态,向前后左右移动和进行清洁。可采用深度有限的搜索
求解方程极值
解决:群体智能搜索算法,粒子群,蚁群,遗传算法。通过将方程的每一个解表达为一个个体。由方程给出评估函数,通过迭代求出最优质最优解。
地图着色(csp问题)
解决:禁忌搜索,回溯搜索。此类问题具有许多约束条件,具体表现为地图块与块之间的颜色约束,问题有许多变量,对应有许多值域。可通过限制状态,或者状态矛盾后回溯解决。