蚁群算法的Matlab程序

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

#include

#include

#include

#include

#define citynumber 5

#define Q 100

#define p 0.5

#define NM2 1000

#define A 1

#define B 5

int ccdi=-1;//全局变量,用在myrand()中

float myrand()//产生0-1随机数,100个,每调用一次,结果不同

{srand(time(0));

float my[100];

ccdi++;

if (ccdi==100)

ccdi=0;

for(int mi=0;mi<100;mi++)

{float fav=rand()%10000;

my[mi]=fav/10000;}

return my[ccdi];

}

double fpkij(double T[citynumber][citynumber],double n[citynumber][citynumber],int tabu[citynumber][citynumber],int k,int s,int i,int j )

//定义函数用于计算Pij

{

//double A=0.5,B=0.5;

double sumup,pkij,sumdown;

sumdown=0;

for(int aTi=0;aTi

{

for(int aTj=0;aTj

aT[aTi][aTj]=pow(T[aTi][aTj],A);

}

for(int bni=0;bni

{

for(int bnj=0;bnj

bn[bni][bnj]=pow(n[bni][bnj],B);

}

for (int can=0;can

{

if(can==tabu[k][ci])

{

aT[i][can]=0;bn[i][can]=0;

}

}

sumup=aT[i][j]*bn[i][j];

for(int tj=0;tj

sumdown=aT[i][tj]*bn[i][tj]+sumdown;

pkij=sumup/sumdown;

return pkij;

}

void main()

{ double

city[citynumber][2]={{0,1},{0,2},{2,2},{2,4},{1,3}/*,{3,4},{4,7},{2,8},{3,9},{1,10},

{1,0},{2,1},{3,0},{4,9},{5,2},{6,2},{7,1},{8,6},{9,0},{10,3}*/}; /*城市坐标*/ double d[citynumber][citynumber]; //L[j][k]是城市j to k距离

for(int j=0;j

{d[j][k]=sqrt((city[j][0]-city[k][0])*(city[j][0]-city[k][0])+(city[j][1]-city[k][1])*(city[j][1]-city[k] [1]));

// cout<

}//cout<<"\n";

} /*计算距离,从j城市到k城市*/

/* for (int cj=0;cj<10;cj++)

{float c=myrand();

cout<

double n[citynumber][citynumber];

for(int ni=0;ni

{

for(int j=0;j

}//cout<<"\n";

} /*初始化visibility nij*/

double L[citynumber];

int shortest[citynumber];

double T[citynumber][citynumber];

for(int ti=0;ti

{

for (int j=0;j

{

//cout<

}//cout<<"\n";

}/*初始化t*/

double changT[citynumber][citynumber];

//step2:

for(int NC=0;NC

{ for(int cti=0;cti

{

for (int j=0;j

{

changT[cti][j]=0;//cout<

}//cout<<"\n";

} /*初始化changT*/

int tabu[citynumber][citynumber];//tabu[k][s]表示第k只蚂蚁,第s次循环所在的城市

for (int i=0;i

tabu[tai][i]=0;

}

for (int tabui1=0;tabui1

tabu[tabui1][0]=tabui1;

/*for (tai=0;tai

{

for (int i=0;i

cout<

}*/

//初始化tabu

for(int kk=0;kk

L[kk]=0;

//第三步开始

for(int s=0;s

相关文档
最新文档