- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
遗传算法求y等于X平方+5最优解
一、编码以及初始种群的产生
二、适应度函数
一般情况下,染色体(也叫个体,或一个解)的适应度函数为目标函数的线性组合。本文直接以目标函数作为适应度函数。即每个染色体的适应度值就是它的目标函数值,f(x)=-x2+5。
三、选择算子
初始种群产生后,要从种群中选出若干个体进行交叉、变异,那么如何选择这些个体呢,选择方法就叫做选择算子。一般有轮盘赌选择法、锦标赛选择法、排序法等。本文采用排序法来选择,即每次选择都选出适应度最高的两个个体。那么执行一次选择操作后,得到的新种群的一部分为下图所示:
五、变异
变异就是对染色体的结构进行变异,使其改变原来的结构(值也就改变),达到突变进化的目的。变异操作也要遵从一定的概率来进行,一般设置为0到0.5之间。本文的变异方法直接采取基因位反转变异法,即0变为1,1变为0。要进行变异的基因位的选取也是随机的。
六、终止规则
遗传算法是要一代一代更替的,那么什么时候停止迭代呢,这个规则就叫终止规则。一般常用的终止规则有:若干代后终止,得到的解达到一定目标后终止,计算时间达到一定限度后终止等方法。本文采用迭代数来限制。
七、代码如下:
#includestdio.h//调用输入输出函数所需要的头文件
#includeconio.h〃调用getche函数所需要的头文件
#includestdlib.h〃调用随机函数所需要的头文件
typedefstructChrom//结构体类型,为单个染色体的结构;
(
shortintbit[6];
intfit;
}chrom;
void*evpop(chrompopcurrent[4]);//定义将会用到的几个函数;
intx(chrompopcurrent);
inty(intx);
void*pickchroms(chrompopcurrent[4]);
void*crossover(chrompopnext[4]);
void*mutation(chrompopnext[4]);
voidmain()//主函数;
(
intnum;//迭代次数;
inti,j,l,Max,k;
Max=0;//函数最大值
printf(/nWelcometotheGeneticAlgorithmcodedbyLuayAl-wesi,editdby
xujinpeng/n);//introductiontotheprogram,欢迎词;
printf(TheAlgorithmisbasedonthefunctiony=-x2+5tofindthemaximum
valueofthefunction./n);
enter:printf(/nPleaseentertheno.ofiterations/n请输入您要设定的迭代数:〃);
scanf(〃%d〃,num);//输入迭代次数,传送给参数num;
chrompopcurrent[4];//初始种群规模为4;
chrompopnext[4];//更新后种群规模仍为4;
if(num1)
gotoenter;//判断输入的迭代次数是否为负或零,是的话重新输入;
evpop(popcurrent);//随机产生初始种群;
for(i=0;inum;i++)//开始迭代;
(
printf(/ni=%d/n”,i);//输出当前迭代次数;
for(j=0;j4;j++)
(
popnext[j]=popcurrent[j];//更新种群;
}
pickchroms(popnext);//挑选优秀个体;
crossover(popnext);//交叉得到新个体;
mutation(popnext);//变异得到新个体;
for(j=0;j4;j++)
(
popcurrent[j]=popnext[j];//种群更替;
}
}//等待迭代终止;
for(l=0;l3;l++)
if(popcurrent[l].fitMax)
(
Max二popcurrent[l].fit;
k=l;
}
}
printf(/n当x等于%d时,函数得到最大值为:%d”,k,Max);
printf(/nPressanykeytoend!);
flushall();//清除所有缓冲区;
getche();//从控制台取字符,不以回车为结束;
}
void*evpop(chrompopcurrent[4])//函数:随机生成初始种群;
(
inti,j,value;
intrandom;
for(j=0;j4;j++)//从种群中的第1个染色体到第4个染色体
(
for(i=0;i6;i++)//从染色体的第1个基因位到第6个基因位
(
random二rand();//产生一个随机值
random=(random%2)
文档评论(0)