遗传算法(Genetic Algorithm)和模拟退火算法一样,也是搜索启发式算法的一种,它是借鉴了自然界优胜劣汰与适者生存的思想,通过模拟自然界这一过程来搜索最优解,在机器学习、组合优化等方面有广泛的用途。
首先我们一样来看一个函数:
f(x)=x+5sin5x+2cos3x f ( x ) = x + 5 s i n 5 x + 2 c o s 3 x
函数图像如下:
现在需要求这个函数在[0,9]的最大值并需要精确到4位小数。同样,如果使用穷举法,需要计算90000次。现在我们来看看如何用遗传算法优化求解过程。
1.遗传算法
遗传算法的组成主要包括4个部分:
(1)编码
(2)适应度函数
(3)遗传算子(选择,交叉,变异)
(4)运行参数
1.1编码与解码(code and decode)
实行遗传算法的首要任务是要确定编码与解码的形式,就如同生物遗传是通过染色体和基因进行一样。编码形式可以直接使用实数编码,也可以使用二进制编码,基本遗传算法(SGA)都是选取二进制编码。
现在,对于上面的问题,如何对90000个数进行二进制编码呢。我们考虑90000个数将自变量空间划分成了90000个等份,现在使用二进制来表示这90000个等份,由于:
216<90000<217 2 16 < 90000 < 2 17
那么,只需要17为二进制字符串便可以表达每一个等份,每一等份都对应一个不同的字符串。现在,如何将二进制字符串转化回原自变量呢?首先将二进制转化为十进制:
x′=(b16b15b14b13⋅⋅⋅b0)2=(