蚂蚁是如何更新信息素的?如何根据概率进行选择的?(编程实现)

对于二元蚁群算法,它的信息素更新策略,和tsp蚂蚁是有区别的——编程的时候就体现出来了。

最常用的:“轮盘法”,究竟如何描述的?

其次,在知道信息素的情况下,如何用“轮盘法”进行解的选择:0还是1,下一个城市究竟是0~144中的哪一个?

在书上的程序中,采用的选择方法在实验中效果不怎么好;从网上借鉴的一个程序,效果反倒不错。

 

对于tsp问题,首先计算每个城市的入选概率,由于并不是每个城市都是可选的(走过的城市,不能再遍历),所以,每次选择,都需要计算;然后,随机一个[0, 概率之和] 之间的数值,从第一个城市开始比较:找到第一个大于这个概率的数值,就选中这个城市。代码如下:

  1. int ant::ChooseNextCity()
  2. {
  3.  //Update the probability of path selection
  4.  //select a path from tabu[m_iCityCount-1] to next
  5.     
  6.     
  7.     int i;
  8.     int j=10000;
  9.     double temp=0;
  10.     int curCity=tabu[m_iCityCount-1];
  11.     for (i=0;i<iCityCount;i++)
  12.     {
  13.         if((AllowedCity[i]==1)) 
  14.         {
  15.             temp+=pow((1.0/Map.distance[curCity][i]),beta)*pow((Map.m_dTrial[curCity][i]),alpha);
  16.         }
  17.     }
  18.     double sel=0;
  19.     for (i=0;i<iCityCount;i++)
  20.     {   
  21.         if((AllowedCity[i]==1))
  22.         {
  23.             prob[i]=pow((1.0/Map.distance[curCity][i]),beta)*pow((Map.m_dTrial[curCity][i]),alpha)/temp;
  24.             sel+=prob[i];
  25.         }
  26.         else 
  27.             prob[i]=0;
  28.     }
  29.     double mRate=rnd(0,sel);
  30.     double mSelect=0;
  31.     
  32.     for ( i=0;i<iCityCount;i++)
  33.     {
  34.         if((AllowedCity[i]==1))
  35.             mSelect+=prob[i] ;
  36.         if (mSelect>=mRate) {j=i;break;}
  37.     }
  38.     
  39.     if (j==10000)
  40.     {
  41.         temp=-1;
  42.         for (i=0;i<iCityCount;i++)
  43.         {
  44.             if((AllowedCity[i]==1))
  45.                 if (temp /* */)
  46.                 {
  47.                     temp=pow((1.0/Map.distance[curCity][i]),beta)*pow((Map.m_dTrial[curCity][i]),alpha);
  48.                     j=i;
  49.                 }
  50.         }
  51.     }
  52.     
  53.     return j;
  54.     
  55. }

返回城市编号。

 

    原文作者:蚁群算法
    原文地址: https://blog.csdn.net/boluo1982107/article/details/3273902
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