2

我在 Matlab 中编写了一个并行遗传算法,特别是双物种遗传算法 (DSGA)(更多信息可以在本文中找到),我在并行化部分代码时遇到了一些麻烦。

现在我是物理和数学专业的学生,​​我刚刚开始编程以帮助我的研究项目。我已经在 Matlab 中实现了一个带有某种并行适应度函数的串行遗传算法,但我对实现这个双物种遗传算法很感兴趣。

好的,问题是:我如何运行 2 个不同的 for 循环,这些循环在不同的 matlab 工作人员上做不同的事情?2 个 for 循环将有不同的数据和不同的代码,但我需要它们同时运行。我认为我不能为此使用 parfor 循环。在阅读了并行工具箱的文档后,看起来使用单程序多数据 (spmd) 功能可能是一种选择?我不确定它的最佳选择是否真的有效。

任何意见,将不胜感激。

谢谢。

4

1 回答 1

0

第一步是将两个循环包装在一个函数中,这简化了代码。然后创建一个包含您要并行评估的所有函数的单元格。如果您不理解语法,请查看“函数句柄”的文档。我在这里使用了一些虚拟函数:

jobs={@()exp(1),@()exp(2),@()sin(3)}

现在您可以轻松地并行评估作业:

result=cell(size(jobs))
parfor ix=1:numel(jobs),result{ix}=jobs{ix}(), end

还有其他解决方案,但我更喜欢这种实现,因为相同的代码可以在没有并行计算的 PC 上执行(parfor 被解释为 for)。

于 2014-12-21T21:46:00.183 回答