因为之前接了一个推广,所以想着抽个奖回馈一下大家。在视频页评论一下就成哦,现在中奖率还不到百分之一。
虽然钱不多,但是也是我的一点小心意吧~~
视频页网址:https://www.bilibili.com/video/BV1WZ4y1u7Xd
这次分享的代码其实很大一部分在之前的Dijkstra算法或者二维有障碍物的模拟退火算法都有。但是为了完整性还是全面复制在下面,一些文件应该保存成单独的m文件或者txt都会标注好。
我们先来看一下结果展示,比之前的模拟退火算法还是好上不少的。
NO.1 主程序
----------------------------------
%% 二维蚁群算法
clc;
clear all
%% 初始作图
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坐标的点相连
%% 描绘线及中点,注意plot([x1,x2],[y1,y2])
v = zeros(size(L));
for i=1:size(L,1)
plot([position(L(i,1),1),position(L(i,2),1)],[position(L(i,1),2)...
,position(L(i,2),2)],'color','black','LineStyle','--');
v(i,:) = (position(L(i,1),:)+position(L(i,2),:))/2;
plot(v(i,1),v(i,2),'*');
text(v(i,1)+2,v(i,2),strcat('v',num2str(i))); %标记中点
end
%% 计算路径距离(中点和起终点之间)
sign = load('matrix.txt'); %节点间是否可到达,所有中点加上起点和终点
[n,m]=size(sign);
c = zeros(size(sign));
position_all = [S;v;T];
for i = 1:n
for j = 1:m
if sign(i,j) == 1