遗传算法选择的影响
这个例子显示了遗传算法的一些选项的影响函数遗传算法
。通过使用您创建和更改选项optimoptions
函数。
设置的问题遗传算法
遗传算法
搜索函数的最小使用遗传算法。对于这个示例,使用遗传算法
适应度函数最小化shufcn
两个变量的实值函数。
情节shufcn
在范围内= (2 2 2;2)
通过调用plotobjective
包括当你运行这个例子。
plotobjective (@shufcn [2 2;2 2]);
使用遗传算法
解算器,提供至少两个输入参数:一个适应度函数和变量的数量问题。前两个输出参数返回遗传算法
是x
,最好的时候发现,Fval
,最好的点的函数值。第三个输出参数,exitFlag
,表明为什么遗传算法
停止了。遗传算法
也可以返回一个第四个参数,输出
,其中包含的信息解算器的性能。
FitnessFunction = @shufcn;numberOfVariables = 2;
运行遗传算法
解算器。
rng默认的%的再现性[x, Fval exitFlag、输出]= ga (FitnessFunction numberOfVariables);
优化终止:平均不到options.FunctionTolerance健身价值的变化。
流(一代又一代的数量:% d \ n ',Output.generations);
一代又一代的数量是:124
流(“功能评估的数量:% d \ n ',Output.funccount);
功能评估的数量是:5881
流(“最好的函数值发现:% g \ n ',Fval);
最好的函数值发现:-186.199
如果你运行这个例子没有rng违约
命令,您的结果可能有所不同,因为遗传算法
是一个随机算法。
遗传算法是如何运作的吗
遗传算法适用于人口使用一组操作符应用于人口。人口是一个点集在设计空间。默认随机生成初始种群。该算法计算下一代的人口使用健身个体在当前一代的。有关详细信息,请参见遗传算法是如何运作的吗。
添加可视化
解算器性能形象化当它运行时,设置一个“PlotFcn”
选择使用optimoptions
。在本例中,选择两个情节功能单元阵列。集gaplotbestf
阴谋的最好,平均评分在每一代的人口。还gaplotstopping
满意,这情节的百分比停止标准。
选择= optimoptions (@ga,“PlotFcn”,{@gaplotbestf, @gaplotstopping});
运行遗传算法
解算器,包括选择
论点。
[x, Fval exitFlag、输出]=…ga (FitnessFunction numberOfVariables,[][],[],[],[],[],[],选择);
优化终止:平均不到options.FunctionTolerance健身价值的变化。
指定人口选项
人口选项可以对解算器的性能有很大的影响。每次迭代的速度取决于人口规模:一个更大的人口会导致较慢的迭代。相反,一个更大的人口导致遗传算法
探索更彻底,所以会导致一个更好的解决方案。同样,一个更广泛的初始范围会导致更彻底的探索,但可能需要一个更大的人口研究广泛拥有相似的彻底性。
指定人口规模
遗传算法
创建一个默认的初始种群通过使用随机数生成器。默认使用的人口规模遗传算法
是50当决策变量的数量小于5,否则,200。默认大小可能不适合一些问题;例如,一个可以满足人口规模小的问题。因为当前的问题只有两个变量,指定一个人口大小为10。设置选项的值PopulationSize
在现有的选项,10选择
。
选择。PopulationSize = 10;
指定初始种群范围
默认的方法生成一个初始种群使用一个随机数发生器。问题没有整数约束,遗传算法
创建一个初始种群中所有的点在-10 - 10的范围内。例如,您可以生成一个人口规模三个默认的范围使用这个命令:
人口=(-10、-10)+ 20 *兰德(3 2);
你可以设置初始范围内通过改变InitialPopulationRange
选择。范围必须与两个矩阵的行。如果只有一列范围,也就是说,它是2×1,然后每个变量都是给定的范围的范围。例如,如果您设置范围(1;1]
,那么这两个变量的初始范围是1比1。为每个变量指定一个不同的初始范围,您必须指定范围作为一个矩阵和两行numberOfVariables
列。例如,如果您设置范围[1 0;1 2]
,那么第一个变量范围1到1,第二个变量范围0到2(每一列对应一个变量)。
修改的价值选择InitialPopulationRange
在现有的选项,选择
。
选择。InitialPopulationRange = [1 0;1 2];
运行遗传算法
解算器。
[x, Fval exitFlag,输出]= ga (FitnessFunction numberOfVariables, [], [], [],…[],[]、[][],选择);
优化终止:平均不到options.FunctionTolerance健身价值的变化。
流(一代又一代的数量:% d \ n ',Output.generations);
一代又一代的数量是:67
流(“功能评估的数量:% d \ n ',Output.funccount);
功能评估的数量是:614
流(“最好的函数值发现:% g \ n ',Fval);
最好的函数值发现:-179.987
复制的结果
默认情况下,遗传算法
从一个随机的初始种群使用MATLAB®创建随机数生成器。解算器产生下一代遗传算法
运营商也使用这些相同的随机数生成器。每次生成一个随机数,随机数发生器的状态变化。所以,即使你不改变任何选项,你可以得到不同的结果,当你再次运行解算器。
运行两次的求解程序显示这一现象。
运行遗传算法
解算器。
[x, Fval exitFlag、输出]= ga (FitnessFunction numberOfVariables);
优化终止:平均不到options.FunctionTolerance健身价值的变化。
流(“最好的函数值发现:% g \ n ',Fval);
最好的函数值发现:-186.484
运行遗传算法
一次。
[x, Fval exitFlag、输出]= ga (FitnessFunction numberOfVariables);
优化终止:平均不到options.FunctionTolerance健身价值的变化。
流(“最好的函数值发现:% g \ n ',Fval);
最好的函数值发现:-185.867
遗传算法
给出不同的结果在两个运行因为随机数发生器的状态更改从一个运行到另一个地方。
如果你想复制你的结果之前运行遗传算法
,你可以节省随机数流的状态。
状态=提高;
运行遗传算法
。
[x, Fval exitFlag、输出]= ga (FitnessFunction numberOfVariables);
优化终止:平均不到options.FunctionTolerance健身价值的变化。
流(“最好的函数值发现:% g \ n ',Fval);
最好的函数值发现:-186.467
复位并重新运行遗传算法
。之前的运行结果是相同的。
rng(状态);[x, Fval exitFlag、输出]= ga (FitnessFunction numberOfVariables);
优化终止:平均不到options.FunctionTolerance健身价值的变化。
流(“最好的函数值发现:% g \ n ',Fval);
最好的函数值发现:-186.467
如果你运行遗传算法
指定复制结果之前,你可以重置随机数发生器,只要你有输出
结构。
strm = RandStream.getGlobalStream;strm。状态= Output.rngstate.State;
重新运行遗传算法
。再一次,结果都是相同的。
[x, Fval exitFlag、输出]= ga (FitnessFunction numberOfVariables);
优化终止:平均不到options.FunctionTolerance健身价值的变化。
流(“最好的函数值发现:% g \ n ',Fval);
最好的函数值发现:-186.467
停止准则修改
遗传算法
使用四种不同的标准来确定何时停止解决者。遗传算法
停止当它达到的最大数量;默认情况下,这个号码是100倍的变量。遗传算法
还发现如果最好的健身价值不会改变一段时间以秒(拖延时间限制),或者对于一些数量的代(最大摊位代)。另一个标准是最长时间限制在几秒钟内。修改标准停下来几代人的最大数量增加到300个,最大的摊位代到100。
选择= optimoptions(选择,“MaxGenerations”,300,“MaxStallGenerations”,100);
重新运行遗传算法
解算器。
[x, Fval exitFlag,输出]= ga (FitnessFunction numberOfVariables, [], [], [],…[],[]、[][],选择);
优化终止:平均不到options.FunctionTolerance健身价值的变化。
流(一代又一代的数量:% d \ n ',Output.generations);
一代又一代的数量是:299
流(“功能评估的数量:% d \ n ',Output.funccount);
功能评估的数量是:2702
流(“最好的函数值发现:% g \ n ',Fval);
最好的函数值发现:-186.729
指定遗传算法
运营商
遗传算法
从一个随机的点集在人口和使用运营商生产下一代的人口。不同的运营商扩展,选择、交叉和变异。工具箱提供了一些函数来指定为每个操作符。指定fitscalingprop
为FitnessScalingFcn
和selectiontournament
为SelectionFcn
。
选择= optimoptions (@ga,“SelectionFcn”@selectiontournament,…“FitnessScalingFcn”,@fitscalingprop);
重新运行遗传算法
。
[x, Fval exitFlag,输出]= ga (FitnessFunction numberOfVariables, [], [], [],…[],[]、[][],选择);
优化终止:平均不到options.FunctionTolerance健身价值的变化。
流(一代又一代的数量:% d \ n ',Output.generations);
一代又一代的数量是:52
流(“功能评估的数量:% d \ n ',Output.funccount);
功能评估的数量是:2497
流(“最好的函数值发现:% g \ n ',Fval);
最好的函数值发现:-186.417
最好的函数值可以改善或恶化的基础上指定的运营商。尝试不同的运营商通常是最好的方法来确定哪些运营商最适合你的问题。