蚁群中的轮盘算法

转载 点击打开链接

//代码实现

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个城市之间。假设随机值得产生是没有任何规律的,那么被选中概率大的城市,即该城市与上一个城市之间的累积和也较大,被命中的概率也较大。简而言之,这个选择过程就相当于转一个有刻度的轮盘,虽然是随机的,但是也考虑到每一块命中的概率问题。

轮盘选择算法及实现

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值