Matlab中遗传算法的并行化

时间:2014-12-21 20:51:26

标签: matlab parallel-processing genetic-algorithm parfor parallel-for

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

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

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

任何建议都将受到赞赏。

感谢。

1 个答案:

答案 0 :(得分:0)

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

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

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

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

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