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

📄 initial.c

📁 遗传算法的简单程序
💻 C
字号:
//初始化 

/*----------------------------------------------------------------------------*/ 
/* initial.c - functions to get things set up and initialized  */ 
/*----------------------------------------------------------------------------*/ 
#include "external.h" 
initialize()           /* Initialization Coordinator */
{ 
    /* get basic problem values from input file */ 
    initdata();
	
    /* define chromosome size in terms of machine bytes, ie  */ 
    /* length of chromosome in bits (lchrom)/(bits-per-byte) */ 
    /* chromsize must be known for malloc() of chrom pointer */ 
    chromsize = (lchrom/UINTSIZE); 
    if(lchrom%UINTSIZE) chromsize++;
	
    /* malloc space for global data structures */ 
    initmalloc();
	
    /* initialize application dependent variables*/ 
    app_init();
	
    /* initialize random number generator */ 
    randomize();
	
    /* initialize global counters/values */ 
    nmutation = 0; 
    ncross = 0; 
    bestfit.fitness = 0.0; 
    bestfit.generation = 0; 

    /* initialize the populations and report statistics */ 
    initpop(); 
    statistics(oldpop); 
    initreport(); 
} 

initdata()                /* data inquiry and setup */ 
{ 
    char  answer[2]; 
    if(numfiles == 0) 
    { 
        fprintf(outfp,"\n ------- SGA Data Entry and Initialization -------\n"); 
        fprintf(outfp," Enter the population size ------------> "); 
    } 
    fscanf(infp,"%d", &popsize); 
    if((popsize%2) != 0) 
      { 
        fprintf(outfp, "Sorry! only even population sizes are allowed. \n Incremnting popsize by one.\n"); 
        popsize++; 
      }; 
    if(numfiles == 0) 
        fprintf(outfp," Enter chromosome length --------------> "); 
    fscanf(infp,"%d", &lchrom); 
    if(numfiles == 0) 
        fprintf(outfp," Print chromosome strings? (y/n) ------> "); 
    fscanf(infp,"%s",answer); 
    if(strncmp(answer,"n",1) == 0) printstrings = 0; 
    if(numfiles == 0) 
        fprintf(outfp," Enter maximum number of generations --> "); 
    fscanf(infp,"%d", &maxgen); 
    if(numfiles == 0) 
        fprintf(outfp," Enter crossover probability ----------> "); 
    fscanf(infp,"%f", &pcross); 
    if(numfiles == 0) 
        fprintf(outfp," Enter mutation probability -----------> "); 
    fscanf(infp,"%f", &pmutation);
	
    /* any application-dependent global input */ 
   app_data(); 
} 

initpop()           /* Initialize a population at random */ 
{ 
    int j, j1, k, stop; 
    unsigned mask = 1; 
    for(j = 0; j < popsize; j++) 
    { 
        for(k = 0; k < chromsize; k++) 
        { 
            oldpop[j].chrom[k] = 0; 
            if(k == (chromsize-1)) 
                stop = lchrom - (k*UINTSIZE); 
            else 
                stop = UINTSIZE; 
            /* A fair coin toss */ 
            for(j1 = 1; j1 <= stop; j1++) 
            { 
               oldpop[j].chrom[k] = oldpop[j].chrom[k]<<1; 
               if(flip(0.5)) 
                  oldpop[j].chrom[k] = oldpop[j].chrom[k]|mask; 
            } 
        } 
        oldpop[j].parent[0] = 0; /* Initialize parent info. */ 
        oldpop[j].parent[1] = 0; 
        oldpop[j].xsite = 0; 
        objfunc(&(oldpop[j]));  /* Evaluate initial fitness */ 
    } 
}
 
initreport() /* Initial report */ 
{ 
    void   skip(); 
    skip(outfp,1); 
    fprintf(outfp," SGA Parameters\n"); 
    fprintf(outfp," -------------------------------------------------\n"); 
    fprintf(outfp," Total Population size              =   %d\n",popsize); 
    fprintf(outfp," Chromosome length (lchrom)         =   %d\n",lchrom); 
    fprintf(outfp," Maximum # of generations (maxgen)  =   %d\n",maxgen); 
    fprintf(outfp," Crossover probability (pcross)     = %f\n", pcross); 
    fprintf(outfp," Mutation  probability (pmutation)  = %f\n", pmutation); 
    skip(outfp,1); 
    /* application dependant report */ 
    app_initreport(); 
    fflush(outfp); 
}

⌨️ 快捷键说明

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