主要内容

多目标遗传算法选项

这个例子展示了如何创建和管理多目标遗传算法功能的选项gamultiobj使用optimoptins在全局优化工具箱中。

设置一个问题gamultiobj

gamultiobj利用遗传算法求解多目标函数的局部Pareto前沿。对于本例,我们将使用gamultiobj获取MATLAB文件中描述的两个目标函数的Pareto frontkur_multiobjective.m.它是一个实值函数,由两个目标组成,每个目标由三个决策变量组成。我们还对决策变量施加约束-5 <= x(i) <= 5, i = 1,2,3。

类型kur_multiobjective.m
函数y = kur_multiobjective(x) %这个双目标问题的pareto最优集是非凸的,并且是不连通的。函数KUR_MULTIOBJECTIVE计算两个%目标,并返回大小为2 * 1的向量y。% % Reference: Kalyanmoy Deb, "Multi-Objective Optimization using % Evolutionary Algorithms", John Wiley & Sons ISBN 047187339% Copyright 2007 The MathWorks, Inc. % Initialize for two objective y = 0 (2,1);%计算第一个目标为i = 1:2 y(1) = y(1) - 10*exp(-0.2*根号(x(i)^2 + x(i+1)^2)));y(2) = y(2) + abs(x(i))^0.8 + 5*sin(x(i)^3);结束

我们需要提供一个适应度函数,变量的数量,以及问题的约束条件gamultiobj函数。请参阅帮助gamultiobj函数的语法。这里我们还想用plot函数画出每一代的帕累托前缘@gaplotpareto.我们使用optimoptions函数指定此绘图函数。

FitnessFunction = @kur_multiobjective;适应度函数的句柄numberOfVariables = 3;%决策变量个数Lb = [-5 -5 -5];%下界Ub = [5 5 5];%上界一个= [];%无线性不等式约束b = [];%无线性不等式约束Aeq = [];%没有线性等式约束说真的= [];%没有线性等式约束选择= optimoptions (@gamultiobj,“PlotFcn”, @gaplotpareto);

运行gamultiobj求解器并显示在帕累托前面找到的解的数量和代的数量。金宝搏官方网站

[x, Fval exitFlag,输出]= gamultiobj (FitnessFunction numberOfVariables,,...b, Aeq,说真的,磅,乌兰巴托,选项);
优化终止:帕累托解决方案的平均变化小于可选方案。金宝搏官方网站

图遗传算法包含一个轴对象。标题为Pareto front的axis对象包含一个类型为line的对象。

流('帕累托前面的点数是:%d\n'、大小(x, 1));
帕累托前面的点数是:18
流('代的数量是:%d\n', Output.generations);
代数:317代

帕累托图显示了两个相互竞争的目标。对于这个问题,已知帕累托前端是断开的。的解决方案gamultiobj可以捕获帕累托前端,即使它是断开的。注意,当您运行这个示例时,您的结果可能与显示的结果不同,因为gamultiobj使用随机数生成器。

精英多目标遗传算法

多目标遗传算法(gamultiobj)使用一组应用于总体的操作符对总体进行处理。总体是设计空间中的点的集合。默认情况下,初始种群是随机生成的。下一代的人口计算使用非支配秩和距离测量的个体在当前的一代。

利用相对适应度为每个个体分配一个非支配秩。如果“p”在至少一个目标上严格优于“q”,而“p”在所有目标上不低于“q”,那么个体“p”就会支配“q”(“p”的等级低于“q”)。这就相当于说‘q’被‘p’支配,或者‘p’不低于‘q’。如果两个个体p和q都不占主导地位,则认为它们的等级相等。个体的距离度量用来比较等级相等的个体。它衡量的是一个人与其他同等级的人之间的距离。

多目标遗传算法函数gamultiobj使用一种受控的精英遗传算法(NSGA-II[1]的变体)。精英型遗传算法总是偏爱适合度值(等级)较高的个体,而受控精英型遗传算法也偏爱适合度值较低但有助于增加种群多样性的个体。保持种群的多样性对于收敛到最优Pareto前沿是非常重要的。这是通过随着算法的发展控制人口中的精英成员来实现的。两个选项“ParetoFraction”和“DistanceFcn”被用来控制精英主义。帕累托分数选项限制了帕累托前沿(精英成员)的个体数量,而距离函数通过偏爱前沿相对较远的个体,有助于保持前沿的多样性。

