local search 之爬山算法

前几天浏览CSDN的时候看到了腾讯soso团队博客人工智能算法-优化算法 .看到文章后不知道咋回事,一直潜水的我有点忍不住要说几句!

在贴子中说到优化算法:

 

常用有4种优化算法:

    1 随机搜索

    2 爬山法

    3 退火法

    4 遗传算法

 

第一种就不说了,比较简单, 而后面三种都是属于local seach. local seach 是一种meta-heuristic , 就是一种启发示找查!

大致思想是:

(1). 给定一个数量的初始值状态,也就当前状态

(2). 根据当前状态以一定的规则生成一定数量的相邻状态

(3). 根据一定规则用相邻状态来代替当前状态 (比如相邻状态值优于当前状态)

(4). 重复(2),(3)直到找到一个满意的解或者查找时间用完!

 

常用的local search 算法有 爬山算法, 模拟退火算法, 遗传算法和禁忌查找等, 主要是用来解决一些NP问题

http://en.wikipedia.org/wiki/Local_search_(optimization), 具体说明这个里面介绍了点!

 

这几个算法都是比较经典的算法, 这里先简单说下吧

对于local search 最重要的就是以下几个方面:

 

1). 状态的表示, 用什么的结构表示状态, 就在一定程度上决定后面生成相邻状态难易和查找空间大小

2). 相邻状态的生成的方法

3). 参数设置(如找查的初始解,模拟退火的初始温度, 温度的变化率,禁忌表的长度等), 不同问题参数设置可能不一样!

 

(1)爬山算法,

这几个算法中爬山算法计算时间最少,当然它快的是有代价的, 它的原理就是在步骤(3)中,找查当前状态中所有的相邻状态,然后用最好的相邻状态代替当前状态, 它的缺点就是容易出现局部最小解! 但是它仍然在一些实时性要求比较高的问题用的比较多吧!

http://en.wikipedia.org/wiki/Hill_climbing

这个网址中讲的比较好了(我把自己能补充的都补在里面了),我就不多说了.

 

(2)退火算法

与爬山算法相比较,退火算法可以以一定的概率接受一些状态值比当前状态值差的状态, 这个就有可能escape局部最小的状态! 这个概率和当前的"温度"有关,当查找越往后, "温度"就越低, 这样接受比当前状态值差的可能性就越小!

 

 

(3)禁忌查找

这个算法在查找的过程中增加了一个禁忌表来避免迂回的查找! 

 

(4)遗传算法

和前面两个不一样的是,这个算法在初始时就有多个状态即叫一个种群,其实我们也可看为一个大"状态"(当然前面几种方法也可以用多线程来实现多个初始状态的情况), 在算法中叫"个体". 在生成相邻状态上也和前面几种方法不同. 主要是通过"交叉"和"变异"来改变"染色体"中的编码来生成相邻状态. 使用该算法的关键是把握好收敛速度和"种群多样性"之间的矛盾.

 

 

 相关书和论文:

Handbook of Metaheuristics

A Tutorial survey

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值