1、include
#include
#include
#include
#define citynumber 11
#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 (
2、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.
3、5,B=0.5;
double sumup,pkij,sumdown;
sumdown=0;
double aT[citynumber][citynumber],bn[citynumber][citynumber];
for(int aTi=0;aTi4、j5、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
6、][citynumber]; //L[j][k]是城市j to k距离
for(int j=0;j7、 /*计算距离,从j城市到k城市*/
/* for (int cj=0;cj<10;cj++)
{float c=myrand();
cout<8、<"\n";
} /*初始化visibility nij*/
double L[citynumber];
int shortest[citynumber];
double T[citynumber][citynumber];
for(int ti=0;ti9、ynumber][citynumber];
//step2:
for(int NC=0;NC10、abu[k][s]表示第k只蚂蚁,第s次循环所在的城市
for (int tai=0;tai11、12、oat randnumber=myrand();
can=-1;
hq2: can++;
if (can==citynumber) can=0;
for (ci=0;ci<=s;ci++)
{
if(can==tabu[k][ci]) goto hq2;
}
pkij=fpkij(T,n,tabu,k,s,tabu[k][s],can);
sumpk=sumpk+pkij;
if (randnumber13、
else goto hq2;
tabu[k][s+1]=can;
k++;
}
} //第三步完成
/*for (tai=0;tai14、0,s44=0;s415、est1)
{shortest1=L[shorti];short2=shorti;}
}
//cout<16、tynumber;s41++)
{
ss=s41+1;
if (ss==citynumber) ss=0;
changT[tabu[k41][s41]][tabu[k41][ss]]+=Q/L[k41];
changT[tabu[k41][ss]][tabu[k41][s41]]=changT[tabu[k41][s41]][tabu[k41][ss]];
}
}
/* for(int cti4=0;cti417、)
{cout<