超越经典搜索
- 爬山法 Hill-climbing (variants)
- 模拟退火 Simulated annealing
- 遗传算法 Genetic algorithms
- 联机深度优先搜索 Online DF-search
一、爬山搜索
1、几个概念:目标函数、全局最优、局部最优、山肩、平原……
2、爬山法基本思想
(1)是一个沿着值增加的方向持续移动的简单循环过程;
(2)当到达一个山峰时就停止。
(3)爬山法不根据当前状态考虑计划未来后继节点。就像雾中登山一样。
(4)当有多个继节点时,爬山法选取最优后继节点集中的一个。
因此,爬山法也称为局部贪婪搜索。
3、伪代码
4、爬山法的缺陷
- 山脊 = 一组连续的局部极大对于贪婪算法去引导的搜索是困难的。
- 高原 = 一块状态空间区域的评价函数值是相同的。
- 方法:侧向移动(采用限制次数的方法限制侧移次数,避免死循环。 改进后8皇后问题,侧移设置为100次成功率由14%上升到94%) 重新开始(如果一开始没有成功,那么尝试,继续尝试)。
二、模拟退火算法
1、引论:爬山法从不下山的策略导致其不完备性,而纯粹的随机行走,又导致效率的低下,把单纯的爬山法和纯粹的随机相结合就是以下的模拟退火算法的思想。
Idea: 通过允许向不好的状态移动来避开局部最值点,但频率逐渐降低。
起源:冶金的退火原理
例子:弹球的分析 剧烈的摇动(=高温) 减少晃动(=降温)
2、模拟退火算法的性质
可以证明: 如果 T 降低的足够慢,则模拟退火能以趋近于1的概率找到最优解。
三、局部束搜索
- 保存k状态,而不是一个状态
- 从k 个随机产生的状态开始
- 每次迭代,产生k 个状态的所有后续
- 如果任何一个新产生的状态是目标状态,则停止。否则从所有后续中选择k个最好的后续,重复迭代
同随机重新开始的区别:在k条线索中共享信息。
缺点:缺乏多样性
随机变种:成比例地随机选取k个后继直到成功。
四、遗传算法
1、遗传算法是局部束搜索的变形:
与自然选择过程有些相似性,通过把二个父代结合产生后继(有性繁殖),而不是修改单一状态(无性繁殖)。
- 通过结合两个状态来产生后续状态
- 从k 个随机产生的状态开始(种群,population)
- 状态表示成字符串 (染色体)
- 评估函数(适应值函数,fitness function)
- 通过选择,交叉和变异操作来产生新一代种群。
2、遗传算法伪代码
function GENETIC_ALGORITHM( population, FITNESS-FN) return an individual
input: population, a set of individuals
FITNESS-FN, a function which determines the quality of the individual
repeat
new_population ← empty set
loop for i from 1 to SIZE(population) do
x ← RANDOM_SELECTION(population, FITNESS_FN)
y ← RANDOM_SELECTION(population, FITNESS_FN)
child ← REPRODUCE(x,y)
if (small random probability) then child ← MUTATE(child )
add child to new_population
population ← new_population
until some individual is fit enough or enough time has elapsed
return the best individual