我想写一个简单的通用并行代码来最小化MATLAB中的函数。这个想法很简单,主要有:优化,减少变量和MATLAB parfor
parfor k = 1:N
(...find a good solution xcurrent with cost fcurrent ...)
% keep best current value
fmin = min(fmin,fxcurrent)
end
这工作得很好,因为FMIN是减少变量,因而我可以用这个结构来更新当前的最佳值。
但是,我无法找到保存(或存储)最佳当前解决方案(“xcurrent”)的很好的优雅方式。
我如何跟踪迄今为止找到的最佳解决方案?换句话说,如果当前值严格小于fmin,如何保存xcurrent(受限于并行循环在MATLAB中施加的约束)?
[当然,串行版本是微不足道的,只是前面加上
if fxcurrent < fmin;
xbest = xcurrent;
end;
但这并不在PARFOR循环工作。]
浮现在脑海中的一些方法:
我可以只存储所有的解决方案和成本(使用切片变量),但这是巨大的内存效率低下(迭代次数N非常大,而且解决方案本身非常大)。
类似地,我可以使用一个(或集矩阵)减少变量和做:
solutionset = [solutionset,xcurrent]
但这几乎是坏在存储器需求方面。
- 每当解决方案得到改进时,我也可以将xcurrent保存到磁盘。
我试图寻找一个更简单的解决方案,但没有什么是非常有用的。
这个问题似乎是明确的(所以它不像其他问题,输出可能取决于迭代顺序),但我找不到一个优雅的方式来做到这一点。
如果我错过了明显的事情,并提前致谢,请提前道歉!
这取决于您通过“保持跟踪”所了解的内容。你只是想要某种显示,只是现在的价值 - 或者你需要整个开发?请澄清。 – bdecaf 2012-03-02 16:06:25
谢谢。我只是想保存它,或者存储它以备后用。我将编辑原始帖子以澄清。 – user1245359 2012-03-02 16:41:57
起初我会建议保留所有xcurrent,然后再做最低限度的搜索。但是你写了一些关于记忆的东西 - N太大了? – bdecaf 2012-03-02 18:22:07