|
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
: \. e9 t# y! ]) U. R: ]# g- q3 T( ]2 m0 h. {
MATLAB 是美国MathWorks公司出品的商业数学软件,用于算法开发、数据可视化、数据分析以及数值计算的高级技术计算语言和交互式环境,主要包括MATLAB和Simulink两大部分。MATLAB软件是一个功能很强大的工具,其中可以使用GA工具箱进行遗传算法的数据优化,下面给出具体的操作简单的实例。5 X0 e Y) k* s, b4 L1 }: P
# ~& G+ H2 C7 M4 F①利用GUI打开并使用MATLAB遗传算法工具箱。* C% {7 V1 \ h F! ^- i; e
打开MATLAB选择应用程序,点击Optimization。, U! I: Z$ n) N% a" F) N' k
3 v: o4 p9 a, _! i
! C5 W5 q% I) A( Y% g
" w+ J1 d+ j* u5 Q* {4 E' T打开后显示优化界面第一个solver选择ga( L1 a0 u$ z6 g3 u7 ~9 P' s
. o( i" {5 O- t4 ^" F
9 s8 T( E- ?# O2 L( }$ b, ]# }( {8 O6 z. v& v+ ~8 k& @2 ?8 ^4 `
函数(注意是单目标只能有一个函数输出值)的MATLAB代码填入Fitness Funtion,输入变量值为2,其它设置options可以使用自定义,也可以使用默认,这里我的种群设置为200。设置完后点击start: `/ x& ^+ o- z% p+ y+ ]& ]
6 I& ^0 m) u& }# @' }
; o4 K5 q( P% t' H" _/ P/ H
1 k. D& ^8 w9 V* a9 X1 d. ]; h我优化的函数代码:
' H% f* M/ X' g% m! \( M& U( T9 r7 R& K( J/ i6 r* Z' F
- 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;
V# u0 ?- {: T M
5 y+ u0 ^) }0 s# m) c8 H1 t* C2 `% L9 q4 z: P3 ?3 _
常用的options
8 g- |7 X; }" g8 k2 L7 r) p选项 功能 值
' ^9 m. ^$ v6 k6 vCrossoveRFraction 交叉的概率 0-1的小数
$ ]' e: ^; K( t) g5 ?+ X3 |& o! r$ ZEliteCount 用于精英原则,& S) b% c$ | t7 d: F! u. s/ H7 t
每次遗传中一定会活下来的个体的个数 正整数
1 |) s: a4 }, R: X4 F/ TFitnessLimit 适应度的范围 标量/ {-Inf}. x" u; Q- T9 [; x% B3 z/ Q1 o# ]
Generations 迭代遗传的次数 正整数1 P! {8 Y4 S4 Z c5 }3 |
InitialPopulation 初始种群 可以用上一次遗传生成的种群
) x9 K8 M8 s r作为下一次GA的初始种群
% K6 p7 Q3 ^" O d$ v2 i( u# [5 u9 u- h6 M P0 d) e* \! a7 @
当然MATLAB官方说这个优化工具箱将在未来的版本中去除,请留意。8 p. c# z% @1 Z
7 p% F* V+ ~7 @+ [/ h3 K
! B, ^1 f: v& n
3 q) |" o( ?5 {6 e
②利用命令运行GA工具箱
2 V2 _1 F9 V* o, R* \8 b2 @种群大小200
4 P3 k6 R7 K5 ]' o, T, w精英解的数量207 Y6 \1 d- l. J5 g' Q
交叉率0.75" w+ |0 \3 A5 `7 @) F. c3 K: ^
迭代次数10000 }( T5 o8 Q3 J B3 j
停止代数(stall generations)与适应度函数值偏差(function tolerance)。若在Stallgenerations设定的代数内,适应度函数值的加权平均变化值小于function tolerance,算法停止( a9 o: w/ K. Q& f
2 R' v y X! ~' g
优化的函数是上面GUI中给出的函数
m9 _6 e" a2 j8 M8 c, T6 E+ i* M0 W0 b0 X0 E& q5 }& p8 \: t$ K" m
- 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函数
" `0 ^6 K/ N' b: S+ J# }! d; C# p
! |- K/ S$ F& b2 i; r* W0 r$ ^. K0 M
运行时的结果:; W' Y7 T. R3 _$ ^1 z5 U$ s! D
6 ]: l, r9 s! b0 T9 T
% U+ }2 }- q1 u* j) f
3 }2 t# u# ^2 e+ }. B3 D a# t2 B
|
|