亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? gaopt.c

?? 難得的遺傳算法代碼 值得保存、研究
?? C
字號:
/**************************************************************/
/*             基于基本遺傳算法的函數(shù)最優(yōu)化                   */
/*       同濟大學計算機系  王小平         2000年5月           */
/**************************************************************/

#include<stdio.h>
#include<stdlib.h>
#include<graphics.h>
#include<math.h>
#include<time.h>
#include<string.h>
#include "graph.c"
#include "operator.c"

#define POP_SIZE  25     /*  種群大小   */
#define G_LENGTH  8      /*  染色體長度 */
#define C_RATE   0.2     /*  交叉概率    */
#define M_RATE   0.01    /*  變異概率   */
#define  XMAX   255      /*  函數(shù)變量最大值  */
#define X1  350          /* 函數(shù)圖形區(qū)窗口左上點X坐標 */
#define Y1   40          /* 函數(shù)圖形區(qū)窗口左上點Y坐標 */
#define XR1  255         /* 函數(shù)圖形區(qū)窗口長度 */
#define YR1  200         /* 函數(shù)圖形區(qū)窗口高度 */
#define X2  360          /* 適應度圖形區(qū)窗口左上點X坐標  */
#define Y2  280          /* 適應度圖形區(qū)窗口左上點Y坐標  */
#define XR2  250         /* 適應度圖形區(qū)窗口長度  */
#define YR2  100         /* 適應度圖形區(qū)窗口寬度  */
#define STEP  2          /* 適應度圖形區(qū)X方向步長 */

void initialize_gene(gene,pop_size,g_length)
/* 種群中個體遺傳基因型的初始化  */
unsigned char *gene;    /* 遺傳基因 */
int pop_size;           /* 種群大小  */
int g_length;           /* 個體染色體長度  */
{
   int i,j;
   randomize();
   for(i=0;i<pop_size;i++)
   for(j=0;j<g_length;j++)
      *(gene+i*g_length+j)=random(2);
   }

 int gene_to_pheno(gene,g_length)    
/*  基因型到表現(xiàn)型的變換--解碼  */
unsigned char *gene;      /*  基因型  */
int g_length;             /* 染色體長度 */  
  {
   int i,pheno;
   pheno=0;
     for(i=0;i<g_length;i++)
       pheno=pheno*2+*(gene+i);
   return(pheno);
}

void calc_fitness(gene,fitness,pop_size,g_length,func, max_fit,avg_fit) 
 /* 計算種群中個體的適應度 */
unsigned char *gene;           /* 個體的遺傳基因 */
double *fitness;               /*  個體的適應度 */
double *func;                  /*  評價函數(shù)  */
double *max_fit,*avg_fit;      /* 最大適應度與平均適應度  */
int pop_size;                  /* 種群大小  */
int g_length;                  /* 個體染色體長度 */
{
    unsigned char *g;          /* 個體的遺傳基因指針變量  */
    int pheno;                 /*  個體的表現(xiàn)型   */
    int i,j;
    double f;
    *max_fit=0.0;
    *avg_fit=0.0;
    f=(double)pop_size;
    for(i=0;i<pop_size;i++)
    {
      g=gene+i*g_length;
      pheno=gene_to_pheno(g,g_length);
      *(fitness+i)=*(func+pheno);
      if(*(fitness+i)>*max_fit)
       *max_fit=*(fitness+i);
       *avg_fit=*avg_fit+*(fitness+i)/f;
     }
 }

