爬山算法

大体思路

爬山算法即是模拟爬山的过程,随机选择一个位置爬山,每次朝着更高的方向移动,直到到达山顶

具体操作

把当前的节点和要走的节点的值进行比较。 如果当前节点是最大的,那么不进行操作;反之就用要走的的节点来替换当前节点,从而实现向山峰的高处攀爬的目的。如此循环直到达到最高点。

缺点

会陷入局部最优解。只适用于计算几何等局部最优解集中的题目。

#include

#include

using namespace std;

#define maxn 105

int n,go[4][2]={{1,0},{-1,0},{0,1},{0,-1}};

double x[maxn],y[maxn],sx,sy;

double calc(double x1,double y1){

double ans=0;

for(int i=0;i

ans+=sqrt((x1-x[i])*(x1-x[i])+(y1-y[i])*(y1-y[i]));

}

return ans;

}

int main(){

scanf("%d",&n);

for(int i=0;i

scanf("%lf%lf",x+i,y+i),sx+=x[i],sy+=y[i];

}

sx/=n,sy/=n;

double ans=calc(sx,sy),x1,y1,k;

for(double i=1e4;i>1e-3;i*=0.9){

for(int i=0;i<4;i++){

x1=sx+go[i][0]*i,y1=sy+go[i][1]*i;

k=calc(x1,y1);

if(k

ans=k,sx=x1,sy=y1;

}

}

}

printf("%.0lf",ans);

return 0;

}

模拟退火

模拟退火和爬山只有一点不同:

如果当前节点比要走的节点更优,则爬山一定不会跳到要走的节点

但模拟退火有一定的几率会跳到要走的节点,并且这个几率越来越小

#include

#include

#include

using namespace std;

#define maxn 50

int n,id;

double x[maxn],y[maxn],z[maxn];

inline double dis(double x1,double y1,double z1,double x2,double y2,double z2){

return sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2)+(z1-z2)*(z1-z2));

}

double calc(double x1,double y1,double z1){

double ans=dis(x1,y1,z1,x[0],y[0],z[0]),k;

id=0;

for(int i=1;i

if(ans

ans=k,id=i;

}

}

return ans;

}

