搜索求解
以搜索最短路径为例
辅助信息:
图中给出了任意城市与目的城市(Bucharest)之间的直线距离
启发式求解
-
贪婪最优先算法
在知道两点之间的距离的情况下 每次都选择直线距离最近的两点; 如:第一个位置Arad 他的周围有3个点
Zerind,Sibiu,Timisoara,同时我们可以在下图中看出两个城市之间距离 分别时 253,329,374;进过比较当然选择Sibiu。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-q0s9pNvQ-1572448649599)(./img/Greedy best-first search.png)]
优点简单易懂,而且可以快速得到答案
不足之处:
- 贪婪最佳优先搜索不是最优的。经过Sibiu到Fagaras到Bucharest的路径比经过Rimnicu Vilcea到Pitesti到Bucharest的路径要长32公里。
- 启发函数代价最小化这一目标会对错误的起点比较敏感。考虑从Iasi到Fagaras的问题,由启发式建议须先扩展Neamt,因为其离Fagaras最近,但是这是一条存在死循环路径。
- 贪婪最佳优先搜索也是不完备的。所谓不完备即它可能沿着一条无限的路径走下去而不回来做其他的选择尝试,因此无法找到最佳路径这一答案。
- 在最坏的情况下,贪婪最佳优先搜索的时间复杂度和空间复杂度都是O(??),其中?是节点的分支因子数目、?是搜索空间的最大深度。
-
A*搜索
定义评价函数:
f n ( n ) = g ( n ) + h ( n ) f_n(n)=g(n)+ h(n) fn(n)=g(n)+h(n)
g(n) 表示从起始节点到节点?的开销代价值
ℎ(?)表示从节点?到目标节点路径中所估算的最小开销代价值。
f(?)可视为经过节点? 、具有最小开销代价值的路径。
对抗搜索
主要内容:
- 最小最大搜索
最小最大搜索(Minimax Search): 最小最大搜索是在对抗搜索中最为基本的一种让玩家来计算最优策略的方法.
- Alpha-Beta剪枝搜索
Alpha-Beta剪枝搜索(Pruning Search): 一种对最小最大搜索进行改进的算法,即在搜索过程中可剪除无需搜索的分支节点,且不影响搜索结果
目前主要讨论在确定的、全局可观察的、竞争对手轮流行动、零和游戏(zero-sum)下的对抗搜索
两人对决游戏 (MAX and MIN, MAX先走) 可如下形式化描述,从而将其转换为对抗搜索问题
初始状态?0 | 游戏所处于的初始状态 |
---|---|
玩家??????(?) | 在当前状态?下,该由哪个玩家采取行动 |
行动??????? (?) | 在当前状态?下所采取的可能移动 |
状态转移模型?????? (?,?) | 在当前状态?下采取行动?后得到的结果 |
终局状态检测????????−???? (?) | 检测游戏在状态?是否结束 |
终局得分??????? (?,?) | 在终局状态?时,玩家?的得分。 |
MAX先行,可在初始状态的9个空格中任意放一个X
MAX希望游戏终局得分高、MIX希望游戏终局得分低
所形成游戏树的叶子结点有9!=362,880,国际象棋的叶子节点数为
1
0
40
10^{40}
1040
在MaxMin中如果 搜索数极大,就会导致计算成本加大,短时间内没有办法完成。因此在这个基础上我们提出了Alpha-Beta剪枝搜索,在剪去了不影响最终结果的前提下忽略不必要的搜索加快计算效率。
单一状态蒙特卡洛规划: 多臂赌博机 (multi-armed bandits)
上限置信区间策略 (Upper Confidence Bound Strategies, UCB)
蒙特卡洛树搜索 (Monte-Carlo Tree Search)