基本遗传算法的C++语言实现.doc

上传人:hw****26 文档编号:4192911 上传时间:2019-10-03 格式:DOC 页数:21 大小:97.50KB
下载 相关 举报
基本遗传算法的C++语言实现.doc_第1页
第1页 / 共21页
基本遗传算法的C++语言实现.doc_第2页
第2页 / 共21页
基本遗传算法的C++语言实现.doc_第3页
第3页 / 共21页
基本遗传算法的C++语言实现.doc_第4页
第4页 / 共21页
基本遗传算法的C++语言实现.doc_第5页
第5页 / 共21页
点击查看更多>>
资源描述

1、/*/ /* 基于基本遗传算法的函数最优化 SGA.C */ /* A Function Optimizer using Simple Genetic Algorithm */ /* developed from the Pascal SGA code presented by David E.Goldberg */ /*/ #include #include /* 全局变量 */ struct individual /* 个体*/ unsigned *chrom; /* 染色体 */ double fitness; /* 个体适应度*/ double varible; /* 个体对应的变量值

2、*/ int xsite; /* 交叉位置 */ int parent2; /* 父个体 */ int *utility; /* 特定数据指针变量 */ ; struct bestever /* 最佳个体*/ unsigned *chrom; /* 最佳个体染色体 */ double fitness; /* 最佳个体适应度 */ double varible; /* 最佳个体对应的变量值 */ int generation; /* 最佳个体生成代 */ ; struct individual *oldpop; /* 当前代种群 */ struct individual *newpop; /*

3、新一代种群 */ struct bestever bestfit; /* 最佳个体 */ double sumfitness; /* 种群中个体适应度累计 */ double max; /* 种群中个体最大适应度 */ double avg; /* 种群中个体平均适应度 */ double min; /* 种群中个体最小适应度 */ float pcross; /* 交叉概率 */ float pmutation; /* 变异概率 */ int popsize; /* 种群大小 */ int lchrom; /* 染色体长度*/ int chromsize; /* 存储一染色体所需字节数 */

4、 int gen; /* 当前世代数 */ int maxgen; /* 最大世代数 */ int run; /* 当前运行次数 */ int maxruns; /* 总运行次数 */ int printstrings; /* 输出染色体编码的判断, 0 - 不输出, 1 - 输出 */ int nmutation; /* 当前代变异发生次数 */ int ncross; /* 当前代交叉发生次数 */ /* 随机数发生器使用的静态变量 */ static double oldrand55; static int jrand; static double rndx2; static int r

5、ndcalcflag; /* 输出文件指针 */ FILE *outfp ; /* 函数定义 */ void advance_random(); int flip(float);rnd(int, int); void randomize(); double randomnormaldeviate(); float randomperc(),rndreal(float,float); void warmup_random(float); void initialize(),initdata(),initpop(); void initreport(),generation(),initmallo

6、c(); void freeall(),nomemory(char *),report(); void writepop(),writechrom(unsigned *); void preselect(); void statistics(struct individual *); void title(),repchar (FILE *,char *,int); void skip(FILE *,int); int select(); void objfunc(struct individual *); int crossover (unsigned *, unsigned *, unsi

7、gned *, unsigned *); void mutation(unsigned *); void initialize() /* 遗传算法初始化 */ /* 键盘输入遗传算法参数 */ initdata(); /* 确定染色体的字节长度 */ chromsize = (lchrom/(8*sizeof(unsigned); if(lchrom%(8*sizeof(unsigned) chromsize+; /*分配给全局数据结构空间 */ initmalloc(); /* 初始化随机数发生器 */ randomize(); /* 初始化全局计数变量和一些数值 */ nmutation

8、= 0; ncross = 0; bestfit.fitness = 0.0; bestfit.generation = 0; /* 初始化种群,并统计计算结果 */ initpop(); statistics(oldpop); initreport(); void initdata() /* 遗传算法参数输入 */ char answer2; popsize=30; if(popsize%2) != 0) fprintf(outfp, “种群大小已设置为偶数n“); popsize+; ; lchrom=22; printstrings=1; maxgen=150; pcross=0.8;

9、pmutation=0.005; void initpop() /* 随机初始化种群 */ int j, j1, k, stop; unsigned mask = 1; for(j = 0; j fitness); /* 新一代个体 */ pind = fprintf(outfp,“(%2d,%2d) %2d “, pind-parent0, pind-parent1, pind-xsite); writechrom(pind-chrom); fprintf(outfp,“ %8fn“, pind-fitness); void writechrom(chrom) /* 输出染色体编码 */ u

10、nsigned *chrom; int j, k, stop; unsigned mask = 1, tmp; for(k = 0; k 1; void preselect() int j; sumfitness = 0; for(j = 0; j varible + bitpow; tp = tp1; critter-varible =-1+critter-varible*3/(pow(2.0,(double)lchrom)-1); critter-fitness =critter-varible*sin(critter-varible*10*atan(1)*4)+2.0; void mut

11、ation(unsigned *child) /*变异操作*/ int j, k, stop; unsigned mask, temp = 1; for(k = 0; k = high) i = low; else i = (randomperc() * (high - low + 1) + low; if(i high) i = high; return(i); void warmup_random(float random_seed) /* 初始化随机数发生器*/ int j1, ii; double new_random, prev_random; oldrand54 = random_seed; new_random = 0.000000001; prev_random = random_seed; for(j1 = 1 ; j1 fitness); /* 新一代个体 */ pind = fprintf(outfp,“(%2d,%2d) %2d “, pind-parent0, pind-parent1, pind-xsite); writechrom(pind-ch);

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 实用文档资料库 > 策划方案

Copyright © 2018-2021 Wenke99.com All rights reserved

工信部备案号浙ICP备20026746号-2  

公安局备案号:浙公网安备33038302330469号

本站为C2C交文档易平台,即用户上传的文档直接卖给下载用户,本站只是网络服务中间平台,所有原创文档下载所得归上传人所有,若您发现上传作品侵犯了您的权利,请立刻联系网站客服并提供证据,平台将在3个工作日内予以改正。