遗传算法
有时,优化的目标是找到一个函数的全局最小值或最大值,即函数值在搜索空间中任何其他点上都更小或更大的点。然而,优化算法有时会返回一个局部最小值,即函数值小于附近点,但可能大于搜索空间中遥远点的值。遗传算法有时可以通过正确的设置来克服这一缺陷。
以下面的函数为例。
绘制函数。
t = -10: .1:103;为Ii = 1:length(t) y(Ii) = two_min(t(Ii));结束情节(t, y)
这个函数有两个局部极小值,一个在 ,其中函数值为-1,另一个为 ,其中函数值为 .由于后一个值较小,全局最小值出现在 .
遗传算法
使用默认参数的代码two_min
Helper函数在这个例子到此结束.运行遗传算法
使用默认参数最小化two_min
函数。使用gaplot1drange
辅助函数(包含在这个例子到此结束)来绘制遗传算法
每次迭代的种群。
rng默认的%的再现性选择= optimoptions (“遗传算法”,“PlotFcn”, @gaplot1drange);[x, fval] = ga (@two_min 1 ,[],[],[],[],[],[],[], 选项)
优化终止:适应度值的平均变化小于选项。
x = -0.0688
fval = -1.0000
遗传算法返回一个非常接近局部最小值的点 .注意所有的个体都在-60到60之间。种群从不探索全球最小值附近的点 .
一种使遗传算法探索更大范围点的方法——即增加种群的多样性——是增加初始范围。初始范围不必包括x = 101点,但必须足够大,以便算法生成x = 101附近的个体。设置InitialPopulationRange
选项(-10; 90)
然后重新运行求解器。
选项。InitialPopulationRange = (-10; 90);[x, fval] = ga (@two_min 1 ,[],[],[],[],[],[],[], 选项)
优化终止:超过了最大代数。
x = 100.9783
fval = -1.3674
这一次,自定义图显示了更广泛的个人范围。从早期开始就有个体在101附近,种群均值开始收敛到101。
此代码创建two_min
helper函数。
函数y = two_min (x)如果y = -exp(-(X /100)^2);其他的Y = -exp(-1) + (x-100)*(x-102);结束结束
此代码创建gaplot1drange
helper函数。
函数国家= gaplot1drange(选项、州旗)% gaplot1range绘制总体的平均值和范围。% STATE = gaplot1drange(OPTIONS,STATE,FLAG)绘制平均值和范围%(最高和最低)个人(仅1-D)。%%的例子:%创建使用gaplot1drange的选项%作为绘图函数% options = optimoptions('ga','PlotFcn',@gaplot1drange);版权所有2012-2014 The MathWorks, Inc.如果isinf(options.MaxGenerations) || size(state.Population,2) > 1 title(“情节不可用”,的插值函数,“没有”);返回;结束一代= state.Generation;分数= state.Population;smean =意味着(分数);Y = smean;L = smean - min(得分);U = max(score) - smean;开关国旗情况下“init”集(gca),“xlim”, 1, options.MaxGenerations + 1);plotRange = errorbar(代Y L U);集(plotRange,“标签”,“gaplot1drange”);标题(“平均人口范围”,的插值函数,“没有”)包含(“代”,的插值函数,“没有”)情况下“通路”plotRange = findobj (get (gca),“孩子”),“标签”,“gaplot1drange”);newX = [get (plotRange,“Xdata”)一代);newY = [get (plotRange,“Ydata”) Y);newL = [get (plotRange,“Ldata”) L);newU = [get (plotRange,“Udata”) U);集(plotRange,“Xdata”newX,“Ydata”newY,“Ldata”newL,“Udata”, newU);结束结束