matlab遗传算法工具箱函数及实例讲解

合集下载

使用MATLAB遗传算法工具实例(详细)

使用MATLAB遗传算法工具实例(详细)

最新发布的MATLAB Release 14已经包含了一个专门设计的遗传算法与直接搜索工具箱(Genetic Algorithm and Direct Search Toolbox,GADS)。

使用遗传算法与直接搜索工具箱,可以扩展MATLAB 及其优化工具箱在处理优化问题方面的能力,可以处理传统的优化技术难以解决的问题,包括那些难以定义或不便于数学建模的问题,可以解决目标函数较复杂的问题,比如目标函数不连续、或具有高度非线性、随机性以及目标函数没有导数的情况。

本章节首先介绍这个遗传算法与直接搜索工具箱,其余各节分别介绍该工具箱中的遗传算法工具及其使用方法。

遗传算法与直接搜索工具箱概述本节介绍MATLAB的GADS(遗传算法与直接搜索)工具箱的特点、图形用户界面及运行要求,解释如何编写待优化函数的M文件,且通过举例加以阐明。

8.1.1 工具箱的特点GADS工具箱是一系列函数的集合,它们扩展了优化工具箱和MATLAB数值计算环境的性能。

遗传算法与直接搜索工具箱包含了要使用遗传算法和直接搜索算法来求解优化问题的一些例程。

这些算法使我们能够求解那些标准优化工具箱范围之外的各种优化问题。

所有工具箱函数都是MATLAB的M文件,这些文件由实现特定优化算法的MATLAB语句所写成。

使用语句type function_name就可以看到这些函数的MATLAB代码。

我们也可以通过编写自己的M文件来实现来扩展遗传算法和直接搜索工具箱的性能,也可以将该工具箱与MATLAB的其他工具箱或Simulink结合使用,来求解优化问题。

工具箱函数可以通过图形界面或MATLAB命令行来访问,它们是用MATLAB语言编写的,对用户开放,因此可以查看算法、修改源代码或生成用户函数。

遗传算法与直接搜索工具箱可以帮助我们求解那些不易用传统方法解决的问题,譬如表查找问题等。

遗传算法与直接搜索工具箱有一个精心设计的图形用户界面,可以帮助我们直观、方便、快速地求解最优化问题。

matlab遗传算法工具箱及其应用

matlab遗传算法工具箱及其应用
21
函数 reins
InsOpt是一最多有两个参数的任选向量。 InsOpt(1)是一标量,指明用子代代替父代的选择方法。0— —均匀选择,子代代替父代使用均匀随机选择。1——基于 适应度的选择,子代代替最小适应的个体。如果省略 InsOpt(1)或为NaN,则假设InsOpt(1)=0。 InsOpt(2)是一在[0,1]间的标量,表示每个子种群中重插入 的子代个体与整个子种群中个体的比率。如果省略InsOpt(2) 或为NaN,则假设InsOpt(2)=1.0。 如果InsOpt省略或为NaN,则InsOpt为缺省值。
reins rws select sus
一致随机和基于适应度的重插入 轮盘选择 高级选择例程 随机遍历采样
19
函数 reins
功能:重插入子代到种群。 格式:① Chrom = reins(Chrom,SelCh) ② Chrom = reins(Chrom,SelCh,SUBPOP) ③ Chrom = reins(Chrom,SelCh,SUBPOP,InsOpt,ObjVCh) ④ [Chrom,ObjVCh]= reins(Chrom,SelCh,SUBPOP,InsOpt,ObjVCh,ObjVSel) 详细说明:reins完成插入子代到当前种群,用子代代替父代 并返回结果种群。子代包含在矩阵SelCh中,父代在矩阵 Chrom中,Chrom和Selch中每一行对应一个个体。
第四讲 遗传பைடு நூலகம்法工具箱及应用
1
内容提要 • 遗传算法流程回顾 • 遗传算法工具箱结构 • 遗传算法工具箱通用函数 • 遗传算法工具箱应用
2
一、遗传算法流程回顾
个体
生成初始种群 计算适应度
染色体
基因

matlab工具箱遗传算法使用方法

matlab工具箱遗传算法使用方法

简单的遗传算法可以使用Matlab自带的遗传算法工具箱,但是要从Matlab2010版本之后才会自带这个工具箱,且调用命令也有变化,分别是gatool和optimtool。

GUI界面如下图所示:1、problem setup and results设置与结果(1)Solver:求解程序,选择要用的求解程序(遗传算法,遗传算法多目标等)(2)problem:1)fitness function适应度函数,求最小,这里的使用度函数要自己编写,书写格式是“@函数名”。

2)number of variable变量数,必须是整数,即,使用这个GUI界面的适应度函数的变量必须是[1*n]的向量,而不能是[m*n]的矩阵。

3)constraints约束4)linear inequalities线性不等式,A*x<=b形式,其中A是矩阵,b是向量5)linear equalities线性等式,A*x=b形式,其中A是矩阵,b是向量6)bounds定义域,lower下限,upper上限,列向量形式,每一个位置对应一个变量7)nonlinear constraint function非线性约束,用户定义,非线性等式必须写成c=0形式,不等式必须写成c<=0形式8)integer variable indices整型变量标记约束,使用该项时Aeq和beq必须为空,所有非线性约束函数必须返回一个空值,种群类型必须是实数编码举例,若是想让第一个、第三个、第五个变量保持是整数的话,则直接在此处填写[1 3 5] 9)run solver and view results求解use random states from previous run使用前次的状态运行,完全重复前次运行的过程和结果2、population(1)population type编码类型1)double vector实数编码,采用双精度。

整数规划的种群类型必须是实数编码。

使用MATLAB遗传算法工具实例(详细)(精编文档).doc

使用MATLAB遗传算法工具实例(详细)(精编文档).doc

【最新整理,下载后即可编辑】最新发布的MATLAB 7.0 Release 14已经包含了一个专门设计的遗传算法与直接搜索工具箱(Genetic Algorithm and Direct Search Toolbox,GADS)。

使用遗传算法与直接搜索工具箱,可以扩展MATLAB及其优化工具箱在处理优化问题方面的能力,可以处理传统的优化技术难以解决的问题,包括那些难以定义或不便于数学建模的问题,可以解决目标函数较复杂的问题,比如目标函数不连续、或具有高度非线性、随机性以及目标函数没有导数的情况。

本章8.1节首先介绍这个遗传算法与直接搜索工具箱,其余各节分别介绍该工具箱中的遗传算法工具及其使用方法。

8.1 遗传算法与直接搜索工具箱概述本节介绍MATLAB的GADS(遗传算法与直接搜索)工具箱的特点、图形用户界面及运行要求,解释如何编写待优化函数的M文件,且通过举例加以阐明。

8.1.1 工具箱的特点GADS工具箱是一系列函数的集合,它们扩展了优化工具箱和MATLAB数值计算环境的性能。

遗传算法与直接搜索工具箱包含了要使用遗传算法和直接搜索算法来求解优化问题的一些例程。

这些算法使我们能够求解那些标准优化工具箱范围之外的各种优化问题。

所有工具箱函数都是MATLAB的M文件,这些文件由实现特定优化算法的MATLAB语句所写成。

使用语句type function_name就可以看到这些函数的MATLAB代码。

我们也可以通过编写自己的M文件来实现来扩展遗传算法和直接搜索工具箱的性能,也可以将该工具箱与MATLAB的其他工具箱或Simulink结合使用,来求解优化问题。

工具箱函数可以通过图形界面或MATLAB命令行来访问,它们是用MATLAB语言编写的,对用户开放,因此可以查看算法、修改源代码或生成用户函数。

遗传算法与直接搜索工具箱可以帮助我们求解那些不易用传统方法解决的问题,譬如表查找问题等。

遗传算法与直接搜索工具箱有一个精心设计的图形用户界面,可以帮助我们直观、方便、快速地求解最优化问题。

Matlab遗传算法工具箱函数及应用实例

Matlab遗传算法工具箱函数及应用实例

