人智导(三):局部搜索

人智导(三):局部搜索

标准的搜索问题

  • 标准的搜索算法是基于模型的(model based)
  • 这个模型化的世界有以下假设:
    • 状态是可观察的(fully observable state)
    • 动作效果是确定的(deterministic action)
    • 状态空间是离散的(discrete state space)
  • 搜索的目的:系统地探查状态空间,去发现从初始状态到目标的途径
  • 放宽约束条件:一些现实问题的解决

标准搜索的扩展

现实应用中很多问题:发现目标,而非达到目标的路径
如何描述目标状态?

  • 显式定义(枚举)
  • 隐式定义(条件约束描述)

需要完全状态(complete state)表示
举例:八皇后问题
问题形式化表示:

  • 初始状态:棋盘上没有Queen
  • 后继函数:把一个Queen添加到棋盘上任何一个空格
  • 目标测试:8个Queen加入棋盘,且相互无攻击
  • 代价函数:每一步代价为常数1
    人智导(三):局部搜索_第1张图片

搜索过程:

  • 状态空间: 8 8 8^8 88
  • 后继状态:从当前状态栏目中移动任意一个Queen,共 7 × 8 = 56 7\times 8 = 56 7×8=56
  • 启发代价函数 h h h:相互攻击的Queens对的数目,最佳是0
  • 左图状态 h = 17 h=17 h=17,其最好后继状态 h = 12 h=12 h=12。右图状态 h = 1 h=1 h=1

应用问题:

  • 调度问题(scheduling)
  • 日程安排(timetabling)
  • 配置问题(configuration)
  • 工厂布局(factory layout)
  • 电路设计(circuit design)

局部搜索

发现目标,而不是达到目标的途径
局部搜索的特点:

  • 只关心目标状态(goal),而不关心途径(path)
  • 只需少量的存储空间记录搜索过程中当前状态相关信息,而不需保存路径信息
  • 启发式搜索(有信息搜索),基于后继状态评估不断更新当前状态
  • 适合于处理更大规模的、甚至连续状态空间的目标状态搜索问题

最优化问题

根据一目标函数(objective function)找到最佳状态 f : s → y f: s\to y f:sy
在解空间中寻找最优解问题

爬山搜索算法

爬山搜索(Hill-Climbing):贪心局部搜索

  • 只关注当前状态的直接相邻(后继)的状态
  • 从后继状态集合中选最好的进行扩充(贪心策略)
  • 算法并不维持及保存搜索树
  • 仅需记录当前节点的状态及状态值

如图:
人智导(三):局部搜索_第2张图片
爬山搜索算法是不完备的,因为贪心搜索可能导致局部最优解
爬山搜素:最基本的区域搜索技术
算法:

Function HILL-CLIMBING(problem) returns a state that is a local maximum
	current <--- MAKE-NODE(problem, INITIAL-STATE)
	loop dp
		heighbor <--- a highest-valued successor of current
		if neighbor.VALUE <= current.VALUE
		then return current.STATE
		current <--- neighbor

随机重启式爬山搜索

人智导(三):局部搜索_第3张图片
随机重启式爬山搜索(random restart)

  • 通过随机选择初始状态以此主导一系列的爬山搜索,直到发现目标(全局最优解)
  • 若每一次爬山搜索成功(发现最优解)的概率为 p p p,随机重启的次数设定为 1 p \frac{1}{p} p1合适
  • 从X与Y分别出发,开始搜索,结果可能不同

模拟退火搜索算法

模拟退火搜索(simulated annealing search)

  • 爬山搜索从不“下山”移动(downhill),算法是不完备的,可能落入局部最优解‘
  • 模拟退火搜索:组合“爬山”(hill-climbing)与“随机行走”(random walk)策略
  • 既考虑到搜索效率又要考虑到完备性

算法:

Function SIMULATED-ANNEALING(problem, schedule) returns a solution state
	inputs: problem
	        schedule
	current <--- MAKE-NODE(problem, INITIAL-STATE)
	for t=1 to oo do
		T <--- schedule (t)
		if T=0 then return current
		next <--- a randomly selected successor of current
		delta <--- next.VALUE - current.VALUE
		if delta>0 then current <--- next
		else current <--- next only with probability p

p r o b a b i l i t y   p = e δ / T probability~p=e^{\delta /T} probability p=eδ/T
算法性质:

  • 没有选择最佳地移动,而是选择随机移动
  • T T T越高,选择“下山”移动的几率就越大。 T T T下降得足够慢,找到全局最优解的概率越高。

局部集束搜索

局部集束搜索(local beam search)

  • 爬山搜索和模拟退火搜索只需记录/保存当前节点(状态)即可
  • beam搜索:从后继状态中xuanze K K K个最佳的后继状态进行扩展
  • 选择 K K K个最佳后继状态裁剪搜索空间,仍可能聚集在小范围搜索空间
  • 更一般地,随机集束搜索(stochastic beam search)按一定概率(状态值递增很熟)随机选择 K K K个后继状态。

你可能感兴趣的:(数学与逻辑)