遗传算法C语言代码

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

// GA.cpp : Defines the entry point for the console application.

//

/*

这是一个非常简单的遗传算法源代码,是由Denis Cormier (North Carolina State University)开发的,

Sita S.Raghavan (University of North Carolina at Charlotte)修正。

代码保证尽可能少,实际上也不必查错。

对一特定的应用修正此代码,用户只需改变常数的定义并且定义“评价函数”即可。

注意代码的设计是求最大值,其中的目标函数只能取正值;且函数值和个体的适应值之间没有区别。

该系统使用比率选择、精华模型、单点杂交和均匀变异。如果用Gaussian变异替换均匀变异,可能得到更好的效果。

代码没有任何图形,甚至也没有屏幕输出,主要是保证在平台之间的高可移植性。

读者可以从, 目录coe/evol中的文件prog.c中获得。

要求输入的文件应该命名为‘gadata.txt’;系统产生的输出文件为‘galog.txt’。

输入的文件由几行组成:数目对应于变量数。且每一行提供次序——对应于变量的上下界。如第一行为第一个变量提供上下界,第二行为第二个变量提供上下界,等等。

*/

#include

#include

#include

/* Change any of these parameters to match your needs */

//请根据你的需要来修改以下参数

#define POPSIZE 50 /* population size 种群大小*/

#define MAXGENS 1000 /* max. number of generations 最大基因个数*/

const int NVARS = 3; /* no. of problem variables 问题变量的个数*/

#define PXOVER 0.8 /* probability of crossover 杂交概率*/

#define PMUTATION 0.15 /* probability of mutation 变异概率*/

#define TRUE 1

#define FALSE 0

int generation; /* current generation no. 当前基因个数*/

int cur_best; /* best individual 最优个体*/

FILE *galog; /* an output file 输出文件指针*/

struct genotype /* genotype (GT), a member of the population 种群的一个基因的结构体类型*/

{

double gene[NVARS]; /* a string of variables 变量*/

double fitness; /* GT's fitness 基因的适应度*/

double upper[NVARS]; /* GT's variables upper bound 基因变量的上界*/ double lower[NVARS]; /* GT's variables lower bound 基因变量的下界*/ double rfitness; /* relative fitness 比较适应度*/

double cfitness; /* cumulative fitness 积累适应度*/

};

struct genotype population[POPSIZE+1]; /* population 种群*/

struct genotype newpopulation[POPSIZE+1]; /* new population; 新种群*/

/* replaces the old generation */

//取代旧的基因

/* Declaration of procedures used by this genetic algorithm */

//以下是一些函数声明

void initialize(void);

double randval(double, double);

void evaluate(void);

void keep_the_best(void);

void elitist(void);

void select(void);

void crossover(void);

void Xover(int,int);

void swap(double *, double *);

void mutate(void);

void report(void);

/***************************************************************/ /* Initialization function: Initializes the values of genes */

/* within the variables bounds. It also initializes (to zero) */

/* all fitness values for each member of the population. It */

/* reads upper and lower bounds of each variable from the */

/* input file `gadata.txt'. It randomly generates values */

/* between these bounds for each gene of each genotype in the */

/* population. The format of the input file `gadata.txt' is */

/* var1_lower_bound var1_upper bound */

/* var2_lower_bound var2_upper bound ... */

/***************************************************************/

void initialize(void)

{

FILE *infile;

int i, j;

double lbound, ubound;

if ((infile = fopen("gadata.txt","r"))==NULL)

相关文档
最新文档