这个例子其实是当初数模比赛时用来完成碎片拼接的,但其所用到原理还是求解最短路径的原理。但这里的最短路径和数据结构中最短路径有一定的区别。在数据结构中,对于最短路径的求解常用的一般有Dijkstra算法与Floyd算法,但对于要求出一条经过所有的点的并且要求路径最短,这些算法还是有一定的局限性的。而蚁群算法则很好地满足了这些条件。
话说回来,很想吐槽一下网络流传的一些蚁群算法的例子,当初学习这个时候,身边也没有相关的书籍,只好到网上找例子。网上关于这个算法源代码的常见的有2个版本,都是出自博客,但是在例子都代码是不完整的,缺失了一部分,但就是这样的例子,居然流传甚广,我很好奇那些转载这些源码的人是否真的有去学习过这些,去调试过。
当然,我下面的例子也是无法直接编译通过的,因为涉及到图像读取处理等方面的东西,所以就只贴算法代码部分。但是对于这个问题蚁群算法有一个比较大的缺点,就是收敛很慢,不过对于数量小的路径,效果还是很好的。
function bestqueue =aco1(nt,nc_max,m ,st, sd ,Alpha ,Beta ,Rho ,Q,gethead,getend)
%参数解释:
%nt 路径所经过的点的个数;
%nc_max 迭代的次数;
%m 蚂蚁的个数;
%st 起点序号;
%sd 终点序号;
%Alpha 信息素系数;
�ta 启发因子系数;
%Rho 蒸发系数;
% Q 信息量;
%gethead getend 是用来求距离矩阵的,可根据实际情况修改
% nt = 209;%碎片个数
full = zeros(nt,nt);
tic;
%初始化距离矩阵
for i =1:nt
for t = 1:nt
if i ~= t
full(i,t) =
sum(abs(getend(:,i) - gethead(:,t)));
话说回来,很想吐槽一下网络流传的一些蚁群算法的例子,当初学习这个时候,身边也没有相关的书籍,只好到网上找例子。网上关于这个算法源代码的常见的有2个版本,都是出自博客,但是在例子都代码是不完整的,缺失了一部分,但就是这样的例子,居然流传甚广,我很好奇那些转载这些源码的人是否真的有去学习过这些,去调试过。
当然,我下面的例子也是无法直接编译通过的,因为涉及到图像读取处理等方面的东西,所以就只贴算法代码部分。但是对于这个问题蚁群算法有一个比较大的缺点,就是收敛很慢,不过对于数量小的路径,效果还是很好的。
function bestqueue =aco1(nt,nc_max,m ,st, sd ,Alpha ,Beta ,Rho ,Q,gethead,getend)
%参数解释:
%nt 路径所经过的点的个数;
%nc_max 迭代的次数;
%m 蚂蚁的个数;
%st 起点序号;
%sd 终点序号;
%Alpha 信息素系数;
�ta 启发因子系数;
%Rho 蒸发系数;
% Q 信息量;
%gethead getend 是用来求距离矩阵的,可根据实际情况修改
% nt = 209;%碎片个数
full = zeros(nt,nt);
tic;
%初始化距离矩阵
for i =1:nt
