爬山算法matlab程序,爬山算法和模拟退火算法
爬山算法
大体思路
爬山算法即是模拟爬山的过程,随机选择一个位置爬山,每次朝着更高的方向移动,直到到达山顶
具体操作
把当前的节点和要走的节点的值进行比较。 如果当前节点是最大的,那么不进行操作;反之就用要走的的节点来替换当前节点,从而实现向山峰的高处攀爬的目的。如此循环直到达到最高点。
缺点
会陷入局部最优解。只适用于计算几何等局部最优解集中的题目。
#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程序,爬山算法和模拟退火算法相关推荐
- 爬山算法matlab程序,爬山搜索算法编程
clear; clc; u0=4*pi*10^(-7);%真空磁导率/(H/m) n1=60;%线圈匝数 n2=60;%线圈匝数 r1=30;%线圈半径/(cm) r2=30;%线圈半径/(cm) c ...
- svm算法 matlab,SVM算法matlab程序
经典SVM算法matlab程序\svm\binomial.m 经典SVM算法matlab程序\svm\centrefig.m 经典SVM算法matlab程序\svm\cmap.mat 经典SVM算法m ...
- 亮度均匀性 matlab,求:亮度保持的夜景图像直方图均衡算法 matlab程序
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 求:亮度保持的夜景图像直方图均衡算法 matlab程序 我是大四学生,最近在做一个论文,头疼死了,不知道这个论文的程序怎么写.这里是matlab论坛 我想 ...
- 秦九韶算法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( ...
- 标准差分进化算法matlab程序实现(转载)
标准差分进化算法matlab程序实现 自适应差分演化算法方面的Matlab和C++代码及论文 差分进化算法 DE-Differential Evolution matlab练习程序(差异演化DE) [ ...
- 【Matlab电力负荷预测】模拟退火算法结合狮群算法优化Elman神经网络电力负荷预测【含源码 1454期】
一.代码运行视频(哔哩哔哩) [Matlab电力负荷预测]模拟退火算法结合狮群算法优化Elman神经网络电力负荷预测[含源码 1454期] 二.matlab版本及参考文献 1 matlab版本 201 ...
- 极值滤波matlab,极值滤波算法MATLAB程序及处理结果对比
<极值滤波算法MATLAB程序及处理结果对比>由会员分享,可在线阅读,更多相关<极值滤波算法MATLAB程序及处理结果对比(5页珍藏版)>请在人人文库网上搜索. 1.极值滤波算 ...
- 鲍威尔法源程序码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+ ...
- 风电功率预测优化算法MATLAB程序基于改进神经网络
风电功率预测优化算法MATLAB程序基于改进神经网络 (1) 该程序为基于改进神经网络的风电功率预测优化算法程序,风电预测程序,期刊论文源程序,配有该论文. (2) 该程序所用的ICA-BP 神经网络 ...
最新文章
- java实现微信企业付款到银行卡_微信企业付款到银行卡实现方式 - 黎明互联-官方博客 - 黎明互联 - 区块链培训,PHP培训,IT培训,职业技能培训,追求极致!改变您的职业生涯!...
- 网络数据包收发流程(四):协议栈之packet_type
- 机器人 铑元素_智能机器人 三十三
- spark sortBy sortByKey实战详解
- js 把含有转义符的字符串转成json格式
- 使用注册表删除没用的DLL文件
- java 中英日期转换器_Java SimpleDateFormat中英文时间格式化转换详解
- springboot+vue疫情管理大作业
- linux6.5关闭防火墙命令,centos关闭防火墙的方法
- android 12.0 wifi开关控制功能实现
- 跟我学springboot(十五)springboot日志选型
- Android源码编译(Ubuntu 14.04)
- c语言学习(循环语句do while)
- 企业成功的秘密:成为独角兽
- 容斥原理与广义容斥原理
- Win10电脑清除运行窗口的历史记录
- 谈谈我对软件开发项目管理的理解
- echarts为什么用getElementsByClassName()方法显示不了图表
- 34个简洁清爽的网页设计案例欣赏
- opencv 获取最小外接矩形
热门文章
- oracle存储回车换行,oracle中去掉回车换行空格的方法详解
- 江西事业单位计算机专业知识真题,2015年江西事业单位考试计算机每日练习题(1月27日)...
- 五脏六腑在脸上的反射区图片_面部穴位对应的反射区图片
- 用python 入门数据科学_如何高效入门数据科学?
- IBM:蓝色巨人是颓势?还是沉淀?
- 统计分析:偏度和峰度
- 双边滤波Python实现
- 烤仔TVの尚书房 | 对话 Chainlink 条子哥 共话 DeFi 狂热下的冷静
- 项目经理和程序员之间的关系
- 【YBTOJ进阶训练指导】删边问题【SPFA】【二分答案】