蚁群算法(ACO)MATLAB实现

(一)蚁群算法的由来

蚁群算法(ant colony optimization)最早是由Marco Dorigo等人在1991年提出,他们在研究新型算法的过程中,发现蚁群在寻找食物时,通过分泌一种称为信息素的生物激素交流觅食信息从而能快速的找到目标,据此提出了基于信息正反馈原理的蚁群算法。

蚁群算法的基本思想来源于自然界蚂蚁觅食的最短路径原理,根据昆虫科学家的观察,发现自然界的蚂蚁虽然视觉不发达,但它们可以在没有任何提示的情况下找到从食物源到巢穴的最短路径,并在周围环境发生变化后,自适应地搜索新的最佳路径。

蚂蚁在寻找食物源的时候,能在其走过的路径上释放一种叫信息素的激素,使一定范围内的其他蚂蚁能够察觉到。当一些路径上通过的蚂蚁越来越多时,信息素也就越来越多,蚂蚁们选择这条路径的概率也就越高,结果导致这条路径上的信息素又增多,蚂蚁走这条路的概率又增加,生生不息。这种选择过程被称为蚂蚁的自催化行为。对于单个蚂蚁来说,它并没有要寻找最短路径,只是根据概率选择;对于整个蚁群系统来说,它们却达到了寻找到最优路径的客观上的效果。这就是群体智能。

(二)蚁群算法能做什么

蚁群算法根据模拟蚂蚁寻找食物的最短路径行为来设计的仿生算法,因此一般而言,蚁群算法用来解决最短路径问题,并真的在旅行商问题(TSP,一个寻找最短路径的问题)上取得了比较好的成效。目前,也已渐渐应用到其他领域中去,在图着色问题、车辆调度问题、集成电路设计、通讯网络、数据聚类分析等方面都有所应用。

(三)蚁群算法实现

优化的 函数为F(x,y)= -(x.^2+3*y.^4-0.2*cos(3*pi*x)-0.4*cos(4*pi*y)+0.6)

优化函数:

 

效果:

34 评论

  1. 您好,在这个代码中信息素浓度函数是第36行吗?计算出的P矩阵全是负数,因此每次迭代都是<P0选择局部搜索,这样合理吗?是否加上绝对值符号更合理一些?此外,信息素浓度可以为负值吗?

  2. 优化函数放在另一个m文件里了,也在同一个文件夹下面,怎么调用呀?

  3. 请问一下, P(T,i)=(Tau(BestIndex)-Tau(i))/Tau(BestIndex);%计算转移状态概率,这句代码意思是F值越小的蚂蚁转移的概率越大吗?

  4. 楼主,你犯了个小错误,
    else%全局搜索
    temp1=X(i,1)+(Upper_1-Lower_1)*(rand-0.5);
    temp1=X(i,2)+(Upper_2-Lower_2)*(rand-0.5);
    下面一个应该是temp2.
    改了之后结果很完美

  5. 可以吧主程序放在以下位置,直接就能运行了
    function [f]=ACO(~)
    %主程序
    end

    function f = F(x,y)
    f = -(x.^2+3*y.^4-0.2*cos(3*pi*x)-0.4*cos(4*pi*y)+0.6);
    end

留下评论

您的邮箱地址不会被公开。 必填项已用 * 标注