二维散点数据的pareto前沿绘制 您所在的位置:网站首页 如何画帕累托图案 二维散点数据的pareto前沿绘制

二维散点数据的pareto前沿绘制

2023-12-29 03:40| 来源: 网络整理| 查看: 265

二维散点图的pareto前沿绘制

最近使用了matlab的gamultiobj函数进行多目标优化,中断程序后发现利用所有代数的Score结果来绘制pareto前沿是件令人头疼的事情。 而gamultiobj函数中绘制pareto前沿的函数又无法直接调用(gamultiobj函数源代码太复杂了,绘图的具体索引是:gamultiobj—>optimotions—>gamultiobjsolve—>gadsplot—>gaplotpareto,在利用gaplotpareto函数完成绘图时,数据已经由前面的其他步骤处理完成)。

因此想了一个投机取巧的办法来达到目的,那就是将n行2列的散点数据data直接作为gamultiobj优化算法初代的Scores,且让程序只有初代就结束。

具体代码如下(简化版):

data=rand([500,2]);%二维散点数据 s=size(data); %利用gamultiobj多目标优化算法内置的绘图函数来提取pareto前沿数据 options = optimoptions('gamultiobj','PlotFcn',@gaplotpareto,'PopulationSize',s(1),'InitialScores',data,'Generations',1); [x,fval,exitflag,output,population,scores] = gamultiobj(@(x) x,2,[],[],[],[],[],[],options); %fval即为pareto前沿数据

详细版:

clear;clc; %rng('default'); %使rand函数每次运行都输出相同结果 %创建第三象限的单位圆数据data data=rand([500,2]); s=size(data); for i=1:s(1) if (data(i,1)^2+data(i,2)^2)>1 data(i,:)=[0 0]; end end data=-data; %plot(data(:,1),data(:,2),'.')%观察原始数据分布 %利用gamultiobj多目标优化算法内置的绘图函数来提取pareto前沿数据 options = optimoptions('gamultiobj','PlotFcn',@gaplotpareto,'PopulationSize',s(1),'InitialScores',data,'Generations',1); [x,fval,exitflag,output,population,scores] = gamultiobj(@(x) x,2,[],[],[],[],[],[],options); %fval即为pareto前沿数据 %利用fval数据重新绘制图形灵活度更高 clf; plot(fval(:,1),fval(:,2),'rp','MarkerSize',9) axis([-1,-0,-1,0]) set(gca,'XTick',-1:0.1:0,'YTick',-1:0.1:0) xlabel('x');ylabel('y') title('Patero Front') set(gca,'Fontname','times new Roman','FontSize',12); grid on %将pareto前沿与原始数据绘制在同一张图上 hold on plot(data(:,1),data(:,2),'k.')

最终效果如下: 在这里插入图片描述



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有