|
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
a5 P- R' d8 W# s' C, V4 a5 p. z
5 n! v* ~9 S! M' Q$ fMATLAB 是美国MathWorks公司出品的商业数学软件,用于算法开发、数据可视化、数据分析以及数值计算的高级技术计算语言和交互式环境,主要包括MATLAB和Simulink两大部分。MATLAB软件是一个功能很强大的工具,其中可以使用GA工具箱进行遗传算法的数据优化,下面给出具体的操作简单的实例。* Z# \ g u$ q7 L( O: k+ U- ~& u [
, `: t* Z, M! O. o
①利用GUI打开并使用MATLAB遗传算法工具箱。8 [' `) [- ?" c' y1 X' n
打开MATLAB选择应用程序,点击Optimization。; X9 a* r8 b# ^/ J; c
5 q: P% I ?0 ?9 L( O
1 m# Q/ Z5 Y* i3 X* T- z, M: u' D I
打开后显示优化界面第一个solver选择ga
; G7 c% l) N- I2 M7 m {3 n$ V+ P0 [/ b: y& m4 r& r) |
# t1 ^& c) ^, B
! m" }! T e M6 {, X; ~函数(注意是单目标只能有一个函数输出值)的MATLAB代码填入Fitness Funtion,输入变量值为2,其它设置options可以使用自定义,也可以使用默认,这里我的种群设置为200。设置完后点击start2 q$ N# j$ A0 l5 W2 h/ X3 D
8 F! G( z8 V; g5 [3 @
3 a$ n$ \8 k4 ?; y; S4 T, Y
- D1 e* L' w$ e! P' q7 d1 D我优化的函数代码:- y. T$ X' E% m6 A8 {, E
( A5 K1 e4 F' G
- function f=GA_demo(x)
- f1=4*x(1).^3+4*x(1)*x(2)+2*x(2).^2-42*x(1)-14;
- f2=4*x(2).^3+4*x(1)*x(2)+2*x(1).^2-26*x(1)-22;
- f=f1.^2+f2.^2;3 ~- k0 ]7 Y6 ~& D5 }+ N7 o
$ z2 N5 p1 \4 f7 J4 z% o2 K% C. x7 z! T
+ {* z$ ^5 s9 U' A常用的options
* k! s2 {% y2 m选项 功能 值
A$ q, y2 Q; Z1 w1 M0 JCrossoveRFraction 交叉的概率 0-1的小数
9 I+ n# {. P' }6 U* nEliteCount 用于精英原则,
- k0 |* S( x O" d2 h' L3 ?每次遗传中一定会活下来的个体的个数 正整数0 B3 N. O- N* ?4 Q
FitnessLimit 适应度的范围 标量/ {-Inf}
$ A3 i# F- y# C9 q; I/ i6 sGenerations 迭代遗传的次数 正整数
1 l Z+ p$ X; yInitialPopulation 初始种群 可以用上一次遗传生成的种群
! g: P& S; G( d* {+ }+ i作为下一次GA的初始种群
+ | K6 C- S4 p9 T' b {- l+ g, a+ S% N/ w! M
当然MATLAB官方说这个优化工具箱将在未来的版本中去除,请留意。7 S+ ?+ I- N$ d! n2 @' H6 f
& q3 M5 j. @: t3 q) [! i
E, Q' H: x! r8 _7 r# t# `
; Z& ?, B6 F+ V& U# h+ K②利用命令运行GA工具箱
- [; Y+ ~9 w4 a种群大小2007 `' m+ @ y0 @0 u N9 Y, k! F
精英解的数量20! ~* ]) R' ^6 F: C' x
交叉率0.75
/ V1 W# o5 W0 r9 u( I0 d6 \迭代次数1000
+ v1 h5 ` h4 N: A停止代数(stall generations)与适应度函数值偏差(function tolerance)。若在Stallgenerations设定的代数内,适应度函数值的加权平均变化值小于function tolerance,算法停止
) C! ~! p$ p M8 K) s- V; G, k0 @2 D! ^( M
优化的函数是上面GUI中给出的函数
+ I0 j0 L6 m# J5 Q9 J4 C
/ D# z% S# J; g R- clear
- clc
- fitnessfcn = @GA_demo;
- % 适应度函数句柄
- nvars = 2;% 个体的变量数目
- options = gaoptimset('PopulationSize',200,'EliteCount',20,'CrossoverFraction',0.75,'Generations',1000,'StallGenLimit',500,'TolFun',1e-100,'PlotFcns',{@gaplotbestf,@gaplotbestindiv}); %参数设置
- [x_best,fval] =ga(fitnessfcn,nvars,[],[],[],[],[],[],[],options); % 调用ga函数, B9 p8 @& a# N# R& i% P
4 ] p- i0 j' F
& Y+ A# C. f* u" ^运行时的结果:' h/ R$ x& ]! x& u9 W( I
+ y0 z& n2 q |5 ]* g8 Q0 [
+ P' ]( E/ [, C( O
( I* q s9 `1 S* U$ G+ P) f _' o# S
|
|