•1956年,达特茅斯会议,首次提出了“人工智能”(Artificial Intelligence)让机器能像人那样认知、思考和学习, 即用计算机模拟人的智能。
图灵测试:
怎么判断机器有没有智慧 ——基于行为的测试
让一个人在某一房间里,把计算机配置在另一房间里内。现在把双方都作为“人”来对待,如果在书面交谈中不能分辨出哪一个是人,哪一个是计算机,那么就可以说这台计算机是智能的(Intelligent)。
要采取的正确动作不是很明显时,智能体需要提前规划。
问题求解智能体:提前规划:考虑一个形成通往目标状态路径的动作序列。
搜索:它所进行的计算过程。
搜索问题的形式化:
最优解:所有解中路径代价最小的解。
世界状态包括环境的每一个细节。
搜索状态只保留规划(抽象)所需的详细信息。
针对不同的问题,关注的信息不同,状态模型也不同,转移模型也不同,目标也不同。
Problem: Pathing(寻路
状态: (x,y) location/位置
行动: NSEW/东南西北
转移模型: update location only/只更新位置
目标: is (x,y)=END是否到达目标位置?
Eat-All-Dots(吃豆)
状态: {(x,y), dot booleans}
行动: NSEW
转移模型: update location and possibly a dot boolean
目标: dots all false。所有豆豆的布尔值为false
搜索算法(search algorithm):
将搜索问题作为输入并返回问题的解或报告无解。
状态空间图:
搜索树算法:
当状态空间图中出现环时,搜索树会出现很多冗余,会有一直到不了终止节点的情况,就会导致搜索树无穷大。
搜索的本质:
先跟踪一个选项再考虑其他选项,选择先扩展一个节点,得到未被扩展的节点,也就是搜索树的边界节点(已达状态)。
搜索树的边界(frontier):待扩展叶子节点的集合
o最佳优先搜索:选择使得某个评价函数f(n)的值最小的节点n
问题求解性能评估
b is the branching factor/分支因子(每个节点最大的分支数目)
m is the maximum depth/最大深度
d is the depth of shallowest solution/最浅层解的深度
树的节点数:1 + b + b^2 + …. b^m = O(b^m)
无信息搜索策略(BFS、UCS、DFS)
BFS广度优先搜索:the shortest path最短路径
首先扩展最浅层的节点。FIFO
d: 最浅层解的深度
时间复杂度 O(b^d)
O(b^d) =1+b+b^2+b^3 ……+b^d
空间复杂度:O(b^d)
最优性:所有动作代价相同时最优,否则不一定。
完备性:b有限,且状态空间要么有解要么有限.
UCS一致代价搜索the least-cost path最小代价
首先扩展代价最小的节点
优先级队列(优先级:累积成本,成本从根节点出发开始计算)如果动作(步骤)代价相等,则相当于宽度优先
在宽度优先搜索的基础上找代价最小。
评价函数f(n):从根到当前节点n的路径代价
C* :最优解的代价
e:每个动作代价的下界,e >0
有效深度:1+[C*/e]【向下取整】
时间复杂度 O(b^(1+[C*/e]))
空间复杂度O(b^(1+[C*/e]))
空间复杂度、时间复杂度其实都是取决于我们扩展树的深度
优点:
完备、最优:b有限,且状态空间要么有解要么有限。如果算法所有动作的代价都大于等于e>0,则是完备的。
UCS 搜索代价递增,系统考虑所有路径:找到的第一个解的代价至少与边界上任何其他节点的代价一样小
缺点:
在每一个“方向”上进行探索,没有关于目标位置的信息。
DFS深度优先搜索
优先扩展边界中最深的节点,后进先出
时间复杂度:O(b^m)不如BFS和UCS。
空间复杂度:O(bm)
完备性:否。有环状态空间,陷入无限循环 (搜索树无法到达叶子节点)
无限状态空间,也可能陷入无限路径。但对树形有限状态空间是完备的
最优性:否。返回找到的第一个解(未必是最优)直接到达搜索树的最深层,然后,搜索将“回退”到下一个仍存在未扩展后继节点的最深的节点。
何时 BFS 优于 DFS?
当节点比较浅层的时候Solutions not too far down.
何时 DFS 优于 BFS?
节点在底层时need to get to the bottom.
为了解决深度优先搜索不完备问题,避免搜索过程陷入无穷分支的死循环,提出了
有界深度优先搜索方法
连着的两步,不会考虑把上面一步移回去的分支(那样树将陷入循环)。
迭代加深搜索(iterative deepening search)
DFS 空间优势 + BFS 时间优势:一层一层的增加limit类似于广度优先,然后再在每个limit里面实行深度优先搜索。
确定最好的深度界限l。大多在浅层即可搜索成功!
不断的迭代,加深,Run a DFS with depth limit 1. If no solution…Run a DFS with depth limit 2. If no solution…不断加深limit1.
时间复杂度:O(b^d)
空间复杂度:O(bd)
有信息(启发式)搜索策略
Search Heuristics(启发式搜索)
启发式:估计一个状态离目标有多近的函数(曼哈顿距离、欧式距离)
绿色的线为欧式距离的丈量长度,红色的线即为曼哈顿距离长度,蓝色和黄色的线是这两点间曼哈顿距离的等价长度。欧式距离是两点之间的直线距离,曼哈顿距离是不能斜着的距离。
启发式函数(heuristic function)h(n):从结点n的状态到目标状态的最小代价路径的代价估计值
greedy best-first search/贪心最佳优先搜索
评价函数(evaluation function)f(n):从当前节点𝒏出发,根据评价函数来选择后续结点。
启发式函数(heuristic function)h(n):从结点𝒏的状态到目标状态的最小代价路径的代价估计值,这里将两点之间的直线距离(欧氏距离)作为启发式函数。
评价函数f(n)=启发函数h(n)
A* Search/ A* 搜索:
每次都在待扩展的所有节点里面选择f(n)最小的
g(n)表示从初始状态到节点n的路径代价,
h(n)表示从结点n到一个目标状态的最短路径的代价估计值
f(n)表示f(n) 表示从初始状态经过结点𝒏 到一个目标状态的最优路径的代价估计值。后半段都是估计。
只有正确路径的f(n)始终不变。
A*什么时候终止?
入队不结束,出队 结束!
注意:启发式函数应该比实际值低,不然会得到错误的结果。可容许性的引入,可以保证启发式函数比实际值低。
可容许性
容许乐观的启发式:永远不会高估到达某个目标的代价
对于可容许的启发式函数h(n),A*是代价最优的。
一致性:
预估的启发函数值 ≤ 到目标的实际值
可容许性: h(A) ≤ actual cost from A to G
一致性:h(A) – h(C) ≤ cost(A to C)满足三角不等式的约束
满足一致性,可容许性,A* 图搜索是最优的
反证法:
假设最优路径的代价为C*,该算法返回的路径代价为C >C* (即算法返回次优路径)那么最优路径上一定存在某个未扩展的节点n 。如果最优路径上的所有节点都已被扩展,则算法返回的将是这个最优解
g*(n)表示从起点到n的最优路径的代价
h*(n)表示从n到最近目标的最优路径代价
性质:
一致代价搜索UCS在所有“方向”上等可能的扩展,A*搜索主要朝着目标扩展,而且能够保证最优性。
A*算法的搜索效率很大程度上取决于启发函数h(n)。 一般来说,在满足h(n)≤h*(n)的前提下, h(n)的值越大, 说明它携带的启发性信息越多, A*算法搜索时扩展的节点就越少, 搜索效率就越高。 A*算法的这一特性被称为最优性。启发函数估计的越精准,则算法越好。
在可容的启发式下,A*是最优的。
小结:
Uniform-cost orders by path cost(路径代价), or cost g(n)。UCS要求路径代价最小。
Greedy orders by goal proximity(目标最近估计), or cost h(n)。贪心搜索要求距离目标最近。
A*Search orders by the sum: f(n) = g(n) + h(n)。综合考虑路径代价和到目标状态的最短路径。、
以上所有算法,都只有一个智能体在搜索。
对抗搜索和博弈
对抗搜索(Adversarial Search)也称为博弈搜索(Game Search)
在一个竞争环境(Competitive Environment)中,两个或两个以上的智能体(agents)之间通过竞争实现相反的利益,一方最大化这个利益,另外一方最小化这个利益。
定义最优移动并寻找最优移动的算法——极小化极大搜索(minimax Search)。 剪枝(pruning)通过忽略搜索树中对最优移动没有影响的部分来提高搜索效率。
极小化极大搜索算法
状态的值: 从该状态可达的 最佳结果(效用)
非终止状态: V(s) = max V(s’)
终止状态: V(s) = known
在博弈树中,那些下一步该MAX走步的节点称为MAX 节点(类似于或节点),下一步该MIN走步的节点称为MIN 节点(类似于与节点)。
MAX nodes: 智能体控制下 V(s) = max V(s’)
MIN nodes: 对手控制下V(s) = min V(s’)
s'是s的后继节点,successor。
对叶节点的估值方法是:那些对MAX有利的节点,其估价函数取正值;那些对MIN有利的节点,其估价函数取负值;那些使双方均等的节点,其估价函数取接近于0的值。 对非叶节点的值,必须从叶节点开始向上倒推。其倒推方法是: 对于MAX节点,由于MAX 方总是选择估值最大的走步,因此, MAX节点的倒推值应取其后继节点估值的最大值。 对于MIN节点,由于MIN方总是选择估值最小的走步, 因此,MIN 节点的倒推值应取其后继节点估值的最小值。 这样一步一步的计算倒推值,直至求出初始节点的倒推值为止。 这一过程称为极小化极大值过程。
单数层是MAX,双数层是MIN
最优移动是指,在假定对手移动是为了使效用值最小的前提下,使终止状态效用值最大的移动。使坏的情况不那么坏。
性质:
在假定对手移动是为了使效用值最小的前提下,使终止状态效用值最大的移动。使坏的情况不那么坏。
类似(穷举的)深度优先搜索。
时间复杂度: O(b^m) 【b为最大分支因子】
空间复杂度: O(bm) 【m为树的深度】
α-β 剪枝
α-β剪枝搜索算法在Minimax算法中可减少被搜索的节点数,即在保证得到与原Minimax算法同样的搜索结果时,剪去了不影响最终结果的搜索分枝。
生成的顺序很重要: 如果先产生好的动作,可以进行更多的剪枝。
minimax(root) =max(min(3,12,8),min(2,x,y),min(14,5,2)) =max(3,min(2,x,y),2) min(2,x,y)≤2 =3 决策与叶节点x和y的值无关,这里x,y就被剪枝
剪枝一般情况
(1) MAX节点(或节点)的α值为当前子节点的最大倒推值; α=到目前为止,路径上发现的MAX的最佳(最大值)选择值, α=“至少” 【初始值为-∞】范围为( α,+无穷)
(2) MIN节点(与节点)的β值为当前子节点的最小倒推值; β=到目前为止,路径上发现的MIN的最佳(最小值)选择值, β=“至多”【初始值为+∞】。范围改为(-无穷,β)。
D节点的min没有小于3,所以它有可能被选,所以需要继续探索。
在奇数层找最大结果,在偶数层找最小结果
性质
高度依赖于移动的顺序
最坏的情况:没有剪枝 O(b^m)
最好的情况:始终首先检查最佳的移动 仍然需要检查第一名玩家的每一个动作 只需要检查第二名玩家的一个动作 O(b∙1∙b∙1⋯)=O(b^m/2)