zoukankan      html  css  js  c++  java
  • 蚁群算法简介

    蚁群算法(Ant Colony Optimization, ACO

    一、概述:  

       又称蚂蚁算法,是一种用来在图中寻找优化路径的概率型型算法。

       灵感来源于蚂蚁在寻找食物的过程中发现路径的行为,即这是一种模拟进化算法。

       车间作业调度、网络路由、车辆路径、数据挖掘、航迹规划、图像处理、生命科学、布局优化等领域均有广泛应用。

       具有稳定性好,全局搜索,并行分布式计算,易于其他问题结合等优点。

    二、基本思想:

    蚂蚁在爬行中会在路径中释放外激素:蚂蚁倾向于朝外激素强度高的方向移动。
    某路径经过的蚂蚁越多,则后来者选择该路径的概率就越大。

    挥发率使得有些路径上最后信息素的浓度几乎为0

    三、基本步骤:

    1、核心:路径中的信息素以一定的比例挥发减少,而某蚂蚁经过的路径,信息素以一定的比例释放增加。

    2、算法过程:m只蚂蚁,最大迭代次数为k

    (1)信息素的初始化。

           初值太小:算法易早熟,蚂蚁很快会全部集中到一条局部最优路径中。

           初值太大:信息素对搜索方向的指导作用太低,影响算法技能。

           一般: ij之间的信息素浓度和dist(表示i, j之间的距离)成反比,和蚂蚁的个数成正比。

    (2)路径构建。选择路径的概率:

           α和β为权值调节因子,一般α=1β=2

    (3)信息素更新。

           Vij(k) 表示第k只蚂蚁在城市i, j的边释放的信息素。该值往往取这只蚂蚁经过的整个的路径长度的(^1^2^3)的倒数。

    Ρ表示挥发率,提出者建议用0.5。

    (4)23步迭代K次或最短路径不再变化。

    四、代码实现:

    Proceure AS:
    
      int bestRoute;
    
        for each edge
    
        set initial pheromone value t0 //初始化信息素
    
      end for
    
      while not stop //迭代次数
    
        for each ant k  //对每只蚂蚁
    
            randomly choose an initial city  //随机选择一个初始城市
    
              for i=1 to n  //
    
                choose next city with probability
    
              end for
    
             compute the length Ck of the tour constructed by the kth ant     //计算当前蚂蚁的路径长度
    
                 compare to update bestRoute // 比较更新最优路径长度
    
             for each edge  //更新每条路径的信息素浓度
    
                update the pheromone value
    
             end for
    
           end for
    
      end while  //最短路径不再变化 或者 到达迭代次数
    
      print result //输出最后得到的最优路径长度
    
    end procedure
    

    五、优势分析:

    在数学领域,根据问题本身的复杂度是有分类的。

    简单来说,问题分为P问题,NP问题,NPC问题,NP-hard问题。

    P是多项式这个单词的首写字母,即Polynomial,【这里指多项式时间】

    P问题意为 总能找到相应的经典算法 在多项式时间 里面得出最优解。

    NP问题意为 不能确定是否能找到相应算法 能够在多项式时间内 得出最优解。

    NPC问题可以理解成NP问题中最难(复杂度最高)的问题,也就是说很难找到相应算法 能够在多项式时间内得出最优解。

    NP-hard问题可以简单理解成找不到相应算法 能够在多项式时间内得出最优解。

    简单来说就是,传统的经典算法能够解决P类问题,而NP问题,特别是NPC问题,则束手无策,于是科学家们开始想办法了,既然不能在多项式时间里得出

    一个最优解,那么咱们得一个较优解吧,用先验的经验知识作为启发算子,于是启发式算法诞生了,但启发式算法只能针对特定问题(比如,prime算法和

    kruskal算法都是经典启发式算法,在最小生成树领域比较好的效果),启发式算法不适合跨领域,但NP问题又如此之多,怎么办,于是各种仿生学理论开

    始引入计算机的算法领域,诞生了所谓的蚁群,粒子群,遗传,神经网络算法这些统称智能优化算法(元启发式算法)的东东来求较优解。

    也就是说,我们在有限的时间内,无法求得最优解的情况下,转而求较优解。而且这个算法跨领域应用很广泛。这就是蚁群算法的优势吧。

    【起因是准备无线传感器课堂的share,讲完觉得大家内心毫无波动甚至还想把我赶下去,然后就被神奇的赵老师praise了一下。哈哈哈...

    这也成了这学期唯一听的一节无线传感器课。23333.

    生活中的很多东西,背后的道理好像挺有趣的。比如,把饭卡放进微波炉转一圈能多100块?gg...有点难...】

  • 相关阅读:
    获取平台所有接口的IP和MAC地址
    共享内存
    消息队列
    shell常见语法
    保存结构体到文件
    Bookmarks
    js打开新窗口
    要买的书
    批量下载辅助工具
    解决word没有菜单栏和工具栏
  • 原文地址:https://www.cnblogs.com/icode-girl/p/6023197.html
Copyright © 2011-2022 走看看