3 I3 J* G [" M9 R五、遗传算法编程实例(MATLAB) " }' M" v# o' x ~' c + m3 e3 ^! j4 z$ d& i( i/ H+ q! P+ Y! X6 U
一、遗传算法概述 + h2 h( G p: k0 h4 p8 y 遗传算法(Genetic Algorithm,GA)是进化计算的一部分,是模拟达尔文的遗传选择和自然淘汰的生物进化过程的计算模型,是一种通过模拟自然进化过程搜索最优解的方法。该算法简单、通用,鲁棒性强,适于并行处理。 7 x1 T* q% M6 i6 g/ O" J1 H6 \4 U/ k* R/ U# A9 l% z
3 M- _: s3 q1 K s" d. Q二、遗传算法的特点和应用' ?1 x! u) p. @- `
遗传算法是一类可用于复杂系统优化的具有鲁棒性的搜索算法,与传统的优化算法相比,具有以下特点:7 p) S) B+ f5 S( Q: \, V
, `5 T7 e4 B1 g( I6 ?
% g0 B; ` ~3 l9 g
1. 以决策变量的编码作为运算对象。; o7 T* [: A! e' V3 x7 S2 ^) d" c
3 v& e' E* x0 Z
* g9 r; _# @8 M! f. T" `* u
传统的优化算法往往直接利用决策变量的实际值本身来进行优化计算,但遗传算法是使用决策变量的某种形式的编码作为运算对象。这种对决策变量的编码处理方式,使得我们在优化计算中可借鉴生物学中染色体和基因等概念,可以模仿自然界中生物的遗传和进化激励,也可以很方便地应用遗传操作算子。 , g# f# f6 c. s; c% I6 {* ^- [" J$ r+ U+ p; X' w
4 _: @) f5 ?6 ~( ~
2. 直接以适应度作为搜索信息。5 j; ~, P+ \0 A' {4 R" S
0 E4 V: e0 D8 X2 u! i- k% E
L; h9 u; t/ F/ o' _) \2 k& R! d5 p 传统的优化算法不仅需要利用目标函数值,而且搜索过程往往受目标函数的连续性约束,有可能还需要满足“目标函数的导数必须存在”的要求以确定搜索方向。% z9 _9 _- ?" ?7 R0 u; z6 M
# r, i$ g* c$ U$ X; ^" y
- ?( S- O1 Q: |* g5 p. @/ }8 d 遗传算法仅使用由目标函数值变换来的适应度函数值就可确定进一步的搜索范围,无需目标函数的导数值等其他辅助信息。直接利用目标函数值或个体适应度值也可以将搜索范围集中到适应度较高部分的搜索空间中,从而提高搜索效率。 # k) `3 v7 |) y% I& D 5 p' {$ U |* Y9 s w" j% U, S ! f. S6 K$ X1 h: {, D3. 使用多个点的搜索信息,具有隐含并行性。 5 @- z) @& x( E$ L P0 v; s. A6 H $ X, @) Q, ]: i8 r4 V5 ^$ C 传统的优化算法往往是从解空间的一个初始点开始最优解的迭代搜索过程。单个点所提供的搜索信息不多,所以搜索效率不高,还有可能陷入局部最优解而停滞;" r+ y4 |! G. ~, Z+ r( ]
9 n0 h' g' ?: d) z' F0 r
4 Z! n& _1 a) Y! d4 s3 [9 h 遗传算法从由很多个体组成的初始种群开始最优解的搜索过程,而不是从单个个体开始搜索。对初始群体进行的、选择、交叉、变异等运算,产生出新一代群体,其中包括了许多群体信息。这些信息可以避免搜索一些不必要的点,从而避免陷入局部最优,逐步逼近全局最优解。 l6 c6 y: g9 E
* @4 V% t) F1 Q" { & A$ w9 K2 ~/ B+ H6 b h( O; r- y4. 使用概率搜索而非确定性规则。% ?; a5 h6 b; d% v- X! H& k; K
: E" l) K& X6 c1 t / i/ `7 L+ S- Q) ?+ L( @ 传统的优化算法往往使用确定性的搜索方法,一个搜索点到另一个搜索点的转移有确定的转移方向和转移关系,这种确定性可能使得搜索达不到最优店,限制了算法的应用范围。$ P# ~3 s# f$ d* r' } H* X3 v7 H
) R- A( M! k; ?% {3 [# q9 G
9 n, r" n; Y, T) n9 R- P/ E! m
遗传算法是一种自适应搜索技术,其选择、交叉、变异等运算都是以一种概率方式进行的,增加了搜索过程的灵活性,而且能以较大概率收敛于最优解,具有较好的全局优化求解能力。但,交叉概率、变异概率等参数也会影响算法的搜索结果和搜索效率,所以如何选择遗传算法的参数在其应用中是一个比较重要的问题。 ! k: b% a6 Q! W9 {5 P' t1 S4 E5 k7 O1 ?1 m8 N* t ^
2 q9 t; v" q3 e2 y3 r& W$ X* y7 ^
综上,由于遗传算法的整体搜索策略和优化搜索方式在计算时不依赖于梯度信息或其他辅助知识,只需要求解影响搜索方向的目标函数和相应的适应度函数,所以遗传算法提供了一种求解复杂系统问题的通用框架。它不依赖于问题的具体领域,对问题的种类有很强的鲁棒性,所以广泛应用于各种领域,包括: ! v/ m" w; f* ]7 ]4 q8 X7 n, v* V3 C1 _- I* ? P! a
: J( R7 r* J& X. n6 [; s函数优化/ Z* X6 o& ^% a, V7 c! C! c; p
组合优化生产调度问题 2 v. }* S/ u3 t a% }& r自动控制' s2 e/ U' A& ?
机器人学2 R' o" f. J5 a t" c
图像处理(图像恢复、图像边缘特征提取......)4 X: m3 s% a9 z4 d
人工生命* O3 i* d# n! y6 I2 Y
遗传编程, g w( U& [) w+ `% K: d$ H# v
机器学习 4 d. a% R4 h) B3 t三、遗传算法的基本流程及实现技术 3 y3 j( M# P3 [7 L. f6 L 基本遗传算法(Simple Genetic Algorithms,SGA)只使用选择算子、交叉算子和变异算子这三种遗传算子,进化过程简单,是其他遗传算法的基础。1 v Q8 ]6 i( v" R