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

📄 app1.c

📁 David E. Goldberg所写经典遗传算法源码
💻 C
字号:
/*----------------------------------------------------------------------------*//* app.c - application dependent routines, change these for different problem *//*----------------------------------------------------------------------------*/#include <math.h>#include "external.h"application()/* this routine should contain any application-dependent computations *//* that should be performed before each GA cycle. called by main()    */{}app_data()/* application dependent data input, called by init_data() *//* ask your input questions here, and put output in global variables */{}app_free()/* application dependent free() calls, called by freeall() */{}app_init()/* application dependent initialization routine called by intialize() */{}app_initreport()/* Application-dependent initial report called by initialize() */{}app_malloc()/* application dependent malloc() calls, called by initmalloc() */{    char *malloc();}app_report()/* Application-dependent report, called by report() */{}app_stats(pop)/* Application-dependent statistics calculations called by statistics() */struct individual *pop;{}objfunc(critter)/* objective function used in Goldberg's book *//* fitness function is f(x) = x**n,    normalized to range between 0 and 1,   where x is the chromosome interpreted as an   integer, and n = 10 */struct individual *critter;{    unsigned mask=1;   /* mask for current bit */    unsigned bitpos;   /* current bit position */    unsigned tp;    double pow(), bitpow, coef;    int j, k, stop;    int n = 10;    critter->fitness = 0.0;    coef = pow(2.0,(double) lchrom) - 1.0;    coef = pow(coef, (double) n);    /* loop thru number of bytes holding chromosome */    for(k = 0; k < chromsize; k++)    {        if(k == (chromsize-1))            stop = lchrom-(k*UINTSIZE);        else            stop = UINTSIZE;        /* loop thru bits in current byte */        tp = critter->chrom[k];        for(j = 0; j < stop; j++)        {            bitpos = j + UINTSIZE*k;             /* test for current bit 0 or 1 */            if((tp&mask) == 1)            {                bitpow = pow(2.0,(double) bitpos);                critter->fitness = critter->fitness + bitpow;            }            tp = tp>>1;        }    }    /* At this point, fitness = x */    /* Now we must raise x to the n */    critter->fitness = pow(critter->fitness,(double) n);    /* normalize the fitness */    critter->fitness = critter->fitness/coef;}

⌨️ 快捷键说明

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