void sga_reproduction(gene,fitness,new_gene,new_fitness,pop_size,g_length)
/*  基于個體的適應度評價進行新一代個體的選擇(輪盤賭方法),選擇后分別將新的基因型和適應度代入到新個體中 */
unsigned char *gene;      /* 當前代的個體遺傳基因型  */
unsigned char *new_gene;        /* 新一代的個體遺傳基因型  */
double *fitness;                /* 當前代的個體適應度  */
double *new_fitness;            /* 新一代的個體適應度  */
int pop_size;                   /*  種群大小  */
int g_length;                   /*  染色體長度 */ 
{
  double  sum_of_fitness;
  double border;    
  double r;                     /*  輪盤上的選擇位置變量  */
  int i,j;
  int num;
  sum_of_fitness=0.0;
   for(i=0;i<pop_size;i++)      /*  輪盤賭的選擇循環(huán) */
  sum_of_fitness=sum_of_fitness+*(fitness+i);
   for(i=0;i<pop_size;i++)
  {
      r=sum_of_fitness*(random(10001)/10000.0);
      num=0;
      border=*fitness;
      while(border<r)
       {
         num++;
         border=border+*(fitness+num);
       }
   for(j=0;j<g_length;j++)
    *(new_gene+i*g_length+j)=*(gene+num*g_length+j);
     *(new_fitness+i)=*(fitness+num);
  }
}

void sga_crossover(gene,pop_size,g_length,c_rate)   
/* 基本遺傳算法的交叉操作--單點交叉  */
unsigned char *gene;        /* 遺傳基因 */
int pop_size;               /* 種群大小  */
int g_length;               /* 個體染色體長度  */
double c_rate;              /* 交叉概率  */
{
   unsigned char *gene1;    /* 父個體1的遺傳基因指針變量 */
   unsigned char *gene2;    /* 父個體1的遺傳基因指針變量 */
   unsigned char work;      /* 中間變量 */
   int i,j;
   int c_pos;               /* 交叉位置變量 */
   double r;                /*  隨機數(shù)變量 */ 
   for(i=0;i<pop_size-1;i=i+2) 
  {
   r=random(10001)/10000.0;
   if(r<=c_rate)
   {
   gene1=gene+g_length*i;
   gene2=gene1+g_length;
   c_pos=random(g_length-2)+1;
   for(j=c_pos;j<g_length;j++)   /* 兩個父個體之間部分遺傳基因的交換 */
   {  work=*(gene1+j);
      *(gene1+j)=*(gene2+j);
      *(gene2+j)=work;
   }
  }
 }
}

void sga_mutation(gene,pop_size,g_length,m_rate)
/* 基本遺傳算法的變異操作--個體遺傳基因按小概率翻轉 */
unsigned char *gene;       /* 遺傳基因 */
int pop_size;              /* 種群大小 */
int g_length;              /* 染色體長度 */   
double m_rate;             /* 變異概率 */ 
{
   int i,j;
   double r;
   for(i=0;i<pop_size;i++)
  {
   for(j=0;j<g_length;j++)
   r=random(10001)/10000.0;
   if(r<=m_rate)           /* 變異發(fā)生判斷 */
   {
     if ( *(gene+g_length*i+j)==0)
        *(gene+g_length*i+j)=1;
     else
        *(gene+g_length*i+j)=0;
  }
 }
}

void  make_function(func,xmax)
/* 生成一個函數(shù), 用于最優(yōu)化計算的目標函數(shù)(最大化)   */
/* f=∑ai*sin(x* bi+ci)  其中 ai∈[0, 0.35]的均勻隨機數(shù)
                         bi∈[2*pi, 5*2*pi] /xmax的均勻隨機數(shù)
                         ci∈[0, 2*pi]的均勻隨機數(shù)  
                         x∈[0,xmax]為優(yōu)化變量  
                         i=1,2,3  */
double *func;           /* 函數(shù)值  */
int xmax;               /* 變量最大值 <XMAX  */
{
    int x,i;
    double a[3],b[3],c[3];
    double  pi=3.141592;
    double  fxmax,fx,f_value;
    double  f_min,f_max,f_mid,f_range;
    double  dbl;
    randomize();
    fxmax=(double)xmax;
    for(i=0;i<3;i++)         /* 優(yōu)化函數(shù)為三個三角函數(shù)之和 */
    {
     a[i]=0.35*(random(10001)/10000.0);
     b[i]=(4*(random(10001)/10000.0)+1)*2.0*pi/fxmax;
     c[i]=2.0*pi*(random(10001)/10000.0);
    }
   f_min=1.0;
   f_max=0.0;
   for(x=0;x<=xmax;x++)       /* 將優(yōu)化函數(shù)正規(guī)化為[0,1]區(qū)間數(shù) */
   {
    fx=(double)x;
    f_value=0.0;
    for(i=0;i<3;i++)
     {
       dbl=b[i]*fx+c[i];
       f_value=f_value+a[i]*sin(dbl);
     }
       f_value=f_value+0.5;
     if(f_value>f_max)  f_max=f_value;
     if(f_value<f_min)  f_min=f_value;
     *(func+x)=(double)f_value;
       }
  f_range=f_max-f_min;
  f_mid=(f_max+f_min)/2.0;
   for(x=0;x<=xmax;x++)
{
    f_value=(*(func+x)-f_mid)/f_range+0.5;
    if(f_value>1.0)  f_value=1.0;
     else  if(f_value<0.0)  f_value=0.0;
    *(func+x)=f_value;
  }
}

