蚁群算法的Matlab程序
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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