【发布时间】:2013-01-19 19:16:56
【问题描述】:
我有几个.m 文件的程序组合。程序运行调用其中一个(主)名为tests.m,然后从那里我调用另一个optFun.m 计算不同的参数。这些参数在 while 循环内计算,当它们的值多次没有变化时(例如 4500)结束。
该程序运行良好,但我必须执行 200 次才能获得 200 组不同的值。此外,我可以使用具有>12 个内核的计算机,因此我对包含parfor 语句的主要.m 文件进行了一些更改,以部署12 个matlab 工作人员。我的目标是在一轮中获得 12 种不同的解决方案(初始程序的执行)。
function [] = tests(Num)
matlabpool open local 12;
y = zeros(itermax,15);
z = zeros(itermax,9);
parfor i = 1:itermax
[iternum tTot SolOpt ImpCostMAX minABFmax ABFmax ImportCosteABS] =...
optFun(N, K, AntNum,...
q, eps, Rt, Rs, theta, maxiter,...
strcat(particad,num2str(i)));
y(i,:) = [ i; iternum; tTot; SolOpt; ImpCostMAX(1); ImpCostMAX(2);...
q; eps; N; K; AntNum; maxiter;...
SolOpt/ImpCostMAX(1); SolOpt/ImpCostMAX(2); SolOpt/N];
z(i,:) = [ i; minABFmax(1); minABFmax(2); minABFmax(3); ABFmax(1);...
ABFmax(2); ABFmax(3);...
ImportCosteABS(1); ImportCosteABS(2)];
end %parfor
matlabpool close;
dlmwrite(nombre, y, 'delimiter', ' ','precision', '%9.5f');
dlmwrite(b, z, 'delimiter', ' ','precision', '%9.5f');
我已经运行了 matlab 的 12 名工作人员,但现在程序似乎在达到最佳或正确结果之前就停止了。似乎我的程序的参数解决方案是在达到 while 循环的 4500 次迭代之前输出的。 虽然我获得了 12 种不同的解决方案,但似乎 12 名工作人员共享一些变量的值,因此当其他工作人员对解决方案进行了足够改进或其中几个人的总和被认为是正确的解决方案时,他们就会停止。 你能帮我理解发生了什么吗?
非常感谢您提前 问候
【问题讨论】:
-
您可能希望提供代码示例而不是描述代码
-
你能确定意外的行为真的发生了吗?因此,取其中一种输入/输出组合并单独运行它,看看它真的不同。
-
感谢您的回答。我已经单独运行了它,我意识到出了点问题。我可以使用普通的 for 循环进行测试。该程序需要一些时间来获得解决方案。谢谢问候。
标签: matlab parallel-processing parfor