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

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

?? gaopt.c

?? 使用基本遺傳算法(GA)對函數進行最優化的C語言源程序
?? C
字號:
#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      /*  函數變量最大值  */
#define X1  350          /* 函數圖形區窗口左上點X坐標 */
#define Y1   40          /* 函數圖形區窗口左上點Y坐標 */
#define XR1  255         /* 函數圖形區窗口長度 */
#define YR1  200         /* 函數圖形區窗口高度 */
#define X2  360          /* 適應度圖形區窗口左上點X坐標  */
#define Y2  280          /* 適應度圖形區窗口左上點Y坐標  */
#define XR2  250         /* 適應度圖形區窗口長度  */
#define YR2  100         /* 適應度圖形區窗口寬度  */
#define STEP  2          /* 適應度圖形區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)    
/*  基因型到表現型的變換--解碼  */
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;                  /*  評價函數  */
double *max_fit,*avg_fit;      /* 最大適應度與平均適應度  */
int pop_size;                  /* 種群大小  */
int g_length;                  /* 個體染色體長度 */
{
    unsigned char *g;          /* 個體的遺傳基因指針變量  */
    int pheno;                 /*  個體的表現型   */
    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++)      /*  輪盤賭的選擇循環 */
  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;                /*  隨機數變量 */ 
   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)           /* 變異發生判斷 */
   {
     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)
/* 生成一個函數, 用于最優化計算的目標函數(最大化)   */
/* f=∑ai*sin(x* bi+ci)  其中 ai∈[0, 0.35]的均勻隨機數
                         bi∈[2*pi, 5*2*pi] /xmax的均勻隨機數
                         ci∈[0, 2*pi]的均勻隨機數  
                         x∈[0,xmax]為優化變量  
                         i=1,2,3  */
double *func;           /* 函數值  */
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++)         /* 優化函數為三個三角函數之和 */
    {
     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++)       /* 將優化函數正規化為[0,1]區間數 */
   {
    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)  
