このペ,ジの翻訳は最新ではありません。ここをクリックして,英語の最新版を参照してください。
非線形制約
いくかの最適化ソルバは,fmincon
、fseminf
、fgoalattain
、fminimax
、全局优化工具箱ソルバ遗传算法
(全局优化工具箱)、gamultiobj
(全局优化工具箱)、patternsearch
(全局优化工具箱)、paretosearch
(全局优化工具箱)、GlobalSearch
(全局优化工具箱)、MultiStart
(全局优化工具箱)などの非線形制約を受け入れます。非線形制約では、平滑化関数で表すことができる任意の領域に解を制限できます。
非線形不等式制約はC (x)≤0の形式をもます。ここでcは制約のベクトルであり,各制約に1の要素が対応します。同様に,非線形等式制約はCeq (x) = 0の形式になります。
メモ
非線形制約関数はc
と量表信
,まり不等式と等式制約の両方を必ず出力します。これは両方共が存在しない場合でも当てはまります。存在しない制約には空のエントリ[]
を返します。
たとえば,以下の不等式を制約として考えてみましょう。
これらの制約を関数ファ@ @ルに以下のように記述します。
函数测查[c] = ellipseparabola c (1) (x) = (x (1) ^ 2) / 9 + (x (2) ^ 2) / 4 - 1;C (2) = x(1)^2 - x(2) - 1;Ceq = [];结束
ellipseparabola
は,非線形等式制約関数量表信
に空のエントリ[]
を返します。また2番目の不等式は≤0の形式に書き換えられます。
関数Exp (x(1) + 2*x(2))
をellipseparabola
制約の下で最小化します。
Fun = @(x)exp(x(1) + 2*x(2));Nonlcon = @ellipseparabola;X0 = [0 0];A = [];%无其他约束B = [];Aeq = [];Beq = [];Lb = [];Ub = [];x = fmincon(fun,x0,A,b,Aeq,beq,lb,ub,nonlcon)
找到满足约束条件的局部最小值。优化完成是因为目标函数在可行方向上不递减,在最优性容差值范围内,约束条件满足在约束容差值范围内。X = -0.2500 -0.9375
制約関数に勾配を含める
Cとceqの勾配を指定すると,ソルバ,の実行速度が上がり,より信頼できる結果が得られます。
勾配を与えることで別の利点があります。ソルバ,は,x
それ自体は実行可能だが,x
の周囲の有限差分は常に実行不可能な点へ導くような点x
に到達することがあります。この場合,ソルバ,は失敗するか途中で停止する可能性があります。勾配を与えることで,ソルバ,は続行できます。
勾配情報を含めるには以下のように条件付きの関数を記述します。
函数[c,ceq,gradc,gradceq] = ellipseparabola(x) c(1) = x(1)^2/9 + x(2)^2/4 - 1;C (2) = x(1)^2 - x(2) - 1;Ceq = [];如果Nargout > 2 gradc = [2*x(1)/ 9,2 *x(1);...x (2) / 2, 1];Gradceq = [];结束
条件付き関数の詳細は,スカラ,目的関数の記述を参照してください。勾配行列は以下の形式をもます。
gradc
我,我=[∂c
(j) /∂x我]。
勾配行列の最初の列はc (1)
と関連し,2番目の列はc (2)
と関連します。この微分形式はヤコビアンの転置型になります。
ソルバ,に非線形制約の勾配を使用させるには,optimoptions
を使用してこれらが存在することを指示します。
选项= optimoptions(@fmincon,“SpecifyConstraintGradient”,真正的);
オプション構造体を必ずソルバ,に渡すようにしてください。
[x, fval] = fmincon (Aeq @myobj x0, A, b,说真的,磅,乌兰巴托,…@ellipseparabola选项)
符号数学工具箱™のライセンスをおもちの場合は,勾配とヘッシアンを自動的に計算することができます(符号数学工具箱を使用した勾配とヘッシアンの計算を参照)。
非線形制約の無名関数
非線形制約関数では,2の出力が返されなければなりません。最初の出力は非線形不等式に,2番目の出力は非線形等式に対応します。
無名関数は1の出力のみを返します。では,無名関数を非線形制約として記述するにはどうすればよいでしょうか。
関数交易
は複数の出力を生成します。たとえば,以下の非線形不等式があるとします。
非線形等式は以下のとおりとします。
.
非線形制約関数は以下のように記述します。
C = @(x)[x(1)²/9 + x(2)²/4 - 1;X (1)^2 - X (2) - 1];Ceq = @(x)tanh(x(1)) - x(2);Nonlinfcn = @(x)deal(c(x),ceq(x));
関数
をnonlinfcn
の制約に従って最小化するには,fmincon
を使用します。
Obj = @(x)cosh(x(1))+sinh(x(2));Opts = optimoptions(@fmincon,“算法”,“sqp”);z = fmincon (obj, [0, 0 ],[],[],[],[],[],[], nonlinfcn选择)
找到满足约束条件的局部最小值。优化完成是因为目标函数在可行方向上不递减,在最优性容差值范围内,约束条件满足在约束容差值范围内。
z =2×1-0.6530 - -0.5737
結果の点z
が制約をどの程度満たすかをチェックするには,nonlinfcn
を使用します。
[cout,ceqout] = nonlinfcn(z)
cout =2×1-0.8704 0
Ceqout = 1.1102e-16
z
は,ConstraintTolerance
制約の既定の許容誤差,1 e-6
内ですべての制約を満たしています。
無名目的関数の詳細は,無名関数の目的関数を参照してください。
参考
fmincon
|fgoalattain
|遗传算法
(全局优化工具箱)|patternsearch
(全局优化工具箱)|GlobalSearch
(全局优化工具箱)|MultiStart
(全局优化工具箱)