このページは機械翻訳を使用して翻訳されました。最新版の英語を参照するには、ここをクリックします。
問題ベースの多目的最適化の手順
このトピックでは、問題ベースのアプローチで多目的最適化を設定する方法を示し、結果と初期点の形式について詳しく説明します。例については、多目的最適化のためのパレート フロント、問題ベースを参照してください。
複数の目的関数を指定する
複数の目的関数を次の 2 つの方法のいずれかで指定します。
最適化式 - ベクトルまたは配列値を持つ最適化式を指定します。たとえば、この目的関数は 3 つの値のベクトルを返します。
prob.Objective = [sin(x),cos(x),1 - x.^2];
構造 — それぞれがスカラーに評価される最適化式の構造を指定します。たとえば、次の目的関数は 3 つの目的コンポーネントを持つ構造を返します。
prob.Objective.sin = sin(x); prob.Objective.cos = cos(x); prob.Objective.quad = 1 - x^2;
複数の客観的な感覚を指定する(最大化または最小化)
目的関数の指定方法に応じて、最大化または最小化を意味する目的関数の意味を指定します。
目的は最適化の表現です。問題内のすべての目的は同じ目的を持ちます。以下に例を示します。
prob.ObjectiveSense = "max";目的は構造です — 各目的関数は独自の意味を持つことができます。
prob.ObjectiveSense構造体には、prob.Objective構造体と同じフィールドがあります。以下に例を示します。prob.ObjectiveSense.sin = "minimize"; prob.ObjectiveSense.cos = "maximize"; prob.ObjectiveSense.quad = "max";
デフォルトのセンスは "minimize" です。
多目的解のデータ形式
返される sol 出力は、OptimizationValues オブジェクトのベクトルです。各オブジェクトには、パレート フロントの 1 つのポイントにおける最適化変数と目的関数の値が含まれます。問題に非線形制約がある場合、sol には各解点における非線形制約違反も含まれます。
返される fval 出力は、各行が 1 つの解点を表し、各列が 1 つの目的関数を表す行列です。fval 出力は、sol 出力とは異なり、数値です。目的関数の値は sol オブジェクトから取得できます。ただし、fval では値がより簡単に見つかります。
sol で paretoplot を呼び出すことによって、結果のパレート フロントを2 次元または 3 次元でプロットできます。例については、多目的最適化のためのパレート フロント、問題ベースを参照してください。
多目的問題の初期点の供給
多目的問題の初期点の指定はオプションです。ただし、そうすることで、より良い解決策を得られる場合もあります。利点を示す例については、多目的最適化のためのパレート フロント、問題ベース を参照してください。
初期点を指定するには、optimvalues 関数を使用して OptimizationValues オブジェクトを作成します。例については、optimvalues のリファレンス ページを参照してください。
ハイブリッド関数
より正確なソリューションを得るために、gamultiobj ソルバーはオプションで fgoalattain を呼び出すことができます。例については、溶接梁の設計最適化を参照してください。問題ベースのワークフローでこのハイブリッド関数を使用するには、HybridFcn オプションを "fgoalattain" に設定します。
options = optimoptions('gamultiobj',HybridFcn="fgoalattain");
solve 呼び出しにソルバーとオプションの引数を含めます。
[sol,fval,exitflag,output] = solve(prob,... Solver="gamultiobj",... Options=options);
パレート集合を表示
ソルバーの実行中にパレート集合を 2 次元または 3 次元で表示するには、プロット オプションを設定します。
gamultiobj関数の場合は、PlotFcnオプションを'gaplotpareto'に設定します。options = optimoptions("gamultiobj",PlotFcn="gaplotpareto"); sol = solve(prob,Options=options)
paretosearch関数の場合は、PlotFcnオプションを'psplotparetof'に設定します。
ソルバーが終了した後にパレート集合を表示するには、ソリューションに対して paretoplot を呼び出します。
sol = solve(prob); paretoplot(sol)
例については、多目的最適化のためのパレート フロント、問題ベースを参照してください。
3 つ以上の目的がある場合、paretoplot ではどの目的をプロットするかを選択できます。詳細については、paretoplot のリファレンス ページを参照してください。
参考
gamultiobj | paretosearch | solve | optimvalues | paretoplot