• 大小: 917KB
    文件类型: .rar
    金币: 1
    下载: 0 次
    发布日期: 2021-05-11
  • 语言: 其他
  • 标签: matlab  

资源简介

中国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


评论

共有 条评论