爬山算法:

爬山算法是一种简单的贪心搜索算法,在算法迭代的过程中,会从当前解的临近空间中随机选取下一个点,如果比当前结果好则会选取这个点作为新的最优解,否则再次进行选取。因为不是遍历得到的最优解,而是通过启发选择部分节点,从而达到提高效率的目的,爬山算法的实现很简单,其主要缺点是在迭代过程中会陷入局部最优解,并无法跳出,不是全局搜索算法,因此搜索不到全局最优解。

算法基本原理如下:

S<--选取一个初始解S作为可行解

while

R = S+rand()

if f(R)> f(S)

S = R

end

end

本文将从一个简单的二元函数入手,用Matlab实现爬山算法(Hill climbing)求解函数极值。需要注意的是,爬山算法作为一种启发式算法,在实际情况中使用的时候求解的问题会是抽象函数,不会像是本文给出的这种已知的目标函数,本文只是从一个二元函数作为例子,方便大家了解算法的基本结构。

在Matlab中绘制简单三维图像:

f =@(x,y) (x-1).^2+(y-x.^2).^2;
[a,b] = meshgrid(-2:0.1:2);
figure
mesh(a,b,f(a,b));hold on
xlabel('自变量x1')
ylabel('自变量x2')
zlabel('因变量f')

图像绘制如下所示:

这个函数的极值点在(1,1)处,从图像中可以选择一个在迭代过程中不会陷入局部最优解的一个点,在这里我选择了(0,0)作为初始解S,并将每一次迭代的点绘制在图中方便观察算法迭代的过程。

clc;clear;
f =@(x,y) (x-1).^2+100*(y-x.^2).^2;
[a,b] = meshgrid(-2:0.1:2);
figure
mesh(a,b,f(a,b));hold on
xlabel('自变量x1')
ylabel('自变量x2')
zlabel('因变量f')S=[0;0];step=0.001;
num=1;Y=f(S(1),S(2));for i = 1:10000num = num + 1;plot3(S(1),S(2),f(S(1),S(2)),'ko','MarkerFaceColor','k','Markersize',5);R = S + step*(2*rand(2,1)-1);if f(R(1),R(2))<f(S(1),S(2))S = R;endY = f(S(1),S(2));
end

最优解为(1.0000,1.0000)最优值为9.485708162265400e-11,这里是由于精确度的问题,最优解的小数部分没有完全显示,运行结果如下所示:

可以看出在迭代过程中,算法每次会随机选取可行方向,因此在在效率上会有所降低,可以对算法进行优化处理,在每一次随机选取的过程中让它多选取几个点,在许多个点中选取下降最好的点作为新解,优化后的代码如下:

clc;clear;
f =@(x,y) (x-1).^2+(y-x.^2).^2;
[a,b] = meshgrid(-2:0.1:2);
figure
mesh(a,b,f(a,b));hold on
xlabel('自变量x1')
ylabel('自变量x2')
zlabel('因变量f')S=[0;0];step=0.001;
num=1;Y=f(S(1),S(2));for i = 1:10000num = num + 1;plot3(S(1),S(2),f(S(1),S(2)),'ko','MarkerFaceColor','k','Markersize',5)R = S + step*(2*rand(2,1)-1);n = 100;for j = 1:n-1W = S + step*(2*rand(2,1)-1);if f(W(1),W(2)) < f(S(1),S(2))S = W;endendif f(R(1),R(2)) < f(S(1),S(2))S = R;endY = f(S(1),S(2));
end

在这里的函数较为简单,算法的迭代效率不是很明显,大家可以对比一下两个算法之间的差别,在实际应用的时候,随机点的选取可以根据环境有目的性的寻找,这样可以大大增强算法的运行效率。

