|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
, g# O6 z. [- |: [
+ q8 x# g/ b9 L+ YMATLAB 是美国MathWorks公司出品的商业数学软件,用于算法开发、数据可视化、数据分析以及数值计算的高级技术计算语言和交互式环境,主要包括MATLAB和Simulink两大部分。MATLAB软件是一个功能很强大的工具,其中可以使用GA工具箱进行遗传算法的数据优化,下面给出具体的操作简单的实例。
) X: c) m. M/ m. t4 ?9 o
# H! A. w8 F- ]. w- W①利用GUI打开并使用MATLAB遗传算法工具箱。" ?6 ]: c. {: R/ W @# [
打开MATLAB选择应用程序,点击Optimization。
" t+ y& T- z/ k5 L5 S3 ]3 J7 M9 a9 X
* f4 \3 W8 X# S+ ]$ a
9 [9 w+ g- V/ r打开后显示优化界面第一个solver选择ga/ b! V+ ~& I1 k1 q' N) D7 ^) D
- r2 r& _" J& w0 S
- c6 h4 i. E4 O! R t1 |4 B; x
- @7 @# {! i( O" ~! K3 M
函数(注意是单目标只能有一个函数输出值)的MATLAB代码填入Fitness Funtion,输入变量值为2,其它设置options可以使用自定义,也可以使用默认,这里我的种群设置为200。设置完后点击start
7 s2 o" K0 S' D* J( F( h
! M v% r1 @4 P& {9 ]
, I$ o. w% \9 R0 }3 _3 e
$ f i3 L" E; P# u我优化的函数代码:; j2 u- G* M( z9 j. M
: s0 @9 V, L) c& O! {
- 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 x7 y: m9 }! x7 V
9 \3 O# C8 ^- H% B4 R' j0 G& `8 S
& s, h9 F1 Q: Z6 x( F常用的options& y- C! d0 U: K1 w
选项 功能 值0 ~% S; K8 c; \ R' d$ I
CrossoveRFraction 交叉的概率 0-1的小数( y C) `9 z' ~* m3 _* l+ {. x
EliteCount 用于精英原则,$ q" U8 x; l3 P# W
每次遗传中一定会活下来的个体的个数 正整数
5 S9 J) h) {0 Y9 Q4 GFitnessLimit 适应度的范围 标量/ {-Inf}
3 p& X0 z+ h% `8 T$ z, G7 sGenerations 迭代遗传的次数 正整数
8 Y* h# T, t9 RInitialPopulation 初始种群 可以用上一次遗传生成的种群( s# @' R }3 w+ @: ]& z
作为下一次GA的初始种群# T$ ~; r! A; Z" ~0 ]
7 @; ? [8 D7 R$ e
当然MATLAB官方说这个优化工具箱将在未来的版本中去除,请留意。
- [( B% c2 w* j8 o5 B2 A& }( I7 m" {! l( H! ^- k% |$ n
1 ^) S- |' _' G7 O$ w) G8 \
7 u& Z: p5 \8 W②利用命令运行GA工具箱
! r/ {- k$ `9 |9 T" e种群大小200
, Q, A7 h6 w f/ }* N: o. x精英解的数量20# K- y) q% X% d0 U8 X3 s
交叉率0.751 r- p, o) s: @" T7 `
迭代次数1000
+ m* ?, A# ]3 O8 u7 G4 z9 \4 ]停止代数(stall generations)与适应度函数值偏差(function tolerance)。若在Stallgenerations设定的代数内,适应度函数值的加权平均变化值小于function tolerance,算法停止& G& h% g) L4 r+ h# m
! m3 D8 l0 r5 Y) l7 X
优化的函数是上面GUI中给出的函数( p( h }" i. D, }
% j8 }% E# f1 E8 Y1 p- 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函数
, ]' k1 }( W" s r6 i. g
; `+ d& p) D; ~5 A# A$ p3 H; e; \7 z, G- I( U
运行时的结果:
; Z+ L: o' f8 Q6 B: I, K9 c. d7 l
6 b w( C8 c! h. |9 x
. _! m% X6 n$ J2 @. q
$ N# ^1 Y( M/ L3 P: e# X! B( F
|
|