|
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
9 r+ Q/ s: D% E+ T, M
' G7 {/ `0 p+ k6 xMATLAB 是美国MathWorks公司出品的商业数学软件,用于算法开发、数据可视化、数据分析以及数值计算的高级技术计算语言和交互式环境,主要包括MATLAB和Simulink两大部分。MATLAB软件是一个功能很强大的工具,其中可以使用GA工具箱进行遗传算法的数据优化,下面给出具体的操作简单的实例。
$ Z6 y1 Z/ r: X8 _
, v; | Q: j/ E" Y. { w①利用GUI打开并使用MATLAB遗传算法工具箱。+ L. E q" }9 `% \& ^' _! F
打开MATLAB选择应用程序,点击Optimization。
0 `/ h8 O( m; p( D$ `; {% W( q
/ ~+ r- p' v0 ~+ g
1 V# D: R$ G+ J1 g. A
! G9 `* Y4 E8 @1 K# A
打开后显示优化界面第一个solver选择ga0 j* n& k5 b$ W! l: F: G2 h
R) u c* H+ K% _ x
3 k/ O% C% J8 i: _ h" J+ y! Z
5 h* h# _2 A( j7 ~0 w3 k5 V函数(注意是单目标只能有一个函数输出值)的MATLAB代码填入Fitness Funtion,输入变量值为2,其它设置options可以使用自定义,也可以使用默认,这里我的种群设置为200。设置完后点击start7 [, C2 L5 R0 S
% ^& L" ] ~5 N) y7 ]! N. [% o7 M! x
$ O% Q! l) Y4 N/ V7 n% _
+ K/ f7 N3 V4 n我优化的函数代码:
4 N9 }" L9 F' \/ F
4 T4 G) R; W4 |' 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;
1 O6 F Z! ~3 i5 Q! |: Q9 Z+ a' P
+ v+ d" v k3 L M' J: \6 s# p. {7 P: R
常用的options
, v) ] m' S3 P8 N! J" ]选项 功能 值
( x& C. |) ~5 hCrossoveRFraction 交叉的概率 0-1的小数5 @6 y$ D0 G, ]6 }9 y5 q
EliteCount 用于精英原则,- r% o/ J1 X9 Z1 r
每次遗传中一定会活下来的个体的个数 正整数
; b6 Z5 x9 I' U; q* sFitnessLimit 适应度的范围 标量/ {-Inf}
. j8 b. R! A+ F% d& CGenerations 迭代遗传的次数 正整数# \; g' c6 b( c$ d8 N
InitialPopulation 初始种群 可以用上一次遗传生成的种群
% C f6 R3 Q: K/ _1 |作为下一次GA的初始种群
8 \+ P; l0 ]+ M( i u) G) ]% D3 {) H5 k, W
当然MATLAB官方说这个优化工具箱将在未来的版本中去除,请留意。
: i3 Q) O) q# D* I5 Q. q! t( a0 J# N: {- C0 A1 i- @& \
1 T0 O% Y I, @+ M* K
; q9 l8 V; @- S3 B9 \/ x
②利用命令运行GA工具箱 A( g q" P' h0 A5 k
种群大小200* i. ^4 T/ [' b4 C! O1 W: z
精英解的数量20; x; ]8 ~8 y) Z& {& S) E
交叉率0.75
/ _- `- j5 b& Q$ @8 P! F迭代次数10001 B+ d- _6 a5 `' R" V
停止代数(stall generations)与适应度函数值偏差(function tolerance)。若在Stallgenerations设定的代数内,适应度函数值的加权平均变化值小于function tolerance,算法停止
7 g5 A* ~3 C- u& w% U) x) N; p* B; \/ ~' O- s! {% H' K3 v2 X
优化的函数是上面GUI中给出的函数
) @0 m9 e0 d9 B, Q
7 S9 O6 c5 ~; Y9 o6 f2 ]- 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函数/ `* |1 r t7 y9 C! y" y
( U: B* x# r2 [& C+ T. [
( N% _+ F) k6 o' c W4 y
运行时的结果:
2 e2 ^5 @1 X+ q5 j: G' V9 V1 j; ^ B" ^; D+ n
7 H7 D3 V; b, ~. d3 _4 d
$ T3 } [! {; B2 o' X6 O
|
|