网站大量收购独家精品文档,联系QQ:2885784924

遗传算法求解函数极值C语言代码..docVIP

  1. 1、本文档共6页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
遗传算法求解函数极值C语言代码.

#include stdio.h #include stdlib.h #include conio.h #include math.h #include time.h #define num_C 12 //个体的个数,前6位表示x1,后6位表示x2 #define N 100 //群体规模为100 #define pc 0.9 //交叉概率为0.9 #define pm 0.1 //变异概率为10% #define ps 0.6 //进行选择时保留的比例 #define genmax 2000 //最大代数200 int RandomInteger(int low,int high); void Initial_gen(struct unit group[N]); void Sort(struct unit group[N]); void Copy_unit(struct unit *p1,struct unit *p2); void Cross(struct unit *p3,struct unit *p4); void Varation(struct unit group[N],int i); void Evolution(struct unit group[N]); float Calculate_cost(struct unit *p); void Print_optimum(struct unit group[N],int k); /* 定义个体信息 */ typedef struct unit { int path[num_C]; //每个个体的信息 double cost; //个体代价值 }; struct unit group[N]; //种群变量group int num_gen=0; //记录当前达到第几代 int main() { int i,j; srand((int)time(NULL)); //初始化随机数发生器 Initial_gen(group); //初始化种群 Evolution(group); //进化:选择、交叉、变异 getch(); return 0; } /* 初始化种群 */ void Initial_gen(struct unit group[N]) { int i,j; struct unit *p; for(i=0;i=N-1;i++) //初始化种群里的100个个体 { p=group[i]; //p指向种群的第i个个体 for(j=0;j12;j++) { p-path[j]=RandomInteger(0,9); //end } Calculate_cost(p); //计算该种群的函数值 }//end 初始化种群 } /* 种群进化,进化代数由genmax决定 */ void Evolution(struct unit group[N]) { int i,j; int temp1,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;) { Cross(group[temp2+j],group[temp3+j]); j+=2; } //变异 Varation(group,i); } Sort(group); Print_optimum(group,i-1); //输出当代(第i-1代)种群 } /* 交叉 */ void Cross(struct unit *p3,struct unit *p4) { int i,j,cross_point; int son1[num_C],son2[num_C]; for(i=0;i=num_C-1;i++) //初始化son1、son2 { son1[i]=-1; son2[i]=-1; } cross_point=RandomInteger(1,num_C-1); //交叉位随机生成 //交叉,生成子代

文档评论(0)

sa43sad5 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档