模拟退火算法MATLAB实现

简介: 模拟退火算法MATLAB实现

介绍

算法试图随着控制参数T的降低,使目标函 数值f(内能E)也逐渐降低,直至趋于全局最 小值(退火中低温时的最低能量状态),算法 工作过程就像固体退火过程一样。

Metropolis准则——–以概率接受新状态

若在温度T,当前状态i (解1)→ 新状态 j(解2)

若E_j(目标函数f_2)<E_i(f_1),则接受 j 为当前状态;

若E_j>E_i ,概率P=e^−E_j−E_i/KT大于[0,1)区间的 随机数,则仍接受状态 j 为当前状态; 若不成立,则保留状态 I 为当前状态。

算法其他参数的说明

退火过程由一组初始参数,即冷却进度表控制,它的核心是尽量使系统达到准平衡,以使算法在有限的时间内逼近最优解。冷却进度表包括:

1.控制参数的初值T_0:冷却开始的温度;

2.控制参数T的衰减函数:要将连续的降温过程,离散成降温过程中的一系列温度点,衰减函数即计算这一系列温度的表达式;

3. 控制参数T的终值T_f(停止准则);

4. Markov链的长度L_k:任意温度T的迭代次数。

算法基本步骤

1、令T=T_0,随机生成一个初始解x_0,并计算相应的

     目标函数值E(x_0);

2、令T等于冷却进度表中的下一个值T_i ;

3、根据当前解x_i进行扰动,产生一个新解x_j ,计相应

     的目标函数值E(x_j) ,得到 ∆e= E(x_j)−E(x_i);

4、 ∆e<0,则新解x_j被接受,作为新的当前解;

      ∆e>0,则新解x_j按概率P接受;

5、在温度T_i下,重复L_k次的扰动和接受过程,即执行

     步骤(3)、(4);

6、判断T是否已达到T_f,是,则终止算法;否则转到

  (2)继续执行

几点说明

1、新解的产生    

 要求尽可能地遍及解空间的各个区域,这样,在某一 恒定温度下,不断产生新解时,就可能跳出局部最优解。

2、收敛的一般条件:

  • 初始温度足够高;
  • 热平衡时间足够长;
  • 终止温度足够低;
  • 降温过程足够缓慢;  

举例

算法的MATLAB实现旅行商问题

模型:一名商人要到n 个不同的城市去推销商品,每2 个城市I 和j 之间的距离为d,如何选择一条路径使得商人每个城市走一遍后回到起点所走的路径最短。

例:有52座城市,已知每座城市的坐标,求每 个城市走一遍后回到起点,所走的路径最短。

一、算法设计步骤

2.新解的产生(扰动)

(1)二变换法:任选序号u,v (设u<v<n),交换u,v之间 的访问顺序。

(2)三变换法:任选序号u,v,w (设u≤v<w), 将u,v之间 的路径插到w之后访问

while t>=tf
 for r=1:Markov_length  
        if (rand < 0.5) 
     %随机产生0~1的数,若小于0.5,则二变换
            ind1 = 0; ind2 = 0;
            while (ind1 == ind2)
                ind1 = ceil(rand.*amount);
                ind2 = ceil(rand.*amount);
            end
            tmp1 = sol_new(ind1);
            sol_new(ind1) = sol_new(ind2);
            sol_new(ind2) = tmp1;
else    
          %否则,三变换
            ind1 = 0; ind2 = 0; ind3 = 0;
            while (ind1 == ind2) || (ind1 == ind3) ...
                 || (ind2 == ind3) || (abs(ind1-ind2) == 1)
                ind1 = ceil(rand.*amount);
                ind2 = ceil(rand.*amount);
                ind3 = ceil(rand.*amount);
            end
            tmp1 = ind1;tmp2 = ind2;tmp3 = ind3;
 if (ind1 < ind2) && (ind2 < ind3)
            elseif (ind1 < ind3) && (ind3 < ind2)
                ind2 = tmp3;ind3 = tmp2;
            elseif (ind2 < ind1) && (ind1 < ind3)
                ind1 = tmp2;ind2 = tmp1;
            elseif (ind2 < ind3) && (ind3 < ind1)
                ind1 = tmp2;ind2 = tmp3; ind3 = tmp1;
            elseif (ind3 < ind1) && (ind1 < ind2)
                ind1 = tmp3;ind2 = tmp1; ind3 = tmp2;
            elseif (ind3 < ind2) && (ind2 < ind1)
                ind1 = tmp3;ind2 = tmp2; ind3 = tmp1;
            end      % ind1 < ind2 < ind3
            tmplist1 = sol_new((ind1+1):(ind2-1));  %u、v之间的城市
            sol_new((ind1+1):(ind1+ind3-ind2+1)) = ...
                sol_new((ind2):(ind3));   %将v到w的城市移到u后面
            sol_new((ind1+ind3-ind2+2):ind3) = ...
                tmplist1;     %u、v之间的城市移到w后面
        end

