资源简介
简单蚁群算法C++代码
代码片段和文件信息
#include “Ant.h“
Ant::Ant(double lnnint startcityint citynum)
{
startCity = startcity;
cityNum = citynum;
Lnn = lnn;
}
Ant::~Ant()
{
}
//选择下一节点
int Ant::chooseNextCity(multimap &info multimap &visible vector &allCity)
{
int nextCity = -1;
double q = rand() / (double)RAND_MAX;
//double q = double(rand() % 1000) / double(1000);
if (q <= qzero)
{
//先验规则选择
double pmax = -1;//最大概率
//double p = -1;//转移到某城市的概率
for (int i = 0; i < cityNum; i++)
{
if (tabooTable.at(i) == 1)
{
double p = transtion(currentCity i info visible allCity);
if (p>pmax)
{
pmax = p;
nextCity = i;
}
}
}
}
else
{
//轮盘赌的方式选择
double p = double(rand() % 1000) / double(1000);
double sum = 0;
double ptemp = 0;
//构建轮盘
for (int i = 0; i < cityNum; i++)
{
if (tabooTable.at(i) == 1)
{
ptemp = transtion(currentCity i info visible allCity);
sum += ptemp;
}
}
for (int i = 0; i < cityNum; i++)
{
if (tabooTable.at(i) == 1 && sum>0)
{
ptemp += transtion(currentCity i info visible allCity)/sum;
//命中
if (ptemp >= p || (ptemp > 0.99999999 && p > 0.99999999))
{
nextCity = i;
break;
}
}
}
}
return nextCity;
}
//转移到某节点的概率
double Ant::transtion(int i int j multimap &info multimap &visible vector &allCity)
{
double p = 0;
if (i == j)
p = 0;
else
//转移到下一节点的概率
//p = pow(info.find(CityPair(allCity.at(currentCity) allCity.at(i)))->second alpha)*pow(visible.find(CityPair(allCity.at(currentCity) allCity.at(i)))->second beta);
p = pow(info.find(CityPair(allCity.at(i) allCity.at(j)))->secondalpha)*pow(visible.find(CityPair(allCity.at(i) allCity.at(j)))->secondbeta);
return p;
}
//移动到下一节点
void Ant::moveToNextCity(int nextCity)
{
tabooTable.at(nextCity) = 0;
path.push_back(currentCity);
currentCity = nextCity;
}
//蚂蚁搜索行为
vector Ant::search(multimap &info multimap &visible vector &allCity)
{
//每次搜索前重置禁忌表
tabooTable.clear();
//清空路径
path.clear();
//禁忌表初始化为1(即1为没有走过,0为走过)
tabooTable.resize(cityNum 1);
currentCity = startCity;
int nextCity = startCity;
int endCity = startCity;
tabooTable.at(currentCity) = 0;
//time_t t;
//srand((unsigned)time(&t));//srand函数是随机数发生器的初始化函数,不用的话每次产生同样的随机数
for (int i = 0; i < cityNum; i++)
{
endCity = currentCity;
nextCity = chooseNextCity(info visible allCity);
if (nextCity >= 0)
{
update(currentCity nextCityinfoallCity);
moveToNextCity(nextCity);
}
}
moveToNextCity(startCity);
update(currentCity startCity infoallCity);
return path;
}
//局部信息素更新
void Ant::update(int i int j multimap &info vector &allCity)
{
info.find(CityPair(allCity.at(i) allCity.at(j)))->second = info.find(CityPair(a
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
..A..H. 77312 2017-04-15 17:26 蚁群算法vision1.0\.vs\蚁群算法vision1.0\v14\.suo
文件 224256 2017-04-14 17:59 蚁群算法vision1.0\Debug\蚁群算法vision1.0.exe
文件 1144104 2017-04-14 17:59 蚁群算法vision1.0\Debug\蚁群算法vision1.0.ilk
文件 2616320 2017-04-14 17:59 蚁群算法vision1.0\Debug\蚁群算法vision1.0.pdb
文件 43520 2017-04-15 17:25 蚁群算法vision1.0\Release\蚁群算法vision1.0.exe
文件 785049 2017-04-15 17:25 蚁群算法vision1.0\Release\蚁群算法vision1.0.iobj
文件 198816 2017-04-15 17:25 蚁群算法vision1.0\Release\蚁群算法vision1.0.ipdb
文件 1011712 2017-04-15 17:25 蚁群算法vision1.0\Release\蚁群算法vision1.0.pdb
文件 183 2017-04-15 17:26 蚁群算法vision1.0\蚁群算法vision1.0\30ProblemOutput.txt
文件 3294 2017-04-15 17:26 蚁群算法vision1.0\蚁群算法vision1.0\Ant.cpp
文件 1222 2017-04-15 17:24 蚁群算法vision1.0\蚁群算法vision1.0\Ant.h
文件 2972 2017-04-15 16:40 蚁群算法vision1.0\蚁群算法vision1.0\AntControl.cpp
文件 495 2017-04-15 11:31 蚁群算法vision1.0\蚁群算法vision1.0\AntControl.h
文件 418 2017-04-10 11:59 蚁群算法vision1.0\蚁群算法vision1.0\City.cpp
文件 307 2017-04-10 11:59 蚁群算法vision1.0\蚁群算法vision1.0\City.h
文件 3543 2017-04-15 11:24 蚁群算法vision1.0\蚁群算法vision1.0\CityControl.cpp
文件 596 2017-04-14 17:56 蚁群算法vision1.0\蚁群算法vision1.0\CityControl.h
文件 881 2017-04-10 15:38 蚁群算法vision1.0\蚁群算法vision1.0\CityPair.cpp
文件 332 2017-04-10 14:51 蚁群算法vision1.0\蚁群算法vision1.0\CityPair.h
文件 267199 2017-04-14 17:59 蚁群算法vision1.0\蚁群算法vision1.0\Debug\Ant.obj
文件 360587 2017-04-14 17:59 蚁群算法vision1.0\蚁群算法vision1.0\Debug\AntControl.obj
文件 7047 2017-04-14 16:15 蚁群算法vision1.0\蚁群算法vision1.0\Debug\City.obj
文件 497260 2017-04-14 17:59 蚁群算法vision1.0\蚁群算法vision1.0\Debug\CityControl.obj
文件 8745 2017-04-14 16:15 蚁群算法vision1.0\蚁群算法vision1.0\Debug\CityPair.obj
文件 424840 2017-04-14 17:59 蚁群算法vision1.0\蚁群算法vision1.0\Debug\GreedCityControl.obj
文件 388096 2017-04-12 09:52 蚁群算法vision1.0\蚁群算法vision1.0\Debug\vc120.idb
文件 471040 2017-04-12 09:52 蚁群算法vision1.0\蚁群算法vision1.0\Debug\vc120.pdb
文件 486400 2017-04-14 17:59 蚁群算法vision1.0\蚁群算法vision1.0\Debug\vc140.idb
文件 561152 2017-04-14 17:59 蚁群算法vision1.0\蚁群算法vision1.0\Debug\vc140.pdb
文件 493726 2017-04-14 17:59 蚁群算法vision1.0\蚁群算法vision1.0\Debug\源.obj
............此处省略51个文件信息
相关资源
- C++面试题集锦非常详细
- libstdc++.so.6.0.23_linux7
- libstdc++.so.6.0.23270146
- MFC宿舍管理系统C++含access数据库
- 基于C++和数据库SQL server开发的商品销
- VTK三维可视化读取RAW数据的c++源代码
- 完整的C/C++时序的B+树数据库系统实现
- Effective.Modern.C++中文版本
- VC++汉化包
- CNC雕刻机控制软件
- VC++2010 Express(含激活
- html tidy c++库
- Cocos2d-x C++版仿《王者之剑》实现(
- 使用C++来实现KNN算法
- 学生信息管理系统基于VC++6.0
- MFC课程设计VC++超市管理系统
- C++ VC++编写通讯录文件保存附报告
- C++程序设计实践教程 (马光志 着)
- c++超市管理系统 数据库作业
- Google-C++编码规范中文版最新整理PDF版
- 航班信息查询系统设计
- (VC++ 数字图像处理典型算法及实现源
- 利用openGL和C++实现光线跟踪绘图的完
- MFC 圆弧算法的实现
- c++读取EXCEL表
- AES 加密 C++源码
- C++MFC日程管理系统
- 百度地图二次开发汇总
- 网络入侵检测系统C++
- C++ High Performance
评论
共有 条评论