模拟退火算法详解(TSP问题)

模拟退⽕算法详解(TSP问题)
模拟退⽕算法原理:
其⽬标是要到函数的最⼤值,若初始化时,初始点的位置在A处,则会寻到附近的局部最⼤值B点处,由于B点出是⼀个局部最⼤值点,故对于⼀般算法来讲,⽐如梯度下降法,该算法⽆法跳出局部最优值。
模拟退⽕算法(Simulated Annealing, SA)的思想借鉴于固体的退⽕原理,当固体的温度很⾼的时候,内能⽐较⼤,固体的内部粒⼦处于快速⽆序运动,当温度慢慢降低的过程中,固体的内能减⼩,粒⼦的慢慢趋于有序,最终,当固体处于常温时,内能达到最⼩,此时,粒⼦最为稳定。模拟退⽕算法便是基于这样的原理设计⽽成。
模拟退⽕算法从某⼀较⾼的温度出发,这个温度称为初始温度,伴随着温度参数的不断下降,算法中的解趋于稳定,但是,可能这样的稳定解是⼀个局部最优解,此时,模拟退⽕算法中会以⼀定的概率跳出这样的局部最优解,以寻⽬标函数的全局最优解。如上图中所⽰,若此时寻到了B点处的解,模拟退⽕算法会以⼀定的概率跳出这个解,最终可以如跳到了C点,这样在⼀定程度上增加了寻到全局最优解的可能性。
如图为模拟退⽕的算法流程:
下图是利⽤模拟退⽕针对图论中汉密尔顿图求解最短路径问题:
初始解
最终解
优化过程
总结:
总结:模拟退⽕最重要的防⽌进⼊局部最优解,⼀般采⽤Metropolis准则,粒⼦在温度T时趋于平衡的概率为exp(-ΔE/(kT)),其中E为温度T时的内能,ΔE为其改变数,k为Boltzmann常数。Metropolis准则常表⽰为:
中华民族根本利益所在是
Metropolis准则表明,在温度为T时,出现能量差为dE的降温的概率为P(dE),表⽰为:P(dE)= exp( dE/(kT))。其中k是⼀个常
数,exp表⽰⾃然指数,且dE<0。所以P和T正相关。这条公式就表⽰:温度越⾼,出现⼀次能量差为dE的降温的概率就越⼤;温度越低,则出现降温的概率就越⼩。⼜由于dE总是⼩于0(因为退⽕的过程是温度逐渐下降的过程),因此dE/kT<0 ,所以P(dE)的函数取值范围是(0,1) 。随着温度T的降低,P(dE)会逐渐降低。
总结起来就是:
若f( Y(i+1) ) <= f( Y(i)) (即移动后得到更优解),则总是接受该移动;
若f( Y(i+1) ) > f( Y(i)) (即移动后的解⽐当前解要差),则以⼀定的概率接受移动,⽽且这个概率随着时间推移逐渐降低(逐渐降低才能趋向稳定)相当于上图中,从B移向BC之间的⼩波峰时,每次右移(即接受⼀个更糟糕值)的概率在逐渐降低。如果这个坡特别长,那么很有可能最终我们并不会翻过这个坡。如果它不太长,这很有可能会翻过它,这取决于衰减 t 值的设定。
Matlab程序:
%% I. 清空环境变量
clear all
clc
%% II. 导⼊城市位置数据
X = [16.4700  96.1000
16.4700  94.4400
20.0900  92.5400
22.3900  93.3700
25.2300  97.2400
22.0000  96.0500
20.4700  97.0200
17.2000  96.2900
16.3000  97.3800
14.0500  98.1200
16.5300  97.3800
21.5200  95.5900
19.4100  97.1300
20.0900  92.5500];
%% III. 计算距离矩阵
D = Distance(X); %计算距离矩阵
N = size(D,1);  %城市的个数
N = size(D,1);  %城市的个数
%% IV. 初始化参数
T0 = 1e10;  % 初始温度
Tend = 1e-30;  %终⽌温度
L = 2;    % 各温度下的迭代次数
q = 0.9;    %降温速率
Time = ceil(double(solve([num2str(T0) '*(0.9)^x =',num2str(Tend)]))); % 计算迭代的次数
% Time = 132;
count = 0;      %迭代计数
Obj = zeros(Time,1);        %⽬标值矩阵初始化
track = zeros(Time,N);      %每代的最优路线矩阵初始化
乡村神话
%% V. 随机产⽣⼀个初始路线
S1 = randperm(N);
DrawPath(S1,X)
disp('初始种中的⼀个随机值:')
OutputPath(S1);
Rlength = PathLength(D,S1);
disp(['总距离:',num2str(Rlength)]);
%% VI. 迭代优化
while T0 > Tend
count =count + 1;    %更新迭代次数
temp =zeros(L,N+1);
%%
% 1. 产⽣新解
S2 =NewAnswer(S1);
%%
% 2.Metropolis法则判断是否接受新解
人名翻译
[S1,R] =Metropolis(S1,S2,D,T0);  %Metropolis 抽样算法
%%
% 3. 记录每次迭代过程的最优路线
if count ==1 || R < Obj(count-1)
Obj(count) =R;    %如果当前温度下最优路程⼩于上⼀路程则记录当前路程
else
Obj(count) =Obj(count-1);%如果当前温度下最优路程⼤于上⼀路程则记录上⼀路程
end
track(count,:) = S1;
冷水浴 下载T0 = q *T0;    %降温
end
健康之路 性功能
螺旋桨设计%% VII. 优化过程迭代图
figure
plot(1:count,Obj)
xlabel('迭代次数')
ylabel('距离')
title('优化过程')
%% VIII. 绘制最优路径图
DrawPath(track(end,:),X)
%% IX. 输出最优解的路线和总距离
disp('最优解:')
S = track(end,:);
p = OutputPath(S);
disp(['总距离:',num2str(PathLength(D,S))]);
%%%%%%%%%%%%%%%%%%% Distance函数%%%%%%%%%%%%%%%%%%%% function D = Distance(citys)
%% 计算两两城市之间的距离
% 输⼊ citys  各城市的位置坐标
% 输出 D 两两城市之间的距离
n = size(citys,1);
D = zeros(n,n);
for i = 1:n
for j =i+1:n
D(i,j) =sqrt(sum((citys(i,:) - citys(j,:)).^2));

本文发布于:2024-09-22 04:37:28,感谢您对本站的认可!

本文链接:https://www.17tex.com/xueshu/592249.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:温度   算法   模拟   概率   迭代   过程   降低   函数
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2024 Comsenz Inc.Powered by © 易纺专利技术学习网 豫ICP备2022007602号 豫公网安备41160202000603 站长QQ:729038198 关于我们 投诉建议