void g_draw_func(func,xmax)  
/* 繪制優(yōu)化函數(shù)的圖形 */
double  *func;     /* 函數(shù)值  */
int xmax;          /* 變量最大值 */
{
  int x,y,x_old,y_old,i;
  double f;
  g_rectangle(X1+1,Y1+1,X1+XR1-1,Y1+YR1-1,0,1);
  g_rectangle(X1+1,Y1-12,X1+XR1,Y1-1,8,1);
  g_rectangle(X1,Y1,X1+XR1,Y1+YR1,6,0);
  x_old=X1;
  y_old=Y1+YR1-(int)(*func*YR1);
  f=XR1/(double)xmax;
   for(i=1;i<=xmax;i++)
  {   
   x=X1+(int)(i*f);
   y=Y1+YR1-(int)(*(func+i)*YR1);
   g_line(x_old,y_old,x,y,12);
   x_old=x;
   y_old=y;
  }
}

void g_init_grph(func,xmax)  
/* 初始化畫面的圖形 */
double  *func;       /* 函數(shù)值  */
int xmax;            /* 變量最大值 */
{
  int x,y,x_old,y_old,i;
  char c[5];
   /*初始化函數(shù)圖形區(qū)*/
  g_rectangle(320,0,639,399,8,1);
  g_rectangle(321,1,638,16,8,1);
   disp_hz16("基于基本遺傳算法的函數(shù)最優(yōu)化",370,1,15);
   disp_hz16("g(x)",X1-30,Y1-18,15);
   disp_hz16("1.0",X1-30,Y1,15);
   disp_hz16("0",X1-10,Y1+YR1,15);
   disp_hz16("x",X1+XR1+10,Y1+YR1-20,15);
   disp_hz16("XMAX",X1+XR1-10,Y1+YR1,15);
   g_draw_func(func,xmax);
   /* 初始化適應度圖形區(qū) */
   g_rectangle(X2,Y2,X2+XR2,Y2+YR2,0,1);
   g_rectangle(X2,Y2,X2+XR2,Y2+YR2,6,0);
   setcolor(15);
   disp_hz16("最大適應度",X2+5,Y2-18,15);
   g_line(X2+90,Y2-10,X2+110,Y2-10,11);
   setcolor(15);
   disp_hz16("平均適應度",X2+120,Y2-18,15);
   g_line(X2+205,Y2-10,X2+225,Y2-10,9);
   setcolor(15);
   disp_hz16("世代數(shù)",X2+168,Y2+YR2+10,15);
   g_text(X2-30,Y2,15,"1.0");
/*   g_text(X2-30,Y2+YR2,15,"0.0");*/
 }

