这个例子展示了如何为两个变量的两个目标函数找到帕累托集合。这个例子提供了两种最小化的方法:使用优化活动编辑器任务和工作在命令行。
两个目标函数f(x),x也是二维的,是
单击。创建一个新的活动脚本新的生活的脚本按钮文件上节首页选项卡。
插入一个优化实时编辑任务。点击插入然后,在代码部分中,选择任务>优化.
有关输入问题数据,请单击“插入新”部分节休息按钮插入选项卡。新的部分出现在任务的上面和下面。
在任务之上的新部分中,输入以下代码以定义变量和下限和下限。
nvar = 2;Lb = [0 -5];Ub = [5 0];
要将这些变量放入工作区,请按按钮运行该部分按Ctrl + Enter.
指定的问题类型
在里面指定问题类型部分,单击目标>非线性按钮。
点击约束>下限和上限纽扣。
选择求解器> Gamultiobj - 使用遗传算法的多目标优化.
选择问题数据
在里面选择问题数据部分中,选择目标函数>局部函数,然后单击新的按钮。该函数显示在任务下方的新部分中。
编辑生成的函数定义以包含以下代码。
功能f = mymulti1(x)f(2)= x(1)^ 4 + x(2)^ 4 + x(1)* x(2) - (x(1)* x(2))^ 2;F(1)= F(2) - 10 * x(1)^ 2;结束
在里面选择问题数据部分中,选择本地功能> MyMulti1函数。
选择变量> nvar.
选择下界>来自工作空间> lb和上限>从工作区> UB.
指定解决方案
扩大指定Solver选项任务的部分,然后单击添加按钮。为了拥有一个更密集、更紧密的帕累托前沿,可以通过选择指定一个比默认的更大的种群人口设置>人口大小> 60.
要在帕累托前面拥有更多的人口,而不是默认设置,请单击+按钮。在结果选项中,选择算法> Pareto集分数> 0.7.
设置显示选项
在里面显示进度部分,选择帕累托前沿图的功能。
运行求解器并检查结果
要运行求解器,请单击选项按钮⁝在任务窗口的右上角,然后选择运行部分.绘图显示在单独的图形窗口和任务输出区域中。
该图显示了的两个组成部分之间的权衡f,它在客观空间中绘制。有关详细信息,请参阅图图9-2,非劣解集金宝搏官方网站.
要在命令行执行相同的优化,请完成以下步骤。
创造mymulti1
MATLAB上的客观函数文件®路径。
功能f = mymulti1(x)f(2)= x(1)^ 4 + x(2)^ 4 + x(1)* x(2) - (x(1)* x(2))^ 2;F(1)= F(2) - 10 * x(1)^ 2;结束
设置选项和边界。
选项= Optimoptions(“gamultiobj”,“PopulationSize”现年60岁的...'paretofriation',0.7,'plotfcn', @gaplotpareto);Lb = [0 -5];Ub = [5 0];
使用选项运行优化。
[解决方案,目标值] = GACULIOBJ(@ myMulti1,2,...[],[],[],[], 磅,乌兰巴托,选项);
这两个优化Live Editor任务和命令行允许您制定和解决问题,它们给出相同的结果。命令行更加精简,但在选择求解器、设置问题和选择绘图函数等选项方面提供的帮助较少。你也可以开始使用一个问题优化,然后生成命令行使用的代码,如解决约束的非线性问题,基于求解器.
你可以从其他角度来看待这个问题。下图包含了两个目标函数的水平曲线,帕累托边界由gamultiobj.
(框),以及真正的帕累托前沿的x值(钻石通过几乎直线连接的钻石)。真正的帕累托前沿点是目标函数的级别曲线是平行的。该算法通过查找目标函数的梯度并行的位置来计算这些点。该图绘制在参数空间中;看图9-1,从参数空间映射到目标函数空间.
目标函数的轮廓和帕累托边界
gamultiobj.
找到线段的端点,也就是找到帕累托边界的全部范围。