在城市數量較小(小于200時)代碼可以正常運行,當城市數量變大之后,就會在輪盤賭選擇下一城市的時候報錯:
索引超出陣列元素的數目(0)。
錯誤出現在target = allow(target_index(1));這一句
求問各位為什么會出現這種隨著城市數量變大無法索引的問題?請問該如何才能解決?
篇幅有限僅能展示出現問題的代碼段落
%逐個螞蟻的路徑選擇
for i=1:m
%對于一個螞蟻的逐個城市的選擇
for j=2:n
tabu=Table(i,1:(j-1)); %已經訪問過的城市集合
allow_index=~ismember(citys_index,tabu); %沒有訪問過的城市置1
allow=citys_index(allow_index); %待訪問的城市集合
P=allow;
%計算城市間轉移概率
for k=1:length(allow)
P(k)=Tau(tabu(end),allow(k))^alpha*Eta(tabu(end),allow(k))^beta;
end
P=P/sum(P);
%輪盤賭選擇下一個訪問城市
Pc=cumsum(P);
target_index=find(Pc>=rand);
target = allow(target_index(1));
Table(i,j)=target; %記錄下來,加入Table,成為下一個訪問的城市
end
end
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/245882.html
標籤:其他硬件開發
