close all clc clear %%初始化标识和变迁节点%% nodes_data=cell(0); M_1=[1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]; %网中25个标识对应的符号 M_2=[0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]; M_3=[0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]; M_4=[0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]; M_5=[0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]; M_6=[0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]; M_7=[0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]; M_8=[0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]; M_9=[0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]; M_10=[0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]; M_11=[0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0]; M_12=[0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0]; M_13=[0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0]; M_14=[0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0]; M_15=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0]; M_16=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0]; M_17=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0]; M_18=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0]; M_19=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0]; M_20=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0]; M_21=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0]; M_22=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0]; M_23=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0]; M_24=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0]; M_25=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1]; nodes_data(1,:)={1,[2,3],[1,1],[M_2;M_3]}; %根据变迁的邻近变迁的发生权构造变迁元胞组 nodes_data(2,:)={2,[4,5],[1,sqrt(2)],[M_4;M_5]}; nodes_data(3,:)={3,[6],[1],[M_6]}; nodes_data(4,:)={4,[7,8],[sqrt(2),1],[M_7;M_5]}; nodes_data(5,:)={5,[9,10],[sqrt(2),1],[M_8;M_7]}; nodes_data(6,:)={6,[11,12],[1,sqrt(2)],[M_9;M_10]}; nodes_data(7,:)={7,[13,14],[1,1],[M_8;M_13]}; nodes_data(8,:)={8,[9,10],[sqrt(2),1],[M_8;M_7]}; nodes_data(9,:)={9,[15],[1],[M_18]}; nodes_data(10,:)={10,[13,14],[1,1],[M_8;M_13]}; nodes_data(11,:)={11,[16,17],[1,1],[M_10;M_11]}; nodes_data(12,:)={12,[18],[1],[M_12]}; nodes_data(13,:)={13,[15],[1],[M_18]}; nodes_data(14,:)={14,[23,24],[sqrt(2),1],[M_14;M_15]}; nodes_data(15,:)={15,[29],[1],[M_19]}; nodes_data(16,:)={16,[18],[1],[M_12]}; nodes_data(17,:)={17,[19,20],[1,sqrt(2)],[M_16;M_17]}; nodes_data(18,:)={18,[21,22],[1,sqrt(2)],[M_18;M_19]}; nodes_data(19,:)={19,[27],[1],[M_17]}; nodes_data(20,:)={20,[28],[1],[M_20]}; nodes_data(21,:)={21,[29],[1],[M_19]}; nodes_data(22,:)={22,[30,31],[1,sqrt(2)],[M_23;M_24]}; nodes_data(23,:)={23,[25],[1],[M_21]}; nodes_data(24,:)={24,[26],[1],[M_14]}; nodes_data(25,:)={25,[33],[1],[M_22]}; nodes_data(26,:)={26,[25],[1],[M_21]}; nodes_data(27,:)={27,[28],[1],[M_20]}; nodes_data(28,:)={28,[32],[1],[M_23]}; nodes_data(29,:)={29,[30,31],[1,sqrt(2)],[M_23;M_24]}; nodes_data(30,:)={30,[35],[1],[M_24]}; nodes_data(31,:)={31,[36],[1],[M_25]}; nodes_data(32,:)={32,[35],[1],[M_24]}; nodes_data(33,:)={33,[34],[1],[M_25]}; nodes_data(35,:)={35,[36],[1],[M_25]}; %% 始末节点%% node_start=1; node_end=[34,36]; %%% 蚁群定义%%%%% m=50; % 蚂蚁数量 n=size(nodes_data,1); % 节点数量 alpha=1; % 信息素重要程度因子 beta=5; % 启发函数重要程度因子 Rho=0.5; % 信息素挥发因子 Q=1; % 信息素增加强度系数 %%迭代过程初始化定义%%%% iter=1; % 迭代次数初值 iter_max=500; % 最大迭代次数 Route_best=cell(iter_max,1); % 各代最佳路径 Length_best=zeros(iter_max,1); % 各代最佳路径长度 Length_ave=zeros(iter_max,1); % 各代路径平均长度 Place_best=cell(iter_max,1); % 各代最佳路径访问的库所 %%将信息素、挥发因子一并放入nodes_data中%%%%% Delta_Tau_initial=nodes_data(:,1:2); for i=1:size(nodes_data,1) nodes_data{i,5}=ones(1,length(nodes_data{i,3})); % 初始信息素均设置为1 nodes_data{i,6}=1./nodes_data{i,3}; % 启发函数设置为距离的倒数 Delta_Tau_initial{i,3}=zeros(1,length(nodes_data{i,3})); % 信息素变化量均为0 end %% 迭代寻找最佳路径%%% while iterPc(k)&&randnum