3.目标函数

访问所有城市的路径总长度:

模拟退火算法求出目标函数的最小值

 % 计算目标函数即内能
        E_new = 0;
        for i = 1 : (amount-1)
            E_new = E_new + ...
                dist_matrix(sol_new(i),sol_new(i+1));
        end
        %从第一个城市到最后一个城市的距离
        E_new = E_new + ...
            dist_matrix(sol_new(amount),sol_new(1));

if E_new < E_current
            E_current = E_new;
            sol_current = sol_new;
            if E_new < E_best
                % 冷却过程中最好的解保存下来´
                E_best = E_new;
                sol_best = sol_new;
            end
        else
            % 若新解的目标函数大于当前解的,
               % 则以一定的概率接受新解
            if rand < exp(-(E_new-E_current)./t)
                E_current = E_new;
                sol_current = sol_new;
            else
                sol_new = sol_current;
            end
        end

 


相关文章
|
2月前
|
机器学习/深度学习 算法 机器人
【水下图像增强融合算法】基于融合的水下图像与视频增强研究(Matlab代码实现)
【水下图像增强融合算法】基于融合的水下图像与视频增强研究(Matlab代码实现)
231 0
|
2月前
|
数据采集 分布式计算 并行计算
mRMR算法实现特征选择-MATLAB
mRMR算法实现特征选择-MATLAB
175 2
|
3月前
|
传感器 机器学习/深度学习 编解码
MATLAB|主动噪声和振动控制算法——对较大的次级路径变化具有鲁棒性
MATLAB|主动噪声和振动控制算法——对较大的次级路径变化具有鲁棒性
214 3
|
2月前
|
机器学习/深度学习 算法 机器人
使用哈里斯角Harris和SIFT算法来实现局部特征匹配(Matlab代码实现)
使用哈里斯角Harris和SIFT算法来实现局部特征匹配(Matlab代码实现)
158 8
|
2月前
|
机器学习/深度学习 算法 自动驾驶
基于导向滤波的暗通道去雾算法在灰度与彩色图像可见度复原中的研究(Matlab代码实现)
基于导向滤波的暗通道去雾算法在灰度与彩色图像可见度复原中的研究(Matlab代码实现)
168 8
|
2月前
|
机器学习/深度学习 算法 数据可视化
基于MVO多元宇宙优化的DBSCAN聚类算法matlab仿真
本程序基于MATLAB实现MVO优化的DBSCAN聚类算法,通过多元宇宙优化自动搜索最优参数Eps与MinPts,提升聚类精度。对比传统DBSCAN,MVO-DBSCAN有效克服参数依赖问题,适应复杂数据分布,增强鲁棒性,适用于非均匀密度数据集的高效聚类分析。
|
2月前
|
开发框架 算法 .NET
基于ADMM无穷范数检测算法的MIMO通信系统信号检测MATLAB仿真,对比ML,MMSE,ZF以及LAMA
简介:本文介绍基于ADMM的MIMO信号检测算法,结合无穷范数优化与交替方向乘子法,降低计算复杂度并提升检测性能。涵盖MATLAB 2024b实现效果图、核心代码及详细注释,并对比ML、MMSE、ZF、OCD_MMSE与LAMA等算法。重点分析LAMA基于消息传递的低复杂度优势,适用于大规模MIMO系统,为通信系统检测提供理论支持与实践方案。(238字)
|
2月前
|
机器学习/深度学习 数据采集 负载均衡
结合多种启发式解码方法的混合多目标进化算法,用于解决带工人约束的混合流水车间调度问题(Matlab代码实现)
结合多种启发式解码方法的混合多目标进化算法,用于解决带工人约束的混合流水车间调度问题(Matlab代码实现)
148 0
|
2月前
|
机器学习/深度学习 人工智能 算法
【基于TTNRBO优化DBN回归预测】基于瞬态三角牛顿-拉夫逊优化算法(TTNRBO)优化深度信念网络(DBN)数据回归预测研究(Matlab代码实现)
【基于TTNRBO优化DBN回归预测】基于瞬态三角牛顿-拉夫逊优化算法(TTNRBO)优化深度信念网络(DBN)数据回归预测研究(Matlab代码实现)
139 0
|
2月前
|
存储 监控 并行计算
目标跟踪中常用点迹航迹数据关联算法的MATLAB实现
通过计算测量点与预测点之间的欧氏距离,选择最近邻点进行关联,适用于单目标跟踪场景。

热门文章

最新文章