遗传算法简介1 Z. k3 Z" M. T0 |" ^
维基百科上的概念如下2 s* j; X) D3 i& M
遗传算法(英语:genetic algorithm (GA) )是计算数学中用于解决最优化的搜索算法,是进化算法的一种。进化算法最初是借鉴了进化生物学中的一些现象而发展起来的,这些现象包括遗传、突变、自然选择以及杂交等。 $ O1 _$ F4 v% A, U. r - Z- H0 K3 o3 I2 k5 b$ X0 n遗传算法通常实现方式为一种计算机模拟。对于一个最优化问题,一定数量的候选解(称为个体)可抽象表示为染色体,使种群向更好的解进化。传统上,解用二进制表示(即0和1的串),但也可以用其他表示方法。进化从完全随机个体的种群开始,之后一代一代发生。在每一代中评价整个种群的适应度,从当前种群中随机地选择多个个体(基于它们的适应度),通过自然选择和突变产生新的生命种群,该种群在算法的下一次迭代中成为当前种群。 4 H/ m, f8 [5 q5 X% x5 O/ t# M8 A! |. |5 u
这看起来是不是很抽象?没关系,我们举一个例子 9 W! X8 z6 y' k: z. {* Q比如你家住的那一块地方有一群老鼠,有一些跑得快而且也聪明,有一些傻得大白天在你面前跳舞,然后理所当然就被你捕获然后进行土葬。故那群跑得快而且也聪明自然活下来的概率比傻的大的多,我们称老鼠是否活下来为适应度,适应度高的更容易在你手上活下来,而低的更容易被你土葬。活下来的老鼠们,它们中大多都是适应度高的,它们进行交配繁殖,老鼠子类大多都是继承了老鼠父母的特点,当然也存在一定几率变异,变异数除以总体老鼠为变异率,变异率一般都不是很大的常数。但总体来说,由于淘汰机制,故所产生的鼠类比起它们的父类,平均来说更为聪明。通过一代代的优化,使得老鼠越来越聪明,而你越来越抓不到老鼠。这就是遗传算法的核心。( J* t$ W5 j9 K
! G% c& @: Z3 c% E r
遗传算法的步骤. l3 D7 r3 H$ q/ R* q
1.编码 - d+ c8 }' A" D9 s$ c编码有多种,如二进制编码,浮点数编码,格雷码等。最常见的是二进制编码和浮点数编码。 - v3 K d7 q, t% v' f1 g k5 j0 E' N6 h1 p2 t- J
二进制编码 , p* v9 N6 m2 g8 X7 v3 X二进制编码方法是使用二值符号集{0,1},它所构成的个体基因型是一个二进制编码符号串。二进制编码符号串的长度与问题所要求的求解精度有关。 Y* [$ Z8 \2 g' o+ U6 W8 J$ |6 e6 ]% H
优点:/ T6 x' Q. F( m0 F
5 x3 h; v" ]" [; |/ s简单。无论是编码还是解码操作都非常方便和快捷。, n% b$ k" I' O4 I T% A Z# A
方便交叉和变异。; Q! B. G3 B& Z2 t
符合最小字符集编码原则。5 C- z, A% Z4 |! H {
缺点: 3 x* O% @8 T( r: i* |+ v" M 7 r3 l+ p: r" ?1 c A3 a# l不适合连续函数的优化问题,局部搜索能力差。! p4 S/ J( u; O7 M
连续的数值之间有时候存在距离大的问题。例如63和64对应的二进制分别是0111111和1000000。(连续数值对应的二进制数7位全都不同); t# z, _4 A; E" @. Z
对于高精度的问题,变异后可能会出现远离最优解的情况,表现型不稳定。. f/ K" \6 h E, D/ y' b9 a
案例:: t' P: @7 x7 T+ P* H
假设有f(x),x∈[0,1023],采用定长二进制编码,串0010101111就代表了175,编码精度为1., ^. N& @: P$ |1 X6 P
( g. T3 [0 f3 O浮点数编码 - o n: Z' O* \+ v定义:+ w$ q# K7 V& X0 o, B0 K4 a
个体基因值用某范围内的一个实数来表示。编码长度等于决策变量的个数。- ~# p" z9 J6 C
优点:* L3 Q! P5 S2 m. e3 i8 S/ ~) r
; Q' _( E1 @: ~/ h0 |精度高,适用于连续变量问题。避免了海明悬崖问题。 ' X" o/ Y! o: g. S* ^适用于表示范围比较大的数值,适合空间较大的一串算搜索. E' t/ b+ O1 u: @9 N C& a, @% q& C
降低了计算复杂性,提升效率 ( H' Q$ h) c) }% e+ }+ B便于遗传算法与经典优化方法的混合使用9 Q z o+ L8 [2 Y2 d- k' g7 H* a
便于设计针对问题的专门知识的知识型遗传算子4 Q8 G1 r% i! }, ], W5 B t
便于处理复杂的决策变量约束条件,适合于组合优化问题8 s% t! T7 d s" I
案例:' \. Y6 t. n/ g* P8 h( g2 y0 I
假设某优化问题有五个变量,每个变量的变化范围都不同。其中X={5.30,5.20,4.70,3.40,4.80}就是一个基因型,对应的表现型是x={5.30,5.20,4.70,3.40,4.80}。 * B/ r, j9 o: j: S8 o# {' S* h% y5 h6 E1 U
2.解码1 u$ k4 J# u: k/ E: `
以二进制为例。. T- v! R) m$ M3 a" F) {
解码的目的就是将不直观的二进制数据串还原成十进制。+ A' b( l" ^& f B5 Q I8 @