主要内容

人口的多样性

人口多样性的重要性

最重要的因素之一,它决定了遗传算法执行的性能多样性的人口。如果个体间的平均距离很大,多样性高;如果平均距离小,多样性较低。保持一定数量的多样性是一个试验和错误的问题。如果过高或过低的多样性,遗传算法可能不表现良好。

本节解释如何控制人口的多样性通过设置初始范围。设置的突变描述了突变的数量如何影响多样性。

这一节还解释了如何设置人口规模

设置初始范围

默认情况下,遗传算法创建一个随机的初始种群使用创建函数。您可以指定范围的向量的初始种群InitialPopulationRange选择。

注意:最初的范围限制的范围的点在初始人口通过指定的上下界限。的后代可以包含分条目不在于最初的范围。设置上界和下界的所有代使用乌兰巴托输入参数。

如果你知道大约解决一个问题所在,指定初始范围包含解决方案你的猜测。然而,遗传算法可以找到解决方案,即使它不在于最初的范围,如果人口有足够的多样性。

这个例子展示了最初的范围如何影响遗传算法的性能。中描述的示例使用Rastrigin的功能,最小化Rastrigin的功能。函数的最小值是0,这发生在原点。

rng (1)%的再现性有趣= @rastriginsfcn;据nvar = 2;选择= optimoptions (“遗传算法”,“PlotFcn”,{“gaplotbestf”,“gaplotdistance”},“InitialPopulationRange”[1;1.1]);[x, fval] = ga(乐趣、据nvar[]、[][],[],[],[],[],选项)
优化终止:平均不到options.FunctionTolerance健身价值的变化。

图遗传算法包含2轴对象。轴与标题最好对象1:1.99002的意思是:2.1698包含2线类型的对象。这些对象代表最好的健身,健身。坐标轴对象与标题2个人之间的平均距离包含一个类型的对象。

x =1×20.9942 - 0.9950
fval = 1.9900

上面的图,它显示在每一代最好的健身,毫无进展,降低健身价值。较低的情节展示了个人之间的平均距离在每一代,这是一个很好的衡量人口的多样性。这个设置的初始范围,有太少的多样性算法来取得进展。

下一步,试着设置InitialPopulationRange(1,100]。这次的结果是更多的变量。当前随机数设置导致一个相当典型的结果。

选项。InitialPopulationRange =(1; 100年);[x, fval] = ga(乐趣、据nvar[]、[][],[],[],[],[],选项)
优化终止:平均不到options.FunctionTolerance健身价值的变化。

图遗传算法包含2轴对象。轴与标题最好对象1:4.08885的意思是:2915.48包含2线类型的对象。这些对象代表最好的健身,健身。坐标轴对象与标题2个人之间的平均距离包含一个类型的对象。

x =1×20.9344 - -1.0792
fval = 4.0889

遗传算法取得进展,但由于个体间的平均距离是如此之大,最好的人远离最优解决方案。

现在设置InitialPopulationRange[1,2]。这个设置是适合这个问题。

选项。InitialPopulationRange = [1, 2];[x, fval] = ga(乐趣、据nvar[]、[][],[],[],[],[],选项)
优化终止:平均不到options.FunctionTolerance健身价值的变化。

图遗传算法包含2轴对象。轴与标题最好对象1:0.00111749的意思是:5.66579包含2线类型的对象。这些对象代表最好的健身,健身。坐标轴对象与标题2个人之间的平均距离包含一个类型的对象。

x =1×20.0013 - 0.0020
fval = 0.0011

通常适合多样性的原因遗传算法返回一个更好的结果比前两种情况。

自定义函数和线性约束遗传算法

这个例子显示了如何@gacreationlinearfeasible,默认创建函数线性约束问题,创建了一个人口遗传算法。人口的说法,是有偏见的躺在约束边界。示例使用一个自定义图的功能。

适应度函数

适应度函数是lincontest6,包括你的软件。这是一个二次函数的两个变量:

$ $ f (x) = \压裂{x_1 ^ 2} {2} + x_2 ^ 2 - x_1 x_2 - 2 x_1 - 6 x_2。$ $

自定义绘制函数

将下面的代码保存到一个文件在你的MATLAB®路径命名gaplotshowpopulation2

