parfor loop variable cannot be classified

조회 수: 1 (최근 30일)
Fernando
Fernando 2012년 5월 5일
Hi all, I'm trying to use parfor instead of for to deal with 3 minimizations (for now, it should increase a lot) that are independent of each other in everything but the initial values. I have the data corresponding to each minimization in a different structure and the parameters over which I want to minimize, defined as scalars out of the structure. In particular, the code looks as follows (matlabpool is open before what follows).
p0=rand(3,1); % Initial guess for parameters, common to all %minimizations
for i=1:3,
mk(i).param=zeros(3,1);
mk(i).obj=zeros(1,1);
end
mk(1).mc=[2;3;4];
mk(2).mc=[1;3;2];
mk(3).mc=[2;4;1];
mk(1).n=6;
mk(2).n=8;
mk(3).n=15;
mk(1).id=1;
mk(2).id=2;
mk(3).id=3;
parfor i=1:3,
[mk(i).param mk(i).obj]=fminsearch(@(p) prFOCv1(p,a;mk(i).mc,mk(i).n,mk(i).id),P0,Options);
end
So, every struct has components labeled mc, n and id and the values of each of these correspond to the values specified above and are independent of each other. If I use for instead of parfor, it works ok, but executes one minimization after the other, while I would like to do all simultaneusly. When I use parfor I get the message ???Error: The variable mk in a parfor cannot be classified. See Parallel for Loops in MATLAB, "Overview". I have read the "Overview" section, but I just don't understand what's the mistake that I'm making.
Any help would be appreciated. Thanks,
Fernando

채택된 답변

Walter Roberson
Walter Roberson 2012년 5월 5일
Why is there a semi-colon in the call to prFOCv1 ?

추가 답변 (1개)

Fernando
Fernando 2012년 5월 5일
by mistake...but without the semi-colon I get the same error message.
I did a couple of changes to see what is causing the error. In particular, I decided to just evaluate the function prFOCv1 at the initial values, using parfor. This works OK.
parfor i=1:3,
mk(i).obj=prFOCv1(p0,a,mk(i).mc,mk(i).n,mk(i).id);
end
So I guess that the problem is related to the way the output of the minimization is defined ( [mk(i).param mk(i).obj]=...).
  댓글 수: 4
Walter Roberson
Walter Roberson 2012년 5월 5일
You could try outputting to cell arrays indexed at "i", and put the structure back together afterwards.
Fernando
Fernando 2012년 5월 5일
Great, that worked. Thanks.

댓글을 달려면 로그인하십시오.

카테고리

Help CenterFile Exchange에서 Parallel for-Loops (parfor)에 대해 자세히 알아보기

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by