指定多目标GA选项

我们可以选择默认的距离测量函数,distancecrowding,这是在工具箱中提供的,或者编写我们自己的函数来计算个人的距离度量。工具箱中的拥挤距离度量函数采用一个可选参数来计算函数空间(表型)或设计空间(基因型)中的距离。如果基因型的的选择,那么帕累托前端的多样性是基于设计空间。默认的选择是“表现型”在这种情况下,分集是基于函数空间的。在这里,我们选择基因型的对于距离函数。我们直接修改参数的值DistanceMeasureFcn

选项。DistanceMeasureFcn = {@distancecrowding,基因型的};

帕累托分数的默认值为0.35,也就是说,求解器将试图将当前种群中处于帕累托前沿的个体数量限制在种群规模的35%。这里我们将帕累托分数设为0.5。

选择= optimoptions(选项,“ParetoFraction”, 0.5);

运行gamultiobj求解器并显示在帕累托前面找到的解的数量和解的平均距离测量。金宝搏官方网站

[x, Fval exitFlag,输出]= gamultiobj (FitnessFunction numberOfVariables,,...b, Aeq,说真的,磅,乌兰巴托,选项);
优化终止:帕累托解决方案的平均变化小于可选方案。金宝搏官方网站

图遗传算法包含一个轴对象。标题为Pareto front的axis对象包含一个类型为line的对象。

流('帕累托前面的点数是:%d\n'、大小(x, 1));
帕累托前面的点数是:25
流(“帕累托前解的平均距离测量是:%g\n”金宝搏官方网站, Output.averagedistance);
在帕累托前面的解的平均距离测量是:0.051005金宝搏官方网站
流("帕累托前线的价差是:%g\n ", Output.spread);
帕累托战线的传播测度为:0.181192

较小的平均距离测量表明,帕累托前沿的解是均匀分布的。金宝搏官方网站然而,如果帕累托前端是断开的,那么距离测量将不能表明解决方案的真正传播。金宝搏官方网站

修改停止条件

gamultiobj使用三个不同的标准来确定何时停止求解器。当满足任何一个停止条件时,求解器将停止。当达到最大代数时停止;缺省值为“200 * numberOfVariables”gamultiobj如果帕累托前沿的平均分布发生变化MaxStallGenerations代(默认为100)小于选项。FunctionTolerance.第三个标准是以秒为单位的最大时间限制(默认为).在这里,我们修改停止条件以更改FunctionTolerance从1e-4到1e-3,然后增加MaxStallGenerations到150年。

选择= optimoptions(选项,“FunctionTolerance”1 e - 3,“MaxStallGenerations”, 150);

运行gamultiobj求解器并显示在帕累托前面找到的解的数量和代的数量。金宝搏官方网站

[x, Fval exitFlag,输出]= gamultiobj (FitnessFunction numberOfVariables,,...b, Aeq,说真的,磅,乌兰巴托,选项);
优化终止:帕累托解决方案的平均变化小于可选方案。金宝搏官方网站

图遗传算法包含一个轴对象。标题为Pareto front的axis对象包含一个类型为line的对象。

流('帕累托前面的点数是:%d\n'、大小(x, 1));
帕累托前面的点数是:25
流('代的数量是:%d\n', Output.generations);
代数为:152代

多目标遗传算法混合函数

我们将使用一个混合方案来寻找我们的多目标问题的最优Pareto前沿。gamultiobj可以相对较快地到达最优Pareto前沿附近区域,但需要多次函数评估才能实现收敛。一种常用的技术是运行gamultiobj只有少数几代人能接近最佳锋面。然后从gamultiobj用作另一个优化求解器的初始点,该优化求解器对局部搜索来说更快、更有效。我们使用fgoalattain作为混合求解器gamultiobjfgoalattain解决目标实现问题,这是最小化多目标优化问题的一个公式。

多目标函数中的混合功能gamultiobj与单目标函数遗传算法略有不同。在单目标遗传算法中,混合函数从遗传算法返回的最优点开始。然而,在gamultiobj混合求解器将从帕累托前返回的所有点开始gamultiobj.混合求解器所返回的新个体与现有种群相结合,得到一个新的帕累托前沿。的语法可能会很有用fgoalattain函数,以便更好地理解输出如何从gamultiobj内部是否转换为输入fgoalattain函数。gamultiobj估计伪权重(所需的输入fgoalattain),并从帕累托前端的每个点开始运行混合求解器。另一个必要的输入,目标,是一个向量,指定每个目标的目标。gamultiobj提供这个输入作为从帕累托前沿发现的极值点。