!"#$"%遗传算法工具箱函数及应用实例于玲!!贾春强""!#沈阳化工学院机械工程学院!辽宁沈阳!!$!%"#"&大连理工大学机械工程学院!辽宁大连!!’$"($摘要%基于!"#$"%语言的遗传算法工具箱支持二进制和浮点数编码方式!并且提供了多种选择&交叉&变异的方法’通过具体实例对!"#$"%的遗传算法工具箱的用法进行了说明介绍(关键词%)*+,*-#遗传算法#工具箱#优化中图分类号%./(0!&12文献标识码%3文章编号%!$$"4"(((""$$%)!!4$$"14$"&’()#*+(,"(-./"01$2,*(!"#$"%345++$%+/678*(9:!;<4=>’(?@*"(9A5!#67899,9:);78*<=7*,><?=<;;@=<?A68;<B*<?C<D+=+E+;9:F8;G=7*,.;78<9,9?BH68;<B*<?!!I!%"H F8=<*J"#67899,9:);78*<=7*,><?=<;;@=<?H K*,=*<L<=M;@D=+B9:.;78<9,9?BH K*,=*<!!’I"(H F8=<*N 4%,#B")#C.8;O;<;+=73,?9@=+8G.99,-9P-*D;Q9<)*+,*-DERR9@+D+8;-=<*@B*<Q:,9*+H*<Q+8;@;*@;+8;;P7;,,;<+ 9R;@*+9@D9:D;,;7+=9<H7@9DD9M;@*<Q GE+*+=9<=<+8;.99,-9PH+S9;P*GR,;D*-9E+89S+9ED;+8;.99,-9P*@;=<+@9QE7;Q =<+8=D R*R;@#C+=D+98;,R@;*Q;@D=GR@9M;+8;*-=,=+B+9*<*,BT;+8;UE;D+=9<*<Q D9,M;R@9-,;G ED=<?+8;.99,-9P# D2E F+B-,C G*+,*-J?;<;+=7*,?9@=+8GJ+99,-9PJ9R+=G=T*+=9<:遗传算法与!"#$"%语言!"#$"%是一种开放式软件!经过一定的程序可以将开发的优秀的应用程序集加入到!"#$"%工具的行列(这样!许多领域前沿的研究者和科学家都可以将自己的成果集成到!"#$"%之中!被全人类继承和利用(因此!!"#$"%中含有诸多的面向不同应用领域的工具箱!例如%信号处理工具箱&图像处理工具箱&通信工具箱&系统辨识工具箱&优化工具箱&鲁棒控制工具箱&非线性控制工具箱等!而且工具箱还在不断地扩展之中(A遗传算法工具箱的函数及其功能目前!国内图书市场上有关!"#$"%方面的书籍要么侧重于!"#$"%语言编程介绍!要么侧重于各种工具箱函数的解说!而对怎样用工具箱函数来解决实际问题鲜有涉及(本文将对遗传算法工具箱函数进行说明介绍(遗传算法工具箱&’()包括了许多实用的函数!这些函数按照功能可以分为以下几类%!"#主界面函数主程序*"+,提供了遗传算法工具箱与外部的接口(它的函数格式如下%-./012345/%345/#6"708194:;*"<%4=12>!0?"$@A!0?"$(5>!>#"6#345!45#>!#06,@A!#06,(5>!>0$07#@A!>0$07#(5>!.(?06@A>!.(?06(5>!,=#@A>!,=#(5>B输出参数输入参数!"!核心函数及其它函数具体见表C(G遗传算法工具箱应用实例$%&无约束优化问题利用遗传算法计算函数’<(B;(DEF*>G1<H(BDI*74><J(B/的最大值!其中(!-F!K:选择二进制编码!种群中的个体数目为EF!二进制编. 012345 %345#6"708194求得的最优解!包括染色体和适配度最终得到的种群最优种群的搜索轨迹每一代的最好适应度和平均适应度%4=12>0?"$@A0?"$(5>>#"6#34545#>#06,@A#06,(5>>0$07#@A>0$07#(5>.(?06@A.(?06(5>,=#@A,=#(5>变量上下界矩阵!矩阵的行数确定变量个数适应度函数传递给适应度函数的参数!默认值为+ALMM,初始种群选项(一个向量+05>G$41/564%N45>/2G>5$"O,!这里05>G$41表示两代之间的差距#564%N45>取F表示二进制编码!取E表示浮点数编码#2G>5$"O控制运行中是否输出当前群体和最好结果!取F表示运行中不输出!取E表示运行中输出(默认值为+E0P Q/E/F,终止函数的名称!默认值为+R,".&01)06,R,传递给终止函数的参数!默认值为+REFFR,选择函数的名称!默认值为+R146,&04,S0$07#R,传递给选择函数的参数!默认值为+RF+FTR,交叉函数名称表!以空格分开!浮点数编码默认值为+R/"6G#UV4?06/U0=6G>#G7V4?06/>G,5$0V4?06R,!二进制编码默认值为+R>G,5$0V4?06R,传递给交叉函数的参数表!浮点数编码默认值为+RW/F#W/C#W/FR,!二进制编码默认值为+F+Q,变异函数名称表!以空格分开!浮点数编码默认值为+R%4=12"6O!=#"#G41/,=$#GA41L1G9!=#"#G41141/L1G9!=#"#G41=P1G9!=#"#G41R,!二进制编码默认值为+R%G1"6O!=#"#G41R,传递给变异函数的参数表!浮点数编码默认值为+J/F#Q/EFF/C#J/EFF/C#J/F/F,!二进制编码默认值为+F+FH,表:表A码长度为!"!交叉概率为"#$%!变异概率为"#"&"采用’()*的程序清单如下#+编写目标函数文件,-.#/!文件存放在工作目录下"0123.4,256,7!89:7;<,-.=6,7!,-.4,26>?@<6,7=A>$89:7<@BA"C642=%C@>BDC 3,6=EC @>$F 生成初始种群!大小为A"?"424.G,-<424.4:74H8I:=A"!5"?$;!J,-.K>$L 调用遗传算法函数"5@?82MG ,-?NG ,-O.P:38;<I :=5"?$;!K,-.K !5;!424.G ,-!5A8Q R?A?A;!K/:@’82*8P/K !!%!K2,P/’8,/S 8783.K !5"#"&;!5K:P4.TU,98PK;!5!;!K2,2V240W1.:.4,2K !5!?!%?X;>?$经过!%次遗传迭代!运算结果为#!<D#&%RR "=!><!E#&%%E $即当!为D#&%RR 时!"=!>取最大值!E#&%%E "遗传算法一般用来取得近似最优解!另外!遗传算法的收敛性跟其初始值有关!大家运行上面的命令所得到的结果可能跟我的结果不同或是差别很大!但多执行几次上面的命令%随机取不同的初始群体&一定可以得到近似最优解"#$%有约束优化问题考虑如下问题#/42"=!><=!A Q !>!B=!!Q A>!6#.#&A =!><!A Q !!!BA !"&!=!><!!A EQ !!!BA !"本例中存在两个不等式约束!因此我们需要把有约束问题转换成无约束问题来求解"近年来提出了多种用遗传算法满足约束的技术!工程中常用的策略是惩罚策略!通过惩罚不可行解!将约束问题转换为无约束问题"惩罚项的适值函数一般有加法和乘法两种构造方式!本例采用加法形式的适值函数!惩罚函数由两部分构成!可变乘法因子和违反约束乘法"种群中的个体数目为A""!实数编码!交叉概率为"#$%!变异概率为"#"&"遗传算法求的是函数的极大值!因此在求极小值问题时!需将极大值问题转换为极小值问题求解"采用’()*的程序清单如下#Y 编写目标函数文件04.#/!文件存放在工作目录下"0123.4,256,7!89:7;<04.=6,7!,-.4,26>?@A<6,7=A>$@!<6,7=!>$PA<"#A $P!<"#&$Z 约束条件IA<@AQ !C @!BA $I!<@A#[!\EQ @!#[!BA $Z 加惩罚项的适值40?=IA]<">^=I!]<">89:7<=@AQ !>#[!B=@!Q A>#[!$876889:7<=@AQ !>#[!B=@!Q A>#[!BPAC I ABP!CI!$89:7<Q 89:7$82M_设置参数边界!本例边界为!O "N,12M6<,286%!!A &C5Q A !A;$‘调用遗传算法函数"5@O82MG,-ONG,-O.P:38;<I:=N,12M6!KW42K>O $a 性能跟踪"-7,.=.P:38=b !A>!.P:38=b !X>!KPQ K>$T,7MO,2-7,.=.P:38=b !A>!.P:38=b !!>!KNC K>$@7:N87=K’828P:.4,2K>cOd7:N87=Ke4..2866K>$f8I82M=K 解的变化K !K 种群平均值的变化K>$经过A""次遗传迭代!运算结果为#!<O5AOA;$此时极小值89:7=!><A $I A =!><"$I !!!><"#!%!显然最优解满足约束条件"!结论遗传算法工具箱功能强大!包括了大量的算子函数!提供各种类型的选择策略!交叉’变异的方式!适用于各类不同的实际问题"由于大多数实际问题都是有约束条件的!所以!用遗传算法处理约束条件的方法仍属于难点问题!需要进一步的研究和探讨"(参考文献)(")高尚#基于$%&’%(遗传算法优化工具箱的优化计算())*微型电脑应用!+,,+!"-.-/#0+102*(+)姜阳!孔峰*基于$%&’%(遗传算法工具箱的控制系统设计仿真())*广西工学院学报!+,,"!"+.23#41-*(5)飞思科技产品研发中心*$%&’%(4*0辅助优化计算与设计($)*北京#电子工业出版社!+,,5*%编辑阳光&作者简介#于玲%A$D$Q &!女!硕士!主要从事机电液一体化的教学及科研工作"收稿日期#!""EQ "DQ "R!!!!!!!!!!初始化函数424.4:74H8,I :#/P,178..8#/2,P/’8,/S 8783.#/.,1P2S 8783.#/64/-78U,98P#/3d3743U,98P#/7428PU,98P#/7428P,PM8PU,98P#/N,12M:PdW1.:.4,2#/2,2V240W1.:.4,2#//:@’82*8P/#/,-.W:@’82*8P/#/0!N#/N!0#/变异交叉二进制格式和浮点数格式的初始化函数有序数据的初始化函数常用的轮盘赌法基于归一化的优先选择法竞争选择法二进制格式或浮点数格式的交叉函数有序数据的交叉函数!可以将演化函数组合使用浮点数格式的变异函数主程序I :#/用来判断是否满足终止条件用来计算遗传算法满足精度要求时!染色体所需要的二进制位数用来完成二进制数和浮点数之间的相互转换选择函数终止函数二进制表示函数演化函数3:73N4.6#/424.4:74H8I :#/表"。

