主要内容

全球对阵本地优化使用GA.

搜索全局最小值

有时优化的目标是找到函数的全局最小或最大值 - 在搜索空间中的任何其他点处的函数值更小或更大的点。然而,优化算法有时返回局部最小值 - 函数值小于附近点的点,但可能大于搜索空间中的遥控点。遗传算法有时可以通过正确的设置克服这种不足。

例如,考虑以下功能。

F X = { - exp. - X 1 0. 0. 2 F O. R. X ≤. 1 0. 0. - exp. - 1 + X - 1 0. 0. X - 1 0. 2 F O. R. X > 1 0. 0.

绘制函数。

t = -10:.1:103;为了II = 1:长度(t)y(ii)=两个_min(t(ii));结尾情节(t,y)

图包含轴。轴包含类型线的对象。

该函数有两个当地最小值,一个在 X = 0. ,其中函数值为-1,另一个 X = 1 0. 1 ,功能值是 - 1 - 1 / E. 。由于后一个值较小,全局最小值发生在 X = 1 0. 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.

遗传算法返回一个非常接近局部最小值的点 X = 0. 。请注意,所有个人都在-60和60之间。人口从未探索全球最低限度附近的点 X = 1 0. 1

增加初始范围

使遗传算法的一种方法探讨更广泛的点 - 即增加群体的多样性 - 是增加初始范围。初始范围不必包括点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',纽杜);结尾结尾

相关话题