实用优化算法(二)Hill Climbing
来源:互联网 发布:mac 盟军敢死队中文版 编辑:程序博客网 时间:2024/06/15 19:21
上一篇我们学习了共通启发式演算法:从一个(或多个)初始的一般性候选结果开始,迭代修改(或合并)候选结果。
我们应该如何最简单的实现这个思想呢?
登山算法
登山算法(Hill Climbing Algorithm): 是一个解决优化问题的局部搜索算法,通过不停地迭代从一个候选结果向另一个候选结果“移动”直到终止条件满足。
publicclass HC<G, X>extendsOptimizationAlgorithm<G, X>{
public HC(){
super();
}
@Override
publicIndividual<G, X> solve(finalIObjectiveFunction<X> f){
Individual<G, X> best, pnew;
best= new Individual<G, X>();
pnew= new Individual<G, X>();
//随机创建候选结果best,并将其初始化为当前最优结果
best.g= nullary.create(this.random);
best.x= this.gpm.gpm(best.g);
//由Termination函数决定终止条件
while(!(this.termination.shouldTerminate())){
//修改当前最优结果best,并将其传递给新的候选结果pnew
pnew.g= this.unary.mutate(best.g,this.random);
pnew.x= this.gpm.gpm(pnew.g);
pnew.v= f.compute(pnew.x);
//通过目标函数f比较修改后的pnew是否比best好一点
//如果比修改前好,那么将当前其赋值给当前最优结果best
if( pnew.v<= best.v){
best.assign(pnew);
}
}
//返回最优结果
return best;
}
}
登山算法存在的问题
登山算法每次都通过搜索空间朝一个更好地候选结果“移动”。那么每次都朝一个更好的方向移动会发生什么问题呢?
通过上图我们可以看到: 如果不能够探索搜索空间内的其他部分,优化算法会过早的朝一个局部优化融合。在空间内的其他部位会有更有的结果我们将无法找到!
总结
现在我们已经实现了一个简单的共通启发式演算法!它好吗?这个问题我们将在后面探讨!
0 0
- 实用优化算法(二)Hill Climbing
- hill-climbing algorithm 爬山算法简介
- hdu4315 Climbing the Hill(阶梯博弈)
- [HDU4315]Climbing the Hill(阶梯博弈)
- VC Dimension && Hill Climbing
- hdu4315 Climbing the Hill
- HDOJ 题目4315Climbing the Hill(阶梯博弈)
- 爬山法(Hill Climbing)的设计与PHP实现
- hdu 4315 Climbing the Hill (阶梯博弈)
- HDU-4315 Climbing the Hill(阶梯博弈)
- Climbing the Big Nan Hill
- hdu 4315 Climbing the Hill
- 【hdoj 4315】Climbing the Hill
- 【hdu 4315】Climbing the Hill
- hdu 4315 Climbing the Hill 博弈问题,可转化为nim游戏问题,多校联合赛(二)第六题
- CodeForces 406 D.Hill Climbing (凸包-Graham扫描法+在线倍增LCA)
- hdu - 4315 - Climbing the Hill - 博弈
- hdu4315 Climbing the Hill 转化NIM模型
- Binder驱动的实现
- Android Studio下载与安装
- 斐波那契数列之老师的难题
- 黑马程序员——Object-C基础(三)定义一个类
- 连接数据库
- 实用优化算法(二)Hill Climbing
- 你会不会喜欢编程多一点之当我特别想知道jdk1.8.0_20中有多少.java的文件时
- weblogic学习笔记:域创建+应用部署
- 自定义电池(5格电量)
- iOS开发中的事件处理(一)-UIResponder-
- Java泛型总结
- golang 正则表达式学习笔记
- Struts2-2.3需要再加入jar包
- 冒泡排序