メインコンテンツ

このページは機械翻訳を使用して翻訳されました。最新版の英語を参照するには、ここをクリックします。

問題ベースの多目的最適化の手順

このトピックでは、問題ベースのアプローチで多目的最適化を設定する方法を示し、結果と初期点の形式について詳しく説明します。例については、多目的最適化のためのパレート フロント、問題ベースを参照してください。

複数の目的関数を指定する

複数の目的関数を次の 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 では値がより簡単に見つかります。

solparetoplot を呼び出すことによって、結果のパレート フロントを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 のリファレンス ページを参照してください。

参考

| | | |

トピック