fmincon 関数で glabal 変数を含む目的関数を​最適化するとき、Us​eParallel オプションを true にすると、エラーになるのはなぜですか?

2 views (last 30 days)
fmincon関数で Simulink モデルの実行を含む目的関数を最適化しています。
Simulink モデルのシミュレーション結果を目的関数で共有するために、global 変数を使用していますが、この状態で optimoptions 関数で UseParallel オプションを true に設定し、並列処理を行おうとすると、以下のようなエラーが発生します。
エラー: myfunc(line 22)
この型の変数ではドット インデックスはサポートされていません。
エラー: @(x)myfunc(x,sim_file_name)
エラー: finDiffEvalAndChkErr
エラー: parfinitedifferences
エラー: parfinitedifferences
エラー: computeFinDiffGradAndJac
エラー: barrier
エラー: fmincon (line 824)
[X,FVAL,EXITFLAG,OUTPUT,LAMBDA,GRAD,HESSIAN] = barrier(funfcn,X,A,B,Aeq,Beq,l,u,confcn,options.HessFcn, ...
エラー: opt_test (line 57)
[x,fval,exitflag,output] = fmincon(obj1,x0,[],[],[],[],[],[],[],options);

Accepted Answer

MathWorks Support Team
MathWorks Support Team on 4 Jun 2020
これは、global 変数を使用しているために発生します。
Prallel Computing Toolbox の parfor ループの内部では、global 変数(および persistent 変数) を含むことができず、同様に UsePrallel オプションを true にして並列化した場合も、使用することができません。
回避方法として、Simulink モデルのシミュレーションを実行する sim関数で SrcWorkspace オプションを current に設定して、シミュレーション結果を目的関数で共有するようにしてください。
以下の例が参考になります。

More Answers (0)

Tags

No tags entered yet.

Products


Release

R2018b

Community Treasure Hunt

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

Start Hunting!