使用MATLAB遗传算法工具实例(详细)

使用MATLAB遗传算法工具实例(详细)

最新发布的MA TLAB 7.0 Release 14 已经包含了一个专门设计的遗传算法与直接搜索工具箱(Genetic Algorithm and Direct Search Toolbox ,GADS )。

使用遗传算法与直接搜索工具箱,可以扩展MATLAB 及其优化工具箱在处理优化问题方面的能力,可以处理传统的优化技术难以解决的问题,包括那些难以定义或不便于数学建模的问题,可以解决目标函数较复杂的问题,比如目标函数不连续、或具有高度非线性、随机性以及目标函数没有导数的情况。

本章8.1 节首先介绍这个遗传算法与直接搜索工具箱,其余各节分别介绍该工具箱中的遗传算法工具及其使用方法。

8.1 遗传算法与直接搜索工具箱概述本节介绍MATLAB 的GADS (遗传算法与直接搜索)工具箱的特点、图形用户界面及运行要求,解释如何编写待优化函数的M 文件,且通过举例加以阐明。

8.1.1 工具箱的特点GADS 工具箱是一系列函数的集合,它们扩展了优化工具箱和MA TLAB 数值计算环境的性能。

遗传算法与直接搜索工具箱包含了要使用遗传算法和直接搜索算法来求解优化问题的一些例程。

这些算法使我们能够求解那些标准优化工具箱范围之外的各种优化问题。

所有工具箱函数都是MATLAB 的M 文件,这些文件由实现特定优化算法的MATLAB 语句所写成。

使用语句type function_name就可以看到这些函数的MATLAB 代码。

我们也可以通过编写自己的M 文件来实现来扩展遗传算法和直接搜索工具箱的性能,也可以将该工具箱与MATLAB 的其他工具箱或Simulink 结合使用,来求解优化问题。

工具箱函数可以通过图形界面或MA TLAB 命令行来访问,它们是用MATLAB 语言编写的,对用户开放,因此可以查看算法、修改源代码或生成用户函数。

遗传算法与直接搜索工具箱可以帮助我们求解那些不易用传统方法解决的问题,譬如表查找问题等。

使用matlab遗传算法工具实例详细

使用matlab遗传算法工具实例详细

Genetic Algorithm and Direct Search Toolbox,GADS)。

使用遗传算法与直接搜索工具箱,可以扩展MATLAB及其优化工具箱在处理优化问题方面的能力,可以处理传统的优化技术难以解决的问题,包括那些难以定义或不便于数学建模的问题,可以解决目标函数较复杂的问题,比如目标函数不连续、或具有高度非线性、随机性以及目标函数没有导数的情况。

本章节首先介绍这个遗传算法与直接搜索工具箱,其余各节分别介绍该工具箱中的遗传算法工具及其使用方法。

遗传算法与直接搜索工具箱概述本节介绍MATLAB的GADS(遗传算法与直接搜索)工具箱的特点、图形用户界面及运行要求,解释如何编写待优化函数的M文件,且通过举例加以阐明。

8.1.1 工具箱的特点GADS工具箱是一系列函数的集合,它们扩展了优化工具箱和MATLAB数值计算环境的性能。

遗传算法与直接搜索工具箱包含了要使用遗传算法和直接搜索算法来求解优化问题的一些例程。

这些算法使我们能够求解那些标准优化工具箱范围之外的各种优化问题。

所有工具箱函数都是MATLAB的M文件,这些文件由实现特定优化算法的MATLAB语句所写成。

使用语句type function_name就可以看到这些函数的MATLAB代码。

我们也可以通过编写自己的M文件来实现来扩展遗传算法和直接搜索工具箱的性能,也可以将该工具箱与MATLAB的其他工具箱或Simulink结合使用,来求解优化问题。

工具箱函数可以通过图形界面或MATLAB命令行来访问,它们是用MATLAB语言编写的,对用户开放,因此可以查看算法、修改源代码或生成用户函数。

遗传算法与直接搜索工具箱可以帮助我们求解那些不易用传统方法解决的问题,譬如表查找问题等。

遗传算法与直接搜索工具箱有一个精心设计的图形用户界面,可以帮助我们直观、方便、快速地求解最优化问题。

8.1.1.1 功能特点遗传算法与直接搜索工具箱的功能特点如下:(1)图形用户界面和命令行函数可用来快速地描述问题、设置算法选项以及监控进程。

引用 matlab遗传算法工具箱函数及实例讲解

引用 matlab遗传算法工具箱函数及实例讲解

