欢迎来到天天文库
浏览记录
ID:10260135
大小:39.50 KB
页数:3页
时间:2018-06-14
《遗传算法模拟退火matlab编程》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、单钻头退火算法matlab编程clearclca=0.999;%温度衰减函数的参数t0=97;tf=3;t=t0;Markov_length=2800;%Markov链长度coordinates=[];coordinates(:,1)=[];amount=size(coordinates,1);%城市的数目%通过向量化的方法计算距离矩阵dist_matrix=zeros(amount,amount);coor_x_tmp1=coordinates(:,1)*ones(1,amount);coor_x_tmp2=coor_x_tmp1';
2、coor_y_tmp1=coordinates(:,2)*ones(1,amount);coor_y_tmp2=coor_y_tmp1';dist_matrix=sqrt((coor_x_tmp1-coor_x_tmp2).^2+...(coor_y_tmp1-coor_y_tmp2).^2);sol_new=1:amount;%产生初始解%sol_new是每次产生的新解;sol_current是当前解;sol_best是冷却中的最好解;E_current=inf;E_best=inf;%E_current是当前解对应的回路距离;%E_
3、new是新解的回路距离;%E_best是最优解的sol_current=sol_new;sol_best=sol_new;p=1;whilet>=tfforr=1:Markov_length%Markov链长度%产生随机扰动if(rand<0.5)%随机决定是进行两交换还是三交换%两交换ind1=0;ind2=0;while(ind1==ind2)ind1=ceil(rand.*amount);ind2=ceil(rand.*amount);endtmp1=sol_new(ind1);sol_new(ind1)=sol_new(ind2
4、);sol_new(ind2)=tmp1;else%三交换ind1=0;ind2=0;ind3=0;while(ind1==ind2)
5、
6、(ind1==ind3)...
7、
8、(ind2==ind3)
9、
10、(abs(ind1-ind2)==1)ind1=ceil(rand.*amount);ind2=ceil(rand.*amount);ind3=ceil(rand.*amount);endtmp1=ind1;tmp2=ind2;tmp3=ind3;%确保ind111、eif(ind112、=tmp1;endtmplist1=sol_new((ind1+1):(ind2-1));sol_new((ind1+1):(ind1+ind3-ind2+1))=...sol_new((ind2):(ind3));sol_new((ind1+ind3-ind2+2):ind3)=...tmplist1;end%检查是否满足约束%计算目标函数值(即内能)E_new=0;fori=1:(amount-1)E_new=E_new+...dist_matrix(sol_new(i),sol_new(i+1));end%再算上从最后一个城市到第13、一个城市的距离%E_new=E_new+...%dist_matrix(sol_new(amount),sol_new(1));ifE_new14、t=sol_new;elsesol_new=sol_current;endendendt=t.*a;%控制参数t(温度)减少为原来的a倍enddisp('最优解为:')disp(sol_best)disp(
11、eif(ind112、=tmp1;endtmplist1=sol_new((ind1+1):(ind2-1));sol_new((ind1+1):(ind1+ind3-ind2+1))=...sol_new((ind2):(ind3));sol_new((ind1+ind3-ind2+2):ind3)=...tmplist1;end%检查是否满足约束%计算目标函数值(即内能)E_new=0;fori=1:(amount-1)E_new=E_new+...dist_matrix(sol_new(i),sol_new(i+1));end%再算上从最后一个城市到第13、一个城市的距离%E_new=E_new+...%dist_matrix(sol_new(amount),sol_new(1));ifE_new14、t=sol_new;elsesol_new=sol_current;endendendt=t.*a;%控制参数t(温度)减少为原来的a倍enddisp('最优解为:')disp(sol_best)disp(
12、=tmp1;endtmplist1=sol_new((ind1+1):(ind2-1));sol_new((ind1+1):(ind1+ind3-ind2+1))=...sol_new((ind2):(ind3));sol_new((ind1+ind3-ind2+2):ind3)=...tmplist1;end%检查是否满足约束%计算目标函数值(即内能)E_new=0;fori=1:(amount-1)E_new=E_new+...dist_matrix(sol_new(i),sol_new(i+1));end%再算上从最后一个城市到第
13、一个城市的距离%E_new=E_new+...%dist_matrix(sol_new(amount),sol_new(1));ifE_new14、t=sol_new;elsesol_new=sol_current;endendendt=t.*a;%控制参数t(温度)减少为原来的a倍enddisp('最优解为:')disp(sol_best)disp(
14、t=sol_new;elsesol_new=sol_current;endendendt=t.*a;%控制参数t(温度)减少为原来的a倍enddisp('最优解为:')disp(sol_best)disp(
此文档下载收益归作者所有