在这里,我们运行gamultiobj没有混合功能。

[x, Fval exitFlag,输出]= gamultiobj (FitnessFunction numberOfVariables,,...b, Aeq,说真的,磅,乌兰巴托,选项);
优化终止:帕累托解决方案的平均变化小于可选方案。金宝搏官方网站

图遗传算法包含一个轴对象。标题为Pareto front的axis对象包含一个类型为line的对象。

流('帕累托前面的点数是:%d\n'、大小(x, 1));
帕累托前面的点数是:25
流(“帕累托前解的平均距离测量是:%g\n”金宝搏官方网站, Output.averagedistance);
在帕累托前的平均距离测量是:0.0434477金宝搏官方网站
流("帕累托前线的价差是:%g\n ", Output.spread);
帕累托前沿的传播测度为:0.17833

在这里,我们使用fgoalattain为混合函数。我们还重置了随机数生成器,以便将结果与前一次运行(不使用混合函数)进行比较。

选择= optimoptions(选项,“HybridFcn”, @fgoalattain);

重置随机状态(仅与前一次运行比较)

strm = RandStream.getGlobalStream;strm。状态= Output.rngstate.State;

运行带有混合函数的GAMULTIOBJ求解器。

[x, Fval exitFlag、输出人口,分数)= gamultiobj (FitnessFunction numberOfVariables,,...b, Aeq,说真的,磅,乌兰巴托,选项);
优化终止:帕累托解决方案的平均变化小于可选方案。金宝搏官方网站

图遗传算法包含一个轴对象。标题为Pareto front的axis对象包含一个类型为line的对象。

流('帕累托前面的点数是:%d\n'、大小(x, 1));
帕累托前面的点数是:25
流(“帕累托前解的平均距离测量是:%g\n”金宝搏官方网站, Output.averagedistance);
Pareto前沿解的平均距离测量为:0.128249金宝搏官方网站
流("帕累托前线的价差是:%g\n ", Output.spread);
帕累托前沿的差值为:0.422224

如果得到的帕累托锋面gamultiobj单独和使用混合函数是接近的,我们可以使用扩展和平均距离度量来比较它们。利用混合函数可以提高Pareto前沿解的平均距离。金宝搏官方网站传播是衡量两个方面变化的指标,当使用混合函数时,传播可能会更高。这表明前线已经发生了相当大的变化gamultiobj没有混合功能。

使用混合函数肯定会得到最优的帕累托前沿,但我们可能会失去解的多样性(因为fgoalattain并没有试图保护物种的多样性)。这可以通过较高的平均距离测量值和锋面的扩展来表示。我们可以通过跑步进一步改进求解的平均距离度量和帕累托前沿的传播金宝搏官方网站gamultiobj同样,在最后一次运行中返回最终种群。这里,我们应该去掉混合函数。

选择= optimoptions(选项,“HybridFcn”[]);%无混合功能提供初始人口和分数选择= optimoptions(选项,“InitialPopulationMatrix”、人口、“InitialScoresMatrix”,得分);%运行带有混合函数的GAMULTIOBJ求解器。[x, Fval exitFlag、输出人口,分数)= gamultiobj (FitnessFunction numberOfVariables,,...b, Aeq,说真的,磅,乌兰巴托,选项);
优化终止:帕累托解决方案的平均变化小于可选方案。金宝搏官方网站

图遗传算法包含一个轴对象。标题为Pareto front的axis对象包含一个类型为line的对象。

流('帕累托前面的点数是:%d\n'、大小(x, 1));
帕累托前面的点数是:25
流(“帕累托前解的平均距离测量是:%g\n”金宝搏官方网站, Output.averagedistance);
在帕累托前面的解的平均距离测量是:0.039934金宝搏官方网站
流("帕累托前线的价差是:%g\n ", Output.spread);
帕累托前线的传播测度为:0.175597

参考文献

[1] Kalyanmoy Deb,“基于进化算法的多目标优化”,John Wiley & Sons ISBN 047187339。

相关的话题