数学建模方法-遗传算法(实战篇part 1)

一、引言

  在上一篇中我们详细介绍了什么是遗传算法,但是光说不练是不行的,因此,在这一篇中,我们将举一个例子,并且利用遗传算法来解决我们的例子。

二、问题

  已知:$f(x) = x + 10sin5x + 7cos4x, x \in [0, 9]$

  求:函数$f(x)$的最大值

三、一般求解

  在MATLAB中输入如下代码:

x = 0: 0.0001: 9;
y = x + 10*sin(5*x) + 7*cos(4*x);
[maxY, index] = max(y)
maxX = x(index)

  则会输出以下结果:

maxY =
   24.8554
index =
   78568
maxX =
    7.8567

  对此,我们得到$f(x)$在其定义域内的最大坐标值为(7.8567, 24.8554)。

  好,接下来,我们利用遗传算法来设计代码,对我们这个问题进行求解,看看会是怎样。

三、遗传算法求解

  我们来回顾下上个篇章所讲的,遗传算法的步骤,如下:

  1.  种群初始化
  2. 计算每个种群的适应度值
  3. 选择(Selection)
  4. 交叉(Crossover)
  5. 变异(Mutation)
  6. 重复2-5步直至达到进化次数

  我们从第一步开始编写我们的代码,为了让我们的遗传算法的代码具有更好的包容性,即针对不同的题目,我们不想每一次都要大幅度的重写我们的代码,因此,我们希望能够把一些步骤的功能编写成函数,这样针对不同的题目,我们只需要调用我们事先编写好的函数,输入不同的参数和数据即可。好了,废话不多说,我们开始吧。

  (1)种群初始化函数popInit(),能根据提供的种群大小染色体长度产生

  • 3
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值