遗传算法计算一元函数最大值,工具:matlab

其实现在网络上关于遗传算法求一元函数最大值的代码已经很多了,本文也是借鉴了他们的经验、算法思想、代码等撰写出来的,只是在一次讨论中听了别人对于其中算法的看法,认为其中基于轮盘赌法的非线性选择有局限性,并阐明了他本人改进后的算法逻辑,我自己也是受到他的启发后再改进了代码,在此感谢那位同学以及网络上分享资源的同学,好了,不多说,开始正题了。

题目:y=|sin(x)/x|,其中-10<=x<=10,求y的最大值,要求精确度0.0001,样本总数50,交叉个体数与变异个体数均为12,

贴代码前想说明几点:(1)根据精确度求染色体位数,在参考博客的代码中有一条语句是计算染色体位数的,在此是讲些通俗的理解,因为x的定义域有20个单位长度,精确度要求0.0001,将其离散化,考虑其所有可能点也仅有(20/0.0001=)200 000个(当然在此排除了x=0的点),而2的18次方(=262 144)是大于可能的点数的,我们便可认为18位的二进制数能保证精度要求;(2)可能有的题会给出交叉率、变异率,在此便认为交叉个体数/样本总数的比值便是交叉率,变异率同理,在下列粘贴的代码中交叉位数我是将其设置为二进制数的后九位,变异位也同样做了设置,因此交叉位与变异位是不同于交叉率、变异率的,在这里可能有人会认为自然选择的交叉、变异不应该是种群里相似个体基因都可能有交叉、变异行为,我在代码里仅设置部分个体有交叉、变异行为,在此我想说明的是,交叉个体起始位、变异个体起始位是做随机数选择的,这样

  • 2
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值