⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 蚁群算法c++.txt

📁 从其他网站下载的经典蚁群算法
💻 TXT
字号:
#include<iostream>   
  #include<cstdio>   
  #include<cstring>   
  #include<cmath>   
  #include<ctime>   
  #include<cassert>   
  #include<cstdlib>   
  using   namespace   std;   
    
  const   double   lamdas[]={1.06,1.082,1.283,1.364};   
  const   int   N=100;   
  const   int   M=200;   
  const   int   STEP=100;   
  const   double   T=25;   
  const   double   F=(T-25)*(T+25+546);   
    
    
  const   double   d0=1.0;   
  const   double   pi=2*acos(0.0);   
  double   dk[4];   
    
  const   double   c1=1.0;   
  const   double   c2=1.0;   
  const   double   alpha=0.3;   
  double   p[N][M];   
  int   id[N][M];   
  double   E[N];   
  double   v[M][N];   
  double   poss[M][N];   
  double   tposs[M][N];   
  double   sposs[M];   
  inline   double   compute_ne(double   lamda)   
  {   
  return   4.5299+(0.084752+1.7299*1e-7*F)/(lamda*lamda-(0.2034-4.7733*1e-7*F))-8.3146*1e-8*F-0.02379*lamda*lamda;   
  }   
    
  double   computeE(int   id)   
  {   
  int   i,j;   
  double   mx=0,mi=1e30,L,real,im,deff;   
  double   res=0;   
  for(i=0;i<4;i++)   
  {   
  for(j=0,L=0,real=0,im=0;j<M;j++)   
  {   
  L+=p[id][j];   
  real+=cos(dk[i]*L)-cos(dk[i]*(L-p[id][j]));   
  im+=sin(dk[i]*L)-sin(dk[i]*(L-p[id][j]));   
  }   
  deff=sqrt(real*real+im*im)/(L*dk[i]);   
  mx=(deff>mx)?deff:mx;   
  mi=(deff>mi)?mi:deff;   
  //printf("deff);   
  assert(deff<=1);   
  res+=fabs(d0-deff);   
    
  }   
  assert(mi<1e10);   
  return   res+mx-mi;   
  }   
    
  void   init()   
  {   
  srand(time(0));   
  int   i,j,ti;   
  for(i=0;i<4;i++)   
  {   
  dk[i]=pi*4*(compute_ne(lamdas[i]*2)-compute_ne(lamdas[i]))/lamdas[i];   
  }   
  for(i=0;i<M;i++)   
  {   
  for(j=0;j<N;j++)   
  {   
  v[i][j]=(rand()%16+1)*1e-5;   
  if(v[i][j]<1e-5)v[i][j]=1e-5;   
  poss[i][j]=1.0/N;   
  }   
  }   
  double   temp,tsum;   
  for(i=0;i<N;i++)   
  {   
  for(j=0;j<M;j++){   
  temp=(rand()%10000)/10000.0;   
    
  for(ti=0,tsum=poss[j][0];ti+1<N   &&   tsum<temp;tsum+=poss[j][ti+1],ti++);   
  p[i][j]=v[j][ti];   
  id[i][j]=ti;   
    
  }   
  E[i]=computeE(i);   
  }   
  }   
    
  int   main()   
  {   
  init();   
  int   k=STEP,i,j,ti;   
  double   temp,tsum;   
  while(k--)   
  {   
        memset(tposs,0,sizeof(tposs));   
        memset(sposs,0,sizeof(sposs));   
        for(i=0;i<N;i++)   
        {   
        for(j=0;j<M;j++)   
        {   
        tposs[j][id[i][j]]+=E[i];   
        sposs[j]+=E[i];   
        }   
        }   
        for(i=0;i<M;i++)   
        {   
        for(j=0;j<N;j++)   
        {   
        poss[i][j]=tposs[i][j]/sposs[i];   
        }   
        }   
        double   temp,tsum;   
        for(i=0;i<N;i++)   
        {   
  for(j=0;j<M;j++){   
  temp=(rand()%10000)/10000.0;   
    
  for(ti=0,tsum=poss[j][0];ti+1<N   &&   tsum<temp;tsum+=poss[j][ti+1],ti++);   
  p[i][j]=v[j][ti];   
  id[i][j]=ti;   
    
  }   
  E[i]=computeE(i);   
        }   
    
        //cout<<k<<endl;   
              
  }   
  int   mi;   
  mi=0;   
  for(i=1;i<N;i++)   
  {   
  if(E[i]>E[mi])   
  {   
  mi=i;   
    
  }   
  }   
    
  printf("Now   the   global   value   is   %0.5lf\n",E[mi]);   
  double   t=0;   
  for(i=0,t=0;i<M;i++)   
  {   
  printf("%0.5lf   \t   %0.5lf\n",p[mi][i],t+=p[mi][i]);   
  }   
    
    
    
  return   0;   
  }   

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -