我在Matlab中编写并行遗传算法,特别是双物种遗传算法(DSGA)(更多信息可以在this paper here中找到),我在部分并行化方面遇到了一些麻烦的代码。
现在我是一名物理和数学专业的学生,我刚开始编程以帮助完成我的研究项目。我已经在Matlab中实现了一个具有一定程度并行化的适应度函数的串行遗传算法,但我对实现这种双物种遗传算法感兴趣。
好的问题是:如何在不同的matlab工作者上运行2个不同的for循环? 2 for循环将具有不同的数据和不同的代码,但我需要它们同时运行。我不认为我可以使用parfor循环。在阅读了并行工具箱的文档之后,看起来使用单程序多数据(spmd)功能可能是一个选项吗?我不确定它的最佳选择是否真的有效。
任何建议都将受到赞赏。
感谢。
答案 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被解释为)。