函数状态= gaplotshowpopulation2 (fcn ~、州旗)% gaplotshowpopulation2阴谋的人口和线性约束二维。% = gaplotshowpopulation2状态(选择、州旗)情节%在二维空间中。%%的例子:% = @lincontest6乐趣;%选项= gaoptimset (PlotFcn, {{@gaplotshowpopulation2、有趣}});% [x, fval exitflag] = ga(乐趣2 A、b[],[],磅,[],[],选项);%这个情节函数只在二维工作如果大小(state.Population 2) > 2返回;结束如果输入参数个数< 4 fcn = [];结束%维度绘制dimensionsToPlot = (1 - 2);开关国旗%绘制初始化情况下“init”流行= state.Population (:, dimensionsToPlot);plotHandle =情节(流行(:1),流行(:,2),‘*’);集(plotHandle,“标签”,“gaplotshowpopulation2”)标题(“人口在二维图”,的插值函数,“没有”)xlabelStr = sprintf (' % s % s ',“变量”num2str (dimensionsToPlot (1)));ylabelStr = sprintf (' % s % s ',“变量”num2str (dimensionsToPlot (2)));包含(xlabelStr的插值函数,“没有”);ylabel (ylabelStr的插值函数,“没有”);持有;%画出不平等0.5阴谋(1.5 [0],[2],“m -”。)% x1 + x2 < = 2情节(1.5 [0],[1 3.5 / 2)“m -”。);% x1 + 2 * x2 < = 2情节(1.5 [0],[3 0],“m -”。);% 2 * x1 + x2 < = 3%绘制下界情节([0 0],[0 2],“m -”。);%磅= [0 0];情节(1.5 [0],[0 0),“m -”。);%磅= [0 0];集(gca),“xlim”甘氨胆酸,[-0.7,2.2])集,“ylim”[-0.7,2.7])axx = gcf;%等高线图目标函数如果~ isempty (fcn)范围= [-0.5,2,-0.5,2];分= 100;跨度= diff(范围)/ (pts - 1);x =范围(1,1):跨度(1):范围(1、2);y =范围(2,1):跨度(2):范围(2,2);流行= 0(分*分,2);值= 0(1分);k = 1;我= 1:分j = 1: pts流行(k,:) = (x (i), y (j)];值(k) = fcn (pop (k,:));k = k + 1;结束结束值=重塑(价值观,分,分);轮廓(x, y,值);colorbar结束%显示初始种群甘氨胆酸ax =;无花果=图;copyobj (ax,无花果);colorbar%停顿了三秒查看最初的情节,然后恢复图(axx)暂停(3);情况下“通路”流行= state.Population (:, dimensionsToPlot);plotHandle = findobj (get (gca),“孩子”),“标签”,“gaplotshowpopulation2”);集(plotHandle,“Xdata”流行(:1),“Ydata”流行(:2));结束

自定义绘制函数块表示线性不等式的线条和约束的限制,情节适应度函数的等高线,人口和情节发展。这不仅情节功能预计通常的输入(选择、州旗),但适应度函数也是一个函数处理,@lincontest6在这个例子中。生成等高线,自定义绘制函数需要适应度函数。

问题的约束

包括范围和线性约束。

= (1,1,1,2,2,1];b = (2, 2, 3);磅= 0 (2,1);

选项包括情节功能

当设置选项包括情节功能遗传算法运行。

选择= optimoptions (“遗传算法”,“PlotFcns”,{{@gaplotshowpopulation2, @lincontest6}});

运行问题,观察人口

初始种群,在第一个情节,许多成员在线性约束边界。人口合理的说法。

rng默认的%的再现性[x, fval] = ga (@lincontest6 2 A、b[],[],磅,[],[],选项);
优化终止:平均不到options.FunctionTolerance健身价值的变化。

遗传算法单点收敛迅速,解决方案。

设置人口规模

人口规模人口选项决定在每一代的人口规模。增加人口规模使得遗传算法搜索更多的点,从而获得一个更好的结果。然而,人口规模越大,时间越长,遗传算法需要计算每一代。

请注意

你应该设定人口规模至少的价值数量的变量,个人在每个人口跨空间搜索。

你可以尝试不同的设置人口规模返回好结果,但是不接受高昂的时间运行。

相关的话题