蚁群中的轮盘算法

转载 点击打开链接

//代码实现

dbTemp=rnd(0.0,dbTotal); //取一个随机数

  for (int i=0;i<N_CITY_COUNT;i++)
  {
   if (m_nAllowedCity[i] == 1) //城市没去过
   {
    dbTemp=dbTemp-prob[i]; //这个操作相当于转动轮盘

    if (dbTemp < 0.0) //轮盘停止转动,记下城市编号,直接跳出循环
    {
     nSelectedCity=i;
     break;
    }
   }
  }

这种算法是将随机产生的值dbTemp依次对每个城市被选中的概率做减法,减到第i个城市即相当于上述网页中提到的随机值处在第i-1个城市和第i个城市之间。假设随机值得产生是没有任何规律的,那么被选中概率大的城市,即该城市与上一个城市之间的累积和也较大,被命中的概率也较大。简而言之,这个选择过程就相当于转一个有刻度的轮盘,虽然是随机的,但是也考虑到每一块命中的概率问题。

《蚁群中的轮盘算法》

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