这部分承接Dijkstra算法的基础之上,先算出单源最短路径(绿线),
之后把经过的每个虚线段分成1000份,它们的基准点分别是b1、b2等
随机产生一系列1000的数字排列成1*6的矩阵代入模拟退火算法
利用这些坐标计算出每个线段上的分点,然后计算距离找到更短的路径不断迭代,最后画出结果(蓝线)
NO.1 主程序代码如下所示,子函数的放在另外一篇文章中
----------------------------------
%% 二维模拟退火算法寻优
clc;
clear all
tic;
%% 初始作图
position = load('barrier.txt'); %障碍物顶点和边界点
%描述起点和终点
S = [20,180];
T = [160,90];
scatter([S(1),T(1)],[S(2),T(2)],'filled','d','LineWidth',1.5);
set(gca,'xtick',0:20:200) %横坐标刻度
title('Dijkstra算法演示','fontsize',12)
hold on
grid on
% 图形标注
text(S(1)+2,S(2),'S');
text(T(1)+2,T(2),'T');
%% 描绘障碍物图形填充
fill(position(1:4,1),position(1:4,2),[1,0.87059,0.67843]);
fill(position(5:8,1),position(5:8,2),[1,0.87059,0.67843]);
fill(position(9:12,1),position(9:12,2),[1,0.87059,0.67843]);
fill(position(13:15,1),position(13:15,2),[1,0.87059,0.67843]);
% 下载链路端点数据
L = load('lines.txt');
%L矩阵根据position里面的端点编号来,第一行是编号1和16坐标的点相连