void g_plot_grph(num,gene,fitness,pop_size,g_length,func, xmax,max_fit,m_f_old,avg_fit,a_f_old,gen_num)
/* 隨世代進化更新圖形 */
unsigned char *gene;       /* 遺傳基因 */
double *fitness;           /* 適應度 */
double *func;              /* 函數(shù)值 */   
double max_fit,m_f_old;    /* 當前代最大適應度,上一代最大適應度 */
double avg_fit,a_f_old;    /* 當前代平均適應度,上一代平均適應度 */
int num;                   /* 當前世代數(shù) */
int pop_size;              /* 種群大小 */
int g_length;              /* 染色體長度 */     
int xmax;                  /* 變量最大值 */
int gen_num;               /* 最大世代數(shù) */
{
 int i,j,x,y,x_old,y_old;
 double f;
 unsigned  char *g;
 char c[10];
     /* 顯示當前世代種群中個體的遺傳基因 */
     if(num==gen_num-1)
    {
      for(i=0;i<pop_size;i++)
       {
       printf("Indv.%2d:",i+1);
       for(j=0;j<g_length;j++)
	printf("%d",*(gene+i*g_length+j));
       printf("==>Fitness %.4f\n",*(fitness+i));
       }
    printf("Max_fit=%f  \n",max_fit);
    printf("Avg_fit=%f  \n",avg_fit);
}
/* 顯示個體在函數(shù)圖形區(qū)中的位置 */
    g_draw_func(func,xmax);
    f=XR1/(double)xmax;
    for(i=0;i<pop_size;i++)
    {
     g=gene+i*g_length;
     j=gene_to_pheno(g,g_length);
     x=X1+(int)(j*f);
     y=Y1+YR1-*(func+j)*YR1;
     g_line(x,y-10,x,y,15);
}
/* 適應度曲線的更新 */
   if(num!=1 && num<=XR2/STEP)
   {
   if(num%10==0)  /* 每隔10代更新一次 */
    {
      x=X2+(num-1)*STEP;
      g_line(x,Y2+1,x,Y2+YR2-1,1);
      sprintf(c,"%d",num);
      if(num<100 || num%20==0)
      g_text(x-8,Y2+YR2,15,c);
     }
    x_old=X2+(num-1)*STEP;
    x=x_old+STEP;
    y_old=Y2+YR2-(int)(m_f_old*YR2);
    y=Y2+YR2-(int)(max_fit*YR2);
    g_line(x_old,y_old,x,y,11);
    y_old=Y2+YR2-(int)(a_f_old*YR2);
    y=Y2+YR2-(int)(avg_fit*YR2);
    g_line(x_old,y_old,x,y,9);
  }
}

void generation(gene,fitness,pop_size,g_length, c_rate,m_rate,new_gene,new_fitness,func,xmax)
/* 世代進化的模擬 */
unsigned char *gene;        /* 當前世代的個體遺傳基因型  */
unsigned char *new_gene;    /* 新一代的個體遺傳基因型  */
double *fitness;            /* 當前世代的個體適應度  */
double *new_fitness;        /* 新一代的個體適應度  */
double *func;               /* 優(yōu)化函數(shù)   */
double c_rate,m_rate;       /* 交叉概率和變異概率 */ 
int pop_size, g_length;     /* 種群大小與染色體長度 */

{  int gen_max;             /* 最大模擬世代數(shù) */
   int i,j,k;
   double max_fit,avg_fit;  /* 當前代最大適應度和平均適應度 */
   double m_f_old,a_f_old;  /* 新一代最大適應度和平均適應度 */
   char choice[3];
    setcolor(15);
    disp_hz16("輸入最大模擬世代數(shù):",10,1,20);
    gscanf(170,1,4,0,3,"%s",choice);
    gen_max=atoi(choice);
    m_f_old=0.0;
    a_f_old=0.0;
   for(i=0;i<gen_max;i++)
  {
    if(i==gen_max-1)
    {
      printf("\n");
      printf("************Gen.%d*************\n",i+1);
    }
    calc_fitness(gene,fitness,pop_size,g_length,func,
                 &max_fit,&avg_fit);
    sga_reproduction(gene,fitness,new_gene,new_fitness,
               pop_size,g_length);
   for(j=0;j<pop_size;j++)
   {
    *(fitness+j)=*(new_fitness+j);
     for(k=0;k<g_length;k++)
       *(gene+g_length*j+k)=*(new_gene+g_length*j+k);
   }
   sga_crossover(gene,pop_size,g_length,c_rate);
   sga_mutation(gene,pop_size,g_length,m_rate);
   g_plot_grph(i,gene,fitness,pop_size,g_length,func,
		 xmax,max_fit,m_f_old,avg_fit,a_f_old,gen_max);
    m_f_old=max_fit;
    a_f_old=avg_fit;
  }
}