/* 繪制優化函數的圖形 */
double  *func;     /* 函數值  */
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;       /* 函數值  */
int xmax;            /* 變量最大值 */
{
  int x,y,x_old,y_old,i;
  char c[5];
   /*初始化函數圖形區*/
  g_rectangle(320,0,639,399,8,1);
  g_rectangle(321,1,638,16,8,1);
   disp_hz16("基于基本遺傳算法的函數最優化",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);
   /* 初始化適應度圖形區 */
   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("世代數",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;              /* 函數值 */   
double max_fit,m_f_old;    /* 當前代最大適應度,上一代最大適應度 */
double avg_fit,a_f_old;    /* 當前代平均適應度,上一代平均適應度 */
int num;                   /* 當前世代數 */
int pop_size;              /* 種群大小 */
int g_length;              /* 染色體長度 */     
int xmax;                  /* 變量最大值 */
int gen_num;               /* 最大世代數 */
{
 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);
}
/* 顯示個體在函數圖形區中的位置 */
    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;               /* 優化函數   */
double c_rate,m_rate;       /* 交叉概率和變異概率 */ 
int pop_size, g_length;     /* 種群大小與染色體長度 */

{  int gen_max;             /* 最大模擬世代數 */
   int i,j,k;
   double max_fit,avg_fit;  /* 當前代最大適應度和平均適應度 */
   double m_f_old,a_f_old;  /* 新一代最大適應度和平均適應度 */
   char choice[3];
    setcolor(15);
    disp_hz16("輸入最大模擬世代數:",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];
   /* 優化函數 */
   double  func[XMAX+1];
   /* 初始化圖形設置 */
   g_init();
   /* 生成優化函數 */
   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久久久使用方法 | 成人黄色小视频| 69堂成人精品免费视频| 中文字幕一区视频| 国产美女精品在线| 日韩免费观看2025年上映的电影| 夜夜爽夜夜爽精品视频| 国产成人综合视频| 日韩视频永久免费| 午夜精品久久久久影视| 色婷婷亚洲婷婷| 国产精品国产三级国产普通话99 | 亚洲gay无套男同| 97精品国产97久久久久久久久久久久| 日韩免费一区二区三区在线播放| 久草中文综合在线| 欧美精品在线观看一区二区| 亚洲精品免费视频| gogo大胆日本视频一区| 国产亲近乱来精品视频| 毛片av中文字幕一区二区| 欧美丰满一区二区免费视频| 亚洲一区二区三区免费视频| 色综合久久88色综合天天| 日韩一区欧美一区| 91原创在线视频| 中文字幕一区二区三区不卡在线 | 国产精品美女久久久久久久久久久| 九九视频精品免费| 日韩免费高清视频| 久久爱另类一区二区小说| 欧美一级国产精品| 精品中文字幕一区二区| 日韩三级视频在线观看| 免费的国产精品| 日韩欧美在线网站| 久久精品国产99国产精品| 欧美xxx久久| 国产麻豆9l精品三级站| 久久久久久97三级| caoporen国产精品视频| 亚洲男同1069视频| 欧美日本国产视频| 久久99精品久久久久婷婷| 久久综合九色综合久久久精品综合| 精品一区二区免费| 国产色91在线| 色婷婷综合视频在线观看| 日韩精品亚洲一区| 久久久青草青青国产亚洲免观| 国产乱码精品一区二区三区五月婷| 久久久91精品国产一区二区精品 | 中文字幕成人av| 99久久精品免费看国产免费软件| 亚洲欧美自拍偷拍色图| 欧美日韩www| 极品少妇xxxx精品少妇偷拍| 中文字幕亚洲视频| 7777女厕盗摄久久久| 国产乱淫av一区二区三区| 国产精品白丝在线| 777午夜精品视频在线播放| 国产jizzjizz一区二区| 亚洲精品免费在线播放| 精品国产一区二区精华| 91麻豆自制传媒国产之光| 麻豆精品国产91久久久久久| 国产精品久久久久久久久动漫| 欧美日韩你懂得| 成人久久久精品乱码一区二区三区 | 久久久亚洲综合| 日本久久电影网| 精品一区二区国语对白| 一区二区三区欧美激情| 精品国产伦一区二区三区观看体验 | 高清不卡在线观看av| 亚洲二区在线观看| 中文成人av在线| 欧美一级二级在线观看| 色综合久久久久网| 激情欧美日韩一区二区| 亚洲一二三区视频在线观看| 国产亚洲欧美色| 4438x成人网最大色成网站| 成人激情黄色小说| 久久av老司机精品网站导航| 一区二区三区四区国产精品| 久久久噜噜噜久噜久久综合| 正在播放亚洲一区| 欧美亚洲日本一区| a级精品国产片在线观看| 国内外成人在线| 偷偷要91色婷婷| 亚洲综合在线视频| 中文字幕一区视频| 欧美国产精品一区二区| 久久久无码精品亚洲日韩按摩| 91精品国产麻豆| 欧美日韩精品专区| 91久久精品一区二区三| 91香蕉视频在线| jizz一区二区| 99在线精品一区二区三区| 国产寡妇亲子伦一区二区| 狠狠狠色丁香婷婷综合激情| 琪琪久久久久日韩精品| 天堂成人免费av电影一区| 亚洲国产精品尤物yw在线观看| 伊人一区二区三区| 中文字幕一区二区三区四区不卡 | 欧美电视剧在线观看完整版| 9191国产精品| 欧美日韩在线三区| 欧美日韩一区视频| 91福利精品视频| 欧美视频第二页| 欧美日韩视频在线第一区| 在线成人免费视频| 在线综合亚洲欧美在线视频| 91精品国产综合久久久久久久| 欧美日本国产视频| 日韩精品一区二区三区视频在线观看| 日韩一卡二卡三卡| 久久久一区二区三区| 国产精品网站在线观看| 中文字幕中文字幕一区| 亚洲精品v日韩精品| 午夜精品久久一牛影视| 久久狠狠亚洲综合| 国产美女视频91| 99久久婷婷国产综合精品| 91福利社在线观看| 日韩欧美一级特黄在线播放| 久久九九久久九九| 一区二区三区在线看| 日本va欧美va精品| 国产精品一级在线| 99精品视频中文字幕| 欧美视频在线播放| 欧美成人bangbros| 国产精品免费看片| 天天综合网 天天综合色| 久久99精品国产91久久来源| 成人网在线免费视频| 欧美日韩亚洲综合在线 | 国内成人自拍视频| 99re这里都是精品| 91精品国产一区二区三区| 久久午夜羞羞影院免费观看| 亚洲国产精品久久久久秋霞影院 | 91网上在线视频| 欧美丰满少妇xxxxx高潮对白| 国产亚洲欧美一级| 亚洲成人tv网| 成人动漫一区二区三区| 欧美一级一级性生活免费录像| 中文字幕乱码亚洲精品一区| 亚洲成人av免费| 国产91在线观看| 欧美一区在线视频| 亚洲少妇中出一区| 国产在线日韩欧美| 69堂成人精品免费视频| 中文字幕一区二区三区在线观看| 蜜桃视频在线观看一区二区| 99久久精品国产麻豆演员表| 日韩精品资源二区在线| 亚洲精品欧美专区| 国产精品18久久久久久久久久久久| 欧美日韩视频在线第一区| 国产精品成人一区二区三区夜夜夜| 久久99九九99精品| 欧美色图天堂网| 国产精品久久久久永久免费观看 | 香蕉av福利精品导航| 不卡一区中文字幕| 久久精品欧美一区二区三区麻豆| 日韩不卡在线观看日韩不卡视频| 在线精品视频免费播放| 亚洲人成网站影音先锋播放| 国产成a人亚洲精| 久久久久国产精品人| 九色综合狠狠综合久久| 欧美一级淫片007| 日韩va亚洲va欧美va久久| 欧美视频一区在线观看| 一区二区高清在线| 色婷婷亚洲精品| 亚洲男女毛片无遮挡| 99精品久久免费看蜜臀剧情介绍| 久久综合色婷婷| 国产在线日韩欧美| 久久久综合视频| 国产91精品免费| 国产精品久久久久久久久动漫| 国产成人免费网站| 国产精品入口麻豆原神|