主要内容

帕累托阵线的两个目标

双目标多目标优化

这个例子展示了如何为两个变量的两个目标函数找到帕累托集合。这个例子提供了两种最小化的方法:使用优化活动编辑器任务和工作在命令行。

以供应点函数fx),x也是二维的,是吗

f 1 x x 1 4 + x 2 4 + x 1 x 2 x 1 x 2 2 10 x 1 2 f 2 x x 1 4 + x 2 4 + x 1 x 2 x 1 x 2 2

使用帕累托集合优化住编辑任务

  1. 单击。创建一个新的活动脚本新的生活的脚本按钮文件上节首页选项卡。

  2. 插入一个优化住编辑任务。单击插入然后,在代码部分中,选择任务>优化

    插入优化实时编辑器任务

    优化Live Editor任务

  3. 用于输入问题数据,通过单击节休息按钮插入选项卡。新的部分出现在任务的上面和下面。

  4. 在任务上面的新部分中,输入以下代码来定义变量的数量以及上下边界。

    据nvar = 2;Lb = [0 -5];Ub = [5 0];
  5. 要将这些变量放置到工作区中,请按下运行该部分按Ctrl + Enter

  6. 指定的问题类型

    指定的问题类型部分,单击目标>非线性按钮。

  7. 单击约束>下界上界按钮。

  8. 选择求解器> gamultiobj -遗传算法的多目标优化

    指定目标、约束条件和求解器

  9. 选择问题数据

    选择问题数据部分中,选择目标函数>局部函数,然后单击按钮。该函数出现在任务下面的新部分中。

  10. 编辑生成的函数定义以包含以下代码。

    函数f = mymulti1 f (x) (2) = x (1) x (2) ^ ^ 4 + 4 + x (1) * (2) - (x (1) * (2)) ^ 2;F (1) = F (2) - 10*x(1)^2;结束
  11. 选择问题数据部分中,选择局部函数> mymulti1函数。

  12. 选择变量> nvar

  13. 选择下界>来自工作空间> lb上界>来自工作区> ub

  14. 指定解决方案

    扩大指定解决方案部分,然后单击添加按钮。为了拥有一个更密集、更紧密的帕累托前沿,可以通过选择指定一个比默认的更大的种群种群设置>种群大小> 60

  15. 要使帕累托前面的人口比默认设置更多,请单击+按钮。在结果选项中,选择算法> Pareto集分数> 0.7

  16. 设置显示选项

    显示进度部分,选择帕累托前沿图的功能。

    问题数据,解决方案选项,并显示指定的进度

  17. 运行求解器并检查结果

    要运行求解器,请单击选项按钮在任务窗口的右上方,然后选择运行部分.绘图显示在单独的图形窗口和任务输出区域中。

    从约[-38,33]到约[-5,0]的凸曲线上的点集

    该图显示了的两个组成部分之间的权衡f,绘制在目标函数空间中。具体如图所示图13-2非劣解集金宝搏官方网站

在命令行找到帕累托集

要在命令行执行相同的优化,请完成以下步骤。

  1. 创建mymulti1目标函数文件的MATLAB®路径。

    函数f = mymulti1 f (x) (2) = x (1) x (2) ^ ^ 4 + 4 + x (1) * (2) - (x (1) * (2)) ^ 2;F (1) = F (2) - 10*x(1)^2;结束
  2. 设置选项和边界。

    选择= optimoptions (“gamultiobj”“PopulationSize”现年60岁的...“ParetoFraction”, 0.7,“PlotFcn”, @gaplotpareto);Lb = [0 -5];Ub = [5 0];
  3. 使用选项运行优化。

    (解决方案,ObjectiveValue) = gamultiobj (@mymulti1 2...[],[],[],[], 磅,乌兰巴托,选项);

这两个优化Live Editor任务和命令行允许您制定和解决问题,它们给出相同的结果。命令行更加精简,但在选择求解器、设置问题和选择绘图函数等选项方面提供的帮助较少。你也可以开始使用一个问题优化,然后生成命令行使用的代码,如求解一个约束非线性问题,基于求解器

替代的观点

你可以从其他角度来看待这个问题。下图包含了两个目标函数的水平曲线,帕累托边界由gamultiobj(方块),以及真帕累托边界的x值(由一条近乎直线连接的方块)。真正的帕累托边界点是目标函数水平曲线平行的地方。该算法通过找出目标函数的梯度平行的位置来计算这些点。图在参数空间中绘制;看到图13-1,从参数空间映射到目标函数空间

目标函数的轮廓和帕累托边界

gamultiobj找到线段的端点,也就是找到帕累托边界的全部范围。

创建图形的代码

另请参阅

|

相关的话题