目前,遗传算法工具箱主要有三个:
- 英国谢菲尔德大学的遗传算法工具箱
- 美国北卡罗来纳州立大学的遗传算法最优化工具箱
- MATLAB自带的遗传算法与直接搜索工具箱(GADS)
GADS介绍
本文介绍的是MATLAB自带的遗传算法与直接搜索工具箱(GADS),其可以求解无约束优化问题、线性约束优化问题、非线性约束优化问题。它拥有两种使用方式,一种为使用命令行方式,其特点是简洁;另一种为利用GUI界面,即在相应参数的位置上键入特定值或使用默认值,其特点是直观。另外,需注意GADS是对目标函数取最小值进行优化。(求解最大值只需将适应度函数乘以-1,即取相反数)
其GUI界面打开方式有两种,一种为在工具栏中选择Optimization Tool,可以在Solver下拉菜单中找到函数名为ga
的选项即为其GUI界面。另一种则需在命令窗口中输入optimtool(‘ga’)
打开GUI界面。
界面从左到右共由三部分组成:
- 问提建立与结果模块( Problem Setup and Results )
从上到下依次是:输入适应度函数句柄( Fitness function )、个体所含的变量数目( Number of variables )、约束(线性不等式约束( Linear inequalities )、线性等式约束( Linear equalities )、上下限约束( Bounds )、非线性约束函数( Nonlinear constraint function),待设置完中间板块的Options后,单击 Start按钮,遗传算法即开始运行,运行完之后的结果显示在该板块的下部。
- 遗传算法选项设置板块( Options )
-
种群( Population )
种群的类型( Population Type )默认为实数编码( Double vector )。种群大小( Population size )默认值是50,也可以根据需要自定义( Specify )。(下面各参数均可由用户自定义)
剩下为初始种群的相关设置,要以为由遗传算法通过初始种群产生函数( Creation function )随机产生,也可以由用户设定初始群( Initial population )、初始种群的适应度函数值( Initial scores )和初始种群的范围( Initial range )。
-
适应度排序( Fitness scaling )
默认使用函数等级排序( Rank )。
-
选择( Selection )
默认使用函数随机均匀( Stochastic uniform )。
-
繁殖( Reproduction )
遗传算法为了繁殖下一代,需要设置精英数目( Elite count)和交叉叉后代比例( Crossover fraction ),默认值分别为0.05*种群大小和0.8。
-
变异( Mutation)
根据所优化函数的约束的不同,变异函数是不同的。用户只需要保持默认的 constraint dependent 即可,GADS 会根据问题建立与结果板块( Problem Setup and Results )中输入的约束类型的不同选择不同的变异函数。
-
交叉( Crossover)。
同变异,用户只需要保持默认的 constraint dependent 即可。
-
迁移( Migration )
迁移是个体在子种群之间的移动,如果将种群大小设置为长度大于1的向量,则算法会创建迁移。每隔一段时间,一个亚种群中最好的个体就会取代另一个亚种群中最差的个体。您可以通过以下三个参数控制迁移的方式。方向默认为向前( Forward ),则会向最后一个子种群迁移。即第n个亚种群迁移到第(n+1)个亚种群。
-
终止条件( Stopping criteria )
终止条件有以下几个,满足其中一个条件,遗传算法即停止
① 最大进化代数( Generations )。最大进化代数即遗传算法的最大迭代次数,默认为100*变量数。
② 时间限制( Time limit )。遗传算法允许的最大运行时间,默认为无穷大。
③ 适应度函数值限制( Fitness limit )。当种群中的最优个体的适应度函数值小于或等于Fitness limit 时,算法停止。
④ 停止代数( Stall generations )。若在 Stall generations设定的代数内,算法停止。默认的设置分别为50。
⑤ 停止时间限制( Stall time limit )。若在 Stall time limit设定的时间内,种群中的最优个体没有进化,算法停止。⑥ 适应度函数值偏差( Function tolerance)。适应度函数值的加权平均变化值小于 Function tolerance,算法停止。默认的设置分别为1e-6。
-
绘图函数( Plot functions )。包括最优个体的适应度函数值( Best fitness )、最优个体( Best individual )、种群中个体间的距离( Distance )等,只要选中相应的选项, GADS就会在遗传算法的运行过程中绘制其随种群进化的变化情况。
- 快速参阅板块( Quick Reference )
该板块对问题建立与结果板块及遗传算法选项设置板块的内容做了详细的解释,相对于快速的Help,不需要时可以隐藏。
具体操作
- 使用GUI方式:
首先编写适应度函数的m文件,即所求解目标函数。
function f = GADS(x)
%适应度函数表达式
f=...
然后再输入适应度函数句柄,如:@GADS。最后填写各参数后单击Start开始运行遗传算法。
- 使用命令行方式:
fitnessfcn = @GADS; % 适应度函数句柄
nvars = 2; % 个体的变量数目
%参数设置
options = gaoptimset('PopulationSize',100,'EliteCount',10,'CrossoverFraction',0.75,'Generations',500,'StallGenLimit',500,'TolFun',1e-100,'PlotFcns',{@gaplotbestf,@gaplotbestindiv});
[x_best,fval] =ga(fitnessfcn,nvars,[],[],[],[],[],[],[],options); % 调用ga函数
上面gaoptimset
函数中各参数根据需求变换。
运行结果