このページは機械翻訳を使用して翻訳されました。最新版の英語を参照するには、ここをクリックします。
createOptimProblem
最適化問題構造を作成する
説明
は、problem = createOptimProblem(solverName)solverName ソルバー用の空の最適化問題構造を作成します。
は、1 つ以上の名前と値の引数を使用して追加オプションを指定します。problem = createOptimProblem(solverName,Name,Value)
例
次の仕様で問題構造を作成します。
fminconソルバー"interior-point"アルゴリズムランダム2次元初期点
x0ローゼンブロックの目的としての機能
–2の下限
2の上限
2 次元変数 の Rosenbrock 関数は です (詳細については、[最適化] ライブ エディター タスクまたはソルバーを使用した制約付き非線形問題 を参照してください)。「interior-point" アルゴリズム」を指定するには、「optimoptions」を使用してオプションを作成します。
anonrosen = @(x)(100*(x(2) - x(1)^2)^2 + (1-x(1))^2); opts = optimoptions(@fmincon,Algorithm="interior-point"); rng default % For reproducibility problem = createOptimProblem("fmincon",... x0=randn(2,1),... objective=anonrosen,... lb=[-2;-2],... ub=[2;2],... options=opts);
problem.x0 から始めて fmincon を呼び出して問題を解決します。
[x,fval] = fmincon(problem)
Local minimum possible. Constraints satisfied. fmincon stopped because the size of the current step is less than the value of the step size tolerance and constraints are satisfied to within the value of the constraint tolerance. <stopping criteria details>
x = 2×1
1.0000
1.0000
fval = 2.0603e-11
GlobalSearch に電話して、より良い解決策を探してください。
gs = GlobalSearch; [x2,fval2] = run(gs,problem)
GlobalSearch stopped because it analyzed all the trial points. All 16 local solver runs converged with a positive local solver exit flag.
x2 = 2×1
1.0000
1.0000
fval2 = 2.1093e-11
この場合、fmincon と GlobalSearch は両方とも同じ解に到達します。
入力引数
最適化ソルバー。次のいずれかとして指定します。
GlobalSearchには、"fmincon"または@fminconを指定します。MultiStartの場合は、"fmincon"または@fmincon、"fminunc"または@fminunc、"lsqnonlin"または@lsqnonlin、あるいは"lsqcurvefit"または@lsqcurvefitを指定します。
例: "fmincon"
データ型: char | string | function_handle
名前と値の引数
オプションの引数のペアを Name1=Value1,...,NameN=ValueN として指定します。ここで、Name は引数名で、Value は対応する値です。名前と値の引数は他の引数の後に指定しなければなりませんが、ペアの順序は重要ではありません。
R2021a より前では、コンマを使用して名前と値をそれぞれ区切り、Name を引用符で囲みます。
例: createOptimProblem("fmincon","x0",x0,"objective",fun,"lb",zeros(size(x0)))
線形等式制約。実数行列として指定されます。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
線形不等式制約。実数行列として指定されます。Aineq は M 行 nvars 列の行列で、M は不等式の数です。
Aineq は M 個の線形不等式を符号化します。
Aineq*x <= bineq,
ここで、x は nvars 個の変数 x(:) の列ベクトル、bineq は M 個の要素をもつ列ベクトルです。
例えば、
x1 + 2x2 ≤ 10
3x1 + 4x2 ≤ 20
5x1 + 6x2 ≤ 30,
次の制約を与えます:
Aineq = [1,2;3,4;5,6]; bineq = [10;20;30];
例: 制御変数の合計が 1 以下になるように指定するには、制約 Aineq = ones(1,N) と bineq = 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
実数ベクトルで指定される線形不等式制約です。bineq は、行列 Aineq に関連する M 要素ベクトルです。bineq を行ベクトルとして渡す場合、ソルバーは bineq を列ベクトル bineq(:) に内部的に変換します。
bineq は M 個の線形不等式を符号化します。
Aineq*x <= bineq,
ここで、x は N 個の変数 x(:) の列ベクトル、Aineq は M 行 N 列の行列です。
例えば、
x1 + 2x2 ≤ 10
3x1 + 4x2 ≤ 20
5x1 + 6x2 ≤ 30,
次の制約を与えます:
Aineq = [1,2;3,4;5,6]; bineq = [10;20;30];
例: 制御変数の合計が 1 以下になるように指定するには、制約 Aineq = ones(1,N) と bineq = 1 を指定します。
データ型: double
下限は、実数ベクトルまたは double の配列として指定されます。lb は、lb ≤ x ≤ ub 内の要素ごとの下限を表します。
createOptimProblem は配列 lb をベクトル lb(:) に内部的に変換します。
例: lb = [0;-Inf;4] は x(1) ≥ 0, x(3) ≥ 4 を意味します。
データ型: double
非線形制約。関数ハンドルまたは関数名として指定されます。nonlcon は、配列 x を受け入れ、2 つの配列 c(x) と ceq(x) を返す関数です。
c(x)は、xにある非線形不等式制約の配列です。ソルバーは、cのすべてのエントリに対してc(x) <= 0を満たそうとします。ceq(x)は、xにある非線形等式制約の配列です。ソルバーは、ceqのすべてのエントリに対してceq(x) = 0を満たそうとします。
たとえば、nonlcon は次の MATLAB® 関数になります。
function [c,ceq] = nonlcon(x) c = ... % Compute nonlinear inequalities at x. ceq = ... % Compute nonlinear equalities at x.
詳細については、非線形制約を参照してください。
データ型: char | string | function_handle
関数ハンドルまたは関数名として指定される目的関数。
lsqnonlinとlsqcurvefitを除くすべてのソルバーの場合、目的関数は配列xを受け入れ、スカラーを返す必要があります。SpecifyObjectiveGradientオプションがtrueの場合、目的関数は 2 番目の出力、つまり目的の勾配を表すベクトルを返す必要があります。詳細は、funを参照してください。lsqnonlinの場合、目的関数はベクトルxを受け入れ、ベクトルを返す必要があります。SpecifyObjectiveGradientオプションがtrueの場合、目的関数は 2 番目の出力、つまり目的のヤコビアンを表す行列を返す必要があります。詳細は、funを参照してください。lsqcurvefitの場合、目的関数は 2 つの入力xとxdataを受け入れ、ベクトルを返す必要があります。SpecifyObjectiveGradientオプションがtrueの場合、目的関数は 2 番目の出力、つまり目的のヤコビアンを表す行列を返す必要があります。詳細は、funを参照してください。
例: @sin
例: "sin"
データ型: char | string | function_handle
最適化オプション。optimoptions の出力として指定されます。
例: optimoptions("fmincon","SpecifyObjectiveGradient",true)
上限は、実数ベクトルまたは double の配列として指定されます。ub は、lb ≤ x ≤ ub 内の要素ごとの上限を表します。
createOptimProblem は配列 ub をベクトル ub(:) に内部的に変換します。
例: ub = [Inf;4;10] は x(2) ≤ 4, x(3) ≤ 10 を意味します。
データ型: double
初期点。実数ベクトルまたは実数配列として指定されます。ソルバーは、x0 の要素数および x0 のサイズを使用して、fun が受け入れる変数の数およびサイズを決定します。
例: x0 = [1,2,3,4]
データ型: double
モデルの入力データ。実数ベクトルまたは実数配列として指定されます。モデルは次のとおりです。
ydata = fun(x,xdata),
ここで、xdata および ydata は固定配列、x は二乗和の最小値の探索のために lsqcurvefit によって変更されるパラメーターの配列です。
例: xdata = [1,2,3,4]
データ型: double
モデルの応答データ。実数ベクトルまたは実数配列として指定されます。モデルは次のとおりです。
ydata = fun(x,xdata),
ここで、xdata および ydata は固定配列、x は二乗和の最小値の探索のために lsqcurvefit によって変更されるパラメーターの配列です。
ydata 配列のサイズおよび形状は、配列 fun(x0,xdata) と同じでなければなりません。
例: ydata = [1,2,3,4]
データ型: double
出力引数
バージョン履歴
R2010a で導入
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)