main()  /*  主程序 */
{
   /*當前代的個體遺傳基因型與新一代的個體遺傳基因型  */
   unsigned char gene[POP_SIZE][G_LENGTH], new_gene[POP_SIZE][G_LENGTH];
   /*當前代的個體適應度與新一代個體的適應度 */ 
   double  fitness[POP_SIZE], new_fitness[POP_SIZE];
   /* 優(yōu)化函數(shù) */
   double  func[XMAX+1];
   /* 初始化圖形設置 */
   g_init();
   /* 生成優(yōu)化函數(shù) */
   make_function(func,XMAX);
   /* 初始化顯示畫面 */
   g_init_grph(func,XMAX);
   /* 初始化種群 */
   initialize_gene(gene,POP_SIZE,G_LENGTH);
   /* 世代進化模擬 */
   generation(gene,fitness,POP_SIZE,G_LENGTH,
               C_RATE,M_RATE,new_gene,new_fitness,func,XMAX);
  setcolor(9);
  disp_hz16("回車鍵結束",350,430,20);
  getch();

}  

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲自拍与偷拍| 色香色香欲天天天影视综合网| 国产91精品久久久久久久网曝门| 91网站最新地址| 久久亚洲精品小早川怜子| 亚洲人妖av一区二区| 激情文学综合插| 欧美日韩综合一区| 亚洲丝袜美腿综合| 国产盗摄视频一区二区三区| 51精品国自产在线| 亚洲日本丝袜连裤袜办公室| 国产精品99久久久久久久vr| 日韩精品中文字幕一区二区三区 | 日韩一级在线观看| 亚洲人成7777| 95精品视频在线| 久久久另类综合| 麻豆高清免费国产一区| 欧美性受xxxx黑人xyx| 最新热久久免费视频| 51午夜精品国产| 亚洲精品免费在线观看| 国产成人免费在线视频| 精品国产一区二区三区忘忧草 | 青草av.久久免费一区| 色呦呦一区二区三区| 日韩伦理免费电影| 99久久久无码国产精品| 1024成人网色www| av动漫一区二区| 亚洲精品乱码久久久久久黑人| 成人午夜免费电影| **性色生活片久久毛片| 99久久亚洲一区二区三区青草| 国产精品久久毛片a| 成人av免费在线播放| 中文字幕亚洲区| 91久久精品午夜一区二区| 一区二区三区在线观看视频| 一本久道中文字幕精品亚洲嫩| 亚洲欧美激情一区二区| 欧美性感一区二区三区| 首页亚洲欧美制服丝腿| 欧美一级高清大全免费观看| 久久99精品久久久久婷婷| 久久一二三国产| 不卡视频一二三四| 亚洲一区二区视频在线观看| 91精品啪在线观看国产60岁| 久久成人羞羞网站| 中文一区在线播放| 在线免费av一区| 蜜桃视频在线观看一区二区| www国产成人免费观看视频 深夜成人网| 狠狠狠色丁香婷婷综合激情| 日本一区二区三区免费乱视频| 91美女在线看| 久久精品99国产精品| 国产午夜精品久久久久久免费视 | 在线一区二区观看| 日韩中文字幕一区二区三区| 久久午夜电影网| 色美美综合视频| 国内成人精品2018免费看| 中文字幕视频一区二区三区久| 欧美自拍偷拍午夜视频| www.亚洲国产| 免费不卡在线视频| 亚洲人成在线播放网站岛国 | 亚洲精品一区二区三区影院| 国产成人午夜高潮毛片| 一区二区三区在线观看国产| 精品女同一区二区| 在线观看网站黄不卡| 国产在线国偷精品产拍免费yy| 亚洲精品国产高清久久伦理二区| 日韩精品一区在线| 色悠悠久久综合| 国产一区二区三区香蕉| 亚洲成人www| 亚洲天堂精品视频| 久久女同互慰一区二区三区| 欧美性极品少妇| 成人一道本在线| 久88久久88久久久| 亚洲mv大片欧洲mv大片精品| 中文字幕av不卡| 精品欧美一区二区在线观看| 欧美日韩精品欧美日韩精品一| 成人黄色网址在线观看| 精一区二区三区| 日日摸夜夜添夜夜添精品视频 | 日韩视频123| 99久久99久久久精品齐齐| 精品无人码麻豆乱码1区2区| 亚洲成人激情自拍| 亚洲精品乱码久久久久久日本蜜臀| 久久夜色精品一区| 精品国产乱码久久久久久夜甘婷婷 | 日韩一区二区影院| 欧美日韩欧美一区二区| 91蜜桃婷婷狠狠久久综合9色| 成人影视亚洲图片在线| 国内精品伊人久久久久av一坑| 奇米精品一区二区三区在线观看| 亚洲愉拍自拍另类高清精品| 亚洲精品成人少妇| 一区二区三区在线免费视频| 亚洲另类色综合网站| 一区二区三区四区国产精品| 亚洲三级免费电影| 亚洲精品中文在线| 一区二区久久久久| 亚洲小说春色综合另类电影| 亚洲午夜精品在线| 天天操天天综合网| 奇米影视一区二区三区| 精品在线一区二区| 久久超级碰视频| 国产麻豆午夜三级精品| 处破女av一区二区| 91亚洲精品久久久蜜桃| 在线视频一区二区三| 欧美日韩国产高清一区二区三区| 在线播放欧美女士性生活| 日韩三级视频在线看| 久久久久青草大香线综合精品| 国产亚洲一区二区三区| 中文字幕一区二区三中文字幕| 国产精品久久久久aaaa| 一区二区在线电影| 丝瓜av网站精品一区二区 | 亚洲一区二区三区国产| 日韩电影在线看| 国产一区二区在线观看视频| 不卡一区二区中文字幕| 欧亚洲嫩模精品一区三区| 日韩欧美不卡一区| 国产精品素人一区二区| 亚洲一区二区三区三| 91麻豆成人久久精品二区三区| 欧美最猛黑人xxxxx猛交| 91精品国产欧美一区二区18| 2017欧美狠狠色| 亚洲人精品一区| 久久国产免费看| 91无套直看片红桃| 欧美一区二区三区成人| 国产精品嫩草影院com| 亚洲成年人影院| 国产成人综合视频| 欧美亚洲一区二区三区四区| 精品久久久久久久久久久院品网 | 日韩免费视频线观看| 国产精品天干天干在观线| 亚洲高清不卡在线| 成人一区在线看| 91精品国产一区二区三区蜜臀 | 亚洲一区二区三区在线| 国产乱妇无码大片在线观看| 色婷婷av一区二区三区软件| 精品动漫一区二区三区在线观看| 日韩理论片中文av| 黑人巨大精品欧美一区| 欧美日韩精品高清| 亚洲色图欧美偷拍| 91精品国产综合久久香蕉麻豆| 中文字幕的久久| 久久精品国产成人一区二区三区| 91国内精品野花午夜精品| 欧美电影免费观看高清完整版| 一个色综合av| 成人av资源下载| 精品日韩一区二区| 日产国产欧美视频一区精品| 在线视频欧美区| 中文字幕一区在线观看视频| 国产美女精品人人做人人爽| 欧美老肥妇做.爰bbww| 亚洲精品乱码久久久久久黑人 | 精品影视av免费| 欧美精品v国产精品v日韩精品| 亚洲裸体xxx| 不卡影院免费观看| 久久精品夜色噜噜亚洲aⅴ| 美女精品一区二区| 欧美一区二区在线播放| 亚洲成年人网站在线观看| 日本韩国一区二区三区| 亚洲色图都市小说| 日本精品免费观看高清观看| 中文字幕在线免费不卡| 成人永久aaa| 亚洲欧美在线另类| 色婷婷一区二区三区四区| 亚洲素人一区二区| 欧美性猛交xxxxxx富婆| 亚洲一区二区三区四区在线| 欧美中文字幕一区二区三区亚洲|