parfor loop variable cannot be classified

6 ビュー (過去 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 Center および File ExchangeBig Data Processing についてさらに検索

Community Treasure Hunt

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

Start Hunting!

Translated by