基本蚁群算法的c源程序

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

基本蚁群算法的C++源程序

/kekewutao

2006-12-01 09:36

关键词:蚁群算法C++源程

序ACS

基本蚁群算法的C++源程序

//基本蚁群算法程序

//程序在vc++6.0下面同过,对原来的做了一点修改。

//你可以使用本代码,如果感到对你有用的话,请通知作者,作者会很高兴。//通讯地址:*****************

//by FashionXu

#include "stdafx.h"

#include

#include

#include

#include

using namespace std;

const int iAntCount=34;//蚂蚁数量

const int iCityCount=51;//城市数量

const int iItCount=2000;//最大跌代次数

const double Q=100;

const double alpha=1;

const double beta=5;

const double rou=0.5;

int besttour[iCityCount];//最有路径列表

double rnd(int low,double uper)//获得随机数

{

double p=(rand()/(double)RAND_MAX)*((uper)-(low))+(low);

return (p);

};

int rnd(int uper)

{

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();//选择城市

double prob[iCityCount];

int m_iCityCount;

int AllowedCity[iCityCount];//没有走过的城市

public:

void addcity(int city);

int tabu[iCityCount];

void Clear();

void UpdateResult();

double m_dLength;

double m_dShortest;

void move();

ant();

void move2last();

};

void ant::move2last()

{

int i;

for(i=0;i《iCityCount;i++)

if (AllowedCity[i]==1)

{

addcity(i);

break;

}

}

void ant::Clear()

{

m_dLength=0;

int i;

for(i=0; i〈iCityCount;i++)

prob[i]=0;

AllowedCity[i]=1;

}

i=tabu[iCityCount-1];

m_iCityCount=0;

addcity(i);

}

ant::ant()

{

m_dLength=m_dShortest=0;

m_iCityCount=0;

int i;

for(i=0;i〈iCityCount;i++)

AllowedCity[i]=1;

prob[i]=0;

}

}

void ant::addcity(int city)

{

//add city to tabu;

tabu[m_iCityCount]=city;

m_iCityCount++;

AllowedCity[city]=0;

}

int ant::ChooseNextCity()

{

//Update the probability of path selection

//select a path from tabu[m_iCityCount-1] to next

int i;

int j=10000;

double temp=0;

int curCity=tabu[m_iCityCount-1];

for (i=0;i〈iCityCount;i++)

if((AllowedCity[i]==1))

{

temp+=pow((1.0/Map.distance[curCity][i]),beta)*pow((Map.m_dTria l[curCity][i]),alpha);

}

}

double sel=0;

for (i=0;i〈iCityCount;i++)

if((AllowedCity[i]==1))

{

prob[i]=pow((1.0/Map.distance[curCity][i]),beta)*pow((Map.m_dTr ial[curCity][i]),alpha)/temp;

sel+=prob[i];

}

else

prob[i]=0;

}

double mRate=rnd(0,sel);

double mSelect=0;

for ( i=0;i〈iCityCount;i++)

if((AllowedCity[i]==1))

mSelect+=prob[i] ;

相关文档
最新文档