图1 爬山算法搜索极大值动态演示

没错,正如在图1中所见到的那样,今天给大家介绍爬山算法。顾名思义,爬山就是我们日常所理解的爬山运动,而目的就是要登上山顶,想要到达山顶,每一步应该是向着山顶迈进的,经过一步一个脚印终于到达了山顶,就能真正体会到什么是“山登绝顶我为峰”豪迈姿态。当然了也别忘了“山外青山楼外楼”,也许所登山峰在当地是最高峰,但再高也没有珠穆朗玛峰。

是的,以上的开场白也说明了爬山算法的优缺点,爬山算法可以很好地求解局域(当地)极大或极小值,但并不能求解全局(全世界)最大或最小值。

爬山算法是一种采用启发式搜索方式来完成局域优化的智能算法。爬山算法描述如下:对于目标函数f(x),随意选择定义域范围内的一个节点作为起始节点,计算当前的节点与周围的近邻节点的函数值f(x'),并进行比较。 假设寻找最大值,如果当前节点的函数值为最大,返回当前节点,并取其值为最大值 ,否则用最高的近邻节点来,替换当前节点,从而实现向山峰的高处攀爬的目的,如此循环直到达到最高点。(如果存在多个局域最大值,则所得结果对初始节点选择敏感,计算过程遇平台也会影响搜索结果,见图2)。

图2 爬山法搜索状态图

基于以上思想,完成求解f(x,y) = 1/(x^2+y^2+pi)的爬山法求极大值源代码。

源代码:

clc;close all;

format long;

% 定义目标函数

fun = @(x,y) 1./(x.^2 + y.^2+pi);

% 定义初始节点(x0,y0)

x0 = 2.3;y0 = -2.8;

% 定义近邻节点范围

dx = 0.1;dy = 0.1;

% 定义近邻节点划分份数

nX = 10;nY = 10;

% 定义计算精度

% 定义x,y区间

x=-4:0.2:4;

y=-4:0.2:4;

% 二维网格化区间

[xx,yy] = meshgrid(x,y);

zz = fun(xx,yy);

% 绘制目标函数三维图像

surf(xx,yy,zz);

title(['爬山算法演示 ——','第',num2str(gg),'次搜素']);

xlabel('x轴');

ylabel('y轴');

zlabel('z轴');

val1 = fun(x0,y0);

plot3(x0,y0,val1,'r.');

% 初始化搜索次数和函数差值

gg = 1;dlt = 1;

while(dlt > ep)

nx=linspace(x0-dx,x0+dx,nX*gg);

ny=linspace(y0-dy,y0+dy,nY*gg);

[nxx,nyy] = meshgrid(nx,ny);

valtmp = fun(nxx,nyy);

% 求解近邻节点最大值及其位置

[val2,loc] = max(valtmp(:));

% 当前函数值与最大值作差

dlt = abs(val1-val2);

x0 = nxx(loc);

y0 = nyy(loc);

val1 = val2;

plot3(x0,y0,val2,'r.');

title(['爬山算法演示 ——','第',num2str(gg),'次搜素']);

pause(0.1);       % 暂停0.1

gg = gg + 1;

% 绘制最终极大值点

plot3(x0,y0,val2,'ro');

图3 爬山路径三维立体图

图4 爬山路径俯视图

赞赏是一种动力 分享是一种美德

matlab中用爬山搜索法仿真,MATLAB算法の爬山算法相关推荐

  1. matlab的实用与仿真,MATLAB建模与仿真实用教程

    前言 第1章MATLAB建模基础 1.1 MATLAB简介 1.1.1 MATLAB的安装 1.1.2 MATLAB通用命令 1.1.3 MATLAB应用窗口简介 1.2 MATLAB数学建模概述 1 ...

  2. matlab 与dsp联合仿真,matlab和DSP联合开发前景很大?

    呵呵,俺也是MATLAB的爱好者,看侬找得这么辛苦给侬发过俺刚买的书的目录吧,希望对侬有用!!! 目录 第1章  MATLAB基础 1.1  MATLAB开发环境新功能 1.1.1  函数浏览器 1. ...

  3. matlab基本杆组-运动学仿真,MATLAB基本杆组-运动学仿真.pdf

    MATLAB基本杆组-运动学仿真 第5章 运动学仿真 --Simulink的使用 从基本杆组理论为基础建立模型 §5-1 曲柄的MATLAB运动学仿真模块 1.曲柄的运动学矩阵表达式 在复数坐标系中, ...

  4. 爬山搜索法c语言代码,模拟退火算法和爬山算法 – 算法大全

    ##一. 爬山算法 ( Hill Climbing ) 介绍模拟退火前,先介绍爬山算法.爬山算法是一种简单的贪心搜索算法,该算法每次从当前解的临近解空间中选择一个最优解作为当前解,直到达到一个局部最优 ...

  5. matlab伺服阀故障仿真,MATLAB与AMESIM联合仿真出现问题

    仿真时出现以下问题,Setting environment for using Microsoft Visual C++ tools. Microsoft (R) Program Maintenanc ...

  6. matlab ecef2enu函数,GPS仿真-matlab工具箱

    [实例简介] MATLAB下的GPS工具箱,GPS TOOLBOX包含以下内容: 1.GPS相关常量和转换因子: 2.角度变换: 3.坐标系转换: 点变换: 矩阵变换: 向量变换: 4.专用测绘程序: ...

  7. MATLAB/Simulink永磁直驱风力发电系统仿真模型 本模型针对定桨距角的永磁直驱风机系统,包含风力机传动部分,整流器控制部分,逆变器控制部分,mppt(爬山搜索法)四大部分

    MATLAB/Simulink永磁直驱风力发电系统仿真模型 (含建模过程与参考文献) 本模型针对定桨距角的永磁直驱风机系统,包含风力机传动部分,整流器控制部分,逆变器控制部分,mppt(爬山搜索法)四 ...

  8. wnoise matlab,MATLAB中用wnoise函数测试去噪算法

    MATLAB中用wnoise函数测试去噪算法 sqrt_snr=3; init=231434; [x,xn]=wnoise(3,11,sqrt_snr,init); % WNOISE generate ...

  9. 波束赋形技术lms算法在matlab仿真,自适应波束成形算法LMS、RLS、VSSLMS分解

    1.传统的通信系统中,基站天线通常是全向天线,此时,基站在向某一个用户发射或接收信号时,不仅会造成发射功率的浪费,还会对处于其他方位的用户产生干扰.然而,虽然阵列天线的方向图是全向的,但是通过一定技术 ...

最新文章

  1. C Primer Plus (第五版) 第十章 数组和指针 编程练习
  2. nemanja AJAX,通过AJAX发送空值 - ASP.NET MVC
  3. 一篇文章带你快速理解JVM运行时数据区 、程序计数器详解 (手画详图)值得收藏!!!
  4. 企业门户网站服务器,企业或个人门户网站对服务器前的重要准备 - 酷番云
  5. PHP 隐藏真实下载地址
  6. js图片滚动详细介绍
  7. NUll is null like
  8. 十年一遇的奇葩故障--Windows网络编程接口故障:telnet显示无法加载或初始化请求的服务提供程序...
  9. 2019 CCF 推荐 会议 列表
  10. 当显存不够时是否会调用共享GPU内存?
  11. 云上发展,唯快不破!IT部门是数字化转型的变革者 | 凌云时刻
  12. Python数据可视化的例子——折线图(line)
  13. R7 4800U和i7 9700K 哪个好
  14. Mysql查询数据之基本和多条件查询
  15. 张岩 重庆大学 计算机学院,【学院之星】第二期
  16. 旅行商问题的蚁群算法
  17. Yii2如何使用Yii:t()
  18. 转载--马占凯:Sogou输入法之父的故事
  19. 机器人开发平台有哪些
  20. vue3函数写法中的状态、函数定义

热门文章

  1. linuxubuntu谷歌浏览器无法安装扩展程序
  2. sum and plan | 要温和有力量地长途旅行~
  3. python arg_python argmin_python中argmin函数_Python numpy.argmin(
  4. 思鑫诚禾普通话报考条件
  5. 隐藏滚动条但是保留滚动效果
  6. android qmui简书,QMUI_Android/qmui_style_widget.xml at master · Tencent/QMUI_Android · GitHub
  7. disable_functions绕过总结
  8. RecyclerView.ItemAnimator终极解读(一)--RecyclerView源码解析
  9. 34. java8新特性
  10. 游戏框架其八:2D图像 { Sprite | Font }