爬山算法求解函数极值(matlab实现)相关推荐

  1. 粒子群算法的函数极值求解

    粒子群算法(PSO)是一种基于群体的随机优化技术,与其他基于群体的进化算法相比,他们均初始化为一组随机解,通过迭代搜寻最优解.不同的是,进化算法遵循适者生存原则,而PSO模拟社会,将每个可能产生的解表 ...

  2. 粒子群优化算法的寻优算法——非线性函数极值寻优Matlab

    粒子群算法的起源 1995年,受到鸟群觅食行为的规律性启发,James Kennedy和Russell Eberhart建立了一个简化算法模型,经过多年改进最终形成了粒子群优化算法(Particle ...

  3. MATLAB求解函数极值及函数图像

    MATLAB具有求解函数极值以及函数图像的功能,简单举一个例子. 求解上述函数极值与图像: 1.驻点求解 syms x >> y = (3*x^2 + 4*x +4)/(x^2 + x + ...

  4. 通俗易懂的布谷鸟算法与莱维飞行,(附求解函数最小值matlab源码)

    1 从布谷鸟的育雏到布谷鸟算法 2 布谷鸟算法 3 萊维飞行与公式(1)的深层含义 4 附:CS算法求解函数最小值代码 5 源码下载 6 参考文献 1 从布谷鸟的育雏到布谷鸟算法 布谷鸟不会做窝,也不 ...

  5. 运用遗传算法求解函数极值(fortran)

    运用遗传算法求解函数极值(fortran) 写在前面 遗传算法的前世今生 算法步骤简介 遗传算法的主体结构 开始求解: 结果显示: 最后再来说一些需要注意的地方 写在前面 这篇文章适合一些应急学习最优 ...

  6. 差分进化算法求解函数最值问题

    差分进化算法求解函数最值问题 声明: 1.本文源代码来自书目<智能优化算法及其MATLAB实例(第3版)>,目的在于为MATLAB初学者提供更简明的代码解析,方便读者了解算法及MATLAB ...

  7. 利用遗传算法求解函数极值

    1.利用遗传算法求解函数极值 例1 利用遗传算法求函数 f(x) = 11sin(6x) + 7cos(5x),x∈[- π,π]的最大值点. 解:在MATLAB中编制绘制函数曲线的代码,运行得到题中 ...

  8. 智能计算作业——差分进化算法求解函数最值

    下面是智能计算作业,哎呀,你们快来抄我作业呀╭(╯^╰)╮ 问题描述: 算法理论我省略了,你们自己去百科上抄吧╭(╯^╰)╮ 求解步骤: (这个好像也是百科上的╭(╯^╰)╮我根据自己的需要改了一下) ...

  9. 斐波那契(Fibonacci)迭代法求解函数极值(附代码)

    目录 Fibonacci数列: 迭代公式: 算法步骤: 例题 C++代码: Fibonacci数列又称黄金分割数列.因数学家列昂纳多·斐波那契(Leonardoda Fibonacci)以兔子繁殖为例 ...

最新文章

  1. 「云毕业照」刷爆朋友圈!AI人脸融合技术谁家强?
  2. 解决Ubuntu16.04重启进入initramfs
  3. Tensorflow编程遇到的问题汇总【持续更新】
  4. 全球及中国微型风扇行业营销前景及发展趋势建议报告2022-2027年
  5. ITK:遍历图像的线
  6. kafka常用命令及问题解决
  7. [转]解决Android studio升级到3.5的一些问题
  8. 【洛谷P2743】【poj 1743】[USACO5.1]乐曲主题Musical Themes
  9. PKU 学生反馈 3
  10. mysql 数据修改记录日志_mysql对数据的更新操作记录在哪个日志中?
  11. 查找树的指定层级_阿里面试,问了B+树,这个回答让我通过了
  12. 新松机器人产业小镇_机器人行业迎来拐点,新松机器人如何“过冬”?丨亿欧读财报...
  13. 吃冻梨对人会有什么好处?
  14. CCNA11月20日战报
  15. linux勒索病毒如何恢复数据,勒索病毒和相应的解密工具
  16. 系统分析师考试经验分享
  17. 企业信息化管理软件,如何走出开发困境
  18. Spring容器父子关系
  19. 仿ios相机apk_iCamera仿苹果相机app下载-iCamera仿苹果相机下载app手机版 v4.0-第六手游网...
  20. uCOS在51单片机上的移植心得

热门文章

  1. 区块链产业园拔地而起,多方面亟待问题解决?
  2. java 运算速度问题
  3. android tablayout 自定义,TabLayout用法详解及自定义样式
  4. 王建兴:给技术焦虑者及狂热者的建议
  5. Roam Research 综合评测以及使用教程
  6. 跳出互联网做互联网
  7. 实用新型专利申请流程
  8. 学生网上考试报名系统的设计与实现
  9. SQL中先排序再筛选与先筛选再排序
  10. 利用尾巴作为时间序列进行处理来识别鲸鱼