无显示模式下的 Matlab GA 绘图
Posted
技术标签:
【中文标题】无显示模式下的 Matlab GA 绘图【英文标题】:Matlab GA plot in nodisplay mode 【发布时间】:2012-08-26 04:42:30 【问题描述】:我正在使用 matlab GA 和绘图选项“gaplotrange”。但我通过终端在 Linux 服务器上运行 matlab。因此,当我尝试保存 gaplot 时,我要么不断得到一个空图像(如果我使用 saveas),要么是一个错误(如果我使用 print,我会收到一条消息,指出当前平台不支持它)。
有没有其他方法可以在 nodisplay 模式下保存绘图?
这是我的一段代码
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');
【问题讨论】:
【参考方案1】:Matlab 对此有解决方案posted here
hgsave('filename')
hgsave(h,'filename')
我对遗传算法工具箱没有太多经验,但快速浏览一下文档就可以看出这一点
要在从命令行调用 ga 时显示绘图,请将选项的 PlotFcns 字段设置为绘图函数的函数句柄。例如,要显示最佳适应度图,设置选项如下
options = gaoptimset('PlotFcns', @gaplotbestf);
因此,如果您没有将 'PlotFcns'
与绘图函数的句柄一起传递,它看起来不会基于命令行交互生成绘图。加进去看看能不能解决你的问题,更多详情here
更新:
原来问题在于 ga 方法的 plot 正在创建自己的图形,因此需要保存在 gcf
上,有关详细信息,请参阅下面的讨论。
【讨论】:
是的,“PlotFcns”中的另一个绘图选项是@gaplotrange。这就是我要通过的选项。 查看您的代码,我会尝试两件事。第一个是使用gcf
而不是f
作为您的图形句柄。在我看来 ga 将创建一个新的绘图窗口而不是修改 gcf。所以你会做 f,保存 f,但永远不要阴谋到 f。我要考虑的另一件事是使用PlotInterval
选项,因为我看不到它的默认值。
所以我尝试了 gcf = figure('vis','off'); saveas(gcf,'文件名','格式');仍然给出一个空图像:(但是,我的朋友告诉我稍后检索所有数据并绘制(在本地显示)。这就是我现在正在做的事情。
你肯定不想想说gcf = figure('vis','off');
。这用一个局部变量覆盖gcf
,它通常是一个全局可访问的变量,代表“获取当前图形”。所以放弃gcf=
命令
后记 - 如果您已经在当前会话中声明了gcf = figure()
,那么您需要发出clear gcf;
,然后再继续我刚刚给出的说明以上是关于无显示模式下的 Matlab GA 绘图的主要内容,如果未能解决你的问题,请参考以下文章