Main Content

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

搜索全局最小值

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

As an example, consider the following function.

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));结束plot(t,y)

该函数有两个当地最小值,一个在 X = 0. ,其中函数值为-1,另一个 X = 1 0. 1 ,功能值是 - 1 - 1 / E. 。Since the latter value is smaller, the global minimum occurs at X = 1 0. 1

GA.使用默认参数

代码两个_min.帮手功能是结束O.Fthis example。跑GA.with default parameters to minimize the两个_min.功能。使用gaplot1drange.帮助函数(包括在结束O.Fthis example)绘制的范围GA.每次迭代的人口。

R.ng默认%For reproducibilityO.ptions = optimoptions('Ga''plotfcn'那@gaplot1drange); [x,fval] = ga(@two_min,1,[],[],[],[],[],[],[],options)
优化终止:FITHS值的平均变化小于选项。功能化。

X=-0.。0.688
Fval = -1.0000

The genetic algorithm returns a point very close to the local minimum at X = 0. 。请注意,所有个人都在-60和60之间。人口从未探索全球最低限度附近的点 X = 1 0. 1

增加初始范围

使遗传算法的一种方法探讨更广泛的点 - 即增加群体的多样性 - 是增加初始范围。初始范围不必包括点x = 101,但必须足够大,使得算法在x = 101附近生成个体。设置initialpopulationrange.O.ption to[-10;90]and rerun the solver.

选项.InitialpopulationRange = [-10; 90];[x,fval] = ga(@ two_min,1,[],[],[],[],[],[],[],选项)
优化终止:超出了最大几代数。

x = 100.9783.
fval = -1.3674.

这一次,自定义情节显示了更广泛的个人。早期有101人附近,人口意味着开始收敛到101。

辅助功能

此代码创建两个_min.帮手功能。

Functiony = two_min(x)如果x <= 100 y = -exp( - (x / 100)^ 2);其他y = -exp(-1) + (x-100)*(x-102);结束结束

此代码创建gaplot1drange.帮手功能。

Function状态= Gaplot1drange(选项,状态,标志)%gaplot1drange绘制人口的平均值和范围。%状态= gaplot1drange(选项,状态,标志)绘制均值和范围%(最低和最低)的个人(仅限1-D)。%例子:%Create options that use gaplot1drange%作为绘图功能%O.ptions = optimoptions('ga','PlotFcn',@gaplot1drange);%Copyright 2012-2014 Mathworks,Inc。如果Isinf(options.maxgenerations)||尺寸(state.pulation,2)> 1标题('剧情不可用''interp''没有');R.E.turn;结束一代= state.generation;得分=国家.Population;Smean =平均值(得分);y = smean;l = smean  -  min(得分);u = max(得分) -  smean;switch案件'init'set(gca,'xlim',[1,options.maxgenerations + 1]);plotrange = errorbar(生成,y,l,u);设置(plotrange,'标签''gaplot1drange');title('Range of Population, Mean''interp''没有')Xlabel('代''interp''没有'案件'iter'plotrange = findobj(get(gca,“孩子”),'标签''gaplot1drange');newx = [get(plotrange,'Xdata')一代);newY = [get (plotRange,'ydata')Y]; newL = [get(plotRange,'Ldata')L]; newU = [get(plotRange,'udata')U]; set(plotRange,'Xdata',newx,'ydata',纽约,'Ldata',newl,'udata',纽杜);结束结束

Related Topics