Main Content

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

packfcn

目的関数と非線形制約関数を組み合わせる

R2020a 以降

説明

objconstr = packfcn(obj,nlconst) は、目的関数 obj と非線形制約関数 nlconst を関数 objconstr に結合します。関数 objconstr(x) は、結合された surrogateopt 目的関数と制約関数に適した構造を返します。surrogateopt 構造構文と他のソルバー間の変換については、surrogateopt 形式と他のソルバー形式の間で非線形制約を変換する を参照してください。

すべて折りたたむ

[最適化] ライブ エディター タスクまたはソルバーを使用した制約付き非線形問題 の目的と制約を surrogateopt に適した形式に結合します。

目的関数を匿名関数 ros(x) として作成します。

ros = @(x)100*(x(2) - x(1)^2)^2 + (1 - x(1))^2;

この例の最後に表示される非線形制約ヘルパー関数 unitdisk を作成します。ヘルパー関数を unitdisk.m という名前で現在のフォルダーに保存します。

目的関数と非線形制約関数を surrogateopt に適した 1 つの関数に結合します。

objconstr = packfcn(ros,@unitdisk);

境界を指定し、surrogateopt を使用して問題を解きます。

lb = [-2 -2];
ub = -lb;
[x,fval] = surrogateopt(objconstr,lb,ub)

surrogateopt stopped because it exceeded the function evaluation limit set by 
'options.MaxFunctionEvaluations'.
x = 1×2

    0.7865    0.6183

fval = 0.0456

次のコードは、補助関数 unitdisk を作成します。

function [c,ceq] = unitdisk(x)
c = x(1)^2 + x(2)^2 - 1;
ceq = [ ];
end

入力引数

すべて折りたたむ

関数ハンドルまたは関数名として指定される目的関数。

結果の関数 objconstr にはフィールド Fval が含まれます。

objconstr.Fval = obj

データ型: char | string | function_handle

関数ハンドルまたは関数名として指定される非線形制約関数。一般に、非線形制約関数は 2 つの出力を返します。

[c,ceq] = nlconst(x)

出力 c は、エントリが不等式制約 c(x) ≤ 0 を表すベクトルまたは配列です。出力 ceq は、エントリが不等式制約 c(x) = 0 を表すベクトルまたは配列です。packfcnceq 出力を破棄します。

結果の関数 objconstr にはフィールド Ineq が含まれます。

objconstr.Ineq = c

データ型: char | string | function_handle

出力引数

すべて折りたたむ

目的関数と制約関数を組み合わせたもので、関数ハンドルとして返されます。関数 objconstr(x) は、フィールド FvalIneq を持つ構造体を返します。

  • objconstr.Fval(x) は目的関数 obj(x) です。

  • objconstr.Ineq(x) は非線形不等式制約関数 c(x) であり、 nlconst(x) の最初の出力です。

バージョン履歴

R2020a で導入