博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
模拟退火算法实现代码
阅读量:5141 次
发布时间:2019-06-13

本文共 1737 字,大约阅读时间需要 5 分钟。

模拟退火算法:主程序实现如下:

具体算法实现函数,请点击这里https://s.wcd.im/v/43dvdZ36/

%main.m 文件

close all;
clear all;

zuobiao=[0.37 0.75 0.45 0.76 0.71 0.07 0.42 0.59 0.32 0.6 0.3 0.67 0.62 0.67 0.20 ...

0.35 0.27 0.94 0.82 0.37 0.61 0.42 0.6 0.39 0.53 0.4 0.63 0.5 0.98 0.68;
0.91 0.87 0.85 0.75 0.72 0.74 0.71 0.69 0.64 0.64 0.59 0.59 0.55 0.55 0.5...
0.45 0.43 0.42 0.38 0.27 0.26 0.25 0.23 0.19 0.19 0.13 0.08 0.04 0.02 0.85]
plot(zuobiao(1,:),zuobiao(2,:),'g*'),hold on
plot(zuobiao(1,:),zuobiao(2,:))
length=max(size(zuobiao));
%求初始距离..
% zhixu=randperm(length); %随机生成一个路线经过点的顺序
% temp=zuobiao(1,:);
% newzuobiao(1,:)=temp(zhixu);
% temp=zuobiao(2,:);
% newzuobiao(2,:)=temp(zhixu);
% newzuobiao;
% f=juli(newzuobiao);
f=juli(zuobiao);
%参数定义区--------------------------------------
%初始温度为10000
tmax=100;
tmin=0.001;
%温度下降速率
down=0.95;
%退火算法的函数..
figure
t=tmax;
while t>tmin
for n=1:5000
newzuobiao=newpath(zuobiao,length);
newf=juli(newzuobiao);
if newf<f
zuobiao=newzuobiao;
f=newf;
elseif rand<exp(-(newf-f)/t)
zuobiao=newzuobiao;
f=newf;
end
end
huatu=[zuobiao,zuobiao(:,1)];
plot(huatu(1,:),huatu(2,:)); hold on
plot(huatu(1,:),huatu(2,:),'ro');text(0.1,0.1,['总距离为',num2str(f)]); hold off
pause(0.00001);
t=t*down;
f;
end

%newpath.m 文件(随机的交换两个点的坐标)

% function zuobiao=newpath(zuobiao,length)
% %随机交换两个点的坐标..
% a=ceil(rand(1,2)*length);
% qian=a(1);
% hou=a(2);
% temp=zuobiao(:,qian);
% zuobiao(:,qian)=zuobiao(:,hou);
% zuobiao(:,hou)=temp;
%juli.m 文件(计算按某种方式围成的圈的总路程)
% function lucheng=juli(zuobiao)
% length=max(size(zuobiao));
% s=0;
% for i=2:length
% s=s+sqrt(sum((zuobiao(:,i)-zuobiao(:,i-1)).^2));
% end
% if length~=2
% s=s+sqrt(sum((zuobiao(:,1)-zuobiao(:,length)).^2));
% end
% lucheng=s;

转载于:https://www.cnblogs.com/weimingai/p/10980037.html

你可能感兴趣的文章
layer:web弹出层解决方案
查看>>
算法答疑---06:月度开销
查看>>
P1127 词链
查看>>
Java习题10.24
查看>>
第三百六十三节,Python分布式爬虫打造搜索引擎Scrapy精讲—elasticsearch(搜索引擎)的mget和bulk批量操作...
查看>>
Weka 入门3
查看>>
POJ 3581 Sequence(后缀数组)题解
查看>>
mouseout和mouseover、mouseenter和mouseleave
查看>>
easyui datagrid load 封装 参数问题 js 作用域
查看>>
win10常用快捷键、
查看>>
关于C语言求两个数的最大公约数
查看>>
常用的public.js
查看>>
Redis-ha(sentinel)
查看>>
【Tomcat】tomcat中server.xml配置详解
查看>>
测试员的工作与学习
查看>>
SpringBoot+SpringSecurity之多模块用户认证授权同步
查看>>
【http】http/1.1 八种请求方式
查看>>
pointer-events:none 限制鼠标事件及对覆盖元素层进行穿透
查看>>
简单的嵌套循环和文件操作
查看>>
使用拦截器拦截html参数
查看>>