资源简介
中国34省会旅行商问题,最优路径求解,不同于一般的31省会 设计比较简单 大家可以讨论讨论
代码片段和文件信息
#include
#include
#include
#include
#include
using namespace std;
const int iAntCount = 34;//蚂蚁数量
const int iCityCount = 34;//城市数量
const int iItCount = 10000;//最大跌代次数
const double Q = 100;//每只蚂蚁周游一遍留下的信息素总量
const double alpha = 1;//信息素浓度所起作业的程序
const double beta = 5;//期望值所起作用的程度
double rou = 0.5;//挥发系数
int besttour[iCityCount];//最优路径列表
int count=0;//记录连续多少代没有产生更优的解
double rnd(double lowdouble uper)//获得随机数 范围为 [low uper]
{
double p = (rand()/(double)RAND_MAX)*((uper)-(low))+(low);
return p;
};
int rnd(int uper) //返回[0uper]之间的整数
{
return (rand()%uper);
};
class GInfo {//tsp地图信息,包含了信息素,城市距离,和信息素变化矩阵
public:
double m_dDeltTrial[iCityCount][iCityCount]; //信息素变化矩阵
double m_dTrial[iCityCount][iCityCount]; //信息素
double distance[iCityCount][iCityCount]; //城市距离
};
GInfo Map; //地图
class ant { //蚂蚁类
private:
int ChooseNextCity();//选择城市
int m_iCityCount; //已走过的城市个数
int AllowedCity[iCityCount];//没有走过的城市
public:
void addcity(int city); //把城市放到已走过的路数组中
int tabu[iCityCount];/*记录蚂蚁行走顺序*/
void Reset(); //重置
void UpdateLength(); //更新路径长度
double m_dLength; //路径长度
void mov(); //直到下一步
ant();
double AntProduct( int from int to ); //蚂蚁在from和to城市之间的路线上撒下的信息素
};
void ant::Reset()
{
int i;
m_dLength=0;
for(i=0; i AllowedCity[i]=1;
}
i=tabu[iCityCount-1]; //从终点城市返回
m_iCityCount=0;
addcity(i);
}
ant::ant()
{
int i;
m_dLength=0;
m_iCityCount=0;
for(i=0;i AllowedCity[i]=1;/*一开始每个城市都可访问*/
}
}
void ant::addcity(int city)
{
tabu[m_iCityCount]=city; //记录city为走过的城市
m_iCityCount++;
AllowedCity[city]=0;
}
double ant::AntProduct(int from int to )
{
double p;
p=pow((1.0/Map.distance[from][to])beta)*pow((Map.m_dTrial[from][to])alpha); //转移期望
if( p<=0)p=rnd(01)*pow( (1.0 / Map.distance[from][to]) beta); //如果没有其他蚂蚁走过,就按距离选择
return p;
}
int ant::ChooseNextCity()
{
int ito=-1; //to为下一个要到的城市
double hormone=0; //信息总量
int curCity=tabu[m_iCityCount-1]; //当前城市
if(count<6) //如果没有产生最优解的代数不超过6,则断续按信息素的浓度选择城市
{
for (i=0;i if((AllowedCity[i]==1)) {
hormone += AntProduct(curCityi);//计算信息总量
}
}
if(hormone==0.0)
{
to=rnd(iCityCount); //如果所有的城市都走完一遍,则随意先一个城市
}
else
{
for(to=0;to {
double p;
if(AllowedCity[to]==1)
{
p=AntProduct(curCityto)/hormone;
if(rnd(01) break;
}
}
}
if(to==iCityCount)
{
hormone=-1;
for(i=0;i if(AllowedCity[i]==1)
{
if (hormone hormone=AntProduct(curCityi); //如果上一步选择失败,则选择具有最大信息量的城市
to=i;
}
}
}
}
if(count>=6) //当连续6代都没有产生更短的路径,则
{
for ( i=0;i if((AllowedCity[i]==1)) {
to=i;
count=0;
rou=0.5;
if(rnd(0.01.0)>0.5) //随机选择一个还没访问的城市
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 644 2014-01-15 10:33 蚁群算法2\data.txt
文件 82944 2014-01-15 10:57 蚁群算法2\Debug\vc60.idb
文件 110592 2014-01-15 10:55 蚁群算法2\Debug\vc60.pdb
文件 561207 2014-01-15 10:55 蚁群算法2\Debug\蚁群算法2.exe
文件 762328 2014-01-15 10:55 蚁群算法2\Debug\蚁群算法2.ilk
文件 293838 2014-01-15 10:55 蚁群算法2\Debug\蚁群算法2.obj
文件 2116968 2014-01-15 10:00 蚁群算法2\Debug\蚁群算法2.pch
文件 1074176 2014-01-15 10:55 蚁群算法2\Debug\蚁群算法2.pdb
文件 943 2014-01-15 10:58 蚁群算法2\fout.txt
文件 249368 2014-01-15 10:58 蚁群算法2\result.txt
文件 9094 2014-01-15 10:55 蚁群算法2\蚁群算法2.cpp
文件 4322 2014-01-15 11:03 蚁群算法2\蚁群算法2.dsp
文件 526 2014-01-15 10:00 蚁群算法2\蚁群算法2.dsw
文件 33792 2014-01-15 11:03 蚁群算法2\蚁群算法2.ncb
文件 48640 2014-01-15 11:03 蚁群算法2\蚁群算法2.opt
文件 1299 2014-01-15 10:55 蚁群算法2\蚁群算法2.plg
目录 0 2014-01-15 10:55 蚁群算法2\Debug
目录 0 2014-01-15 11:03 蚁群算法2
----------- --------- ---------- ----- ----
5350681 18
相关资源
- 计量经济学软件eviews6.0建模方法与操
- 机场延误 遗传算法
- PSO-ACO解决旅行商问题
- MSSIM 图像相似度的计算
- 微电网虚拟同步发电寄控制模型
- flocking concrol.zip
- 蚁狮算法寻优
- 旅行商问题的数学规划模型
- 二次曲面拟合实现高程模型建立
- 角点检测Corners代码
- 基于梯度法的模型参考自适应程序
- 基于李雅普诺夫模型参考自适应程序
- D2D-HS算法
- GPS信号捕获仿真
- 产生正态白噪声序列(1) 打印出前
- 李纯明 博士水平集图像分割代码
- 脑电数据批量绘图算法v3.0.zip
- 拟牛顿法程序
- 数据拟合方法实现飞行物体运动轨迹
- 如何使用FULLBNT工具箱(中文)
- 遗传算法和蚂蚁算法求解TSP旅行商问
- 快速理解DFT
- 单目标优化含约束
- 原子分解算法Atomizer
- 室内定位RSS位置指纹法-KNN代码与数据
- 利用联合对角化技术进行信号盲分离
- 直流无刷电机双闭环控制系统仿真模
- 郑州大学随机信号处理大作业 附程序
- 气候分析中检验突变程序(滑动t检验
- 双馈风电机组DFIG的详细仿真模型
评论
共有 条评论