2 t6 p" Y$ W7 q% O- o3 M6 c6 ^: _! H" p* d5 c, m9 A- x9 Q- j. c
3.选择算子4 R* _5 i: ~9 y0 V8 @
4 b& F* a7 T- ^- R. g
. t4 ]: }8 G7 s' c0 M: y
4.交叉算子( ]' V% j5 l* O; k' ^ U
9 t, j$ Y3 V2 V; Z) s4 Q
; o" Z5 T5 s7 b% V
5.变异算子# r, X" z$ T( D4 Z3 V5 {
4 b, j5 K( d- L" `
" ?* B2 a8 e) ~+ K/ n! ^* Y) o! W! m
6.运行参数 % u1 R& y8 P. D# m) d; Z% x+ ]5 U7 u1 L
' U4 ^' S6 \1 q
四、遗传算法的基本原理 . X* q" ~! s% f+ \' {0 ?3 a) k ! a% K- R( m! U( T3 ~3 C: T , }: I! ~' p' t( q8 l2 z) R4.1 模式定理9 _ J+ w4 E- r
0 i/ q3 x1 v! U5 m8 B
) b( P; n z. r' G. R3 d |
4.2 积木块假设# m" g( D8 `6 @& C# g* |5 r
% y! d0 G" r0 X5 e) @' S S! l c9 V3 w% \( @# x9 M
五、遗传算法编程实例(MATLAB) ) \8 t6 O+ t: y x' i- _7 h! j% i {& Y& x) b P
# X2 p* n( u% {
一、遗传算法概述 & p9 I) M% o0 [2 R3 }. { 遗传算法(Genetic Algorithm,GA)是进化计算的一部分,是模拟达尔文的遗传选择和自然淘汰的生物进化过程的计算模型,是一种通过模拟自然进化过程搜索最优解的方法。该算法简单、通用,鲁棒性强,适于并行处理。 3 } a! H( H: e# q2 J. B. ~" p% m+ H" j3 x2 c: o8 `
7 w: b: @8 n. Z) \二、遗传算法的特点和应用 ) H* p. m( O1 q+ B 遗传算法是一类可用于复杂系统优化的具有鲁棒性的搜索算法,与传统的优化算法相比,具有以下特点:* H5 h( A2 Z, q6 m# K9 r
3 f/ L7 ~. |0 t) v' f6 a l0 y 1 D/ F- q' H- c R" @1. 以决策变量的编码作为运算对象。 " E3 L' g3 v0 H4 V & @. X% J4 I; h; A7 @. x, k2 ^: a' H3 l% S& n
传统的优化算法往往直接利用决策变量的实际值本身来进行优化计算,但遗传算法是使用决策变量的某种形式的编码作为运算对象。这种对决策变量的编码处理方式,使得我们在优化计算中可借鉴生物学中染色体和基因等概念,可以模仿自然界中生物的遗传和进化激励,也可以很方便地应用遗传操作算子。 " b R+ B$ {! t' a K& I* u+ h+ a+ A1 e# G
4 C- V: J6 i5 ^* Y7 [
2. 直接以适应度作为搜索信息。 + l9 d8 E3 }+ n& I1 M5 N, m. B: x. b& c) _
7 T7 g( m- g9 m! W2 W0 H$ a
传统的优化算法不仅需要利用目标函数值,而且搜索过程往往受目标函数的连续性约束,有可能还需要满足“目标函数的导数必须存在”的要求以确定搜索方向。 . d d. c3 h# ^9 x& A1 t" F7 L6 [% k0 x9 [
' a! n+ I7 T% U0 Z: z# d" a, A
遗传算法仅使用由目标函数值变换来的适应度函数值就可确定进一步的搜索范围,无需目标函数的导数值等其他辅助信息。直接利用目标函数值或个体适应度值也可以将搜索范围集中到适应度较高部分的搜索空间中,从而提高搜索效率。+ m5 U) Q4 G4 t+ Y4 Q
7 A6 z. D' g( g; @0 X! m
" {+ c0 c- ^( x* U
3. 使用多个点的搜索信息,具有隐含并行性。 8 g* ?( i b; `) u# Q$ J! ^/ [4 h( D( h$ L, A9 ~# q
" }' M& y% Y- Z' q8 ]. x8 G 传统的优化算法往往是从解空间的一个初始点开始最优解的迭代搜索过程。单个点所提供的搜索信息不多,所以搜索效率不高,还有可能陷入局部最优解而停滞; # b" o$ g3 F3 W+ a; e9 i1 F4 Y. W, N. ^7 n+ ]
8 T! m, p# a" N3 S1 l0 I# F5 j+ z$ c 遗传算法从由很多个体组成的初始种群开始最优解的搜索过程,而不是从单个个体开始搜索。对初始群体进行的、选择、交叉、变异等运算,产生出新一代群体,其中包括了许多群体信息。这些信息可以避免搜索一些不必要的点,从而避免陷入局部最优,逐步逼近全局最优解。. _$ b' J8 h9 m$ i, X7 F
; G+ e8 W' Z1 [, ]$ v
" t3 k* E @; J9 R. X8 m& T(2)其他编码方法 3 q2 Y: h0 _% I" W; A( M6 P: G+ @( k( x0 T2 |7 i
: }2 o* w u! Q0 C# W- L, r+ k
格雷码、浮点数编码、符号编码、多参数编码等 0 a6 f) D& W M, t % p" g; \) u6 S$ d2 h' [$ f' K9 m
2.适应度函数: z8 P" s2 L+ p( n8 d- v: s+ M) `
适应度函数要有效反映每一个染色体与问题的最优解染色体之间的差距。# t$ D# O, n6 e8 W& [) e+ j' O
1 H, C, A' k& D8 w& \ C 9 @4 v4 u+ B+ _: p8 q% g& y3.选择算子 4 @4 z3 f& _ Q# v通过选择算子模拟“优胜劣汰”,适应度高的个体被遗传到下一代的概率较大,适应度低的算子被遗传到下一代的概率较小。 ; H8 E( x/ L# b4 P @+ z4 Y/ g. l4 ]! z) u$ w
& Y# C, M6 Y4 I* H$ o
常用的选择算法:轮盘赌选择法,即令表示群体的适应度函数值的总和,表示群体中第i个染色体的适应度值,则它产生后代的能力刚好为其适应度值所占的份额5 ^! g' A* R* a) k' a a) c! k' ]
* k0 u* S: w; H4 q# s3 c2 e; m# l7 s9 G; M* {7 E1 R: z
4.交叉算子- R; n& E6 u2 ]0 L& |- t7 [
交叉运算是指对两个相互配对的染色体按某种方式相互交换其部分基因,从而形成两个新的个体; + ]. o0 n/ r. V1 D" d' \4 F. d) s交叉运算是遗传算法区别于其他进化算法的重要特征,是产生新个体的主要方法。 " \) Z# J$ J: E9 h在交叉之前需要将群体中的个体进行配对,一般采取随机配对原则。. V- p$ L! N. T" `' X. \+ \, x; t
$ Z1 X* {2 S0 ?3 {- k+ L9 p
8 S+ T) t$ s! F/ Z
常用的交叉方式: N. i5 m; X# w, {$ C 1 G5 _ s# v3 H: c& x% L1 p/ N2 L0 B7 J& V8 {7 U# G9 _3 r
单点交叉 ( P- h+ \/ a b' d3 u9 X: H3 ^& Z双点交叉(多点交叉,交叉点数越多,个体的结构被破坏的可能性越大,一般不采用多点交叉的方式)- Q" Y f- X0 i4 _! B1 o
均匀交叉- N& t7 X3 ]6 V8 g+ b( o
算术交叉 - i/ |9 b$ {, k1 \( W8 Z: Z7 N5.变异算子 5 l7 }* v& ^# p: {. P& D遗传算法中的变异运算是指将个体染色体编码串中的某些基因座上的基因值用该基因座的其他等位基因来替换,从而形成一个新的个体。 # `" O( V5 W1 [5 {3 n( R 1 b9 h0 [! Q" a ' L& `$ W4 J" a6 s就遗传算法运算过程中产生新个体的能力方面来说,交叉运算是产生新个体的主要方法,它决定了遗传算法的全局搜索能力;而变异运算只是产生新个体的辅助方法,但也是必不可少的一个运算步骤,它决定了遗传算法的局部搜索能力。交叉算子与变异算子的共同配合完成了其对搜索空间的全局搜索和局部搜索,从而使遗传算法能以良好的搜索性能完成最优化问题的寻优过程。 4 r4 j' l1 G3 X3 C3 p2 l; ` e! B8 q+ e) @* R8 I$ v+ j5 B) w! T6 R a% n& k+ b
6.运行参数 8 Y) @3 g( U! {5 S. N8 L1 A8 r+ N编码长度。编码长度取决于问题解的精度,精度越高,编码越长; 8 x' q) O0 k9 V. P种群规模。规模小,收敛快但降低了种群的多样性,;' M# y3 C( C& d% m- m+ x
交叉概率。较大的交叉概率容易破坏种群中已形成的优良结构,使搜索具有太大随机性;较小的交叉概率发现新个体的速度太慢,一般取值为$ A) c9 [5 m5 q* S7 X1 V- I' t
变异概率。变异概率太小,则变异操作产生新个体的能力和抑制早熟现象的能力会较差;变异概率过高随机性过大,一般建议取值范围为0.005~0.01 ) U3 O0 C" b) F3 `终止进化代数。算法运行结束的条件之一,一般取100~1000 7 r# M3 r3 T3 F3 S四、遗传算法的基本原理 ' Z5 g6 A6 h" L: A0 d4.1 模式定理$ \; Y" d1 i" U, B2 |* K4 M9 O- `
定义1:模式H是由{0,1,*}中的元素组成的一个编码串,其中“*”表示通配符,既能被当作0,也能被当作1。e.g. H=10**1 # ?' p$ ]! z4 j * W c# l/ O2 T7 H( I) T9 X) \/ q2 q8 g. ?/ h+ u4 r; @+ x
定义2:模式的阶,是指模式中所含有0,1的数量,记作O(H) e.g. O(11*00**)=45 {: }9 n# U3 R
3 d6 {$ |7 ^8 N0 E! R4 R4 r# u& f
( R* {0 v1 K; J9 b6 j! c5 @定义3:模式的矩,即模式的长度,是指模式中从左到右第一个非*位和最后一个非*位之间的距离,记作 6 C# Z1 p }( e 0 L0 P- Z/ G; S+ l 8 _) F1 M- I4 Y3 ]. |4 {( D7 o e.g. ) h6 M: ]# @6 V6 `2 \' z5 D$ H0 c
9 Z; M6 w* }" q7 W; J& V% {# h8 j. J- o& p$ M
定义4:模式的适应度值,是群体中所包含的全部个体的适应度值的平均值。 * D4 m% r2 E. U8 |9 E$ h# h' j7 I5 [( X o2 _3 X
( w2 b, B; |+ t: Y: N
定义5:在选择、交叉、变异遗传算子的作用下,低阶、长度短、超过群体平均适应值的模式的生存数量,将随迭代次数以指数规律增长。 3 P T1 |9 v% x) Q) X0 J) M* M/ j6 x+ U" g6 M
2 i$ |8 Z; x- F, q1 [模式定理不仅说明基因块的样本呈指数增长,也说明用遗传算法寻求最优样本的可能性,但它并未指出遗传算法一定能够寻求到最优解,积木块假设说明了遗传算法的寻找最优解的能力。 2 K" @" p' o; B# c" J+ h! ?: }/ \& B) u j. V" Y. d) m+ P
* O4 F6 i$ i) G, n6 P. d4.2 积木块假设 ! r0 a& `4 p) l% n* Q4 C具有低阶、定义长度短,且适应度值高于群体平均适应度值的模式称为基因块或积木块。/ H8 R4 z5 s4 H( y8 M, p' P ~, Y
4 `5 ^# N5 X- D( Z7 ]7 _/ E2 D% |7 L% F( m
积木块假设:个体的基因块通过选择、交叉、变异等遗传算子的作用,能够相互拼接在一起,形成适应度更高的个体编码串。. d' S M/ b% W: s* l* c
1 Z; a1 e4 q E( w0 v5 p+ b, A8 \: Y& \3 B- A2 p$ U, m
积木块假设说明了用遗传算法求解各类问题的基本思想,即通过积木块直接相互拼接在一起能够产生更好的解。1 }6 y4 W4 \: _! L/ H
6 |' F. E* i H1 T6 U) u8 ~
# a. @5 b k! u6 j" j/ l9 X/ f
五、遗传算法编程实例(MATLAB)3 u; ?2 C8 y; ~& J% z: Y, Q
https://github.com/strawberry-magic-pocket/Genetic-Algorithm.git 0 l, g6 ?& b# B———————————————— 7 g& I2 v2 E. ?1 Y( b8 [; A1 D$ B版权声明:本文为CSDN博主「草莓酱土司」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。 4 b y K! D; i- [/ g原文链接:https://blog.csdn.net/qq_34554039/article/details/90521834 & s$ U# s/ Z2 @% ]1 ^: V1 q1 _2 d& ]7 l* N' \6 ~$ u$ ~
8 ?7 n! R% t# o