2017-09-10 3 views
1

lsqnonlin()を1000回呼び出すコードを実行しています。私はコードをプロファイリングし、optimoptions()が約40%の時間を費やしていることを発見しました。代わりにopt1 = optimotpions()を1回設定し、opt1を引数としてlsqnonlin()を実行する関数に渡し、パフォーマンスの向上が見られました。Matlabプロファイラ:optimoptions()はlsqnonlin()とほぼ同じ時間をとります

longoptimoptions()を長く取っているのは何ですか?

答えて

0

[OK]を、のはoptimoptions機能は、内部的に何をするかを見てみましょう:

open optimoptions 

機能のコア部分は、以下の行で表されるように思え:

options = optim.options.createSolverOptions(solverName, varargin{:}); 

はのは、見てみましょうcreateSolverOptionsの機能もご覧ください:

open optim.options.createSolverOptions 

ビンゴ!私たちはここにグローバル最適化ツールボックスのインストールがあるかどうかを確認

:コード内のコメントは、なぜoptimoptions理由を明らかにし、ループ内で複数回呼び出された場合、全体的なパフォーマンスに大きな影響を与える可能性があります。さらに、これらのツールボックスファイルはこの関数の呼び出しの間に削除されないものとします。

ここでライセンスチェックを実行して、ユーザーがグローバル最適化ツールボックスオプションのセットを作成できるかどうかを確認することはありません。ライセンスチェックが正しいことを確認するには、この関数が呼び出されるたびにライセンスをチェックする必要があります。 optimoptionsがタイトなループで複数回呼び出されると、これは非常に高価です。

このように、ユーザーがグローバル最適化ツールボックスをインストールしてもライセンスは使用できない場合は、ライセンスマネージャーがエラーを投げます。

オプションオブジェクトの作成プロセスは、コードに含まれているライセンスチェックによって大幅に遅くなります。その上に、optimoptions関数とそのサブ関数は、多くのtry-catchブロック、regexの抽出と変換、for loopsの中に含まれています。

関連する問題