该楼层疑似违规已被系统折叠 隐藏此楼查看此楼

//段海滨教授主编的《蚁群算法原理及其应用》附录里的C程序代码.

//Basic Ant Colony Algorithm for TSP

#include

#include

#include

#include

#include

#include

#include

#define N 31 //city size

#define M 31 //ant number

double inittao=1;

double tao[N][N];

double detatao[N][N];

double distance[N][N];

double yita[N][N];

int tabu[M][N];

int route[M][N];

double solution[M];

int BestRoute[N];

double BestSolution=10000000000;

double alfa,beta,rou,Q;

int NcMax;

void initparameter(void); // initialize the parameters of basic ACA

double EvalueSolution(int *a); // evaluate the solution of TSP, and calculate the length of path

void InCityXY( double x[], double y[], char *infile ); // input the nodes' coordinates of TSP

void initparameter(void)

{

alfa=1; beta=5; rou=0.9; Q=100;

NcMax=200;

}

void main(void)

{

int NC=0;

initparameter();

double x[N];

double y[N];

InCityXY( x, y, "city31.tsp" );

for(int i=0;i

for(int j=i+1;j

{

distance[j][i]=sqrt((x[i]-x[j])*(x[i]-x[j])+(y[i]-y[j])*(y[i]-y[j]));

distance[i][j]=distance[j][i];

}

// calculate the heuristic parameters

for(i=0;i

for(int j=0;j

{

tao[i][j]=inittao;

if(j!=i)

yita[i][j]=100/distance[i][j];

}

for(int k=0;k

for(i=0;i

route[k][i]=-1;

srand(time(NULL));

for(k=0;k

{

route[k][0]=k%N;

tabu[k][route[k][0]]=1;

}

//each ant try to find the optiamal path

do {

int s=1;

double partsum;

double pper;

double drand;

//ant choose one whole path

while(s

{

for(k=0;k

{

int jrand=rand()%3000;

drand=jrand/3001.;

partsum=0;

pper=0;

for(int j=0;j

{

if(tabu[k][j]==0)

partsum+=pow(tao[route[k][s-1]][j],alfa)*pow(yita[route[k][s-1]][j],beta);

}

for(j=0;j

{

if(tabu[k][j]==0)

pper+=pow(tao[route[k][s-1]][j],alfa)*pow(yita[route[k][s-1]][j],beta)/partsum;

if(pper>drand)

break;

}

tabu[k][j]=1;

route[k][s]=j;

}

s++;

}

// the pheromone is updated

for(i=0;i

for(int j=0;j

detatao[i][j]=0;

for(k=0;k

{

solution[k]=EvalueSolution(route[k]);

if(solution[k]

{

BestSolution=solution[k];

for(s=0;s

BestRoute[s]=route[k][s];

}

}

for(k=0;k

{

for(s=0;s

detatao[route[k][s]][route[k][s+1]]+=Q/solution[k];

detatao[route[k][N-1]][route[k][0]]+=Q/solution[k];

}

for(i=0;i

for(int j=0;j

{

tao[i][j]=rou*tao[i][j]+detatao[i][j];

if(tao[i][j]<0.00001)

tao[i][j]=0.00001;

if(tao[i][j]>20)

tao[i][j]=20;

}

for(k=0;k

for(int j=1;j

{

tabu[k][route[k][j]]=0;

route[k][j]=-1;

}

NC++;

} while(NC

//output the calculating results

fstream result;

result.open("optimal_results.log", ios::app);

if(!result)

{

cout< file!\n";

exit(0);

}

result<

result<

result<

result<

result<

result<

for(i=0;i

result<

result<

result<

result.close();

cout<

}

double EvalueSolution(int *a)

{

double dist=0;

for(int i=0;i

dist+=distance[a[i]][a[i+1]];

dist+=distance[a[i]][a[0]];

return dist;

}

void InCityXY( double x[], double y[], char *infile )

{

fstream inxyfile( infile, ios::in | ios::nocreate );

if( !inxyfile )

{

cout< file!\n";

exit(0);

}

int i=0;

while( !inxyfile.eof() )

{

inxyfile>>x[i]>>y[i];

if( ++i >= N ) break;

}

}

31个城市坐标:

1304 2312

3639 1315

4177 2244

3712 1399

3488 1535

3326 1556

3238 1229

4196 1004

4312 790

4386 570

3007 1970

2562 1756

2788 1491

2381 1676

1332 695

3715 1678

3918 2179

4061 2370

3780 2212

3676 2578

4029 2838

4263 2931

3429 1908

3507 2367

3394 2643

3439 3201

2935 3240

3140 3550

2545 2357

2778 2826

2370 2975

运行后可得到15602的巡游路径

改正了n个错误。�

蚁群算法 c语言,基本蚁群算法代码C版相关推荐

  1. 短进程算法c语言,短进程优先算法C语言实现

    短进程优先算法C语言实现 1.本实验实现了短进程优先的进程调度操作,但因为是非抢占式,所以实现起来比较简单. 短进程优先算法是以作业的长短来计算优先级,作业越短,其优先级越高.作业的长短是以作业所要求 ...

  2. 最近最久未使用页面置换算法C语言,LRU页面置换算法模拟-最近最久未使用置换算法...

    LRU页面置换算法模拟-最近最久未使用置换算法 LRU页面置换算法模拟-最近最久未使用置换算法|课程设计|计算机数据库课程设计 一.设计目的 1.用C语言实现最近最久未使用(LRU)置换算法. 2.了 ...

  3. java实现随机数生成算法_Java 语言实现的随机数生成算法

    广州疯狂软件学院拥有三大课程体系包括:java课程,android课程,ios课程,疯狂软件年终钜惠,报名java就业班,免费赠送基础班,名额有限,本月火热报名中,欢迎有志之士电话或者QQ咨询. [导 ...

  4. bwt比对算法 C语言,DNA比对算法:BWT

    DNA比对算法:BWT BWT算法,实质上是前缀树的一种实现.那么什么是前缀树呢? 一.前缀树 对于问题p in S?如果S=rpq,那么p为S前缀rp的一个后缀. 于是,为了判断p in S 是否成 ...

  5. 妙趣横生的算法(c语言实现),妙趣横生的算法(C++语言实现) 带目录完整pdf[4MB]

    <妙趣横生的算法(C++语言实现)>内容丰富,生动有趣,寓教于乐,旨在帮助读者学习数据结构和算法的相关知识,从而开阔眼界,培养编程兴趣,提高编程能力,增强求职的竞争力.如果您想提高自己对算 ...

  6. c语言程序设计 算法,C语言程序设计第二章算法

    <C语言程序设计第二章算法>由会员分享,可在线阅读,更多相关<C语言程序设计第二章算法(38页珍藏版)>请在人人文库网上搜索. 1.C程序设计,主讲人:袁丽,燕大里仁基础教学部 ...

  7. 用c语言编写插入排序算法,C语言实现常用排序算法——插入排序

    插入排序是最基础的排序算法,原理: 首先1个元素肯定是有序的,所以插入排序从第二个元素开始遍历: 内循环首先请求一个空间保存待插入元素,从当前元素向数组起始位置反向遍历: 当发现有大于待插入元素的元素 ...

  8. 数据拟合算法c语言实现,数据拟合算法剖析及C语言实现.doc

    数据拟合算法剖析及C语言实现 数据拟合算法剖析及C语言实现 [摘要]数据拟合在很多地方都有应用,主要用来处理实验或观测的原始离散数据.通过拟合可以更好的分析和解释数据.在引用前人的算法基础上,采用正交 ...

  9. 人工免疫算法c语言程序,基于人工免疫算法的模拟电路故障诊断

    摘要: 模拟电路故障诊断一直以来都是十分必要和有意义的,目前已成为热门的研究课题.现代电子技术和计算机技术的迅速发展促进了片上系统和混合集成电路的大量涌现,这也对模拟电路的测试和故障诊断提出了更高的要 ...

  10. JAVA梅森旋转随机算法,C语言实现梅森旋转算法

    原理: 梅森旋转算法是一种伪随机数生成算法 1.定义相关宏和结构体 #include #include #include #include typedef unsigned int uint; #de ...

最新文章

  1. 关系管理系统:js代码生成select的出生日期
  2. linux输出重定向%3e退出,Linux学习笔记——第二章:Linux的用户接口与文本编辑器...
  3. jQuery监控页面所有ajax请求的方法
  4. 对象数组 NullPointerException异常--将图C++ 改为java版
  5. php war,PHP提示Warning:phpinfo() has been disabled函数禁用的解决方法
  6. php文件运行的域名怎么改,discuz论坛更换域名,详细文件修改步骤
  7. J2EE中在web.xml异常页面跳转
  8. 30 个实例详解 TOP 命令
  9. java获取ram_Java:ChronicleMap第2部分,超级RAM映射
  10. c语言调用labview方法,LabVIEW与C语言接口的方法
  11. linux的基础知识——CS模型流程图
  12. mysql堆溢出_为什么这个MySQL触发器会导致堆栈溢出?
  13. nginx 监听同一端口
  14. 史上最权威的 Activiti 框架学习
  15. 本周论文推荐(迁移学习、图神经网络)
  16. Python basemap模拟导弹发射
  17. 四维星装饰选材软件免费版
  18. intel 电脑棒一代linux,拆解:英特尔黑科技——电脑棒
  19. Java网课基础笔记(9)19-07-21
  20. windows10安装配置vim

热门文章

  1. 在线html转txt文件,html网页转txt文件、文本转换器
  2. PDCA循环——快速提升软件质量的必备工具
  3. 【SA TSP】基于matlab模拟退火算法求解34城市旅行商问题【含Matlab源码 882期】
  4. 手把手教你阅读开源代码【附Python开源项目包】
  5. html5 苹果没有音乐播放器,GitHub - ksky521/player: html5版本音乐播放器,支持iOS设备...
  6. 十进制转格雷码 c语言,C语言输出格雷码
  7. Excel工作表保护的密码破解与清除...假装自己破解密码系列?
  8. firefox + pentadactyl 实现纯绿色高效易扩展浏览器(同时实现修改默认状态栏样式)...
  9. 20120329_dmp 文件导入ibm p750-2个LPAR 小机知识点
  10. java ssh超市进销存管理系统(源码+文档)【源码分享】