このページは機械翻訳を使用して翻訳されました。最新版の英語を参照するには、ここをクリックします。
paretosearch
パレート セット内の点の検出
構文
説明
例
2 次元変数の 2 つの目的関数のパレート フロント上の点を見つけます。
fun = @(x)[norm(x-[1,2])^2;norm(x+[2,1])^2]; rng default % For reproducibility x = paretosearch(fun,2);
Pareto set found that satisfies the constraints. Optimization completed because the relative change in the volume of the Pareto set is less than 'options.ParetoSetChangeTolerance' and constraints are satisfied to within 'options.ConstraintTolerance'.
解を散布図としてプロットします。
plot(x(:,1),x(:,2),'m*') xlabel('x(1)') ylabel('x(2)')

理論的には、この問題の解は [-2,-1] から [1,2] への直線です。paretosearch は、この直線に近い等間隔の点を返します。
線形制約 x(1) + x(2) <= 1 に従う 2 次元の 2 目的問題のパレート フロントを作成します。
fun = @(x)[norm(x-[1,2])^2;norm(x+[2,1])^2]; A = [1,1]; b = 1; rng default % For reproducibility x = paretosearch(fun,2,A,b);
Pareto set found that satisfies the constraints. Optimization completed because the relative change in the volume of the Pareto set is less than 'options.ParetoSetChangeTolerance' and constraints are satisfied to within 'options.ConstraintTolerance'.
解を散布図としてプロットします。
plot(x(:,1),x(:,2),'m*') xlabel('x(1)') ylabel('x(2)')

理論的には、この問題の解は [-2,-1] から [0,1] への直線です。paretosearch は、この直線に近い等間隔の点を返します。
境界 x(1) >= 0 および x(2) <= 1 に従って、2 次元の 2 つの目的の問題のパレート フロントを作成します。
fun = @(x)[norm(x-[1,2])^2;norm(x+[2,1])^2]; lb = [0,-Inf]; % x(1) >= 0 ub = [Inf,1]; % x(2) <= 1 rng default % For reproducibility x = paretosearch(fun,2,[],[],[],[],lb,ub);
Pareto set found that satisfies the constraints. Optimization completed because the relative change in the volume of the Pareto set is less than 'options.ParetoSetChangeTolerance' and constraints are satisfied to within 'options.ConstraintTolerance'.
解を散布図としてプロットします。
plot(x(:,1),x(:,2),'m*') xlabel('x(1)') ylabel('x(2)')

すべての解点は制約境界 x(1) = 0 または x(2) = 1 上にあります。
境界 -1.1 <= x(i) <= 1.1 と非線形制約 norm(x)^2 <= 1.2 に従う 2 次元の 2 目的問題のパレート フロントを作成します。非線形制約関数はこの例の最後に表示され、この例をライブ スクリプトとして実行すると機能します。それ以外の場合この例を実行するには、非線形制約関数を MATLAB ® パス上のファイルとして含めます。
非線形制約の効果をよりよく確認するには、大きなパレート セット サイズを使用するようにオプションを設定します。
rng default % For reproducibility fun = @(x)[norm(x-[1,2])^2;norm(x+[2,1])^2]; lb = [-1.1,-1.1]; ub = [1.1,1.1]; options = optimoptions('paretosearch','ParetoSetSize',200); x = paretosearch(fun,2,[],[],[],[],lb,ub,@circlecons,options);
Pareto set found that satisfies the constraints. Optimization completed because the relative change in the volume of the Pareto set is less than 'options.ParetoSetChangeTolerance' and constraints are satisfied to within 'options.ConstraintTolerance'.
解を散布図としてプロットします。円形制約境界のプロットを含めます。
figure plot(x(:,1),x(:,2),'k*') xlabel('x(1)') ylabel('x(2)') hold on rectangle('Position',[-1.2 -1.2 2.4 2.4],'Curvature',1,'EdgeColor','r') xlim([-1.2,0.5]) ylim([-0.5,1.2]) axis square hold off

