|
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
' Y' \- o/ i( ^, B3 ?6 a. x/ R2 V
. p/ d0 O0 \) c
MATLAB 是美国MathWorks公司出品的商业数学软件,用于算法开发、数据可视化、数据分析以及数值计算的高级技术计算语言和交互式环境,主要包括MATLAB和Simulink两大部分。MATLAB软件是一个功能很强大的工具,其中可以使用GA工具箱进行遗传算法的数据优化,下面给出具体的操作简单的实例。
2 Z$ H; T% q0 M2 F1 a# ~# Z7 N
7 Y1 A: _( p, S: {①利用GUI打开并使用MATLAB遗传算法工具箱。
" d' `8 y. m9 W9 Q5 q打开MATLAB选择应用程序,点击Optimization。
, R) `8 M! m( y- p( E! \" I' Q4 U1 @7 S; W+ {' C
$ J9 l4 e {$ H& ?4 D, L9 ]) f9 y5 z/ X$ q6 n9 G( e; |" {
打开后显示优化界面第一个solver选择ga# E X2 F) L3 _# J a
9 z% f6 b! {$ |: j- ^. d
6 F" [$ e- C" t6 Q9 [
0 N7 v8 b! L4 E3 B! h" p) L函数(注意是单目标只能有一个函数输出值)的MATLAB代码填入Fitness Funtion,输入变量值为2,其它设置options可以使用自定义,也可以使用默认,这里我的种群设置为200。设置完后点击start8 r6 z! I, C* o( z5 D' p8 w" K8 A- {
+ f4 t5 i0 \/ E- d7 P9 x
+ |, T- N1 m0 v8 e3 S7 t& x/ ]7 f3 K; a7 C
我优化的函数代码:
& k8 s2 K' y. n( V1 @7 W+ R/ Q, u. k
- 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;
4 A1 N2 e7 ^' e) g' P( J6 ~ 3 P- ?) d7 Q" G t# c4 U% c
4 u: I# G+ w. ^
常用的options
* A, I) q: X' Y0 i7 R7 c! Y7 K9 f- v选项 功能 值
( ~, c0 m5 d6 H$ G: VCrossoveRFraction 交叉的概率 0-1的小数; k+ Y4 t; o$ T# s8 E
EliteCount 用于精英原则,
K9 y2 S# o0 X3 ~每次遗传中一定会活下来的个体的个数 正整数
$ X, M/ t3 H1 EFitnessLimit 适应度的范围 标量/ {-Inf}+ a; i! q6 H& H2 w
Generations 迭代遗传的次数 正整数
7 T" b4 j9 d7 {! t! K4 Y# TInitialPopulation 初始种群 可以用上一次遗传生成的种群5 p7 x0 X0 T/ @
作为下一次GA的初始种群
; G% F: A0 R8 D+ D( L
1 u, i L+ N9 s9 I当然MATLAB官方说这个优化工具箱将在未来的版本中去除,请留意。
( h5 F" Y2 B5 Z: d8 q( a; o U; W5 t1 {9 W
- ~* s- X) i/ @- B4 {$ i
0 v- Y( p0 d4 U( V ^) S8 s# Q②利用命令运行GA工具箱
+ Q3 Y$ E8 ^. N2 x& v3 k种群大小200
' B: z4 E3 C& o& e/ i% E精英解的数量20
; X2 {' D5 Q5 V9 s7 `7 B" X: `交叉率0.75% E3 x- S, P, i& R
迭代次数10003 ?' \0 l8 c, s
停止代数(stall generations)与适应度函数值偏差(function tolerance)。若在Stallgenerations设定的代数内,适应度函数值的加权平均变化值小于function tolerance,算法停止
0 t# W+ ^- v; a" r. T1 I& w) q) B
+ @* Q. u3 u9 v7 z优化的函数是上面GUI中给出的函数
8 f/ X/ S( w) X6 r2 y8 d/ x$ @2 u; `! l- h; b) E
- 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函数
2 J# a/ I" j( `" x
& n& e+ X, w: h" Z( _
8 r5 Z; t4 D9 b9 I运行时的结果:; O4 ]0 N2 G; v! M0 d# c, L
' l, z& r+ y" ?# f* [0 o
; }, Q% V: T# o; P8 v1 U, J1 m
. A O( h+ @3 k) F. x9 M) d C& h
|
|