Linux 节点显示模式下的Matlab GA绘图

Linux 节点显示模式下的Matlab GA绘图,linux,matlab,terminal,plot,save,Linux,Matlab,Terminal,Plot,Save,我正在使用matlab GA和绘图选项“gaplotrange”。但是我通过终端在Linux服务器上运行matlab。因此,当我试图保存gaplot时,我要么一直得到一个空图像(如果我使用saveas),要么得到一个错误(如果我使用print,我会收到一条消息,说当前平台不支持它) 是否有其他方法可以在节点显示模式下保存绘图 这是我的一段代码 opts = gaoptimset('PopulationSize', 256, 'EliteCount',1,'CrossoverFraction',0

我正在使用matlab GA和绘图选项“gaplotrange”。但是我通过终端在Linux服务器上运行matlab。因此,当我试图保存gaplot时,我要么一直得到一个空图像(如果我使用saveas),要么得到一个错误(如果我使用print,我会收到一条消息,说当前平台不支持它)

是否有其他方法可以在节点显示模式下保存绘图

这是我的一段代码

opts = gaoptimset('PopulationSize', 256, 'EliteCount',1,'CrossoverFraction',0.8, ...
 'Generation', 3, 'PenaltyFactor',80,'SelectionFcn',{@selectiontournament,4}, ...
 'CrossoverFcn', @crossoverscattered ,'Vectorized','off', 'UseParallel','always',...
 'OutputFcns',@pop_output,'MutationFcn',{@mutationuniform,0.002},'StallGenLimit',3,...
 'TolFun', 1e-4,'PlotFcns',@gaplotbestf);

f = figure('vis','off');

[x,fval, exitflag, output, population, scores] = ga(@plate_fitness,16,[],[],[],[],vlb,vub,[],opts);

hgsave(f,'matlabga_range','png');

Matlab对此有一个解决方案

我对遗传算法工具箱没有太多的经验,但快速浏览一下文档就会发现这一点

要在从命令行调用ga时显示绘图,请将选项的PlotFcns字段设置为绘图函数的函数句柄。例如,要显示最佳适应度图,请按如下所示设置选项

options=gaoptimset('PlotFcns',@gaplotbestf)

因此,如果您没有在中传递带有绘图函数句柄的
'PlotFcns'
,则它看起来不会基于命令行交互生成绘图。添加它,看看它是否解决了您的问题,更多详细信息

更新:


原来问题是ga方法的绘图正在创建自己的图形,因此需要在
gcf
上保存,有关详细信息,请参阅下面的讨论。

是的,“PlotFcns”中的另一个绘图选项是@gaplotrange。这就是我要通过的选项。看看你的代码,我会尝试两件事。第一种方法是使用
gcf
而不是
f
作为图形句柄。在我看来,ga将创建一个新的绘图窗口,而不是修改gcf。所以你要做f,保存f,但永远不要画成f。另一件事,我认为是玩<代码> PlotInterval < /Cord>选项,因为我看不出默认值。所以我尝试了GCF=图(‘VIS’,‘OFF’);saveas(gcf,'filename','format');仍然给出了一个空图像:(但是,我的朋友告诉我以后只检索所有数据并绘制(本地显示打开)。所以这就是我现在正在做的。你肯定不想说
gcf=figure('vis','off'));
。它用一个局部变量覆盖
gcf
,该局部变量通常是一个全局可访问的变量,代表“获取当前图形”。因此,如果您已经声明了
gcf=figure(),请删除该
gcf=
commandpostscript)
在当前会话中,您需要发出
清除gcf;
才能继续执行我刚才给出的说明
hgsave('filename')
hgsave(h,'filename')