正の x(1) 値または負の x(2) 値を持つ解点は、非線形制約境界に近くなります。
function [c,ceq] = circlecons(x) ceq = []; c = norm(x)^2 - 1.2; end
paretosearch の進行状況を監視するには、'psplotparetof' プロット関数を指定します。
fun = @(x)[norm(x-[1,2])^2;norm(x+[2,1])^2]; options = optimoptions('paretosearch','PlotFcn','psplotparetof'); lb = [-4,-4]; ub = -lb; x = paretosearch(fun,2,[],[],[],[],lb,ub,[],options);
Pareto set found that satisfies the constraints. Optimization completed because the relative change in the volume of the Pareto set is less than 'options.ParetoSetChangeTolerance' and constraints are satisfied to within 'options.ConstraintTolerance'.

解は半径 18 の 1/4 円弧のように見え、解析解であることが示されます。
x と fval の両方の出力を使用して paretosearch を呼び出すことにより、関数空間とパラメーター空間の両方でパレート フロントを取得します。関数空間とパラメーター空間の両方でパレート集合をプロットするためのオプションを設定します。
fun = @(x)[norm(x-[1,2])^2;norm(x+[2,1])^2]; lb = [-4,-4]; ub = -lb; options = optimoptions('paretosearch','PlotFcn',{'psplotparetof' 'psplotparetox'}); rng default % For reproducibility [x,fval] = paretosearch(fun,2,[],[],[],[],lb,ub,[],options);
Pareto set found that satisfies the constraints. Optimization completed because the relative change in the volume of the Pareto set is less than 'options.ParetoSetChangeTolerance' and constraints are satisfied to within 'options.ConstraintTolerance'.

目的関数空間における解析解は、半径 18 の 1/4 円弧です。パラメーター空間では、解析解は [-2,-1] から [1,2] までの直線になります。解点は分析曲線に近くなります。
パレート集合の解決プロセスを監視するためのオプションを設定します。また、解決プロセスを理解できるように、paretosearch からさらに多くの出力を取得します。
options = optimoptions('paretosearch','Display','iter',... 'PlotFcn',{'psplotparetof' 'psplotparetox'}); fun = @(x)[norm(x-[1,2])^2;norm(x+[2,1])^2]; lb = [-4,-4]; ub = -lb; rng default % For reproducibility [x,fval,exitflag,output] = paretosearch(fun,2,[],[],[],[],lb,ub,[],options);
Iter F-count NumSolutions Spread Volume 0 60 11 - 3.7872e+02 1 386 12 7.6126e-01 3.4654e+02 2 702 27 9.5232e-01 2.9452e+02 3 1029 27 6.6332e-02 2.9904e+02 4 1357 36 1.3874e-01 3.0070e+02 5 1690 37 1.5379e-01 3.0200e+02 6 2014 50 1.7828e-01 3.0252e+02 7 2214 59 1.8536e-01 3.0320e+02 8 2344 60 1.9435e-01 3.0361e+02 9 2464 60 2.1055e-01 3.0388e+02 Pareto set found that satisfies the constraints. Optimization completed because the relative change in the volume of the Pareto set is less than 'options.ParetoSetChangeTolerance' and constraints are satisfied to within 'options.ConstraintTolerance'.

追加の出力を調べます。
fprintf('Exit flag %d.\n',exitflag)Exit flag 1.
disp(output)
iterations: 10
funccount: 2464
volume: 303.6076
averagedistance: 0.0250
spread: 0.2105
maxconstraint: 0
message: 'Pareto set found that satisfies the constraints. ↵↵Optimization completed because the relative change in the volume of the Pareto set ↵is less than 'options.ParetoSetChangeTolerance' and constraints are satisfied to within ↵'options.ConstraintTolerance'.'
rngstate: [1×1 struct]
パレート フロント制約残差を取得して調べます。線形不等式制約 sum(x) <= -1/2 と非線形不等式制約 norm(x)^2 <= 1.2 を使用して問題を作成します。精度を上げるには、パレート フロントに 200 個のポイントを使用し、1e-7 の ParetoSetChangeTolerance を使用し、自然な境界を -1.2 <= x(i) <= 1.2 にします。
非線形制約関数はこの例の最後に表示され、この例をライブ スクリプトとして実行すると機能します。それ以外の場合この例を実行するには、非線形制約関数を MATLAB ® パス上のファイルとして含めます。
fun = @(x)[norm(x-[1,2])^2;norm(x+[2,1])^2]; A = [1,1]; b = -1/2; lb = [-1.2,-1.2]; ub = -lb; nonlcon = @circlecons; rng default % For reproducibility options = optimoptions('paretosearch','ParetoSetChangeTolerance',1e-7,... 'PlotFcn',{'psplotparetof' 'psplotparetox'},'ParetoSetSize',200);
すべての出力を使用して paretosearch を呼び出します。
[x,fval,exitflag,output,residuals] = paretosearch(fun,2,A,b,[],[],lb,ub,nonlcon,options);
Pareto set found that satisfies the constraints. Optimization completed because the relative change in the volume of the Pareto set is less than 'options.ParetoSetChangeTolerance' and constraints are satisfied to within 'options.ConstraintTolerance'.