void work(){

double sx=0,sy=0,sz=0,ans,k,x1,y1,z1;

for(int i=0;i

x1=sx/=n,y1=sy/=n,z1=sz/=n;

ans=k=calc(sx,sy,sz);

int si=0;

for(double i=1e2;i>1e-7;i*=0.98){

x1=sx+(x[id]-sx)/k*i;

y1=sy+(y[id]-sy)/k*i;

z1=sz+(z[id]-sz)/k*i;

k=calc(x1,y1,z1);

if(k

if(k++si)sx=x1,sy=y1,sz=z1;//如果不比原先优,则有一定几率去走

}

printf("%.5lf\n",ans);

}

int main(){

srand(1231435);

while(~scanf("%d",&n)&&n)work();

return 0;

}

爬山算法matlab程序,爬山算法和模拟退火算法相关推荐

  1. 爬山算法matlab程序,爬山搜索算法编程

    clear; clc; u0=4*pi*10^(-7);%真空磁导率/(H/m) n1=60;%线圈匝数 n2=60;%线圈匝数 r1=30;%线圈半径/(cm) r2=30;%线圈半径/(cm) c ...

  2. svm算法 matlab,SVM算法matlab程序

    经典SVM算法matlab程序\svm\binomial.m 经典SVM算法matlab程序\svm\centrefig.m 经典SVM算法matlab程序\svm\cmap.mat 经典SVM算法m ...

  3. 亮度均匀性 matlab,求:亮度保持的夜景图像直方图均衡算法 matlab程序

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 求:亮度保持的夜景图像直方图均衡算法 matlab程序 我是大四学生,最近在做一个论文,头疼死了,不知道这个论文的程序怎么写.这里是matlab论坛 我想 ...

  4. 秦九韶算法matlab程序,数值分析matlab程序实例.doc

    数值分析matlab程序实例 1,秦九韶算法,求出P(x=3)=2+4x+5x^2+2x^3的值 clear?all; x=3; n=3; a(1)=2;a(2)=4;a(3)=5;a(4)=2 v( ...

  5. 标准差分进化算法matlab程序实现(转载)

    标准差分进化算法matlab程序实现 自适应差分演化算法方面的Matlab和C++代码及论文 差分进化算法 DE-Differential Evolution matlab练习程序(差异演化DE) [ ...

  6. 【Matlab电力负荷预测】模拟退火算法结合狮群算法优化Elman神经网络电力负荷预测【含源码 1454期】

    一.代码运行视频(哔哩哔哩) [Matlab电力负荷预测]模拟退火算法结合狮群算法优化Elman神经网络电力负荷预测[含源码 1454期] 二.matlab版本及参考文献 1 matlab版本 201 ...

  7. 极值滤波matlab,极值滤波算法MATLAB程序及处理结果对比

    <极值滤波算法MATLAB程序及处理结果对比>由会员分享,可在线阅读,更多相关<极值滤波算法MATLAB程序及处理结果对比(5页珍藏版)>请在人人文库网上搜索. 1.极值滤波算 ...

  8. 鲍威尔法源程序码matlab,鲍威尔算法matlab程序f.doc

    鲍威尔算法matlab程序f.doc functionf=fun(x)f=10*(x(1)+x(2)-5)^2+(x(1)-x(2))^2;functionf=fx(x0,alpha,s)x1=x0+ ...

  9. 风电功率预测优化算法MATLAB程序基于改进神经网络

    风电功率预测优化算法MATLAB程序基于改进神经网络 (1) 该程序为基于改进神经网络的风电功率预测优化算法程序,风电预测程序,期刊论文源程序,配有该论文. (2) 该程序所用的ICA-BP 神经网络 ...

最新文章

  1. java实现微信企业付款到银行卡_微信企业付款到银行卡实现方式 - 黎明互联-官方博客 - 黎明互联 - 区块链培训,PHP培训,IT培训,职业技能培训,追求极致!改变您的职业生涯!...
  2. 网络数据包收发流程(四):协议栈之packet_type
  3. 机器人 铑元素_智能机器人 三十三
  4. spark sortBy sortByKey实战详解
  5. js 把含有转义符的字符串转成json格式
  6. 使用注册表删除没用的DLL文件
  7. java 中英日期转换器_Java SimpleDateFormat中英文时间格式化转换详解
  8. springboot+vue疫情管理大作业
  9. linux6.5关闭防火墙命令,centos关闭防火墙的方法
  10. android 12.0 wifi开关控制功能实现
  11. 跟我学springboot(十五)springboot日志选型
  12. Android源码编译(Ubuntu 14.04)
  13. c语言学习(循环语句do while)
  14. 企业成功的秘密:成为独角兽
  15. 容斥原理与广义容斥原理
  16. Win10电脑清除运行窗口的历史记录
  17. 谈谈我对软件开发项目管理的理解
  18. echarts为什么用getElementsByClassName()方法显示不了图表
  19. 34个简洁清爽的网页设计案例欣赏
  20. opencv 获取最小外接矩形

热门文章

  1. oracle存储回车换行,oracle中去掉回车换行空格的方法详解
  2. 江西事业单位计算机专业知识真题,2015年江西事业单位考试计算机每日练习题(1月27日)...
  3. 五脏六腑在脸上的反射区图片_面部穴位对应的反射区图片
  4. 用python 入门数据科学_如何高效入门数据科学?
  5. IBM:蓝色巨人是颓势?还是沉淀?
  6. 统计分析:偏度和峰度
  7. 双边滤波Python实现
  8. 烤仔TVの尚书房 | 对话 Chainlink 条子哥 共话 DeFi 狂热下的冷静
  9. 项目经理和程序员之间的关系
  10. 【YBTOJ进阶训练指导】删边问题【SPFA】【二分答案】