基于MPI的模拟退火算法求解货郎担问题的并行算法算法.doc

基于MPI的模拟退火算法求解货郎担问题的并行算法算法.doc

  1. 1、本文档共10页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
基于MPI的模拟退火算法求解货郎担问题的并行算法算法

PAGE 1 基于MPI的模拟退火算法求解货郎担问题的并行算法 #include mpi.h #include math.h #include stdio.h #include stdlib.h #include time.h #define maxn 51 #define maxnp 100 #define maxlp 5000 int myrandom(int m) { return abs(((clock()*rand()))%m); } float myrandom0_1() { return((float)myrandom(32767)/32767.f); } float dist(int x1,int y1,int x2,int y2) { return sqrt((float)(x1-x2)*(float)(x1-x2)+(float)(y1-y2)*(float)(y1-y2)); } void init_d(int x[maxn],int y[maxn],float d[maxn][maxn],int path[maxn],int n) { int i,j; for(i=1;i=n;i++) { path[i]=i; for(j=1;j=i;j++) d[i][j]=dist(x[i],y[i],x[j],y[j]); } for(i=1;i=n;i++) for(j=i;j=n;j++) d[i][j]=d[j][i]; } void generate(int n,int *r,int *m,int c[7]) { int i; do { c[1]=1+myrandom(n); c[2]=1+myrandom(n-1); if(c[2]==c[1]) c[2]++; i=1+(c[1]-c[2]+n-1)%n; }while(i3); c[3]=1+(c[1]+n-2)%n; c[4]=1+c[2]%n; c[5]=0; c[6]=0; *r=2+myrandom(2); *m=4; if(*r==3) { c[5]=1+(c[2]+myrandom(abs(i-2)))%n; c[6]=1+c[5]%n; *m=6; } } float delta_length(int r,int m,int c0[7],int p[maxn],float d[maxn][maxn]) { float df; int j,c[7]; for(j=1;j=m;j++) c[j]=p[c0[j]]; if(r==2) df=d[c[1]][c[4]]+d[c[2]][c[3]]-d[c[1]][c[3]]-d[c[2]][c[4]]; else df=d[c[1]][c[5]]+d[c[2]][c[6]]+d[c[3]][c[4]]-d[c[1]][c[3]]-d[c[2]][c[4]]-d[c[5]][c[6]]; return(df); } int accept(float t,float df) { return (df0.0)||((df/t88.)(exp(-df/t)myrandom0_1())); } void twochain(int n,int c[7],int p[maxn]) { int i,j,u,v,w; i=(1+(c[2]-c[1]+n)%n)/2; for(j=1;j=i;j++) { u=1+(c[1]+j-2)%n; v=1+(c[2]-j+n)%n; w=p[u]; p[u]=p[v]; p[v]=w; } } void threechain(int n,int c[7],int p[maxn]) { int p0[maxn],i,j,m1,m2,m3,w; m1=1+(c[2]-c[1]+n)%n; m2=1+(c[3]-c[6]+n)%n; m3=1+(c[5]-c[4]+n)%n; i=1; for(j=1;j=m1;j++) { w=1+(j+c[1]-2)%n; p0[i]=p[w]; i++; } for(j=1;j=m2;j++) { w=1+(j+c[6]-2)%n; p0[i]=p[w]; i++; } for(j=1;j=m3;j++) { w=1+(j+c[4]-2)%n; p0[i]=p[w]; i++; } for(j=1;j=n;j++) p[j]=p0[j]; } float annealing(int n, int lp, int s

文档评论(0)

pangzilva + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档