引用 matlab遗传算法工具箱函数及实例讲解 郭玲霞 /purplelily88 2008-10-21 16:52:52引用 matlab遗传算法工具箱函数及实例讲解2008-10-20 23:04郭玲霞看文章核心函数:(1)function [pop]=initializega(num,bounds,eevalFN,eevalOps,options)--初始种群的生成函数【输出参数】pop--生成的初始种群【输入参数】num--种群中的个体数目bounds--代表变量的上下界的矩阵eevalFN--适应度函数eevalOps--传递给适应度函数的参数options--选择编码形式(浮点编码或是二进制编码)[precision F_or_B],如 precision--变量进行二进制编码时指定的精度F_or_B--为1时选择浮点编码,否则为二进制编码,由precision指定精度)(2)function [x,endPop,bPop,traceInfo] = ga(bounds,evalFN,evalOps,startPop,opts,...termFN,termOps,selectFN,selectOps,xOverFNs,xOverOps,mutFNs,mutOps)--遗传算法函数【输出参数】x--求得的最优解endPop--最终得到的种群bPop--最优种群的一个搜索轨迹【输入参数】bounds--代表变量上下界的矩阵evalFN--适应度函数evalOps--传递给适应度函数的参数startPop-初始种群opts[epsilon prob_ops display]--opts(1:2)等同于initializega的options参数,第三个参数控制是否输出,一般为0。

如[1e-6 1 0]termFN--终止函数的名称,如['maxGenTerm']termOps--传递个终止函数的参数,如[100]selectFN--选择函数的名称,如['normGeomSelect'] selectOps--传递个选择函数的参数,如[0.08]xOverFNs--交叉函数名称表,以空格分开,如['arithXover heuristicXover simpleXover']xOverOps--传递给交叉函数的参数表,如[2 0;2 3;2 0]mutFNs--变异函数表,如['boundaryMutation multiNonUnifMutation nonUnifMutation unifMutation']mutOps--传递给交叉函数的参数表,如[4 0 0;6 100 3;4 100 3;4 0 0]注意】matlab工具箱函数必须放在工作目录下【问题】求f(x)=x+10*sin(5x)+7*cos(4x)的最大值,其中0<=x<=9【分析】选择二进制编码,种群中的个体数目为10,二进制编码长度为20,交叉概率为0.95,变异概率为0.08【程序清单】%编写目标函数function[sol,eval]=fitness(sol,options)x=sol(1);eval=x+10*sin(5*x)+7*cos(4*x);%把上述函数存储为fitness.m文件并放在工作目录下initPop=initializega(10,[0 9],'fitness');%生成初始种群,大小为10[x endPop,bPop,trace]=ga([0 9],'fitness',[],initPop,[1e-6 11],'maxGenTerm',25,'normGeomSelect',...[0.08],['arithXover'],[2],'nonUnifMutation',[2 25 3]) %次遗传迭代运算借过为:x =7.8562 24.8553(当x为7.8562时,f(x)取最大值24.8553)注:遗传算法一般用来取得近似最优解,而不是最优解。

使用MATLAB遗传算法工具实例(详细)

使用MATLAB遗传算法工具实例(详细)
133
遗传算法工具函数可以通过命令行和图形用户界面来使用遗传算法。直接搜索工具函数 也可以通过命令行和图形用户界面来进行访问。图形用户界面可用来快速地定义问题、设置 算法选项、对优化问题进行详细定义。 遗传算法与直接搜索工具箱还同时提供了用于优化管理、性能监控及终止准则定义的工 具,同时还提供大量标准算法选项。 在优化运行的过程中,可以通过修改选项来细化最优解,更新性能结果。用户也可以提 供自己的算法选项来定制工具箱。 8.1.1.3 使用其他函数和求解器 遗传算法与直接搜索工具箱与 MATLAB 及优化工具箱是紧密结合在一起的。用户可以用 遗传算法或直接搜索算法来寻找最佳起始点,然后利用优化工具箱或用 MATLAB 程序来进一 步寻找最优解。通过结合不同的算法,可以充分地发挥 MATLAB 和工具箱的功能以提高求 解的质量。对于某些特定问题,使用这种方法还可以得到全局(最优)解。 8.1.1.4 显示、监控和输出结果 遗传算法与直接搜索工具箱还包括一系列绘图函数用来可视化优化结果。这些可视化功 能直观地显示了优化的过程,并且允许在执行过程中进行修改。 工具箱还包括一系列绘图函数用来可视化优化结果。这些可视化功能直观地显示了优化 的过程,并且允许在执行过程中进行修改。该工具箱还提供了一些特殊绘图函数,它们不仅 适用于遗传算法,还适用于直接搜索算法。适用于遗传算法的函数包括函数值、适应度值和 函数估计。适用于直接搜索算法的函数包括函数值、分值直方图、系谱、适应度值、网格尺 寸和函数估计。这些函数可以将多个绘图一并显示,可直观方便地选取最优曲线。另外,用 户也可以添加自己的绘图函数。 使用输出函数可以将结果写入文件,产生用户自己的终止准则,也可以写入用户自己的 图形界面来运行工具箱求解器。除此之外,还可以将问题的算法选项导出,以便日后再将它 们导入到图形界面中去。 8.1.1.5 所需的产品支持 遗传算法与直接搜索工具箱作为其他优化方法的补充,可以用来寻找最佳起始点,然后 可以再通过使用传统的优化技术来进一步寻找最优解。 工具箱需要如下产品支持:(1) MATLAB。(2) 优化工具箱。 8.1.1.6 相关产品 与遗传算法与直接搜索工具箱相关的产品有: 统计工具箱——应用统计算法和概率模式。 神经网络工具箱——设计和仿真神经网络。 模糊逻辑工具箱——设计和仿真基于模糊逻辑的系统。 金融工具箱——分析金融数据和开发金融算法。 8.1.1.7 所需的系统及平台 遗传算法和直接搜索工具箱对于对于运行环境、支持平台和系统的需求,可随时通过访 问网站 /products/gads 了解最新发布的信息。 这里介绍的 MATLAB 7.0 Release 14 所需的最低配置是:Windows 系列操作系统,Pentium III 500 CPU、64MB RAM,空闲硬盘空间 600MB 以上。

利用MATLAB实现遗传算法和MATLAB神经网络工具箱的使用

利用MATLAB实现遗传算法和MATLAB神经网络工具箱的使用

实验一利用MATLA实现遗传算法一、实验目的1、熟悉MATLA语言编程环境2、掌握MATLA语言命令3、学会利用MATLA编程实现遗传算法二、实验原理MATLA是美国Math Works公司出品的商业数学软件,用于算法开发、数据可视化、数据分析以及数值计算的高级技术计算语言和交互式环境,MATLA可以进行矩阵运算、绘制函数和数据、实现算法、创建用户界面、连接其他编程语言的程序等,主要应用于工程计算、控制设计等领域。

通过学习遗传算法原理,使用 MATLA编写程序,实现其求解策略。

三、实验内容通过MATLA编程,利用遗传算法求解:f (x) 200exp( 0.05x)sin(x), 求maxf (x),x [-2,2] .三、实验要求1 、程序设计2、调试3、实验结果4、撰写实验报告实验二MATLAB申经网络工具箱的使用一、实验目的1、掌握MATLA语言命令2、提高MATLA程序设计能力3、学会使用MATLA申经网络工具箱二、实验原理MATLA语言是Math Works公司推出的一套高性能计算机编程语言,集数学计算、图形显示、语言设计于一体,其强大的扩展功能为用户提供了广阔的应用空间。

它附带有 30多个工具箱,申经网络工具箱就是其中之一。

利用该工具箱可以方便的构建申经网络的结构模型、设计、训练等,实现申经网络算法。

三、实验内容通过MATLA编程,利用神经网络工具箱预测公路运量:公路运量主要包括公路客运量和公路货运量两个方面。

据研究,某地区的公路运量主要与该地区的人数、机动车数量和公路面积有关,上表给出了该地区20年的公路运量相关数据。

根据有关部门数据,该地区2010和2011 年的人数分别为73.39 和75.55 万人,机动车数量分别为3.9635 和4.0975 万辆,公路面积分别为0.9880和1.0268万平方千米。

请利用BP网络预测该地区2010和2011 年的公路客运量和公路货运量。

