【路徑規(guī)劃】基于蟻群算法三臂鑿巖機器人動態(tài)孔序規(guī)劃含Matlab源碼
1 簡介
蟻群算法模擬了自然界中螞蟻的覓食行為,螞蟻在尋找食物過程中會釋放信息素,同時能夠感知前面螞蟻在路徑上殘留的信息素濃度來引導自己運動,因而逐漸形成一種正反饋現(xiàn)象:路徑越短,殘留信息素濃度越高;越多的螞蟻經過該路徑,該路徑上的信息素濃度就越大,之后的螞蟻選擇這條路徑的概率就越大,螞蟻就是通過這種交流方式來找到食物,蟻群算法中的兩個關鍵部分就是路徑選擇概率和信息素更新,決定了蟻群算法的求解速度和解的質量。


2 部分代碼
%% 此函數(shù)根據相交的路徑計算相應交點的禁忌點
% cTabu --- 各點的禁忌表
% C --- 各點的坐標(n x 2)矩陣
% D --- 各點的距離矩陣
% table --- 為m只螞蟻對n個點進行規(guī)劃后的路徑表
function [ cTabu ] = calCityTab( cTabu, C, D, table )
% m --- 螞蟻數(shù)量
% n --- 城市數(shù)量
? ?m=size(table,1);
? ?n=size(table,2);
% ? ? cTabu=zeros(n,n);
? ?for i=1:m
? ? ? ?for j=1:n-2
? ? ? ? ? ?X1=C(table(i,j),:);
? ? ? ? ? ?Y1=C(table(i,j+1),:);
? ? ? ? ? ?for k=j+2:n-1
? ? ? ? ? ? ? ?X2=C(table(i,k),:);
? ? ? ? ? ? ? ?Y2=C(table(i,k+1),:);
? ? ? ? ? ? ? ?[~,~,isIntersect]= node( X1,Y1,X2,Y2 );
? ? ? ? ? ? ? ?if isIntersect
? ? ? ? ? ? ? ? ? ?% 如果規(guī)劃下的非相鄰的兩直線相交,則將線段較長的兩點相互加入其禁忌表中
? ? ? ? ? ? ? ? ? ?if D(table(i,j),table(i,j+1)) > D(table(i,k),table(i,k+1))
? ? ? ? ? ? ? ? ? ? ? ?% 如果cTabu對應的行中有table(i,j)數(shù)值,則返回1,否則返回0
? ? ? ? ? ? ? ? ? ? ? ?if ~any(cTabu(table(i,j),:) == table(i,j+1))
? ? ? ? ? ? ? ? ? ? ? ? ? ?index_1=find(cTabu(table(i,j),:)==0); ? ? ? ? ? ? ? ? ? ? ? ? ? ?
? ? ? ? ? ? ? ? ? ? ? ? ? ?cTabu(table(i,j),index_1(1))=table(i,j+1); ? ? ? ? ? ? ? ? ? ? ? ? ? ?
? ? ? ? ? ? ? ? ? ? ? ?end ? ?
? ? ? ? ? ? ? ? ? ? ? ?if ~any(cTabu(table(i,j+1),:) == table(i,j))
? ? ? ? ? ? ? ? ? ? ? ? ? ?index_2=find(cTabu(table(i,j+1),:)==0);
? ? ? ? ? ? ? ? ? ? ? ? ? ?cTabu(table(i,j+1),index_2(1))=table(i,j);
? ? ? ? ? ? ? ? ? ? ? ?end
? ? ? ? ? ? ? ? ? ?else
? ? ? ? ? ? ? ? ? ? ? ?if ~any(cTabu(table(i,k),:) == table(i,k+1))
? ? ? ? ? ? ? ? ? ? ? ? ? ?index_1=find(cTabu(table(i,k),:)==0); ? ? ? ? ? ? ? ? ? ? ? ? ? ?
? ? ? ? ? ? ? ? ? ? ? ? ? ?cTabu(table(i,k),index_1(1))=table(i,k+1); ? ? ? ? ? ? ? ? ? ? ? ? ? ?
? ? ? ? ? ? ? ? ? ? ? ?end
? ? ? ? ? ? ? ? ? ? ? ?if ~any(cTabu(table(i,k+1),:) == table(i,k))
? ? ? ? ? ? ? ? ? ? ? ? ? ?index_2=find(cTabu(table(i,k+1),:)==0);
? ? ? ? ? ? ? ? ? ? ? ? ? ?cTabu(table(i,k+1),index_2(1))=table(i,k);
? ? ? ? ? ? ? ? ? ? ? ?end
? ? ? ? ? ? ? ? ? ?end
? ? ? ? ? ? ? ?end
? ? ? ? ? ?end
? ? ? ?end
? ?end
end
3 仿真結果






4 參考文獻
[1]鄭勇. 基于蟻群算法的移動機器人動態(tài)路徑規(guī)劃[D]. 電子科技大學.
博主簡介:擅長智能優(yōu)化算法、神經網絡預測、信號處理、元胞自動機、圖像處理、路徑規(guī)劃、無人機等多種領域的Matlab仿真,相關matlab代碼問題可私信交流。
部分理論引用網絡文獻,若有侵權聯(lián)系博主刪除。
