视频学习
代码来源于清风老师授课时,使用代码,数据来源于小石老师授课资料
小石老师:https://www.bilibili.com/video/BV1Mt411x7CH?t=884&p=7
清风老师:https://www.bilibili.com/video/BV1hK41157JL?t=6961
简介
模拟退火算法,和遗传算法一样,是一种启发性算法,利用之前的数据与现在的数据作比较。
旅行商问题(TSP),是典型的优化问题,在物流配送,计算机网络,电子地图,交通疏导,电气分布等方面都有重要的工程和理论价值。
TSP可以简单的描述为,一个人需要到n个城市走一遍,并且最后回到最初的城市,计算该过程,应该如何选择路径,使得所走的路程最短,或者费用最低。
TSP算法设计步骤
(1)设计解空间
TSP解空间,可以理解为遍历城市的顺序,S (i)={1,2,3,4,5,6,7…}(各个城市
边编号为123456789…),每一个S(i)都表示一个遍历所有城市的一次路径。
最优解与初始路径没有多大的联系,所以初始路径可以随机生成。
(2)目标函数
在TSP中,目标函数就是回路路径长度最短
(3)新解产生
这一步骤很重要,,新解可以通过,交替法,移位法,倒置法等产生新的
解。
(4)Metropolis接受准则
以新解与旧解的差值,以及此时的温度为准则,判断是否接受新解,
这个概率会随着温度T的降低而不断减小,所以接受新解的概率会随着迭代次
数的累加,不断减小,后面几乎不接受新解,会一直找到那个最优,这也是
防止获得的是局部最优的结果,而不是全局最优。
源代码
主函数
%% 模拟退火解决TSP问题
clear;clc
coord = [66.83 25.36;61.95 26.34; 40 44.39;24.39 14.63;17.07 22.93;22.93 76.1;51.71 94.14;87.32 65.36;68.78 52.19;84.88 36.09;50 30;40 20;25 26];
n = size(coord,1); % 城市的数目
figure(1) % 新建一个编号为1的图形窗口
plot(coord(:,1),coord(:,2),'o'); % 画出城市的分布散点图
hold on % 等一下要接着在这个图形上画图的
d = zeros(n); % 初始化两个城市的距离矩阵全为0
for i = 2:n
for j = 1:i
coord_i = coord(i,:); x_i = coord_i(1); y_i = coord_i(2);