已经调试过了,绝对没有错误,其中自定义的函数,见最后一页。clearallcloseallclc初始化定义符号说明C
个城市的坐标,
2矩阵NC_max蚁群算法的最大迭代次数m个蚂蚁Alpha表示信息素重要程度的参数Beta表示启发式因子重要程度的参数Rho信息素挥发系数Q表示信息素增加强度系数R_best各代最佳路线L_best各代最佳路线长度
5城市个数C2314672652每个城市的坐标NC_max5最大迭代次数m8蚂蚁个数Alpha1信息素重要程度参数Beta2启发式因子重要程度参数Rho03信息素挥发系数Q100
sizeC1表示城市的个数Dzeros
表示完全图的赋值邻接矩阵fori1
forj1
ifijDijCi1Cj12Ci2Cj2205elseDijepsij时不计算,应该为0,但后面的启发因子要取倒数,用eps(浮点相对精度)表示e
dDjiDij对称矩阵e
de
d计算距离Eta1DEta为启发因子,这里为距离的倒数Tauo
es
Tau为信息素矩阵Tabuzerosm
存储并记录路径的生成NC1迭代计数器,记录迭代次数R_bestzerosNC_max
各代最佳路线L_besti
fo
esNC_max1各代最佳路线长度L_avezerosNC_max1各代路线的平均长度whileNCNC_max停止条件之一:达到最大迭代次数,停止
f蚁群算法第二步:将m只蚂蚁放到
个城市上Ra
dpos随即存取fori1ceilm
Ra
dposRa
dposra
dperm
随即打乱得到一行数据e
dTabu1Ra
dpos11m蚁群算法第三步:m只蚂蚁按照概率函数选择下一座城市,完成各自的周游forj2
所在的城市不计算fori1mvisitedTabui1j1记录已访问的城市,避免重复访问Jzeros1
j1待访问城市PJ待访问城市的选择概率分布Jc1fork1
ifle
gthfi
dvisitedk0开始时置0JJckJcJc1访问的城市个数自加1e
de
d以下计算蚁群算法待选城市的概率分布fork1le
gthJPkTauvisitede
dJkAlphaEtavisitede
dJkBetae
dPPsumP按照概率原则选择下一个城市PcumcumsumP元素累加求和Selectfi
dPcumra
d若计算的概率大于原来的就选择这条路to_visitJSelect1Tabuijto_visite
de
difNC2Tabu1R_bestNC1e
d蚁群算法第四步:记录本次迭代最佳路线Lzerosm1开始距离为0m1的列向量fori1mRTabuiforj1
1LiLiDRjRj1原距离加上第j个城市到第j1个城市的距离e
d
fLiLiDR1R
一轮下来之后走过的距离e
dL_bestNCmi
L最佳距离取最小posfi
dLL_bestNCR_bestNCTabupos1此轮迭代后的最佳路线L_aveNCmea
L此轮迭代后的平均距离NCNC1迭代继续e
d蚁群算法第五步:更新信息素Delta_Taur