某地区20年公路运量数据三、实验要求1、程序设计2、调试3、实验结果4、撰写实验报告运用遗传算法求解函数最大值:所有的子程序为M文件%子程序:计算适应度函数,函数名称存储为fitnessfu.m function[Fitvalue,sumsump]=fitnessfun(population); global BitLengthglobal boundsbeginIfCroIfMut.mglobal boundsendpopsize=size(population,1); for i=1:popsizex=transform2to10(population(i,:));xx=boundsbegin+x*(boundsend-boundsbegin)/(power((boundsend),BitLength)-1); Fitvalue(i)=targetfun(xx); endFitvalue(i)=Fitvalue'+230; fsum=sum(Fitvalue);Pperpopulation=Fitvalue/fsum; cumsump(1)=Pperpopulation(1); for i=2:popsizecumsump(i)=cumsumo(i-1)+Pperpopulation(i); endcumsump=cumsump';%子程序:新种群交叉操作,函数名称存储为crossover.mfunction scro=crossover(population,seln,pc) BitLength=size(population,2); pcc=IfCroIfMut(pc); if pcc==1chb=round(rand*(BitLength-2))+1;scro(1,:)=[population(seln(1),1:chb),population(seln(2),chb+1:BitLength)]; scro(2,:)=[population(seln(2),1:chb),population(seln(1),chb+1:BitLength)]; else scro(1,:)=population(seln(1),:); scro(2,:)=population(seln(2),:); end% 子程序:新种群变异操作,函数名称存储为 mutation.m function snnew=mutation(snew,pmutation); BitLength=size(snew,2); snnew=snew;pmm=IfCroIfMut(pmutation); if pmm==1chb=round(rand*(BitLlength-1))+1; end%子程序:判断遗传运算是否需要进行交叉或变异,函数名称存储为 function pcc=IfCroIfMut(mutORcro); test(1:100)=0;1=round(100*mutORcro); test(1:1)=1; n=round(rand*99)+1; pcc=test(n);%子程序:新种群选择操作,函数名称存储为selection.mfunction seln=selection(population,cumsump);for i=1:2r=rand;prand=cumsump-r;j=1;whlie prand(j)<0j=j+1;end seln(i)=j; end%子程序:将二进制数转换为十进制数,函数名称存储为transform2to10.mfunction x=transform2to10(Population);BitLength=size(Population,2); x=Population(BitLength); for i=1:BitLength-1 x=x+Population(BitLength-i)*power(2,i);end%子程序:对于优化最大值或者极大值函数问题,目标函数可以作为适应度函数,%函数名称存储为targetfun.m function y=targetfun(x); y=200*exp(-0.05*x).*sin(x);涯程序:用遗传算法求解y=200*exp (-0.05*x ) .*sin (x)在[-2 2]区间上的最大值clc;clear all;close all;global BitLengthglobal boundsbeginglobal boundsendbounds=[-2 2];precision=0.0001;boundsbegin=bounds(:,1); boundsend=bounds(:,2);BitLength=cell(log2((boundsend-boundsbegin)'./precision));popsize=50;Generationnmax=12; pcrossover=0.90;pmutation=0.09; population=round(rand(popsize,BitLength));[Fitvalue,cumsump]=fitnessfun(population);cumsump Generation=1;while Generation<Generationnmax+1for j=1:2:popsize seln=selection(population,cumsump);scro=crossover(popuoation,seln,pcrossover);scnew(j,:)=scro(1,:); scnew(j+1,:)=scro(2,:);smnew(j,:)=mutation(scnew(j,:),pmutation); smnew(j+1,:)=mutation(scnew(j+1,:),pmutation); endpopulation=smnew; [Fitvalue,cumsump]=fitnessfun(population);[fmax,nmax]=max(Fitvalue); fmean=mean(Fitvalue);ymax(Generation)=fmax; ymean(Generation)=fmean;x=transform2to10(population(nmax,:));xx=boundsbegin+x*(boundsend-boundsbegin)/(power((boundsend),BitLength)-1);xmax(Generation)=xx;Generation=Generation+1;endGeneration=Generation-1;Bestpopulation=xx;Besttargetfunvalue=targetfun(xx);figure(1); hand1=plot(1:Generation,ymax);set(hand1,'linestyle','-','linewidth',1.8,'marker','*','markersize',6) hold on;hand2=polt(1:Generation,ymean);set(hand2,'color','linestyle','linewidth',1.8,'marker','h','mrkersize',6) xlabel;ylabel; xlim([1 Generationnmax]);legend;box off; hold off附件二(参考程序)利用神经网络工具箱预测公路运量:为了了解利用BP网络求解问题的过程,把问题分为六个模块处理: 1.原始数据的输入;2.数据归一化;3.网络训练;4.对原始数据进行仿真; 5.将原始数据仿真的结果与已知样本进行对比; 6. 对新数据进行仿真。

Matlab实现遗传算法的示例详解

Matlab实现遗传算法的示例详解

Matlab实现遗传算法的⽰例详解⽬录1算法讲解1.1何为遗传算法1.2遗传算法流程描述1.3关于为什么要⽤⼆进制码表⽰个体信息1.4⽬标函数值与适应值区别1.5关于如何将⼆进制码转化为变量数值1.6关于代码改进2MATLAB⾃带ga函数2.1问题描述2.2⾃带函数使⽤3⾃编遗传算法各部分代码及使⽤3.1代码使⽤3.2Genetic1--主函数3.3PI(PopulationInitialize)--产⽣初始种群3.4Fitness--计算⽬标函数值3.5FitnessF--计算适应值3.6Translate--将⼆进制码转换3.7Probability--染⾊体⼊选概率3.8Select--个体选择3.9Crossing--交叉互换3.10Mutation--基因突变3.11Elitist--最优个体记录与最劣个体淘汰3.12完整代码这篇⽂章⽤了⼤量篇幅讲解了如何从零开始⾃⼰写⼀个遗传算法函数,主要是为了应对学⽣作业等情况,或者让⼤家对遗传算法有更充分的理解,如果要⽤于学术研究,最好还是使⽤⾃带遗传算法,之后可能会推出更多⾃带遗传算法⼯具箱的使⽤。

1 算法讲解1.1 何为遗传算法遗传、突变、⾃然选择、杂交,遗传算法是⼀种借鉴了进化⽣物学各类现象的进化算法。

看到⼀个很形象的⽐喻来描述各类进化算法的区别:爬⼭算法:⼀只袋⿏朝着⽐现在⾼的地⽅跳去。

它找到了不远处的最⾼的⼭峰。

但是这座⼭不⼀定是最⾼峰。

这就是爬⼭算法,它不能保证局部最优值就是全局最优值。

模拟退⽕:袋⿏喝醉了。

它随机地跳了很长时间。

这期间,它可能⾛向⾼处,也可能踏⼊平地。

但是,它渐渐清醒了并朝最⾼峰跳去。

这就是模拟退⽕算法。

遗传算法:有很多袋⿏,它们降落到喜玛拉雅⼭脉的任意地⽅。

这些袋⿏并不知道它们的任务是寻找珠穆朗玛峰。

但每过⼏年,就在⼀些海拔⾼度较低的地⽅射杀⼀些袋⿏。

于是,不断有袋⿏死于海拔较低的地⽅,⽽越是在海拔⾼的袋⿏越是能活得更久,也越有机会⽣⼉育⼥。

matlab遗传算法实例

matlab遗传算法实例

% 下面举例说明遗传算法%% 求下列函数的最大值%% f(x)=10*sin(5x)+7*cos(4x) x∈[0,10] %% 将x 的值用一个10位的二值形式表示为二值问题,一个10位的二值数提供的分辨率是每为(10-0)/(2^10-1)≈0.01 。

%% 将变量域[0,10] 离散化为二值域[0,1023], x=0+10*b/1023, 其中b 是[0,1023] 中的一个二值数。

% 编程2.1初始化(编码)% initpop.m函数的功能是实现群体的初始化,popsize表示群体的大小,chromlength表示染色体的长度(二值数的长度),% 长度大小取决于变量的二进制编码的长度(在本例中取10位)。

%遗传算法子程序%Name: initpop.m%初始化function pop=initpop(popsize,chromlength)pop=round(rand(popsize,chromlength)); % rand随机产生每个单元为{0,1} 行数为popsize,列数为chromlength的矩阵,% round对矩阵的每个单元进行圆整。

这样产生的初始种群。

2.2 计算目标函数值% 2.2.1 将二进制数转化为十进制数(1)%遗传算法子程序%Name: decodebinary.m%产生[2^n 2^(n-1) ... 1] 的行向量,然后求和,将二进制转化为十进制function pop2=decodebinary(pop)[px,py]=size(pop); %求pop行和列数for i=1:pypop1(:,i)=2.^(py-i).*pop(:,i);endpop2=sum(pop1,2); %求pop1的每行之和1表示每列相加,2表示每行相加% 2.2.2 将二进制编码转化为十进制数(2)% decodechrom.m函数的功能是将染色体(或二进制编码)转换为十进制,参数spoint表示待解码的二进制串的起始位置% (对于多个变量而言,如有两个变量,采用20为表示,每个变量10为,则第一个变量从1开始,另一个变量从11开始。

matlab遗传算法实例

matlab遗传算法实例

matlab遗传算法实例Matlab遗传算法实例引言:遗传算法是一种模拟自然进化过程的优化算法,它通过模拟优胜劣汰、基因交叉和变异等自然选择机制,来寻找问题的最优解。

在Matlab中,我们可以利用遗传算法工具箱来快速实现遗传算法,并解决各种实际问题。

本文将介绍一个基于Matlab的遗传算法实例,以帮助读者更好地理解和应用遗传算法。

一、问题描述假设我们要在一个由0和1组成的二进制串中寻找最优解。

具体而言,我们定义了一个目标函数,目标函数的输入是一个二进制串,输出是一个实数值。

我们的目标是找到一个二进制串,使得目标函数的输出值最大化。

二、遗传算法的基本原理遗传算法是基于自然进化过程的优化算法,它的基本原理如下:1. 初始化种群:随机生成一组二进制串作为初始种群。

2. 评估适应度:根据目标函数计算每个个体的适应度值。

3. 选择操作:根据适应度值选择优秀个体作为父代,进行繁殖。

4. 交叉操作:对选出的父代个体进行基因交叉,生成新的子代个体。

5. 变异操作:对子代个体进行基因变异,引入新的基因信息。

6. 更新种群:用子代替换父代,生成新的种群。

7. 终止条件判断:判断是否满足终止条件,若满足则输出最优解,否则返回第3步。

三、Matlab代码实现以下是一个简单的Matlab代码实例,用于求解上述问题:```matlab% 目标函数定义function y = fitnessFunc(x)y = sum(x);end% 遗传算法主函数function [bestSolution, bestFitness] = geneticAlgorithm(popSize, numGen, pc, pm)% 初始化种群population = round(rand(popSize, numGen));% 迭代进化for t = 1:numGen% 评估适应度fitness = arrayfun(@fitnessFunc, population);% 选择操作[~, sortedIdx] = sort(fitness, 'descend');eliteIdx = sortedIdx(1:round(popSize/2));elite = population(eliteIdx, :);% 交叉操作crossIdx = rand(popSize, 1) < pc;crossPairs = reshape(population(crossIdx, :), [], 2);crossPoints = randi(numGen-1, size(crossPairs, 1), 1) + 1;offsprings = [elite; arrayfun(@(i) [crossPairs(i, 1:crossPoints(i)), crossPairs(i, crossPoints(i)+1:end)], 1:size(crossPairs, 1), 'UniformOutput', false)];population = vertcat(offsprings{:});% 变异操作mutateIdx = rand(popSize, numGen) < pm;population(mutateIdx) = 1 - population(mutateIdx);end% 输出结果fitness = arrayfun(@fitnessFunc, population);[bestFitness, bestIdx] = max(fitness);bestSolution = population(bestIdx, :);end% 调用遗传算法求解最优解popSize = 100; % 种群大小numGen = 100; % 进化代数pc = 0.8; % 交叉概率pm = 0.01; % 变异概率[bestSolution, bestFitness] = geneticAlgorithm(popSize, numGen, pc, pm);```四、实验结果与讨论根据上述Matlab代码实例,我们可以得到一个最优解,即一个二进制串。

遗传算法的Matlab实现讲解

遗传算法的Matlab实现讲解

Matlab编程实现GA
初始化(编码)
% initpop.m函数的功能是实现群体的初始化,popsize表示群体的大小, chromlength表示染色体的长度(二值数的长度), % 长度大小取决于变量的二进制编码的长度(在本例中取20位)。
%Name: initpop.m
function pop=initpop(popsize,chromlength) pop=round(rand(popsize,chromlength)); % rand随机产生每个单元为 {0,1} 行数为popsize,列数为chromlength的矩阵, % round对矩阵的每个单元进行取整。这样产生的初始种群。
temp1=decodechrom(pop,1,chromlength); %将pop每行转化成十进制数
x=temp1*(Xmax-Xmin)/(2^chromlength-1); %将十进制域 中的数转化为变 量域 的数 objvalue=2*x+10*sin(5*x)+7*cos(4*x); %计算目标函数值
if any(newpop(i,mpoint))==0
newpop(i,mpoint)=1; else newpop(i,mpoint)=0; end
Matlab编程实现GA
求出群体中最大的适应值及其个体
function [bestindividual, bestfit] … =best(pop, fitvalue) [px,py]=size(pop); 或 function [bestindividual, bestfit]=… best(pop, fitvalue) [bestfit,m_indx]=max(fitvalue); bestindividual=pop(m_indx,:);

(实例)matlab遗传算法工具箱函数及实例讲解

(实例)matlab遗传算法工具箱函数及实例讲解

(实例)matlab遗传算法工具箱函数及实例讲解matlab遗传算法工具箱函数及实例讲解核心函数:(1)function[pop]=initializega(num,bounds,eevalFN,eevalOps,options)--初始种群的生成函数【输出参数】pop--生成的初始种群【输入参数】num--种群中的个体数目bounds--代表变量的上下界的矩阵eevalFN--适应度函数eevalOps--传递给适应度函数的参数options--选择编码形式(浮点编码或是二进制编码)[precision F_or_B],如precision--变量进行二进制编码时指定的精度F_or_B--为1时选择浮点编码,否则为二进制编码,由precision指定精度)(2)function [x,endPop,bPop,traceInfo] =ga(bounds,evalFN,evalOps,startPop,opts,...termFN,termOps,selectFN,selectOps,xOverFNs,xOverO ps,mutFNs,mutOps)--遗传算法函数【输出参数】x--求得的最优解endPop--最终得到的种群bPop--最优种群的一个搜索轨迹【输入参数】bounds--代表变量上下界的矩阵evalFN--适应度函数evalOps--传递给适应度函数的参数startPop-初始种群opts[epsilon prob_ops display]--opts(1:2)等同于initializega 的options参数,第三个参数控制是否输出,一般为0。

如[1e-6 1 0] termFN--终止函数的名称,如['maxGenTerm']termOps--传递个终止函数的参数,如[100]selectFN--选择函数的名称,如['normGeomSelect']selectOps--传递个选择函数的参数,如[0.08]xOverFNs--交叉函数名称表,以空格分开,如['arithXover heuristicXover simpleXover']xOverOps--传递给交叉函数的参数表,如[2 0;2 3;2 0]mutFNs--变异函数表,如['boundaryMutation multiNonUnifMutation nonUnifMutation unifMutation'] mutOps--传递给交叉函数的参数表,如[4 0 0;6 100 3;4 100 3;4 0 0]matlab遗传算法工具箱附件【注意】matlab工具箱函数必须放在工作目录下【问题】求f(x)=x+10*sin(5x)+7*cos(4x)的最大值,其中0<=x<=9【分析】选择二进制编码,种群中的个体数目为10,二进制编码长度为20,交叉概率为0.95,变异概率为0.08【程序清单】%编写目标函数function[sol,eval]=fitness(sol,options)x=sol(1);eval=x+10*sin(5*x)+7*cos(4*x);%把上述函数存储为fitness.m文件并放在工作目录下initPop=initializega(10,[0 9],'fitness');%生成初始种群,大小为10[x endPop,bPop,trace]=ga([0 9],'fitness',[],initPop,[1e-6 1 1],'maxGenTerm',25,'normGeomSelect',...[0.08],['arithXover'],[2],'nonUnifMutation',[2 25 3]) %25次遗传迭代运算结果为:x =7.8562 24.8553(当x为7.8562时,f(x)取最大值24.8553)注:遗传算法一般用来取得近似最优解,而不是最优解。

matlab遗传算法工具箱函数及实例讲解

matlab遗传算法工具箱函数及实例讲解

matlab遗传算法工具箱函数及实例讲解最近研究了一下遗传算法,因为要用遗传算法来求解多元非线性模型。

还好用遗传算法的工具箱予以实现了,期间也遇到了许多问题。

首先,我们要熟悉遗传算法的基本原理与运算流程。

基本原理:遗传算法是一种典型的启发式算法,属于非数值算法范畴。

它是模拟达尔文的自然选择学说和自然界的生物进化过程的一种计算模型。

它是采用简单的编码技术来表示各种复杂的结构,并通过对一组编码表示进行简单的遗传操作和优胜劣汰的自然选择来指导学习和确定搜索的方向。

遗传算法的操作对象是一群二进制串(称为染色体、个体),即种群,每一个染色体都对应问题的一个解。

从初始种群出发,采用基于适应度函数的选择策略在当前种群中选择个体,使用杂交和变异来产生下一代种群。

如此模仿生命的进化进行不断演化,直到满足期望的终止条件。

运算流程:Step 1:对遗传算法的运行参数进行赋值。

参数包括种群规模、变量个数、交叉概率、变异概率以及遗传运算的终止进化代数。

Step 2:建立区域描述器。

根据轨道交通与常规公交运营协调模型的求解变量的约束条件,设置变量的取值范围。

Step 3:在Step 2的变量取值范围内,随机产生初始群体,代入适应度函数计算其适应度值。

Step 4:执行比例选择算子进行选择操作。

Step 5:按交叉概率对交叉算子执行交叉操作。

Step 6:按变异概率执行离散变异操作。

Step 7:计算Step 6得到局部最优解中每个个体的适应值,并执行最优个体保存策略。

Step 8:判断是否满足遗传运算的终止进化代数,不满足则返回Step 4,满足则输出运算结果。

其次,运用遗传算法工具箱。

运用基于Matlab的遗传算法工具箱非常方便,遗传算法工具箱里包括了我们需要的各种函数库。

目前,基于Matlab的遗传算法工具箱也很多,比较流行的有英国设菲尔德大学开发的遗传算法工具箱GATBX、GAOT以及Math Works公司推出的GADS。

MATLAB自带遗传算法工具箱解方程组

MATLAB自带遗传算法工具箱解方程组

GAOT遗传算法解方程组
例子:
A = [1 2 3; 4 5 6;7 8 9;10 11 12]; %自变量值矩阵
b = [3;5;7;9]; %目标值
lb = zeros(3,1); %系数矩阵大小
[x,fval,exitflag] = ga(@lincontest6,3,A,b,[],[],lb) %调用遗传算法
%x:实际上就是系数a0、a1、a2
%fval:拟合程度
%exitflag:用数字表示输出状态:
%1、一阶最优性条件满足容许范围
%2、X的变化小于容许范围
%3、目标函数的变化小于容许范围
%4、重要搜索方向小于规定的容许范围并且约束违背小于options.TolCon %5、重要方向导数小于规定的容许范围并且约束违背小于options.TolCon %0、到达最大迭代次数或到达函数评价
%-1、算法由输出函数终止
%-2、无可行点
%ga():调用遗传算法
%@lincontest6:将A、b、lb存到函数lincontest6中
%3:指3个待求系数
%A:自变量值矩阵[x1 x2 x3;…]
%b:目标值y
%[]:Aeq,线性等式约束矩阵
%[]:Beq,线性等式约束的向量
%lb: 系数矩阵大小
%完整表达式[x,fval,exitflag]= ga(fitnessfcn,nvars,A,b,Aeq,beq,LB,UB)
%也可以:
[x]= ga(@lincontest6,3,A,b,[],[],lb)。

使用MATLAB遗传算法工具实例详细

使用MATLAB遗传算法工具实例详细

使用MATLAB遗传算法工具实例详细最新发布的MATLAB Release 14已经包含了一个专门设计的遗传算法与直接搜索工具箱(Genetic Algorithm and Direct Search Toolbox,GADS)。

使用遗传算法与直接搜索工具箱,可以扩展MATLAB 及其优化工具箱在处理优化问题方面的能力,可以处理传统的优化技术难以解决的问题,包括那些难以定义或不便于数学建模的问题,可以解决目标函数较复杂的问题,比如目标函数不连续、或具有高度非线性、随机性以及目标函数没有导数的情况。

本章节首先介绍这个遗传算法与直接搜索工具箱,其余各节分别介绍该工具箱中的遗传算法工具及其使用方法。

遗传算法与直接搜索工具箱概述本节介绍MATLAB的GADS(遗传算法与直接搜索)工具箱的特点、图形用户界面及运行要求,解释如何编写待优化函数的M文件,且通过举例加以阐明。

8.1.1 工具箱的特点GADS工具箱是一系列函数的集合,它们扩展了优化工具箱和MATLAB数值计算环境的性能。

遗传算法与直接搜索工具箱包含了要使用遗传算法和直接搜索算法来求解优化问题的一些例程。

这些算法使我们能够求解那些标准优化工具箱范围之外的各种优化问题。

所有工具箱函数都是MATLAB的M文件,这些文件由实现特定优化算法的MATLAB语句所写成。

使用语句type function_name就可以看到这些函数的MATLAB代码。

我们也可以通过编写自己的M文件来实现来扩展遗传算法和直接搜索工具箱的性能,也可以将该工具箱与MATLAB的其他工具箱或Simulink结合使用,来求解优化问题。

工具箱函数可以通过图形界面或MATLAB命令行来访问,它们是用MATLAB语言编写的,对用户开放,因此可以查看算法、修改源代码或生成用户函数。

遗传算法与直接搜索工具箱可以帮助我们求解那些不易用传统方法解决的问题,譬如表查找问题等。

遗传算法与直接搜索工具箱有一个精心设计的图形用户界面,可以帮助我们直观、方便、快速地求解最优化问题。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

matlab遗传算法工具箱函数及实例讲解最近研究了一下遗传算法,因为要用遗传算法来求解多元非线性模型。

还好用遗传算法的工箱予以实现了,期间也遇到了许多问题。

借此与大家分享一下。

首先,我们要熟悉遗传算法的基本原理与运算流程。

基本原理:遗传算法是一种典型的启发式算法,属于非数值算法范畴。

它是模拟达尔文的自然选择学说和自然界的生物进化过程的一种计算模型。

它是采用简单的编码技术来表示各种复杂的结构,并通过对一组编码表示进行简单的遗传操作和优胜劣汰的自然选择来指导学习和确定搜索的方向。

遗传算法的操作对象是一群二进制串(称为染色体、个体),即种群,每一个染色体都对应问题的一个解。

从初始种群出发,采用基于适应度函数的选择策略在当前种群中选择个体,使用杂交和变异来产生下一代种群。

如此模仿生命的进化进行不断演化,直到满足期望的终止条件。

运算流程:Step 1:对遗传算法的运行参数进行赋值。

参数包括种群规模、变量个数、交叉概率、变异概率以及遗传运算的终止进化代数。

Step 2:建立区域描述器。

根据轨道交通与常规公交运营协调模型的求解变量的约束条件,设置变量的取值范围。

Step 3:在Step 2的变量取值范围内,随机产生初始群体,代入适应度函数计算其适应度值。

Step 4:执行比例选择算子进行选择操作。

Step 5:按交叉概率对交叉算子执行交叉操作。

Step 6:按变异概率执行离散变异操作。

Step 7:计算Step 6得到局部最优解中每个个体的适应值,并执行最优个体保存策略。

Step 8:判断是否满足遗传运算的终止进化代数,不满足则返回Step 4,满足则输出运算结果。

其次,运用遗传算法工具箱。

运用基于Matlab的遗传算法工具箱非常方便,遗传算法工具箱里包括了我们需要的各种函数库。

目前,基于Matlab的遗传算法工具箱也很多,比较流行的有英国设菲尔德大学开发的遗传算法工具箱GATBX、GAOT以及Math Works公司推出的GADS。

实际上,GADS 就是大家所看到的Matlab中自带的工具箱。

我在网上看到有问为什么遗传算法函数不能调用的问题,其实,主要就是因为用的工具箱不同。

因为,有些人用的是GATBX带有的函数,但MATLAB自带的遗传算法工具箱是GADS,GADS当然没有GATBX里的函数,因此运行程序时会报错,当你用MATLAB来编写遗传算法代码时,要根据你所安装的工具箱来编写代码。

以GATBX为例,运用GA TBX时,要将GATBX解压到Matlab下的toolbox文件夹里,同时,set path将GA TBX文件夹加入到路径当中。

最后,编写Matlab运行遗传算法的代码。

这块内容主要包括两方面工作:1、将模型用程序写出来(.M文件),即目标函数,若目标函数非负,即可直接将目标函数作为适应度函数。

2、设置遗传算法的运行参数。

包括:种群规模、变量个数、区域描述器、交叉概率、变异概率以及遗传运算的终止进化代数等等。

为方便大家理解,以下为例:求解模型:TC=x1+2*x2+3*x3+4*x4,-1<=x<=0根据上面的求解模型,可以写出模型的.M文件如下,即适应度函数function TC=TotalCost(x)TC=0;for i=1:4TC=TC+i*x(i);end然后,可以利用遗传算法工具箱来写出遗传算法运行的主要程序,如下:%定义遗传算法参数NIND=20; %个体数目MAXGEN=200; %最大遗传代数NV AR=4; %变量维数PRECI=20; %变量的二进制位数GGAP=0.9; %代沟trace=zeros(MAXGEN,2); %算法性能跟踪%建立区域描述器FieldD=[rep(PRECI,[1,NV AR]);rep([-1;0],[1,NV AR]);rep([1;0;1;1],[1,NV AR])];Chrom=crtbp(NIND,NV AR*PRECI); %创建初始种群gen=0; %代计数器ObjV=TotalCost(bs2rv(Chrom,FieldD)); %计算初始种群个体的目标函数值while gen<MAXGEN,FitnV=ranking(ObjV); %分配适应度值SelCh=select('sus',Chrom,FitnV,GGAP); %选择SelCh=recombin('xovsp',SelCh,0.7); %重组SelCh=mut(SelCh,0.07); %变异ObjVSel=TotalCost(bs2rv(SelCh,FieldD)); %计算子代目标函数值[Chrom ObjV]=reins(Chrom,SelCh,1,1,ObjV,ObjVSel); %重插入gen=gen+1;%输出最优解及其对应的10个变量的十进制值[Y,I]=min(ObjVSel);Y,X=bs2rv(Chrom(I,:),FieldD);trace(gen,1)=min(ObjV);trace(gen,2)=sum(ObjV)/length(ObjV);endplot(trace(:,1));hold on;plot(trace(:,2),'-.');grid;legend('种群均值的变换','最优解的变化');显然,根据模型的特征,最优解应该是-10,自变量分别取-1,-1,-1,-1。

大家可以安装GA TBX,在Matlab中建立目标函数的.M文件以及遗传算法主程序的文件来进行试验。

希望以上内容对学习和运用遗传算法的同仁有所帮助,因为本人也是初学,因此有不详之处请见谅。

////////////////////////////////////////////////////matlab遗传算法工具箱函数及实例讲解(转引)gaotv5核心函数:(1)function [pop]=initializega(num,bounds,eevalFN,eevalOps,options)--初始种群的生成函数【输出参数】pop--生成的初始种群【输入参数】num--种群中的个体数目bounds--代表变量的上下界的矩阵eevalFN--适应度函数eevalOps--传递给适应度函数的参数options--选择编码形式(浮点编码或是二进制编码)[precision F_or_B],如precision--变量进行二进制编码时指定的精度F_or_B--为1时选择浮点编码,否则为二进制编码,由precision指定精度)(2)function [x,endPop,bPop,traceInfo] = ga(bounds,evalFN,evalOps,startPop,opts,...termFN,termOps,selectFN,selectOps,xOverFNs,xOverOps,mutFNs,mutOps)—遗传算法函数【输出参数】x--求得的最优解endPop--最终得到的种群bPop--最优种群的一个搜索轨迹【输入参数】bounds--代表变量上下界的矩阵evalFN--适应度函数evalOps--传递给适应度函数的参数startPop-初始种群opts[epsilon prob_ops display]--opts(1:2)等同于initializega的options参数,第三个参数控制是否输出,一般为0。

如[1e-6 1 0]termFN--终止函数的名称,如['maxGenTerm']termOps--传递个终止函数的参数,如[100]selectFN--选择函数的名称,如['normGeomSelect']selectOps--传递个选择函数的参数,如[0.08]xOverFNs--交叉函数名称表,以空格分开,如['arithXover heuristicXoversimpleXover']xOverOps--传递给交叉函数的参数表,如[2 0;2 3;2 0]mutFNs--变异函数表,如['boundaryMutation multiNonUnifMutation nonUnifMutationunifMutation']mutOps--传递给交叉函数的参数表,如[4 0 0;6 100 3;4 100 3;4 0 0]注意】matlab工具箱函数必须放在工作目录下【问题】求f(x)=x+10*sin(5x)+7*cos(4x)的最大值,其中0<=x<=9【分析】选择二进制编码,种群中的个体数目为10,二进制编码长度为20,交叉概率为0.95,变异概率为0.08【程序清单】%编写目标函数function[sol,eval]=fitness(sol,options)x=sol(1);eval=x+10*sin(5*x)+7*cos(4*x);%把上述函数存储为fitness.m文件并放在工作目录下initPop=initializega(10,[0 9],'fitness');%生成初始种群,大小为10[x endPop,bPop,trace]=ga([0 9],'fitness',[],initPop,[1e-6 11],'maxGenTerm',25,'normGeomSelect',...[0.08],['arithXover'],[2],'nonUnifMutation',[2 25 3]) %25次遗传迭代运算借过为:x =7.8562 24.8553(当x为7.8562时,f(x)取最大值24.8553)注:遗传算法一般用来取得近似最优解,而不是最优解。

遗传算法实例2【问题】在-5<=Xi<=5,i=1,2区间内,求解f(x1,x2)=-20*exp(-0.2*sqrt(0.5*(x1.^2+x2.^2)))-exp(0.5*(cos(2*pi*x1)+cos(2*pi*x2)))+22.71282的最小值。

【分析】种群大小10,最大代数1000,变异率0.1,交叉率0.3【程序清单】%源函数的matlab代码function [eval]=f(sol)numv=size(sol,2);x=sol(1:numv);eval=-20*exp(-0.2*sqrt(sum(x.^2)/numv)))-exp(sum(cos(2*pi*x))/numv)+22.71282;%适应度函数的matlab代码function [sol,eval]=fitness(sol,options)numv=size(sol,2)-1;x=sol(1:numv);eval=f(x);eval=-eval;%遗传算法的matlab代码bounds=ones(2,1)*[-5 5];[p,endPop,bestSols,trace]=ga(bounds,'fitness')注:前两个文件存储为m文件并放在工作目录下,运行结果为p =0.0000 -0.0000 0.0055大家可以直接绘出f(x)的图形来大概看看f(x)的最值是多少,也可是使用优化函数来验证。

相关文档
最新文档