基于基本遗传算法的函数最优化 ok

上传人:子 文档编号:44129429 上传时间:2018-06-08 格式:DOC 页数:24 大小:22.65KB
返回 下载 相关 举报
基于基本遗传算法的函数最优化 ok_第1页
第1页 / 共24页
基于基本遗传算法的函数最优化 ok_第2页
第2页 / 共24页
基于基本遗传算法的函数最优化 ok_第3页
第3页 / 共24页
基于基本遗传算法的函数最优化 ok_第4页
第4页 / 共24页
基于基本遗传算法的函数最优化 ok_第5页
第5页 / 共24页
点击查看更多>>
资源描述

《基于基本遗传算法的函数最优化 ok》由会员分享,可在线阅读,更多相关《基于基本遗传算法的函数最优化 ok(24页珍藏版)》请在金锄头文库上搜索。

1、基于基本遗传算法的函数最优化基于基本遗传算法的函数最优化 okok/*/* 基于基本遗传算法的函数最优化 SGA.C */* A Function Optimizer using Simple Genetic Algorithm */* developed from the Pascal SGA code presented by David E.Goldberg */* 同济大学计算机系 王小平 2000年 5 月 */*/#include #include #include #include /* 全局变量 */struct individual /* 个体*/unsigned *chro

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

3、al *oldpop; /* 当前代种群 */struct individual *newpop; /* 新一代种群 */struct bestever bestfit; /* 最佳个体 */double sumfitness; /* 种群中个体适应度累计 */double max; /* 种群中个体最大适应度 */double avg; /* 种群中个体平均适应度 */double min; /* 种群中个体最小适应度 */float pcross; /* 交叉概率 */float pmutation; /* 变异概率 */int popsize; /* 种群大小 */int lchrom;

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

5、tic double rndx2;static int rndcalcflag;/* 输出文件指针 */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(),gene

6、ration(),initmalloc();void freeall(),nomemory(char *),report();void writepop(FILE *),writechrom(unsigned *);void preselect();void statistics(struct individual *);void repchar (FILE *,char *,int); / title missposvoid skip(FILE *,int);int select();void objfunc(struct individual *);int crossover (unsig

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

8、utation = 0;ncross = 0;bestfit.fitness = 0.0;bestfit.generation = 0;/* 初始化种群,并统计计算结果 */initpop();statistics(oldpop);initreport();void initdata() /* 遗传算法参数输入 */char answer2;printf(“n 种群大小(20-100):“);scanf(“%d“, if(popsize%2) != 0)fprintf(outfp, “种群大小已设置为偶数n“);popsize+;printf(“n 染色体长度(8-40):“);scanf(“

9、%d“, printf(“n 是否输出染色体编码(y/n):“);printstrings=1;scanf(“%s“, if(strncmp(answer,“n“,1) = 0) printstrings = 0;printf(“n 最大世代数(100-1200):“);scanf(“%d“, printf(“n 交叉率(0.05-0.9):“);scanf(“%f“, printf(“n 变异率(0.01-0.1):“);scanf(“%f“, void initpop() /* 随机初始化种群 */int j, j1, k, stop;unsigned mask = 1;for(j = 0

10、; j 所在代数: %d “, bestfit.generation);fprintf(outfp,“ 适应度:%f 染色体:“, bestfit.fitness);writechrom(fprintf(outfp,“ 对应的变量值: %f“, bestfit.varible);skip(outfp,1);repchar(outfp,“-“,80);skip(outfp,1); void writepop(FILE *)struct individual *pind;int j;for(j=0; jchrom);fprintf(outfp,“ %8f | “, pind-fitness);/*

11、 新一代个体 */pind = fprintf(outfp,“(%2d,%2d) %2d “,pind-parent0, pind-parent1, pind-xsite);writechrom(pind-chrom);fprintf(outfp,“ %8fn“, pind-fitness);void writechrom(unsigned *chrom) /* 输出染色体编码 */ unsigned *chrom;int j, k, stop;unsigned mask = 1, tmp;for(k = 0; k 1;void preselect()int j;sumfitness = 0;

12、for(j = 0; j max) max = popj.fitness; if(popj.fitness bestfit.fitness)for(i = 0; i varible = 0.0;for(k = 0; k chromk;for(j = 0; j varible = critter-varible + bitpow;tp = tp1;roundvar = (long)critter-varible;/ roundvar = 12633410;a = roundvar/4096;b = roundvar%4096;fa = 54.0+a*1.0/4095.0;fb = 1.4+b*0

13、.1/4095.0;sum11 = fabs(fa*pow(0.1,fb)-2.10)+fabs(fa*pow(0.2,fb)-5.20)+fabs(fa*pow(0.3,fb)-9.40)+fabs(fa*pow(0.4,fb)-14.8)+fabs(fa*pow(0.5,fb)-20.5)+fabs(fa*pow(0.6,fb)-26.8)+fabs(fa*pow(0.7,fb)-33.5)+fabs(fa*pow(0.8,fb)-40.5)+fabs(fa*pow(0.9,fb)-47.5)+fabs(fa*pow(1.0,fb)-54.5)+fabs(fa*pow(1.1,fb)-61.5);critter-fitness = 3.0/(sum11-1.5);void mu

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

当前位置:首页 > 生活休闲 > 科普知识

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号