|
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
+ q4 l. \. \4 j& r
' s. ~/ H3 d& k) b! K
MATLAB 是美国MathWorks公司出品的商业数学软件,用于算法开发、数据可视化、数据分析以及数值计算的高级技术计算语言和交互式环境,主要包括MATLAB和Simulink两大部分。MATLAB软件是一个功能很强大的工具,其中可以使用GA工具箱进行遗传算法的数据优化,下面给出具体的操作简单的实例。
) j, S: w- Z# H/ N/ [5 Y. p0 w; \ }
& v" r( }/ j% j! }①利用GUI打开并使用MATLAB遗传算法工具箱。' t+ c1 F' G& z
打开MATLAB选择应用程序,点击Optimization。
# e. E& X% D+ ]9 _
. l; I5 B ]3 q
" }) |1 |1 o! c, y9 r0 w5 j% X3 f0 U1 V; F& w+ d
打开后显示优化界面第一个solver选择ga
% n) R7 m! x! }# z- x! H9 s0 H
& B' b. W4 w! C
. b3 N( W0 ?* I5 z) m L" A
# H/ v# _2 I& G3 G# @4 l6 U函数(注意是单目标只能有一个函数输出值)的MATLAB代码填入Fitness Funtion,输入变量值为2,其它设置options可以使用自定义,也可以使用默认,这里我的种群设置为200。设置完后点击start
& l% F! e! @0 ]( |0 `9 ?
7 v4 D. M. b1 t( [( o
/ H: b) b0 W/ f# ]0 h
5 {) p- Y1 l' Z2 h3 Q# ~
我优化的函数代码:: s% [ D6 T5 V1 |/ J
; e1 g! f# a7 B, j. P1 u- 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;/ b) u* X, a$ s/ }3 E) p- C
2 q4 T' Y b# E
0 f- _: D( j! [6 U2 J6 ^2 x0 `常用的options1 t% E# F$ F2 [( Y2 ]
选项 功能 值
: Q) f1 g! Z5 Y$ n. g% LCrossoveRFraction 交叉的概率 0-1的小数: ^# B9 Y( Y2 f
EliteCount 用于精英原则,
9 J/ K; i+ p0 o: G+ z3 @6 C每次遗传中一定会活下来的个体的个数 正整数9 I$ T ^( Z7 e5 w& `2 z5 Y# ~
FitnessLimit 适应度的范围 标量/ {-Inf}, p! X+ \( E6 j' J: p- [1 R
Generations 迭代遗传的次数 正整数
- w4 b5 M7 u6 W8 b8 g* F) y# PInitialPopulation 初始种群 可以用上一次遗传生成的种群
" v3 r( {' F2 h: y作为下一次GA的初始种群
- f z% N$ c& p" D: @
5 O) G; A* }/ q* C1 r+ J* q" m/ [当然MATLAB官方说这个优化工具箱将在未来的版本中去除,请留意。& v& y' _. j0 A5 q+ W2 G- p
, V- A: Q6 i; F( o' B
9 l Z# s# j# A: \ ?/ c$ P8 Z
6 S4 t a6 O& z/ \0 o0 W②利用命令运行GA工具箱- i; `: O9 T8 T7 k" u1 B7 x [, ?. ~
种群大小200& E! ], P% t/ z6 j, r
精英解的数量209 ?- ~, S1 @5 @: l0 h
交叉率0.752 u3 v; J! z" z
迭代次数1000; Z2 R0 {/ K, [' Q' s1 G7 S3 U
停止代数(stall generations)与适应度函数值偏差(function tolerance)。若在Stallgenerations设定的代数内,适应度函数值的加权平均变化值小于function tolerance,算法停止
0 N6 @+ \; q# P! s, P v* j( a! X
优化的函数是上面GUI中给出的函数$ T+ v$ J- R% q4 U% q4 R: y) i8 c( w
3 L* E. O& H. }' a, t- O- 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 g' N5 o/ C) x5 ]
. T* V& s* d# \/ W" _0 L
/ \; w/ n& C2 a( T) K# n+ s
运行时的结果:
6 W$ y. E; S" f" C8 F [! F" U ^3 Z& m
) \& K7 u% S9 {4 a: W1 _
. B0 ~, | R$ U; N* e2 {3 e
|
|