遗传算法求解函数极值c语言代码

遗传算法求解函数极值c语言代码

ID:30269986

大小:58.22 KB

页数:6页

时间:2018-12-28

遗传算法求解函数极值c语言代码_第1页
遗传算法求解函数极值c语言代码_第2页
遗传算法求解函数极值c语言代码_第3页
遗传算法求解函数极值c语言代码_第4页
遗传算法求解函数极值c语言代码_第5页
资源描述:

《遗传算法求解函数极值c语言代码》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库

1、#include"stdio.h"#include"stdlib.h"#include"conio.h"#include"math.h"#include"time.h"#definenum_C12//个体的个数,前6位表示x1,后6位表示x2#defineN100//群体规模为100#definepc0.9//交叉概率为0.9#definepm0.1//变异概率为10%#defineps0.6//进行选择时保留的比例#definegenmax2000//最大代数200intRandomInteger(intlow,inth

2、igh);voidInitial_gen(structunitgroup[N]);voidSort(structunitgroup[N]);voidCopy_unit(structunit*p1,structunit*p2);voidCross(structunit*p3,structunit*p4);voidVaration(structunitgroup[N],inti);voidEvolution(structunitgroup[N]);floatCalculate_cost(structunit*p);voidPr

3、int_optimum(structunitgroup[N],intk);/*定义个体信息*/typedefstructunit{intpath[num_C];//每个个体的信息doublecost;//个体代价值};structunitgroup[N];//种群变量groupintnum_gen=0;//记录当前达到第几代intmain(){inti,j;srand((int)time(NULL));//初始化随机数发生器Initial_gen(group);//初始化种群Evolution(group);//进化:选择

4、、交叉、变异getch();return0;}/*初始化种群*/voidInitial_gen(structunitgroup[N]){inti,j;structunit*p;for(i=0;i<=N-1;i++)//初始化种群里的100个个体{p=&group[i];//p指向种群的第i个个体for(j=0;j<12;j++){p->path[j]=RandomInteger(0,9);//end}Calculate_cost(p);//计算该种群的函数值}//end初始化种群}/*种群进化,进化代数由genmax决定*

5、/voidEvolution(structunitgroup[N]){inti,j;inttemp1,temp2,temp3,temp4,temp5;temp1=N*pc/2;temp2=N*(1-pc);temp3=N*(1-pc/2);temp4=N*(1-ps);temp5=N*ps;for(i=1;i<=genmax;i++){//选择for(j=0;j<=temp4-1;j++){Copy_unit(&group[j],&group[j+temp5]);}//交叉for(j=0;j<=temp1-1;){Cros

6、s(&group[temp2+j],&group[temp3+j]);j+=2;}//变异Varation(group,i);}Sort(group);Print_optimum(group,i-1);//输出当代(第i-1代)种群}/*交叉*/voidCross(structunit*p3,structunit*p4){inti,j,cross_point;intson1[num_C],son2[num_C];for(i=0;i<=num_C-1;i++)//初始化son1、son2{son1[i]=-1;son2[i]

7、=-1;}cross_point=RandomInteger(1,num_C-1);//交叉位随机生成//交叉,生成子代//子代1//子代1前半部分直接从父代复制for(i=0;i<=cross_point-1;i++)son1[i]=p3->path[i];for(i=cross_point;i<=num_C-1;i++)for(j=0;j<=num_C-1;j++)//补全p1{son1[i]=p4->path[j];}//end子代1//子代2//子代1后半部分直接从父代复制for(i=cross_point;i<=

8、num_C-1;i++)son2[i]=p4->path[i];for(i=0;i<=cross_point-1;i++){for(j=0;j<=num_C-1;j++)//补全p1{son2[i]=p3->path[j];}}//end子代2//end交叉for(i=0;i<=num_C-1;i++)

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。