不等式制約により、制約のない集合と比較してパレート集合のサイズが縮小されます。返された残差を調べます。
fprintf('The maximum linear inequality constraint residual is %f.\n',max(residuals.ineqlin))The maximum linear inequality constraint residual is 0.000000.
fprintf('The maximum nonlinear inequality constraint residual is %f.\n',max(residuals.ineqnonlin))The maximum nonlinear inequality constraint residual is -0.000537.
返される残差の最大値は負であり、返されるポイントはすべて実行可能であることを意味します。返される残差の最大値はゼロに近いため、一部のポイントでは各制約がアクティブであることを意味します。
function [c,ceq] = circlecons(x) ceq = []; c = norm(x)^2 - 1.2; end
入力引数
最適化する目的関数。関数ハンドルまたは関数名として指定します。
fun は、長さ nvars の double 型実数行ベクトル x を受け取り、目的関数値の実数ベクトル F(x) を返す関数です。fun の書き方の詳細については、目的関数を計算する を参照してください。
UseVectorized オプションを true に設定すると、fun はサイズが n 行 nvars 列の行列を受け入れます。ここで、行列は n個体の個体を表します。fun はサイズが n 行 m 列の行列を返します。ここで、m は目的関数の数です。適応度関数をベクトル化するを参照してください。
例: @(x)[sin(x),cos(x)]
データ型: char | function_handle | string
変数の数。正の整数として指定されます。ソルバーは長さが nvars から fun までの行ベクトルを渡します。
例: 4
データ型: double
線形不等式制約。実数行列として指定されます。A は M 行 nvars 列の行列で、M は不等式の数です。
A は M 個の線形不等式を符号化します。
A*x <= b,
ここで、x は nvars 個の変数 x(:) の列ベクトル、b は M 個の要素をもつ列ベクトルです。
例えば、
x1 + 2x2 ≤ 10
3x1 + 4x2 ≤ 20
5x1 + 6x2 ≤ 30,
次の制約を与えます:
A = [1,2;3,4;5,6]; b = [10;20;30];
例: 制御変数の合計が 1 以下になるように指定するには、制約 A = ones(1,N) と b = 1 を指定します。
データ型: double
実数ベクトルで指定される線形不等式制約です。b は、行列 A に関連する M 要素ベクトルです。b を行ベクトルとして渡す場合、ソルバーは b を列ベクトル b(:) に内部的に変換します。
b は M 個の線形不等式を符号化します。
A*x <= b,
ここで、x は N 個の変数 x(:) の列ベクトル、A は M 行 N 列の行列です。
例えば、
x1 + 2x2 ≤ 10
3x1 + 4x2 ≤ 20
5x1 + 6x2 ≤ 30,
次の制約を与えます:
A = [1,2;3,4;5,6]; b = [10;20;30];
例: 制御変数の合計が 1 以下になるように指定するには、制約 A = ones(1,N) と b = 1 を指定します。
データ型: double
線形等式制約。実数行列として指定されます。Aeq は Me 行 nvars 列の行列で、Me は等式の数です。
Aeq は Me 個の線形等式を符号化します。
Aeq*x = beq,
ここで、x は N 個の変数 x(:) の列ベクトル、beq は Me 個の要素をもつ列ベクトルです。
例えば、
x1 + 2 x2 + 3 x3 = 10
2 x1 + 4 x2 + x3 = 20,
次の制約を与えます:
Aeq = [1,2,3;2,4,1]; beq = [10;20];
例: 制御変数の合計が 1 になるように指定するには、制約 Aeq = ones(1,N) と beq = 1 を指定します。
データ型: double
実数ベクトルで指定される線形等式制約です。beq は、行列 Aeq に関連する Me 要素ベクトルです。beq を行ベクトルとして渡す場合、ソルバーは beq を列ベクトル beq(:) に内部的に変換します。
beq は Me 個の線形等式を符号化します。
Aeq*x = beq,
ここで、x は N 個の変数 x(:) の列ベクトル、Aeq は Meq 行 N 列の行列です。
例えば、
x1 + 2 x2 + 3 x3 = 10
2 x1 + 4 x2 + x3 = 20,
次の制約を与えます:
Aeq = [1,2,3;2,4,1]; beq = [10;20];
例: 制御変数の合計が 1 になるように指定するには、制約 Aeq = ones(1,N) と beq = 1 を指定します。
データ型: double
下限は、実数ベクトルまたは倍精度浮動小数点配列として指定されます。lb は、lb ≤ x ≤ ub 内の要素ごとの下限を表します。
paretosearch は配列 lb をベクトル lb(:) に内部的に変換します。
例: lb = [0;-Inf;4] は x(1) ≥ 0, x(3) ≥ 4 を意味します。
データ型: double
上限は、実数ベクトルまたは double の配列として指定されます。ub は、lb ≤ x ≤ ub 内の要素ごとの上限を表します。
paretosearch は配列 ub をベクトル ub(:) に内部的に変換します。
例: ub = [Inf;4;10] は x(2) ≤ 4, x(3) ≤ 10 を意味します。
データ型: double
非線形制約。関数ハンドルまたは関数名として指定されます。nonlcon は、行ベクトル x を受け入れ、2 つの行ベクトル c(x) と ceq(x) を返す関数です。
c(x)は、xにおける非線形不等式制約の行ベクトルです。paretosearch関数は、cのすべてのエントリに対してc(x) <= 0を満たそうとします。ceq(x)は[]を返す必要があります。現在、paretosearchは非線形等式制約をサポートしていません。
UseVectorized オプションを true に設定すると、nonlcon はサイズが n 行 nvars 列の行列を受け入れます。ここで、行列は n個体の個体を表します。nonlcon は、最初の引数にサイズが n 行 mc 列の行列を返します。ここで、mc は非線形不等式制約の数です。適応度関数をベクトル化するを参照してください。
たとえば、x = paretosearch(@myfun,nvars,A,b,Aeq,beq,lb,ub,@mycon) の場合、mycon は次の MATLAB® 関数になります。
function [c,ceq] = mycon(x) c = ... % Compute nonlinear inequalities at x. ceq = [] % No nonlinear equalities at x.
詳細については、非線形制約を参照してください。
データ型: char | function_handle | string
最適化オプション。optimoptions の出力または構造体として指定されます。
{} はデフォルト値を示します。オプションの詳細については、パターン探索オプション を参照してください。
paretosearch のオプション
| オプション | 説明 | 値 |
|---|---|---|
| 制約に対する許容度。 オプション構造の場合は、 | 非負のスカラー | |
| 表示レベル。 | 'off' | 'iter' | 'diagnose' | {'final'} |
|
|
|
| 目的関数評価の最大数。 オプション構造の場合は、 | 非負整数 | |
| 反復最大回数 オプション構造の場合は、 | 非負整数 | |
| 最適化に許可される合計時間 (秒単位)。 オプション構造の場合は、 | 非負のスカラー | |
| メッシュ サイズの許容範囲。 オプション構造の場合は、 | 非負のスカラー | |
| ポーリングするパターンの最小部分。 | 0 から 1 までのスカラー | |
| 最適化関数が各反復で呼び出す関数。関数ハンドルまたは関数ハンドルのセル配列として指定します。 オプション構造の場合は、 | 関数ハンドルまたは関数ハンドルのセル配列 | |
| 反復ウィンドウ内の停止測定値の相対的な変化が
paretosearchアルゴリズムの定義を参照してください。 適用可能な測定値の相対的な変化が メモ
| 非負のスカラー | |
| パレート集合内の点の数。 | 正の整数 | |
| パターン探索からの出力のプロット。組み込みプロット関数の名前、関数ハンドル、または組み込みプロット関数または関数ハンドルの名前のセル配列として指定します。 オプション構造の場合は、 |
複数の目的がある場合: 目標はただ一つ: |
| パターン探索で使用されるポーリング戦略。 メモ 問題に線形等式制約がある場合は、MADS ポーリングは使用できません。 |
|
| 目的関数と非線形制約関数を並列に計算します。ベクトル化と並列化のオプションとGlobal Optimization Toolbox で並列処理を使用する方法を参照してください。 メモ ベクトル化または並列ポーリングを使用するには、 R2019a 以降、 |
|
| 関数がベクトル化されるかどうかを指定します。ベクトル化と並列化のオプションと目的関数と制約関数をベクトル化するを参照してください。 メモ ベクトル化または並列ポーリングを使用するには、 オプション構造の場合は、 |
|
例: options = optimoptions('paretosearch','Display','none','UseParallel',true)
次のフィールドをもつ構造体として指定される問題構造体です。
objective— 目的関数nvars— 変数の数Aineq— 線形不等式制約の行列bineq— 線形不等式制約のベクトルAeq— 線形等式制約の行列beq— 線形等式制約のベクトルlb—xの下限ub—xの上限nonlcon— 非線形制約関数solver—'paretosearch'options—optimoptionsで作成されたオプションrngstate— 乱数ジェネレータの状態をリセットするためのオプションフィールド
メモ
problem のすべてのフィールドは必須ですが、rngstate はオプションです。
データ型: struct
出力引数
パレート ポイントは、m 行 nvars 列の配列として返されます。ここで、m はパレート フロント上のポイントの数です。x の各行は、パレート フロント上の 1 つの点を表します。
パレート フロント上の関数値が、m 行 nf 列の配列として返されます。m はパレート フロント上の点の数、nf は目的関数の数です。fval の各行は、x の 1 つのパレート点における関数値を表します。
paretosearch が停止した理由が、この表の整数値の 1 つとして返されます。
| 終了フラグ | 停止条件 |
|---|---|
1 | 以下の条件のいずれかが満たされます。
|
0 | 反復回数が options.MaxIterations を超過、または関数評価の回数が options.MaxFunctionEvaluations を超過しています。 |
-1 | 最適化は出力関数またはプロット関数によって停止されます。 |
-2 | すべての制約を満たす点をソルバーが見つけられません。 |
-5 | 最適化時間が options.MaxTime を超過しています。 |
最適化プロセスに関する情報。次のフィールドをもつ構造体として返されます。
iterations— 反復回数の合計。funccount— 関数評価の合計回数。volume— 関数空間内のパレート点から形成された集合のハイパーボリューム。paretosearchアルゴリズムの定義を参照してください。averagedistance— 関数空間におけるパレート点の平均距離測定。paretosearchアルゴリズムの定義を参照してください。spread— パレート点の平均広がりの尺度。paretosearchアルゴリズムの定義を参照してください。maxconstraint— 最大制約違反(ある場合)。message— アルゴリズムが終了した理由。rngstate— アルゴリズムが開始する直前の MATLAB 乱数ジェネレーターの状態。'MADSPositiveBasis2N'などのランダム ポーリング メソッドを使用する場合、または初期母集団を作成するためのデフォルトの準ランダム メソッドを使用する場合は、rngstateの値を使用して出力を再現できます。gaと同じ手法について説明している 結果を再現する を参照してください。
詳細
アルゴリズム
paretosearch はパターン探索を使用して、パレート フロント上の点を探索します。詳細は、paretosearch アルゴリズムを参照してください。
代替機能
アプリ
[最適化] ライブ エディター タスクが paretosearch にビジュアル インターフェイスを提供します。
拡張機能
並列実行するには、'UseParallel' オプションを true に設定します。
options = optimoptions('solvername','UseParallel',true)
詳細については、Global Optimization Toolbox で並列処理を使用する方法を参照してください。
バージョン履歴
R2018b で導入
MATLAB Command
You clicked a link that corresponds to this MATLAB command:
Run the command by entering it in the MATLAB Command Window. Web browsers do not support MATLAB commands.
Web サイトの選択
Web サイトを選択すると、翻訳されたコンテンツにアクセスし、地域のイベントやサービスを確認できます。現在の位置情報に基づき、次のサイトの選択を推奨します:
また、以下のリストから Web サイトを選択することもできます。
最適なサイトパフォーマンスの取得方法
中国のサイト (中国語または英語) を選択することで、最適なサイトパフォーマンスが得られます。その他の国の MathWorks のサイトは、お客様の地域からのアクセスが最適化されていません。
南北アメリカ
- América Latina (Español)
- Canada (English)
- United States (English)
ヨーロッパ
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)