蚁群算法的Matlab程序.doc

上传人:小** 文档编号:76366693 上传时间:2019-02-03 格式:DOC 页数:5 大小:45KB
返回 下载 相关 举报
蚁群算法的Matlab程序.doc_第1页
第1页 / 共5页
蚁群算法的Matlab程序.doc_第2页
第2页 / 共5页
蚁群算法的Matlab程序.doc_第3页
第3页 / 共5页
蚁群算法的Matlab程序.doc_第4页
第4页 / 共5页
蚁群算法的Matlab程序.doc_第5页
第5页 / 共5页
亲,该文档总共5页,全部预览完了,如果喜欢就下载吧!
资源描述

《蚁群算法的Matlab程序.doc》由会员分享,可在线阅读,更多相关《蚁群算法的Matlab程序.doc(5页珍藏版)》请在金锄头文库上搜索。

1、#include#include#include#include#define citynumber 5#define Q 100#define p 0.5#define NM2 1000#define A 1#define B 5int ccdi=-1;/全局变量,用在myrand()中float myrand()/产生0-1随机数,100个,每调用一次,结果不同srand(time(0);float my100;ccdi+;if (ccdi=100) ccdi=0;for(int mi=0;mi100;mi+)float fav=rand()%10000;mymi=fav/10000;re

2、turn myccdi;double fpkij(double Tcitynumbercitynumber,double ncitynumbercitynumber,int tabucitynumbercitynumber,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;aTicitynumber;aTi+) for(int aTj=0;aTjcitynumber;aTj+) aTaTiaTj=pow(TaTiaTj,A);

3、 for(int bni=0;bnicitynumber;bni+) for(int bnj=0;bnjcitynumber;bnj+) bnbnibnj=pow(nbnibnj,B); for (int can=0;cancitynumber;can+)/判断,除掉已经走过的城市if(can=tabukci) aTican=0;bnican=0; sumup=aTij*bnij; for(int tj=0;tjcitynumber;tj+) sumdown=aTitj*bnitj+sumdown;pkij=sumup/sumdown;return pkij;void main()double

4、 citycitynumber2=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 dcitynumbercitynumber; /Ljk是城市j to k距离 for(int j=0;jcitynumber;j+) djk=sqrt(cityj0-cityk0)*(cityj0-cityk0)+(cityj1-cityk1)*(cityj1-cityk1);/ coutdjk ; /coutn; /*计算距离,从j城市到k城市*/ /*f

5、or (int cj=0;cj10;cj+) float c=myrand(); coutc n;*/输出随机数 double ncitynumbercitynumber;for(int ni=0;nicitynumber;ni+)for(int j=0;jcitynumber;j+)/coutn; /*初始化visibility nij*/double Lcitynumber;int shortestcitynumber;double Tcitynumbercitynumber;for(int ti=0;ticitynumber;ti+)for (int j=0;jcitynumber;j+

6、) /coutTtij ;/coutn;/*初始化t*/ double changTcitynumbercitynumber;/step2:for(int NC=0;NCNM2;NC+)for(int cti=0;cticitynumber;cti+) for (int j=0;jcitynumber;j+) changTctij=0;/coutchangTctij ;/coutn;/*初始化changT*/int tabucitynumbercitynumber;/tabuks表示第k只蚂蚁,第s次循环所在的城市for (int i=0;icitynumber;i+) tabutaii=0;

7、for (int tabui1=0;tabui1citynumber;tabui1+)tabutabui10=tabui1;/*for (tai=0;taicitynumber;tai+)for (int i=0;icitynumber;i+) couttabutaii ;coutn;*/初始化tabufor(int kk=0;kkcitynumber;kk+) Lkk=0; /第三步开始for(int s=0;scitynumber-1;s+)for(int k=0;kcitynumber;) int ci,can;float sumpk=0;float pkij;hq2: can+; if

8、 (can=citynumber) can=0; for (ci=0;ci=s;ci+) if(can=tabukci) goto hq2; pkij=fpkij(T,n,tabu,k,s,tabuks,can); sumpk=sumpk+pkij; else goto hq2; tabuks+1=can; k+;/第三步完成 /*for (tai=0;taicitynumber;tai+)for (int i=0;icitynumber;i+) */输出一个循环后的tabu/第四步开始 for(int k4=0;k4citynumber;k4+) s44=s4+1; if (s44=city

9、number) s44=0; Lk4+=dtabuk4s4tabuk4s44; /coutLk4 ; /计算Lkfloat shortest1=0; int short2=0;/最短距离for(ii=1;shorticitber;shi+ )shortest1=L0; if(Lshorti=shortest1)shortest1=Lshorti;short2=shorti;/coutLsort2n;coutshort2n; for(int shoi=0;shoictynumber;shoi+)shortestshoi=tabushort2shoi;/coutshestshoi ;/coutn;

10、 for(int k41=0;k41citynumber;k41+) for(int s41=0,ss=0;s41citynumber;s41+) ss=s41+1; if (ss=citynumber) ss=0; changTtabuk41s41tabuk41ss+=Q/Lk41; changTtabuk41sstabuk41s41=changTtabuk41s41tabuk41ss; /* for(int cti4=0;cti4citynumber;cti4+) for (int j=0;jcitynumber;j+)coutchangTcti4j ;coutn; */ /第四步完 / 第五步开始 for(int i5=0;i5citynumber;i5+) for(int j5=0;j5citynumber;j5+) / coutTi5j5 ; /coutn; for(int shoi1=0;shoi1citynumber;shoi1+)coutcityshortestshoi10 cityshortestshoi11 ;

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 商业/管理/HR > 管理学资料

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号