两个目标的帕累托正面
双目标多目标优化
这个例子展示了如何为两个变量的双目标函数找到一个帕累托集。示例给出了两种最小化方法:使用优化实时编辑器任务和工作在命令行。
双目标函数f(x),x也是二维的,是吗
找到帕累托集合使用优化实时编辑任务
控件创建一个新的活动脚本新的实时脚本按钮。文件章节首页选项卡。
插入一个优化实时编辑器任务。单击插入TAB,然后在代码部分中,选择任务>优化.
单击Solver-based的任务。
控件插入一个新节,以用于输入问题数据节休息按钮。插入选项卡。新的部分出现在任务的上方和下方。
在任务上面的新部分中,输入以下代码来定义变量的数量以及下限和上限。
Nvar = 2;Lb = [0 -5];Ub = [5 0];
要将这些变量放置到工作区中,请按下运行该节按Ctrl + Enter.
指定问题类型
在指定问题类型部分的任务,单击目标>非线性按钮。
单击约束>下界而且上界按钮。
选择求解> gamultiobj -多目标优化使用遗传算法.
选择问题数据
在选择问题数据部分中,选择目标函数>局部函数,然后点击新按钮。该函数出现在任务下面的新部分中。
编辑生成的函数定义以包含以下代码。
函数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;结束
在选择问题数据部分,选择局部函数> mymulti1函数。
选择变量数> nvar.
选择下界>工作空间> lb而且上界>来自工作空间> ub.
指定求解器选项
扩大指定求解器选项部分的任务,然后单击添加按钮。若要拥有更密集、连接更紧密的帕累托前端,请通过选择指定大于默认值的种群Population settings > Population size > 60.
若要在帕累托前面设置比默认设置更多的填充,请单击+按钮。在结果选项中,选择算法>帕累托集分数> 0.7.
设置显示选项
在显示进度部分的任务,选择帕累托前沿图的功能。
运行求解器并检查结果
要运行求解器,请单击选项按钮⁝在任务窗口的右上方,并选择运行部分.绘图显示在单独的图形窗口和任务输出区域中。
这幅图显示了在的两个组成部分之间的权衡f,在目标函数空间中绘制。具体操作请参见图图14-2非劣解集合金宝搏官方网站.
在命令行中找到帕累托集
要在命令行上执行相同的优化,请完成以下步骤。
创建
mymulti1
目标函数文件®路径。函数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;结束
设置选项和边界。
选项= optimoptions(“gamultiobj”,“PopulationSize”现年60岁的...“ParetoFraction”, 0.7,“PlotFcn”, @gaplotpareto);Lb = [0 -5];Ub = [5 0];
使用这些选项运行优化。
[solution,ObjectiveValue] = gamultiobj(@mymulti1,2,...[],[],[],[], 磅,乌兰巴托,选项);
这两个优化Live Editor任务和命令行允许您制定和解决问题,它们给出相同的结果。命令行更加简化,但在选择求解器、设置问题和选择绘图函数等选项方面提供的帮助较少。您还可以使用优化,然后生成用于命令行使用的代码,如使用优化实时编辑器任务或求解器的约束非线性问题.
替代的观点
你可以从其他角度来看待这个问题。下图包含两个目标函数的水平曲线,由计算得到的帕累托边界gamultiobj
(方框),以及真正帕累托边界的x值(由一条几乎直线连接的菱形)。真正的帕累托边界点是目标函数的水平曲线平行的地方。该算法通过寻找目标函数的梯度平行的位置来计算这些点。图在参数空间中绘制;看到图14-1参数空间到目标函数空间的映射.
目标函数轮廓和帕累托边界
gamultiobj
找到线段的端点,这意味着它找到了帕累托边界的完整范围。