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

📄 yichuansuanfa.txt

📁 遗传算法的源程序
💻 TXT
📖 第 1 页 / 共 3 页
字号:
                  for(k   =   1;   k   <=   chromsize;   k++)   
                  {   
                          if(jcross1   >=   (k*(8*sizeof(unsigned))))   
                          {   
                                  child1[k-1]   =   parent1[k-1];   
                                  child2[k-1]   =   parent2[k-1];   
                          }   
                          else   if((jcross1   <   (k*(8*sizeof(unsigned))))   &&   (jcross1   >   ((k-1)*(8*sizeof(unsigned)))))   
                          {   
                                  mask   =   1;   
                                  for(j   =   1;   j   <=   (jcross1-1-((k-1)*(8*sizeof(unsigned))));   j++)   
                                  {   
                                          temp   =   1;   
                                          mask   =   mask<<1;   
                                          mask   =   mask|temp;   
                                  }   
                                  child1[k-1]   =   (parent1[k-1]&mask)|(parent2[k-1]&(~mask));   
                                  child2[k-1]   =   (parent1[k-1]&(~mask))|(parent2[k-1]&mask);   
                          }   
                          else   
                          {   
                                  child1[k-1]   =   parent2[k-1];   
                                  child2[k-1]   =   parent1[k-1];   
                          }   
                  }   
  /*   第二次交换   */   
  for(k   =   1;   k   <=   chromsize;   k++)   
                  {   
                          if(jcross2   >=   (k*(8*sizeof(unsigned))))   
                          {   
                                  child1[k-1]   =   parent1[k-1];   
                                  child2[k-1]   =   parent2[k-1];   
                          }   
                          else   if((jcross2   <   (k*(8*sizeof(unsigned))))   &&   (jcross2   >   ((k-1)*(8*sizeof(unsigned)))))   
                          {   
                                  mask   =   1;   
                                  for(j   =   1;   j   <=   (jcross2-1-((k-1)*(8*sizeof(unsigned))));   j++)   
                                  {   
                                          temp   =   1;   
                                          mask   =   mask<<1;   
                                          mask   =   mask|temp;   
                                  }   
                                  child1[k-1]   =   (parent1[k-1]&mask)|(parent2[k-1]&(~mask));   
                                  child2[k-1]   =   (parent1[k-1]&(~mask))|(parent2[k-1]&mask);   
                          }   
                          else   
                          {   
                                  child1[k-1]   =   parent2[k-1];   
                                  child2[k-1]   =   parent1[k-1];   
                          }   
                  }   
  /*   第三次交换   */   
  for(k   =   1;   k   <=   chromsize;   k++)   
                  {   
                          if(jcross3   >=   (k*(8*sizeof(unsigned))))   
                          {   
                                  child1[k-1]   =   parent1[k-1];   
                                  child2[k-1]   =   parent2[k-1];   
                          }   
                          else   if((jcross3   <   (k*(8*sizeof(unsigned))))   &&   (jcross3   >   ((k-1)*(8*sizeof(unsigned)))))   
                          {   
                                  mask   =   1;   
                                  for(j   =   1;   j   <=   (jcross3-1-((k-1)*(8*sizeof(unsigned))));   j++)   
                                  {   
                                          temp   =   1;   
                                          mask   =   mask<<1;   
                                          mask   =   mask|temp;   
                                  }   
                                  child1[k-1]   =   (parent1[k-1]&mask)|(parent2[k-1]&(~mask));   
                                  child2[k-1]   =   (parent1[k-1]&(~mask))|(parent2[k-1]&mask);   
                          }   
                          else   
                          {   
                                  child1[k-1]   =   parent2[k-1];   
                                  child2[k-1]   =   parent1[k-1];   
                          }   
                  }   
          }   
          else   
          {   
                  for(k   =   0;   k   <   chromsize;   k++)   
                  {   
                          child1[k]   =   parent1[k];   
                          child2[k]   =   parent2[k];   
                  }   
                  jcross1   =   0;   
          }   
          return(jcross1);   
  }   
    
  void   advance_random()                     /*   产生55个随机数   */   
  {   
          int   j1;   
          double   new_random;   
          for(j1   =   0;   j1   <   24;   j1++)   
          {   
                  new_random   =   oldrand[j1]   -   oldrand[j1+31];   
                  if(new_random   <   0.0)   new_random   =   new_random   +   1.0;   
                  oldrand[j1]   =   new_random;   
          }   
          for(j1   =   24;   j1   <   55;   j1++)   
          {   
                  new_random   =   oldrand   [j1]   -   oldrand   [j1-24];   
                  if(new_random   <   0.0)   new_random   =   new_random   +   1.0;   
                  oldrand[j1]   =   new_random;   
          }   
  }   
    
  int   flip(float   prob)                     /*   以一定概率产生0或1   */   
  {   
          float   randomperc();   
          if(randomperc()   <=   prob)   
                  return(1);   
          else   
                  return(0);   
  }   
    
  void   randomize()                         /*   设定随机数种子并初始化随机数发生器   */   
  {   
          float   randomseed;   
          int   j1;   
          for(j1=0;   j1<=54;   j1++)   
              oldrand[j1]   =   0.0;   
          jrand=0;   
          randomseed=0.5;   
          warmup_random(randomseed);   
  }   
    
  double   randomnormaldeviate()                   /*   产生随机标准差   */   
  {   
          double   sqrt(),   log(),   sin(),   cos();   
          float   randomperc();   
          double   t,   rndx1;   
          if(rndcalcflag)   
          {       rndx1   =   sqrt(-   2.0*log((double)   randomperc()));   
                  t   =   6.2831853072   *   (double)   randomperc();   
                  rndx2   =   rndx1   *   sin(t);   
                  rndcalcflag   =   0;   
                  return(rndx1   *   cos(t));   
          }   
          else   
          {   
                  rndcalcflag   =   1;   
                  return(rndx2);   
          }   
  }   
    
  float   randomperc()                         /*与库函数random()作用相同,   产生[0,1]之间一个随机数   */   
  {   
          jrand++;   
          if(jrand   >=   55)   
          {   
                  jrand   =   1;   
                  advance_random();   
          }   
          return((float)   oldrand[jrand]);   
  }   
    
  int   rnd(low,   high)                       /*在整数low和high之间产生一个随机整数*/   
  int   low,high;   
  {   
          int   i;   
          float   randomperc();   
          if(low   >=   high)   
                  i   =   low;   
          else   
          {   
                  i   =   (randomperc()   *   (high   -   low   +   1))   +   low;   
                  if(i   >   high)   i   =   high;   
          }   
          return(i);   
  }   
    
    
  void   warmup_random(float   random_seed)               /*   初始化随机数发生器*/   
  {   
          int   j1,   ii;   
          double   new_random,   prev_random;   
    
          oldrand[54]   =   random_seed;   
          new_random   =   0.000000001;   
          prev_random   =   random_seed;   
          for(j1   =   1   ;   j1   <=   54;   j1++)   
          {   
                  ii   =   (21*j1)%54;   
                  oldrand[ii]   =   new_random;   
                  new_random   =   prev_random-new_random;   
                  if(new_random<0.0)   new_random   =   new_random   +   1.0;   
                  prev_random   =   oldrand[ii];   
          }   
          advance_random();   
          advance_random();   
          advance_random();   
          jrand   =   0;   
  }   
    
    
  main()                       /*     主程序     */   
  {   
          struct   individual   *temp;   
          FILE       *fopen();   
          void       title();   
          char       *malloc();   
                  if((outfp   =   fopen("OUTPUT_M.txt","w"))   ==   NULL)   
                  {   
                        fprintf(stderr,"Cannot   open   output   file   %s\n","OUTPUT_M.txt");   
                          exit(-1);   
                  }   
            title();   
            maxruns=10;   
            for(run=1;   run<=maxruns;   run++)   
          {   
                  initialize();   
                  for(gen=0;   gen<maxgen;   gen++)   
                  {   
                    fprintf(outfp,"\n第   %d   /   %d   次运行:   当前代为   %d,   共   %d   代\n",   run,maxruns,gen,maxgen);   
                          /*   产生新一代   */   
                          generation();   
                          /*   计算新一代种群的适应度统计数据   */   
                          statistics(newpop);   
                          /*   输出新一代统计数据   */   
                          report();   
                          temp   =   oldpop;   
                          oldpop   =   newpop;   
                          newpop   =   temp;   
                  }   
                  freeall();   
          }   
  }

⌨️ 快捷键说明

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