一、引言
在上一篇中我们详细介绍了什么是遗传算法,但是光说不练是不行的,因此,在这一篇中,我们将举一个例子,并且利用遗传算法来解决我们的例子。
二、问题
已知:$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(),能根据提供的种群大小和染色体长度产生