关于《详解模拟退火算法Matlab实现》一文的补充

《详解模拟退火算法Matlab实现》原文链接在此:http://t.csdn.cn/zxqK3

最近重新学习了模拟退火算法,对该文章中有误的NewAnswer.m代码进行了补充,新手可将该代码保存成m文件,同上文中的程序放在同一目录。

%NewAnswer 函数-------思小瓜2022-2-23
function [S2] = NewAnswer(S1)
    %随机置换旅行的城市顺序,如原顺序7,2,9,10,4变为7,10,9,2,4。2和10调换位置。
    %产生随机扰动
    [~,n] = size(S1);%n为城市总数
    p1=floor(1+n*rand());%随机产生两个城市号。城市序号表示几个到达的城市,n为城市数量,floor是向负无穷方向取整
    p2=floor(1+n*rand());
    while p1==p2%当随机产生的两个城市序号是相同时,再重新产生,直到两个城市序号不同
        p1=floor(1+n*rand());
        p2=floor(1+n*rand());    
    end
    tmp = S1(p1); %临时变量tmp表示P1到达的城市的坐标
    S1(p1)=S1(p2); %将第P2到达城市的坐标给第P1达到城市的坐标,例如:p1 = 3,p2 = 4.从原来的第3个到武汉,第4个地点去北京,变为第3个地点为北京,第4个地点为武汉
    S1(p2)=tmp;
    S2 = S1;
end

另外,上文中主程序SA_TSP.m中的“%% IV. 初始化参数”求解Time变量,添加一行代码。因为我用的是matlab 2014a,其他版本不清楚运行状况。

%% IV. 初始化参数
T0 = 1e10;   % 初始温度,10的10次方!需要设定一个很大的温度。
Tend = 1e-30;  % 终止温度
L = 2;    % 各温度下的迭代次数
q = 0.9;    %降温速率
syms x
Time = ceil(double(solve(num2str(T0) *(0.9)^x == num2str(Tend),x)));  % 计算迭代的次数
% Time = 132;
count = 0;        %迭代计数
Obj = zeros(Time,1);         %目标值矩阵初始化
track = zeros(Time,N);       %每代的最优路线矩阵初始化

各位点个赞再走呀,感激~

  • 4
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值