云题海 - 专业文章范例文档资料分享平台

当前位置:首页 > 蚁群算法(C++版)

蚁群算法(C++版)

  • 62 次阅读
  • 3 次下载
  • 2026/4/25 8:12:45

//随机选择一个出发城市

m_nCurCityNo=rnd(0,N_CITY_COUNT);

//把出发城市保存入路径数组中 m_nPath[0]=m_nCurCityNo;

//标识出发城市为已经去过了 m_nAllowedCity[m_nCurCityNo]=0;

//已经去过的城市数量设置为1 m_nMovedCityCount=1; }

//选择下一个城市 //返回值 为城市编号 int CAnt::ChooseNextCity() {

int nSelectedCity=-1; //返回结果,先暂时把其设置为-1

//============================================================================== //计算当前城市和没去过的城市之间的信息素总和

double dbTotal=0.0;

double prob[N_CITY_COUNT]; //保存各个城市被选中的概率

for (int i=0;i

if (m_nAllowedCity[i] == 1) //城市没去过 {

prob[i]=pow(g_Trial[m_nCurCityNo][i],ALPHA)*pow(1.0/g_Distance[m_nCurCityNo][i],BETA); //该城市和当前城市间的信息素

dbTotal=dbTotal+prob[i]; //累加信息素,得到总和 }

else //如果城市去过了,则其被选中的概率值为0 {

prob[i]=0.0; } }

//============================================================================== //进行轮盘选择 double dbTemp=0.0;

if (dbTotal > 0.0) //总的信息素值大于0 {

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

for (int i=0;i

if (m_nAllowedCity[i] == 1) //城市没去过 {

dbTemp=dbTemp-prob[i]; //这个操作相当于转动轮盘,如果对轮盘选择不熟悉,仔细考虑一下

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

nSelectedCity=i; break; } } } }

//==============================================================================

//如果城市间的信息素非常小 ( 小到比double能够表示的最小的数字还要小 ) //那么由于浮点运算的误差原因,上面计算的概率总和可能为0 //会出现经过上述操作,没有城市被选择出来

//出现这种情况,就把第一个没去过的城市作为返回结果

//题外话:刚开始看的时候,下面这段代码困惑了我很长时间,想不通为何要有这段代码,后来才搞清楚。 if (nSelectedCity == -1) {

for (int i=0;i

if (m_nAllowedCity[i] == 1) //城市没去过 {

nSelectedCity=i;

break; } } }

//============================================================================== //返回结果,就是城市的编号 return nSelectedCity; }

//蚂蚁在城市间移动 void CAnt::Move() {

int nCityNo=ChooseNextCity(); //选择下一个城市

m_nPath[m_nMovedCityCount]=nCityNo; //保存蚂蚁走的路径 m_nAllowedCity[nCityNo]=0;//把这个城市设置成已经去过了 m_nCurCityNo=nCityNo; //改变当前所在城市为选择的城市 m_nMovedCityCount++; //已经去过的城市数量加1 }

//蚂蚁进行搜索一次 void CAnt::Search() {

Init(); //蚂蚁搜索前,先初始化

搜索更多关于: 蚁群算法(C++版) 的文档
  • 收藏
  • 违规举报
  • 版权认领
下载文档10.00 元 加入VIP免费下载
推荐下载
本文作者:...

共分享92篇相关文档

文档简介:

//随机选择一个出发城市 m_nCurCityNo=rnd(0,N_CITY_COUNT); //把出发城市保存入路径数组中 m_nPath[0]=m_nCurCityNo; //标识出发城市为已经去过了 m_nAllowedCity[m_nCurCityNo]=0; //已经去过的城市数量设置为1 m_nMovedCityCount=1; } //选择下一个城市 //返回值 为城市编号 int CAnt::ChooseNextCity() { int nSelectedCity=-1; //返回结果,先暂时把其设置为-1 //===========================

× 游客快捷下载通道(下载后可以自由复制和排版)
单篇付费下载
限时特价:10 元/份 原价:20元
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信:fanwen365 QQ:370150219
Copyright © 云题海 All Rights Reserved. 苏ICP备16052595号-3 网站地图 客服QQ:370150219 邮箱:370150219@qq.com