資源簡介
MATLAB智能算法的源代碼%% 清空環境
clc;clear
%% 障礙物數據
position = load('barrier.txt');
plot([0,200],[0,200],'.');
hold on
B = load('barrier.txt');
xlabel('km','fontsize',12)
ylabel('km','fontsize',12)
title('二維規劃空間','fontsize',12)
%% 描述起點和終點
S = [20,180];
T = [160,90];
plot([S(1),T(1)],[S(2),T(2)],'.');
% 圖形標注
text(S(1)+2,S(2),'S');
text(T(1)+2,T(2),'T');
%% 描繪障礙物圖形
fill(position(1:4,1),position(1:4,2),[0,0,0]);
fill(position(5:8,1),position(5:8,2),[0,0,0]);
fill(position(9:12,1),position(9:12,2),[0,0,0]);
fill(position(13:15,1),position(13:15,2),[0,0,0]);
% 下載鏈路端點數據
L = load('lines.txt');
%% 描繪線及中點
v = zeros(size(L));
for i=1:20
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);
for i=1:n
if i == 1
for k=1:m-1
if sign(i,k) == 1
plot([S(1),v(k-1,1)],[S(2),v(k-1,2)],'color',...
'black','Linewidth',2,'LineStyle','-');
end
end
continue;
end
for j=2:i
if i == m
if sign(i,j) == 1
plot([T(1),v(j-1,1)],[T(2),v(j-1,2)],'color',...
'black','Linewidth',2,'LineStyle','-');
end
else
if sign(i,j) == 1
plot([v(i-1,1),v(j-1,1)],[v(i-1,2),v(j-1,2)],...
'color','black','Linewidth',2,'LineStyle','-');
end
end
end
end
path = DijkstraPlan(position,sign);
j = path(22);
plot([T(1),v(j-1,1)],[T(2),v(j-1,2)],'color','yellow','LineWidth',3,'LineStyle','-.');
i = path(22);
j = path(i);
count = 0;
while true
plot([v(i-1,1),v(j-1,1)],[v(i-1,2),v(j-1,2)],'color','yellow','LineWidth',3,'LineStyle','-.');
count = count + 1;
i = j;
j = path(i);
if i == 1 ||

代碼片段和文件信息
function?path?=?DijkstraPlan(positionsign)
%%?基于Dijkstra算法的路徑規劃算法
%position????input?????%節點位置
%sign????????input?????%節點間是否可達
?
%path????????output????%規劃路徑
?
%%?計算路徑距離
cost?=?ones(size(sign))*10000;
[nm]?=?size(sign);
for?i?=?1:n
????for?j?=?1:m
????????if?sign(ij)?==?1
????????????cost(ij)?=?sqrt(sum((position(i:)-position(j:)).^2));
????????end
????end
end
?
%%?路徑開始點
dist?=?cost(1:);?????????????%節點間路徑長度???????????
s?=?zeros(size(dist));????????%節點經過標志
s(1)?=?1;dist(1)?=?0;
path?=?zeros(size(dist));?????%依次經過的節點
path(1:)?=?1;
?
%%?循環尋找路徑點
for?num?=?2:n???
????
????%?選擇路徑長度最小點
????mindist?=?10000;
????for?i?=?1:length(dist)
????????if?s(i)?==?0
????????????if?dist(i)????????????????mindist?=?dist(i);
????????????????u?=?i;
????????????end
????????end
????end
????
????%?更新點點間路徑
????s(u)?=?1;
????for?w?=?1:length(dist)
????????if?s(i)?==?0
????????????if?dist(u)+cost(uw)?????????????????dist(w)?=?dist(u)+cost(uw);
????????????????path(w)?=?u;
????????????end
????????end
????end
end
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件???????2113??2010-10-31?21:25??example2.m
?????文件???????1909??2010-10-31?21:26??example1.m
-----------?---------??----------?-----??----
?????????????????4022????????????????????2
評論
共有 條評論