第一范文网 - 专业文章范例文档资料分享平台

蚁群算法(C++版)

来源:用户分享 时间:2025/5/23 1:07:29 本文由loading 分享 下载这篇文档手机版
说明:文章内容仅供预览,部分内容可能不全,需要完整文档或者需要复制内容,请下载word后使用。下载word有问题请添加微信号:xxxxxxx或QQ:xxxxxx 处理(尽可能给您提供完整文档),感谢您的支持与谅解。

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

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++版) 的文档
蚁群算法(C++版).doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
本文链接:https://www.diyifanwen.net/c01bdj3w06i5zpak1cslt1is530855j00i79_2.html(转载请注明文章来源)
热门推荐
Copyright © 2012-2023 第一范文网 版权所有 免责声明 | 联系我们
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ:xxxxxx 邮箱:xxxxxx@qq.com
渝ICP备2023013149号
Top