fmincon 関数で glabal 変数を含む目的関数を最適化するとき、UseParallel オプションを true にすると、エラーになるのはなぜですか?
2 views (last 30 days)
Show older comments
MathWorks Support Team
on 4 Jun 2020
Answered: MathWorks Support Team
on 4 Jun 2020
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
on 4 Jun 2020
これは、global 変数を使用しているために発生します。
Prallel Computing Toolbox の parfor ループの内部では、global 変数(および persistent 変数) を含むことができず、同様に UsePrallel オプションを true にして並列化した場合も、使用することができません。
回避方法として、Simulink モデルのシミュレーションを実行する sim関数で SrcWorkspace オプションを current に設定して、シミュレーション結果を目的関数で共有するようにしてください。
以下の例が参考になります。
0 Comments
More Answers (0)
See Also
Categories
Find more on パフォーマンスの手動最適化 in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!