帕累托集2 d函数

12个视图(30天)
劳拉bagnale
劳拉bagnale 2021年5月20日
评论道: 劳拉bagnale2021年5月26日
大家好!
有人能帮我解决一下这个问题吗?
我代表这样的两个函数:
fcontour (@ (x, y) 0.9097 + (-0.2332 * x) + 0.2645 * y + (-1.07) * x ^。2 + (-0.02072)* x * y + 0.5786 * y ^ 2;
fcontour (@ (x, y) 0.8906 - -9.46 e + 12 * 9.46 x + e12汽油* y + 5.20 e + 13 * x。^ 2 + 0.03807 * * x + 5.208 e + 13 * y ^ 2;
然后我写了一个优化问题以找到最低。
现在我想找到帕累托集。
我试着用以下代码:
健身= @simpleMultiObjective;
据nvar = 2;
[x, fval] = gamultiobj(健身、据nvar);
函数z = simpleMultiObjective (xy)
x = xy (1);y = xy (2);
z (1) = 0.9097 + (-0.2332 * x) + 0.2645 * y + (-1.07) * x ^。2 + (-0.02072)* x * y + 0.5786 * y ^ 2;
z (2) = 0.8906 - -9.46 e + 12 * 9.46 x + e12汽油* y + 5.20 e + 13 * x。^ 2 + 0.03807 * * x + 5.208 e + 13 * y ^ 2;
结束
但我不知道如果我在正确的方式。
谁能建议来解决这个问题,好吗?
非常感谢!

接受的答案

Andreas Apostolatos
Andreas Apostolatos 2021年5月20日
嗨,劳拉,
你在正确的道路,但我就会相应的给你一些建议:
1)。当使用函数“fcontour”情节的轮廓一个函数,MATLAB试图提供函数的输入(x, y)向量。这是可能的,底层函数定义内的表达式应该支持向量操作。万博1manbetx在上面你的定义中,您使用表达式“x。^ 2的支持基础是一万博1manbetx个矢量,从而提高向量的每个组件x ' 2,返回一个包含结果的向量。然而,表达“x * y”不能应用于两个向量相同的形式(两行或两列向量)。允许操作“x * y”应用于两个向量elementwise,请考虑增加一个句号”。在相应的操作,即x。* y '。这将使底层的计算效率更高。在你的情况中,你可以改变你的函数定义如下,
fcontour (@ (x, y) 0.9097 + (-0.2332 . * x) + 0.2645。* y + (-1.07) * x ^。2 + (-0.02072)。* x。* y + 0.5786。* y。^ 2);
fcontour (@ (x, y) 0.8906 - 9.46 e + 12。* x + 9.46 e12汽油。* y + 5.20 e + 13。* x。^ 2 + 0.03807。* y。* x + 5.208 e + 13。* y ^ 2);
2)。你的目标函数无约束,表情如“x ^ 2”。后者的表达实际上是等于“x ^ 0.2”,导致的结果如果“x”是负的。因此,它可能是可取的0定义为下界设计变量,目标函数没有实现虚值,当然取决于您的应用程序和您的需要。我已经习惯你的脚本为0账户也下界,即
% %清晰的输出窗口和工作空间
clc,清晰;
% %目标函数的等值线
fcontour (@ (x, y) 0.9097 + (-0.2332 . * x) + 0.2645。* y + (-1.07) * x ^。2 + (-0.02072)。* x。* y + 0.5786。* y。^ 2);
fcontour (@ (x, y) 0.8906 - 9.46 e + 12。* x + 9.46 e12汽油。* y + 5.20 e + 13。* x。^ 2 + 0.03807。* y。* x + 5.208 e + 13。* y ^ 2);
% %定义帕累托优化选项和解决面前的问题
%选择= optimoptions (gamultiobj) ';
选择= optimoptions (“gamultiobj”,“PopulationSize”,61,“ParetoFraction”,0.71);
健身= @simpleMultiObjective;
据nvar = 2;
磅= 0 (2,1);
[x, fval] = gamultiobj(健身、据nvar、[]、[][],[],磅,[],[],选择);
情节(fval (: 1) fval (:, 2),“o”)
% %定义多目标函数
函数z = simpleMultiObjective (xy)
x = xy (1);y = xy (2);
z (1) = 0.9097 + (-0.2332 . * x) + 0.2645。* y + (-1.07) * x ^。2 + (-0.02072)。* x。* y + 0.5786。* y。^ 2;
z (2) = 0.8906 - 9.46 e + 12。* x + 9.46 e12汽油。* y + 5.20 e + 13。* x。^ 2 + 0.03807。* y。* x + 5.208 e + 13。* y ^ 2;
结束
请注意,我有增加的值“PopulationSize”和“ParetoFraction”优化选项时使用“gamultiobj”函数以获得一个密集的帕累托。还的更多信息,请访问下面的文档页面,
这样,下面的帕累托前后者运行脚本时,就会产生
我希望这可以帮助。
亲切的问候,
安德烈亚斯
3评论
Andreas Apostolatos
Andreas Apostolatos 2021年5月21日
嗨,劳拉,
函数的gamultiobj利用遗传算法寻找帕累托面前,不采用任何起点。因此,函数的优化选项“gamultiobj”不提供一个API为算法提供一个起点。
然而,功能“paretosearch”使用模式搜索算法寻找帕累托前沿,它提供了一个API提供一个起点算法,看到下面的文档页面的主题的更多信息,
相应的优化选择是称为“InitialPoints”和“据nvar”可以容纳一个矩阵列,其中每一行表示一个初始点,“据nvar”代表变量的数量。你可以提供相应的每个目标函数最小值组成你的多目标函数,后者“paretosearch”函数的优化选项,就这样,你也可以跳过下界的规范,因为提供个人目标函数的最小值作为找到理想的起点就足够了帕累托。
你可以找到我之前的代码片段,利用函数的适应“paretosearch”和优化选项“InitialPoints”为了方便下面,
% %清晰的输出窗口和工作空间
clc,清晰;
% %目标函数的等值线
fcontour (@ (x, y) 0.9097 + (-0.2332 . * x) + 0.2645。* y + (-1.07) * x ^。2 + (-0.02072)。* x。* y + 0.5786。* y。^ 2);
fcontour (@ (x, y) 0.8906 - 9.46 e + 12。* x + 9.46 e12汽油。* y + 5.20 e + 13。* x。^ 2 + 0.03807。* y。* x + 5.208 e + 13。* y ^ 2);
% %找到目标函数的最小1
p1 = optimproblem;
p1。描述=“最小化”;
x1 = optimvar (“x”,“下界”,0.5,“UpperBound”2);
日元= optimvar (“y”,“下界”,0.5,“UpperBound”2);
p1。目标= 0.9097 + (-0.2332。* x1) + 0.2645。* y1 + (-1.07)。* x1。^。2 + (-0.02072)。* x1。* y1 + 0.5786。* y1。^ 2;
initialPt1。x = 0.3;
initialPt1。y = 0.5;
[sol1, fval1 exitflag1 outout1] =解决(p1, initialPt1);
% %找到目标函数的最小2
p2 = optimproblem;
p2。描述=“最小化”;
x2 = optimvar (“x”,“下界”,0.5,“UpperBound”2);
y2 = optimvar (“y”,“下界”,0.5,“UpperBound”2);
p2。目标= 0.8906 - 9.46 e + 12。* x2 + 9.46 e12汽油。* y2 + 5.20 e + 13。* x2。^ 2 + 0.03807 * y2。* x2 + 5.208 e + 13。* y2。^ 2;
initialPt2。x = 0.3;
initialPt2。y = 0.5;
[sol2, fval2 exitflag2 outout2] =解决(p2, initialPt2);
% %找到帕累托前使用paretosearch算法
x0 (1) = [sol1。x sol1.y];
(sol2 x0 (2) =。x sol2.y];
选择= optimoptions (“paretosearch”,“InitialPoints”,x0);
健身= @simpleMultiObjective;
据nvar = 2;
[x, fval] = paretosearch(健身、据nvar、[]、[][],[],[],[],[],选择);
情节(fval (: 1) fval (:, 2),“o”)
包含(“目标1”)
ylabel (《目标2》)
标题(“帕累托面前”)
% %定义多目标函数
函数z = simpleMultiObjective (xy)
x = xy (1);y = xy (2);
z (1) = 0.9097 + (-0.2332 . * x) + 0.2645。* y + (-1.07) * x ^。2 + (-0.02072)。* x。* y + 0.5786。* y。^ 2;
z (2) = 0.8906 - 9.46 e + 12。* x + 9.46 e12汽油。* y + 5.20 e + 13。* x。^ 2 + 0.03807。* y。* x + 5.208 e + 13。* y ^ 2;
结束
还有一个短片,介绍了后者的话题,看到下面的链接,
我希望这能帮助你进一步的信息。
亲切的问候,
安德烈亚斯

登录置评。

答案(1)

劳拉bagnale
劳拉bagnale 2021年5月24日
你好安德烈亚斯,
这对我来说是完美的,非常感谢你的支持!万博1manbetx
你的答案很清楚,很有帮助!
我真的很想谢谢你很多!
亲切的问候,
劳拉!
3评论
劳拉bagnale
劳拉bagnale 2021年5月26日
亲爱的安德烈亚斯,
对不起,如果我打扰您。看来,我解决了这个问题通过替换z z(1)和(2)的修正形式语法。特别是我取代x。与x ^ 2。^。2,y。^ 2。但我不明白这是什么意思。
我试着寻找它在matlab文档但如果你能澄清这一点,你会做我一个大忙。
如果你不能,没问题我会找到它!:)
非常感谢!
劳拉

登录置评。

类别

找到更多的在多目标优化帮助中心文件交换

社区寻宝

找到宝藏在MATLAB中央,发现社区如何帮助你!

开始狩猎!

翻译的