Sliced variable issue - variable cannot be classified

1 回表示 (過去 30 日間)
Axel Groniewsky
Axel Groniewsky 2019 年 5 月 3 日
コメント済み: Axel Groniewsky 2019 年 5 月 8 日
Dear All,
I'm trying to use parallel workers in an optimization problem but I cannot define X and Y as sliced variables. X contains the population, Y contains the fitness values. As the error message says: variable X & Y in a parfor cannot be classified.
First I define X, (it has to be outside the parfor loop otherwise I get new X-es in every single loop); than parfor follows:
parfor t=1:T
TmpZ=Func(Z(1,:));TmpX=Func(X(t,:));
if TmpZ < TmpX
X(t,:)=Z(1,:); Y(t,1)=TmpZ;
else
X(t,:)=X(t,:); Y(t,1)=TmpX;
end
end
Thanks

採用された回答

Edric Ellis
Edric Ellis 2019 年 5 月 7 日
I augmented your code a tiny bit to make it executable, and it works fine in MATLAB R2019a, and I checked all the way back to R2013b...
T = 7;
Func = @sum;
Z = rand(1, 3);
X = rand(T, 3);
parfor t=1:T
TmpZ=Func(Z(1,:));TmpX=Func(X(t,:));
if TmpZ < TmpX
X(t,:)=Z(1,:); Y(t,1)=TmpZ;
else
X(t,:)=X(t,:); Y(t,1)=TmpX;
end
end

その他の回答 (1 件)

Axel Groniewsky
Axel Groniewsky 2019 年 5 月 7 日
Dear Edric,
Thank you for dealing with my question. This part of the code runs fine yet, the error message says that 'The variable X in a parfor cannot be classified.' The other part of the code I have inside the parfor loop is:
R=randperm(T);
R(find(R==t))=[];
V=X(R(1),:)+F*(X(R(2),:)-X(R(3),:));
I do not alter X rather creating V. But you are right, without V it runs smoothly. Is there a way to define V in a parfor supported way?
Thanks!
  2 件のコメント
Edric Ellis
Edric Ellis 2019 年 5 月 7 日
This code is not order-independent, and cannot run inside parfor. Basically, the problem is that you're accessing elements of X that might or might not yet have been updated.
Axel Groniewsky
Axel Groniewsky 2019 年 5 月 8 日
Another idea I tried is to save X after every iteration and load it before V vector is calculated. This way I end up having Transparency violation error. Is there another way you can think of which could dissolve this issue and let me use population-based metaheuristics with parfor? (I already tried the built-in GA but my own codes provide more accurate results.)
Thanks!

サインインしてコメントする。

カテゴリ

Help Center および File ExchangeLoops and Conditional Statements についてさらに検索

Community Treasure Hunt

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

Start Hunting!

Translated by