GA.
有时优化的目标是找到函数的全局最小或最大值 - 在搜索空间中的任何其他点处的函数值更小或更大的点。然而,优化算法有时返回局部最小值 - 函数值小于附近点的点,但可能大于搜索空间中的遥控点。遗传算法有时可以通过正确的设置克服这种不足。
例如,考虑以下功能。
绘制函数。
t = -10:.1:103;为了II = 1:长度(t)y(ii)=两个_min(t(ii));结尾情节(t,y)
该函数有两个当地最小值,一个在 ,其中函数值为-1,另一个 ,功能值是 。由于后一个值较小,全局最小值发生在 。
GA.
使用默认参数代码两个_min.
帮手功能是此示例的结尾。跑GA.
默认参数最小化两个_min.
功能。使用gaplot1drange.
帮助函数(包括在此示例的结尾)绘制的范围GA.
每次迭代的人口。
RNG.默认重复性的%选项= Optimoptions('ga'那'plotfcn',@ gaplot1drange);[x,fval] = ga(@ two_min,1,[],[],[],[],[],[],[],选项)
优化终止:FITHS值的平均变化小于选项。功能化。
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。
此代码创建两个_min.
帮手功能。
功能y =两个_min(x)如果x <= 100 y = -exp( - (x / 100)^ 2);别的y = -1p(-1)+(x-100)*(x-102);结尾结尾
此代码创建gaplot1drange.
帮手功能。
功能状态= Gaplot1drange(选项,状态,标志)%gaplot1drange绘制人口的平均值和范围。%状态= gaplot1drange(选项,状态,标志)绘制均值和范围%(最低和最低)的个人(仅限1-D)。%% 例子:%创建使用gaplot1drange的选项%作为绘图功能%选项= Optimoptions('Ga','plotfcn',@ gaplot1drange);%Copyright 2012-2014 Mathworks,Inc。如果Isinf(options.maxgenerations)||尺寸(state.pulation,2)> 1标题('剧情不可用'那'interp'那'没有任何');返回;结尾一代= state.generation;得分=国家.Population;Smean =平均值(得分);y = smean;l = smean - min(得分);u = max(得分) - smean;转变旗帜案件'在里面'套装(GCA,'xlim',[1,options.maxgenerations + 1]);plotrange = errorbar(生成,y,l,u);设置(plotrange,'标签'那'gaplot1drange');标题('人口范围,意思是'那'interp'那'没有任何')Xlabel('一代'那'interp'那'没有任何')案件'iter'plotrange = findobj(get(gca,'孩子们'),'标签'那'gaplot1drange');newx = [get(plotrange,'xdata') 一代];纽约= [get(plotrange,'ydata')y];newl = [get(plotrange,'ldata')l];纽杜= [get(plotrange,'udata')u];设置(plotrange,'xdata',newx,'ydata',纽约,'ldata',newl,'udata',纽杜);结尾结尾