主要内容

このペ,ジの翻訳は最新ではありません。ここをクリックして,英語の最新版を参照してください。

fmincon

制約付き非線形多変数関数の最小値を求める

説明

非線形計画法ソルバ,です。

以下で指定された問題の最小値を見けます。

最小值 x f x 这样 c x 0 c e x 0 一个 x b 一个 e x b e l b x u b

bおよびbeqはベクトル,一个およびAeqは行列,c (x)および量表(x)はベクトルを返す関数,f (x)はスカラーを返す関数です.f (x), c (x)量表(x)を非線形関数にすることもできます。

X, lbおよびubはベクトルまたは行列として渡すことができます。行列引数を参照してください。

x= fmincon (有趣的x0一个bは,x0から始まり,線形不等式A*x≤bを制約として,有趣的に記述されている乐趣で与えられた関数の値を最小にするxを求めようとします。x0はスカラ,ベクトル,行列のいずれかです。

メモ

追加パラメ,タ,の受け渡しは,必要に応じて他のパラメ,タ,を目的関数と非線形制約関数に渡す方法を説明します。

x= fmincon (有趣的x0一个bAeq说真的は,線形等式Aeq*x = beqA*x≤bを制約として,有趣的を最小化します。不等式が存在しない場合はA = []およびB = []と設定してください。

x= fmincon (有趣的x0一个bAeq说真的乌兰巴托は,解が常にx乌兰巴托の範囲に存在するように,設計変数xに上限と下限を定義します。等式が存在しない場合にはAeq = []Beq = []を設定してください。x(我)の下に非有界の場合はlb(i) = -无穷大を設定してください。x(我)の上に非有界の場合はub(i) =无穷大を設定してください。

メモ

問題の指定された入力範囲が矛盾する場合,fminconはエラ,をスロ,します。この場合,出力xx0で,fval[]です。

既定の“内点”アルゴリズムの場合,fminconは,範囲Lb≤x≤ubに違反する,または範囲に等しいx0の成分を範囲領域内に設定します。“trust-region-reflective”アルゴリズムの場合,fminconは違反する成分を範囲領域内に設定します。他のアルゴリズムの場合,fminconは違反する成分を最も近い範囲に設定します。範囲内の要素は変更されません。詳細は,反復は制約に違反する可能性ありを参照してください。

x= fmincon (有趣的x0一个bAeq说真的乌兰巴托nonlconは,nonlconで定義された非線形不等式c (x)または等式量表(x)を制約として最小化を行います。fminconは,C (x)≤0およびCeq (x) = 0の下で最適化を行います。範囲が存在しない場合は,Lb = []Ub = []を設定します。

x= fmincon (有趣的x0一个bAeq说真的乌兰巴托nonlcon选项は,选项で指定された最適化オプションを使って最小化します。optimoptionsを使用してこれらのオプションを設定してください。非線形不等式制約または非線形等式制約がない場合はNonlcon = []を設定します。

x= fmincon (问题は,问题で説明されている構造体问题の最小値を求めます。

xfval= fmincon(___は,どの構文でも,解xでの目的関数有趣的の値を返します。

xfvalexitflag输出= fmincon(___は上記に加え,fminconの終了条件を記述する値exitflagおよび最適化プロセスに関する情報を含む構造体输出を返します。

xfvalexitflag输出λ研究生黑森= fmincon(___は,さらに次のものを返します。

  • λ——解xにおけるラグランジュ乗数をフィ,ルドに含む構造体。

  • 研究生——解xでの有趣的の勾配。

  • 黑森——解xでの有趣的のヘッシアン。詳細は,Fminconヘッシアンを参照してください。

すべて折りたたむ

線形不等式制約がある場合の罗森布罗克関数の最小値を求めます。

目的関数有趣的が罗森布罗克関数になるように設定します。罗森布洛克関数は,最小化が難しいことがよく知られています。これは点(1,1)で目的関数の最小値0になります。詳細は,制約付き非線形問題の解法,ソルバ,ベ,スを参照してください。

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

[1,2]から開始して, x 1 + 2 x 2 1 を満たすように制約された最小値を求めます。形式Ax <= bのこの制約をA = [1,2]およびB = 1で表します。この制約は,解が制約なしの解(1,1)にならないことを意味するので注意してください。この点では x 1 + 2 x 2 3. > 1 になるためです。

X0 = [-1,2];A = [1,2];B = 1;x = fmincon(fun,x0,A,b)
找到满足约束条件的局部最小值。优化完成是因为目标函数在可行方向上不递减,在最优性容差值范围内,约束条件满足在约束容差值范围内。
x =1×20.5022 - 0.2489

線形不等式制約と線形等式制約の両方がある場合の罗森布罗克関数の最小値を求めます。

目的関数有趣的が罗森布罗克関数になるように設定します。

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

(0.5, 0)から開始して, x 1 + 2 x 2 1 および 2 x 1 + x 2 1 を満たすように制約された最小値を求めます。

  • 形式A*x <= bの線形不等式制約をA = [1,2]およびB = 1で表します。

  • 形式Aeq*x = beqの線形等式制約をAeq = [2,1]およびBeq = 1で表します。

X0 = [0.5,0];A = [1,2];B = 1;Aeq = [2,1];Beq = 1;x = fmincon(fun,x0,A,b,Aeq,beq)
找到满足约束条件的局部最小值。优化完成是因为目标函数在可行方向上不递减,在最优性容差值范围内,约束条件满足在约束容差值范围内。
x =1×20.4149 - 0.1701

範囲制約が存在する場合の目的関数の最小値を求めます。

目的関数は,2変数の単純な代数関数です。

有趣= @ (x) 1 + x (1) / (1 + x (2)) - 3 * x (1) * (2) + x (2) * (1 + x (1));

x が正の値 x 1 1 および x 2 2 である領域内を探索します。

Lb = [0,0];Ub = [1,2];

この問題には線形制約がないため,これらの引数を[]に設定します。

A = [];B = [];Aeq = [];Beq = [];

領域中央の初期点を試します。

X0 = (lb + ub)/2;

問題を解きます。

x = fmincon(fun,x0,A,b,Aeq,beq,lb,ub)
找到满足约束条件的局部最小值。优化完成是因为目标函数在可行方向上不递减,在最优性容差值范围内,约束条件满足在约束容差值范围内。
x =1×21.0000 - 2.0000

初期点を変えると異なる解が見かる場合があります。

X0 = X0 /5;x = fmincon(fun,x0,A,b,Aeq,beq,lb,ub)
找到满足约束条件的局部最小值。优化完成是因为目标函数在可行方向上不递减,在最优性容差值范围内,约束条件满足在约束容差值范围内。
x =1×2106× 0.4000 0.4000

どの解が優れているかを判断するには,目的関数値の取得を参照してください。

非線形制約付きの関数の最小値を求めます。

罗森布洛克関数が円内で最小化される点を範囲制約付きで求めます。

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

領域$0 \le x(1) \le 0.5$$0.2 \le x(2) \le 0.8$内を探索します。

Lb = [0,0.2];Ub = [0.5,0.8];

[1/3,1/3]を中心とした半径1/3の円内も探索します。次のコドをmatlab®パス上にあるcirclecon.mという名前のファ▪▪ルにコピ▪▪します。

版权所有The MathWorks, Inc.函数测查[c] = circlecon c (x) = (x (1) 1/3) ^ 2 + (x (2) 1/3) ^ 2 - (1/3) ^ 2;Ceq = [];

線形制約がないため,これらの引数を[]に設定します。

A = [];B = [];Aeq = [];Beq = [];

すべての制約を満たす初期点を選択します。

X0 = [1/4,1/4];

問題を解きます。

Nonlcon = @circlecon;x = fmincon(fun,x0,A,b,Aeq,beq,lb,ub,nonlcon)
找到满足约束条件的局部最小值。优化完成是因为目标函数在可行方向上不递减,在最优性容差值范围内,约束条件满足在约束容差值范围内。X = 0.5000 0.2500

反復の発生時に反復を表示し,異なるアルゴリズムを使用するようにオプションを設定します。

fmincon解法プロセスを確認するには,显示オプションを“通路”に設定します。また,“sqp”アルゴリズムを試します。このアルゴリズムは,既定の“内点”アルゴリズムより速いか正確である場合があります。

选项= optimoptions(“fmincon”“显示”“通路”“算法”“sqp”);

単位円板$||x||^2 \le 1$上の罗森布罗克関数の最小値を求めます。まず,非線形制約を表す関数を作成します。これをunitdisk.mという名前のファ▪▪ルとしてmatlab®パス上に保存します。

函数[c,ceq] = unitdisk(x) c = x(1)^2 + x(2)^2 - 1;Ceq = [];

残りの問題の仕様を作成します。その後,fminconを実行します。

趣味= @(x)100*(x(2)-x(1)^2)^2 + (1-x(1))^2;A = [];B = [];Aeq = [];Beq = [];Lb = [];Ub = [];Nonlcon = @unitdisk;X0 = [0,0];x = fmincon(fun,x0,A,b,Aeq,beq,lb,ub,nonlcon,options)
Iter Func-count Fval可行性步长规范一阶步长优化03 1.000000e+00 0.000e+00 1.000e+00 1.000e+00 0.000e+00 1.353e -01 1.107e+01 2 22 8.047847e-01 0.000e+00 8.235e-02 1.900e-01 1.330e+ 00 3 28 4.197517e-01 0.000e+00 3.430e-01 1.172e +00 4 31 2.733703e-01 0.000e+00 1.000e+00 5.254e-02 5.705e-01 5 34 2.397111e-01 0.000e+00 1.000e+00 5.498e -02 3.164e+00 6 37 2.036002e-01 0.000e+00 1.000e+00 5.960e-02 3.106e+00 7 401.164353e-01 0.000e+00 1.000e+00 1.459e-01 1.059e+00 1.383e +00 1.754e-01 7.383e+00 1.383e -02 0.000e+00 1.898e +00 1.547e-02 7.278e-01 10 49 4.533081e-02 2.898e-03 1.000e+00 1.492e-03 1.679e-03 12 55 4.567481e-02 1.000e+00 1.95e -06 1.501e-05 13 58 4.567481e-02 0.000e+00 1.000e+00 2.159e-09 1.511e-05本地最小可能值。约束满足。Fmincon停止,因为当前步长的大小小于步长公差的值,并且约束被满足到约束公差的值之内。X = 0.7864 0.6177

目的関数に勾配評価を含めて計算の速度や信頼性を高めます。

目的関数ファ@ @ルに条件付きの出力として勾配評価を含めます。詳細は,勾配とヘッシアンを含めるを参照してください。この目的関数は罗森布罗克関数になります。

$ $ f (x) = 100{\离开({{x_2} - x_1 ^ 2} \右)^ 2}+ & # xA; {(1 - {x_1}) ^ 2}, $ $

ここで勾配は

$ $ \微分算符左f (x) = \[{\开始{数组}{* {20}{c}} & # xA;{- 400 \离开({{x_2} - x_1 ^ 2} \右){x_1} - 2 \离开({1 - {x_1}} \右)}\ \ & # xA; {200 \ ({{x_2} - x_1 ^ 2} \右)}& # xA;结束\{数组}}\右]。$ $

函数[f,g] = rosenbrockwithgrad(x)计算目标fF = 100*(x(2) -x(1)²)²+ (1-x(1))²;如果Nargout > 1所需梯度百分比G = [-400*(x(2)-x(1)^2)*x(1)-2*(1-x(1));200 * (x (2) - x (1) ^ 2)];结束

このコ,ドをrosenbrockwithgrad.mという名前のファ▪▪ルとしてmatlab®パス上に保存します。

目的関数の勾配を使用するオプションを作成します。

选项= optimoptions(“fmincon”“SpecifyObjectiveGradient”,真正的);

問題のその他の入力を作成します。その後,fminconを呼び出します。

乐趣= @rosenbrockwithgrad;X0 = [-1,2];A = [];B = [];Aeq = [];Beq = [];Lb = [- 2,2];Ub = [2,2];Nonlcon = [];x = fmincon(fun,x0,A,b,Aeq,beq,lb,ub,nonlcon,options)
找到满足约束条件的局部最小值。优化完成是因为目标函数在可行方向上不递减,在最优性容差值范围内,约束条件满足在约束容差值范围内。X = 1.0000 1.0000

個別の引数の代わりに問題構造体を使用して既定ではないオプションと同じ問題を解きます。

オプションおよび問題構造体を作成します。フィ,ルド名および必要なフィールドについては、问题を参照してください。

选项= optimoptions(“fmincon”“显示”“通路”“算法”“sqp”);问题。选项=选项;问题。解算器=“fmincon”;问题。目标= @ (x) 100 * (x (2) - x (1) ^ 2) ^ 2 + (1 - x (1)) ^ 2;问题。x0=[0,0];

非線形制約関数unitdiskは,この例の終わりに掲載しています。非線形制約関数を问题に含めます。

问题。nonlcon=@unitdisk;

問題を解きます。

X = fmincon(问题)
Iter Func-count Fval可行性步长规范一阶步长优化03 1.000000e+00 0.000e+00 1.000e+00 1.000e+00 0.000e+00 1.353e -01 1.107e+01 2 22 8.047847e-01 0.000e+00 8.235e-02 1.900e-01 1.330e+ 00 3 28 4.197517e-01 0.000e+00 3.430e-01 1.172e +00 4 31 2.733703e-01 0.000e+00 1.000e+00 5.254e-02 5.705e-01 5 34 2.397111e-01 0.000e+00 1.000e+00 5.498e -02 3.164e+00 6 37 2.036002e-01 0.000e+00 1.000e+00 5.960e-02 3.106e+00 7 401.164353e-01 0.000e+00 1.000e+00 1.459e-01 1.059e+00 1.383e +00 1.754e-01 7.383e+00 1.383e -02 0.000e+00 1.898e +00 1.547e-02 7.278e-01 10 49 4.533081e-02 2.898e-03 1.000e+00 1.492e-03 1.679e-03 12 55 4.567481e-02 1.000e+00 1.95e -06 1.501e-05 13 58 4.567481e-02 0.000e+00 1.000e+00 2.159e-09 1.511e-05本地最小可能值。约束满足。Fmincon停止,因为当前步长的大小小于步长公差的值,并且约束被满足到约束公差的值之内。
x =1×20.7864 - 0.6177

反復表示および解は,既定ではないオプションと同じになります。

次のコ,ドは関数unitdiskを作成します。

函数[c,ceq] = unitdisk(x) c = x(1)^2 + x(2)^2 - 1;Ceq = [];结束

fval出力を指定してfminconを呼び出し,解での目的関数の値を取得します。

範囲に制約のある最小化の例では2の解が示されます。どらの解がより適切でしょうか。fval出力と解を要求する例を実行します。

有趣= @ (x) 1 + x (1) / (1 + x (2)) - 3 * x(1)。* x (2) + (2) * (1 + x (1));Lb = [0,0];Ub = [1,2];A = [];B = [];Aeq = [];Beq = [];X0 = (lb + ub)/2;[x,fval] = fmincon(fun,x0,A,b,Aeq,beq,lb,ub)
找到满足约束条件的局部最小值。优化完成是因为目标函数在可行方向上不递减,在最优性容差值范围内,约束条件满足在约束容差值范围内。
x =1×21.0000 - 2.0000
Fval = -0.6667

別の初期点x0を使用して問題を実行します。

X0 = X0 /5;[x2,fval2] = fmincon(fun,x0,A,b,Aeq,beq,lb,ub)
找到满足约束条件的局部最小值。优化完成是因为目标函数在可行方向上不递减,在最优性容差值范围内,约束条件满足在约束容差值范围内。
x2 =1×2106× 0.4000 0.4000
Fval2 = 1.0000

この解は,目的関数値fval2= 1をもます。この値は,最初の値であるfval= -0.6667より大きくなります。最初の解xでは,目的関数の局所的最小値はより小さくなります。

解の質を簡単に検証するには,exitflag出力および输出出力を要求します。

罗森布洛克関数を単位円板$||x||^2 \le 1$上で最小化する問題を設定します。まず,非線形制約を表す関数を作成します。これをunitdisk.mという名前のファ▪▪ルとしてmatlab®パス上に保存します。

函数[c,ceq] = unitdisk(x) c = x(1)^2 + x(2)^2 - 1;Ceq = [];

残りの問題の仕様を作成します。

趣味= @(x)100*(x(2)-x(1)^2)^2 + (1-x(1))^2;Nonlcon = @unitdisk;A = [];B = [];Aeq = [];Beq = [];Lb = [];Ub = [];X0 = [0,0];

fval出力、exitflag出力,および输出出力を使用して,fminconを呼び出します。

[x,fval,exitflag,output] = fmincon(fun,x0,A,b,Aeq,beq,lb,ub,nonlcon)
找到满足约束条件的局部最小值。优化完成是因为目标函数在可行方向上不递减,在最优性容差值范围内,约束条件满足在约束容差值范围内。x = 0.7864 0.6177 fval = 0.0457 exitflag = 1 output = struct with fields: iterations: 24 funcCount: 84 constrviolation: 0 stepsize: 6.9162e-06 algorithm: ' internal -point' firstorderopt: 2.4373e-08 cgiterations: 4 message: '…' bestviable: [1x1 struct]
  • exitflag1は,解が局所的最小値であることを示します。

  • 输出構造体は,解法プロセスに関する各種の統計を報告します。具体的には,output.iterationsは反復回数,output.funcCountは関数評価の回数,output.constrviolationは実行可能性を示します。

fminconは,オプションで,報告された解の解析に使用できるいくかの出力を返します。

罗森布洛克関数を単位円板上で最小化する問題を設定します。まず,非線形制約を表す関数を作成します。これをunitdisk.mという名前のファ▪▪ルとしてmatlab®パス上に保存します。

函数[c,ceq] = unitdisk(x) c = x(1)^2 + x(2)^2 - 1;Ceq = [];

残りの問題の仕様を作成します。

趣味= @(x)100*(x(2)-x(1)^2)^2 + (1-x(1))^2;Nonlcon = @unitdisk;A = [];B = [];Aeq = [];Beq = [];Lb = [];Ub = [];X0 = [0,0];

fminconの出力をすべて要求します。

[x,fval,exitflag,output,lambda,grad,hessian] = fmincon(fun,x0,A,b,Aeq,beq,lb,ub,nonlcon)
找到满足约束条件的局部最小值。优化完成是因为目标函数在可行方向上不递减,在最优性容差值范围内,约束条件满足在约束容差值范围内。x = 0.7864 0.6177 fval = 0.0457 exitflag = 1 output = struct with fields: iterations: 24 funcCount: 84 constrviolation: 0 stepsize: 6.9162e-06 algorithm: ' internal -point' firstorderopt: 2.4373e-08 cgiterations: 4 message: '…' bestviable: [1x1 struct]λ=结构体with fields: eqlin: [0x1 double] eqnonlin: [0x1 double] ineqlin: [0x1 double] lower: [2x1 double] upper: [2x1 double] ineqnonlin: 0.1215 grad = -0.1911 -0.1501 hessian = 497.2903 -314.5589 -314.5589 200.2392
  • lambda.ineqnonlin出力は,解で非線形制約がアクティブになっていることを表し,関連付けられたラグランジュ乗数の値を示します。

  • 研究生出力は,解xでの目的関数の勾配値を示します。

  • 黑森出力にいては,Fminconヘッシアンで説明します。

入力引数

すべて折りたたむ

最小化する関数。関数ハンドルまたは関数名として指定されます。有趣的は,ベクトルまたは配列xを受け,xで評価される目的関数の実数スカラfを返す関数です。

有趣的をファ@ @ルの関数ハンドルとして指定します。

x = fmincon(@myfun,x0,A,b)

ここでmyfunは次のようなmatlab®関数です。

函数f = myfun(x) f =…计算x处的函数值

有趣的は,無名関数の関数ハンドルとして指定することもできます。

x = fmincon(@(x)norm(x)^2,x0,A,b);

有趣的の勾配を計算することができ,“さらに”次のようにSpecifyObjectiveGradientオプションが真正的に設定されている場合,

options = optimoptions('fmincon',' speciyobjectivegradient ',true)
有趣的は2番目の出力引数に勾配ベクトルg (x)を出力しなければなりません。

ヘッセ行列を計算することもでき,“さらに”HessianFcnオプションがoptimoptionsによって“目标”に設定されており,“か”算法オプションが“trust-region-reflective”である場合,有趣的は,3番目の出力引数に対称行列であるヘッセ値H (x)を返さなければなりません。有趣的はスパ,スヘッシアンを返すことができます。詳細は,fminuncの信頼領域法アルゴリズムまたはfminconの信頼領域反射法アルゴリズムのヘッシアンを参照してください。

ヘッセ行列を計算することもでき,算法オプションが“内点”に設定されている場合は,別の方法でヘッシアンをfminconに渡すことができます。詳細は,Fminconの内点法アルゴリズムのヘッシアンを参照してください。符号数学工具箱™を使用して勾配およびヘッシアンを計算する例は,符号数学工具箱™を使用した勾配とヘッシアンの計算を参照してください。

内点アルゴリズムとtrust-region-reflectiveアルゴリズムではヘッセ乗算関数を指定できます。この関数はヘッシアンを直接計算せずに,ベクトルとヘッシアンの積を返します。これによってメモリを節約できます。詳細は,ヘッセ乗算関数を参照してください。

例:趣味= @(x)sin(x(1))*cos(x(2))

デ,タ型:字符|function_handle|字符串

初期点。実数ベクトルまたは実数配列として指定されます。ソルバーは、x0の要素数およびサ电子邮箱ズを使用して,有趣的が受け入れる変数の数およびサ@ @ズを決定します。

  • “内点”アルゴリズム-HonorBoundsオプションが真正的(既定)の場合,fminconは範囲または乌兰巴托の境界上または範囲外のx0成分を,厳密に範囲内に収まる値にリセットします。

  • “trust-region-reflective”アルゴリズム-fminconは実行不可能なx0成分を範囲または線形等式に関して実行可能となるようにリセットします。

  • “sqp”“sqp-legacy”,または“激活集”アルゴリズム-fminconは,範囲外のx0成分を,対応する範囲内の値にリセットします。

例:X0 = [1,2,3,4]

デ,タ型:

実数行列として指定される線形不等式制約です。一个N列の行列で,は不等式の数,Nは変数の数(x0の要素数)です。大規模な問題の場合は,一个をスパ,ス行列として渡します。

一个個の線形不等式を符号化します。

A*x <= b

ここで,xN個の変数x (:)の列ベクトル,b個の要素をも列ベクトルです。

たとえば,次を指定します。

x1+ 2倍2≤10
3 x1+ 4 x2≤20
5倍1+ 6 x2≤30日

次の制約を入力します。

A = [1,2;3,4;5,6];B = [10;20;30];

例:Xの成分の和が1以下であることを指定するには,A = ones(1,N)B = 1を使用します。

デ,タ型:

実数ベクトルで指定される線形不等式制約です。bは,行列一个に関連する要素ベクトルです。bを行ベクトルとして渡す場合,ソルバ,はbを列ベクトルb (:)に内部的に変換します。大規模な問題の場合は,bをスパ,スベクトルとして渡します。

b個の線形不等式を符号化します。

A*x <= b

ここで,xN個の変数x (:)の列ベクトル,一个N列の行列です。

たとえば,次の不等式を考えてみましょう。

x1+ 2倍2≤10
3 x1+ 4 x2≤20
5倍1+ 6 x2≤30。

次の制約を入力することによって,不等式を指定します。

A = [1,2;3,4;5,6];B = [10;20;30];

例:Xの成分の和が1以下であることを指定するには,A = ones(1,N)B = 1を使用します。

デ,タ型:

実数行列として指定される線形等式制約です。AeqN列の行列で,は等式の数,Nは変数の数(x0の要素数)です。大規模な問題の場合は,Aeqをスパ,ス行列として渡します。

Aeq個の線形等式を符号化します。

Aeq*x = beq

ここで,xN個の変数x (:)の列ベクトル,说真的個の要素をも列ベクトルです。

たとえば,次を指定します。

x1+ 2倍2+ 3 x3.= 10
2 x1+ 4 x2+ x3.= 20,

次の制約を入力します。

Aeq = [1,2,3;2,4,1];Beq = [10;20];

例:Xの成分の和が1であることを指定するには,Aeq = ones(1,N)Beq = 1を使用します。

デ,タ型:

実数ベクトルで指定される線形等式制約です。说真的は,行列Aeqに関連する要素ベクトルです。说真的を行ベクトルとして渡す場合,ソルバ,は说真的を列ベクトル说真的(:)に内部的に変換します。大規模な問題の場合は,说真的をスパ,スベクトルとして渡します。

说真的個の線形等式を符号化します。

Aeq*x = beq

ここで,xN個の変数x (:)の列ベクトル,AeqN列の行列です。

たとえば,次の等式を考えてみましょう。

x1+ 2倍2+ 3 x3.= 10
2 x1+ 4 x2+ x3.= 20。

次の制約を入力することによって,等式を指定します。

Aeq = [1,2,3;2,4,1];Beq = [10;20];

例:Xの成分の和が1であることを指定するには,Aeq = ones(1,N)Beq = 1を使用します。

デ,タ型:

下限。実数ベクトルまたは実数配列として指定されます。x0の要素数との要素数が等しい場合,は次を指定します。

X (i) >= lb(i)(すべてのにいて)

数值(lb) <数值(x0)の場合,は次を指定します。

X (i) >= lb(i)1 <= I <= number (lb)

x0よりの要素数が少ない場合,ソルバ,は警告を生成します。

例:Xのすべての成分が正であることを指定するには,Lb = 0 (size(x0))を使用します。

デ,タ型:

実数ベクトルまたは実数配列として指定される上限です。x0の要素数と乌兰巴托の要素数が等しい場合,乌兰巴托は次を指定します。

X (i) <= ub(i)(すべてのにいて)

Numel (ub) < Numel (x0)の場合,乌兰巴托は次を指定します。

X (i) <= ub(i)1 <= I <= numel(ub)

x0より乌兰巴托の要素数が少ない場合,ソルバ,は警告を生成します。

例:Xのすべての成分が1未満であることを指定するには,Ub = ones(size(x0))を使用します。

デ,タ型:

非線形制約。関数ハンドルまたは関数名として指定されます。nonlconは,ベクトルまたは配列xを受け,2の配列c (x)および量表(x)を返す関数です。

  • c (x)は,xでの非線形不等式制約の配列です。fminconは次の条件を満たそうとします。

    cのすべてのエントリに対してC (x) <= 0

  • 量表(x)は,xでの非線形等式制約の配列です。fminconは次の条件を満たそうとします。

    量表信のすべてのエントリに対してCeq (x) = 0

たとえば,

x = fmincon(@myfun,x0,A,b,Aeq,beq,lb,ub,@mycon)

ここでmyconは次のようなmatlab関数です。

函数[c,ceq] = mycon(x) c =…计算x上的非线性不等式ceq =…计算x处的非线性等式。
また制約関数の勾配を計算することができ,“さらに”次のようにSpecifyConstraintGradientオプションが真正的である場合,
options = optimoptions('fmincon',' specyconstraintgradient ',true)
nonlconは3番目および4番目の出力引数にc (x)の勾配GCおよび量表(x)の勾配GCeqを返さなければなりません。GCGCeqはスパ,スか密である可能性があります。GCGCeqが大きく,比較的非零の項目が少ない場合は,それらをスパ,ス行列として使用して,内点アルゴリズム内の実行時間とメモリを節約します。詳細は,非線形制約を参照してください。

デ,タ型:字符|function_handle|字符串

最適化オプション。optimoptionsの出力,またはoptimsetなどによって返される構造体として指定されます。

いくつかのオプションはすべてのアルゴリズムに適用することができ,その他のオプションは特定のアルゴリズムに関連します。詳細は,最適化オプションリファレンスを参照してください。

一部のオプションは,optimoptionsに表示されません。このようなオプションは,次の表では。詳細は,表示オプションを参照してください。

すべてのアルゴリズム
算法

最適化アルゴリズムを選択します。

  • “内点”(既定の設定)

  • “trust-region-reflective”

  • “sqp”

  • “sqp-legacy”optimoptionsのみ)

  • “激活集”

アルゴリズムの選択にいての詳細は,アルゴリズムの選択を参照してください。

trust-region-reflectiveアルゴリズムには,以下が必要になります。

  • 目的関数に与えられる勾配

  • SpecifyObjectiveGradientを次の値に設定。真正的

  • 範囲制約と線形等式制約のいずれか(両方は使用できません)

“trust-region-reflective”アルゴリズムを選択し,これらの条件の一部が満たされていない場合,fminconはエラ,を発行します。

“激活集”“sqp-legacy”および“sqp”は,大規模なアルゴリズムではありません。詳細は,大規模アルゴリズムと中規模アルゴリズムを参照してください。

CheckGradients

ユ,ザ,設定の導関数(目的関数または制約の勾配)と有限差分による導関数とを比較します。選択肢は,(既定の設定)または真正的です。

optimsetの場合,名前はDerivativeCheckで,値は“上”または“关闭”です。詳細は,新旧のオプション名を参照してください。

ConstraintTolerance

制約違反に関する許容誤差(正のスカラ)。既定値は1 e-6です。詳細は,許容誤差と停止条件を参照してください。

optimsetの場合,名前はTolConです。詳細は,新旧のオプション名を参照してください。

诊断

最小化または計算する関数に関する情報を表示します。選択肢は,“关闭”(既定の設定)または“上”です。

DiffMaxChange

有限差分勾配を計算する場合に変数内で生じる最大変化量です(正のスカラ)。既定値はです。

DiffMinChange

有限差分勾配を計算する場合に変数内で生じる最小変化量です(正のスカラ)。既定値は0です。

显示

表示レベル(反復表示を参照):

  • “关闭”または“没有”-出力を表示しない。

  • “通路”-各反復の出力を表示し,既定の終了メッセ,ジを与える。

  • “iter-detailed”-各反復の出力を表示し,技術的な終了メッセ,ジを与える。

  • “通知”-関数が収束しない場合にのみ出力を表示し,既定の終了メッセ,ジを与える。

  • “notify-detailed”-関数が収束しない場合にのみ出力を表示し,技術的な終了メッセ,ジを与える。

  • “最后一次”(既定の設定)-最終出力のみを表示し,既定の終了メッセ.ジを与える。

  • 最后详细的-最終出力のみを表示し,技術的な終了メッセ,ジを与える。

FiniteDifferenceStepSize

有限差分のスカラまたはベクトルのステップサズファクタ。FiniteDifferenceStepSizeをベクトルvに設定すると,前方有限差分δ

delta = v *符号' (x).*max(abs(x),TypicalX);

ここで,符号' (0)= 1を除き符号' (x) =符号(x)です。中心有限差分法では

delta = v.*max(abs(x),TypicalX);

スカラFiniteDifferenceStepSizeはベクトルに拡張します。既定値は、前進有限差分法ではsqrt (eps),中心有限差分法ではeps ^ (1/3)です。

optimsetの場合,名前はFinDiffRelStepです。詳細は,新旧のオプション名を参照してください。

FiniteDifferenceType

勾配推定に使用される有限差分は“前进”(既定の設定)または“中央”(中心)のいずれかです。“中央”では2倍の関数評価が必要になりますが,正確性が増します。信頼領域反思法アルゴリズムでは,CheckGradients真正的に設定されている場合にのみFiniteDifferenceTypeが使用されます。

fminconは有限差分の両方のタesc escプを推定するとき,範囲に注意深く従います。そのためたとえば,向前ではなく,向后を選択すると,範囲外の点を計算しないようにすることができます。ただし,内点アルゴリズムに対しては,HonorBoundsオプションがに設定されている場合,“中央”の差分は計算中に範囲に違反する可能性があります。

optimsetの場合,名前はFinDiffTypeです。詳細は,新旧のオプション名を参照してください。

FunValCheck

目的関数値が正しいかどうかチェックします。既定の設定“关闭”ではチェックが実行されません。“上”に設定すると,目的関数が复杂的,またはの値を返すとエラ,が表示されます。

MaxFunctionEvaluations

可能な関数評価の最大回数(正の整数)。内点以外のすべてのアルゴリズムの既定値は100 * numberOfVariablesです。内点アルゴリズムの既定値は3000です。詳細は,許容誤差と停止条件反復と関数計算回数を参照してください。

optimsetの場合,名前はMaxFunEvalsです。詳細は,新旧のオプション名を参照してください。

MaxIterations

可能な反復の最大数(正の整数)。内点以外のすべてのアルゴリズムの既定値は400です。内点アルゴリズムの既定値は1000です。詳細は,許容誤差と停止条件反復と関数計算回数を参照してください。

optimsetの場合,名前は麦克斯特です。詳細は,新旧のオプション名を参照してください。

OptimalityTolerance

1次の最適性に関する終了許容誤差(正のスカラ)。既定値は1 e-6です。詳細は,1次の最適性の尺度を参照してください。

optimsetの場合,名前はTolFunです。詳細は,新旧のオプション名を参照してください。

OutputFcn

各反復で最適化関数が呼び出すユザ定義の関数を1以上指定します。関数ハンドルか,関数ハンドルの单元格配列を渡します。既定の設定はなし([])です。詳細は,出力関数とプロット関数の構文を参照してください。

PlotFcn

アルゴリズムが実行中のさまざまな進行状況の測定値をプロットします。事前定義されたプロットから選択するか,独自のコ,ドを記述してください。組み込みプロット関数名,関数ハンドル,または組み込みプロット関数名か関数ハンドルの细胞配列を渡します。カスタムプロット関数の場合は,関数ハンドルを渡します。既定の設定はなし([])です。

  • “optimplotx”-現在の点をプロット

  • “optimplotfunccount”-関数計算をプロット

  • “optimplotfval”-関数値をプロット

  • “optimplotfvalconstr”-ラie浏览器ンプロットとして検出された実行可能な最良の目的関数値をプロット。このプロットでは,実行可能性の許容誤差を1 e-6として,実行不可能点を赤色,実行可能点を青色で示します。

  • “optimplotconstrviolation”-最大制約違反をプロット

  • “optimplotstepsize”-ステップサie浏览器ズをプロット

  • “optimplotfirstorderopt”は1次の最適性尺度をプロットします

カスタムのプロット関数は,出力関数と同じ構文を使用します。詳細は,优化工具箱™の出力関数出力関数とプロット関数の構文を参照してください。

optimsetの場合,名前はPlotFcnsです。詳細は,新旧のオプション名を参照してください。

SpecifyConstraintGradient

ユ,ザ,により定義される非線形制約関数に対する勾配。既定のに設定すると,fminconは有限差分の非線形制約の勾配を推定します。nonlconで説明するように,fminconは,真正的に設定されると,制約関数が4の出力をもことを期待します。trust-region-reflectiveアルゴリズムは,非線形制約を受け付けません。

optimsetの場合,名前はGradConstrで,値は“上”または“关闭”です。詳細は,新旧のオプション名を参照してください。

SpecifyObjectiveGradient

ユ,ザ,が定義する目的関数の勾配。有趣的の勾配の定義方法にいては,有趣的の説明を参照してください。既定のの場合,fminconは有限差分を使用して勾配を推定します。真正的に設定すると,fminconは目的関数のユ,ザ,定義の勾配を使用します。“trust-region-reflective”アルゴリズムを使用するには,勾配を与え,SpecifyObjectiveGradient真正的に設定しなければなりません。

optimsetの場合,名前はGradObjで,値は“上”または“关闭”です。詳細は,新旧のオプション名を参照してください。

StepTolerance

xに関する許容誤差(正のスカラ)。“内点”以外のすべてのアルゴリズムの既定値は1 e-6です。“内点”アルゴリズムの既定値は1平台以及です。詳細は,許容誤差と停止条件を参照してください。

optimsetの場合,名前はTolXです。詳細は,新旧のオプション名を参照してください。

TypicalX

典型的なxの値です。TypicalXの要素数は,開始点x0の要素数と等しくなります。既定値は的(numberofvariables, 1)です。fminconではTypicalXを使用して勾配推定の有限差分をスケ,リングします。

“trust-region-reflective”アルゴリズムはCheckGradientsオプションに対してのみTypicalXを使用します。

UseParallel

真正的の場合,fminconは並列で勾配を推定します。既定のに設定すると,無効になります。trust-region-reflectiveは目的関数に勾配を必要とするので,UseParallelは適用されません。詳細は,並列計算を参照してください。

信頼領域反思法アルゴリズム
FunctionTolerance

関数値に関する終了許容誤差(正のスカラ)。既定値は1 e-6です。詳細は,許容誤差と停止条件を参照してください。

optimsetの場合,名前はTolFunです。詳細は,新旧のオプション名を参照してください。

HessianFcn

[](既定の設定)の場合,fminconは有限差分を使用してヘッシアンを近似するか,ヘッセ乗算関数を(オプションHessianMultiplyFcnと共に)使用します。“目标”に設定すると,fminconはユ、ザ、定義のヘッシアン(有趣的で定義)を使用します。詳細は,入力としてのヘッシアンを参照してください。

optimsetの場合,名前はHessFcnです。詳細は,新旧のオプション名を参照してください。

HessianMultiplyFcn

ヘッセ乗算関数。関数ハンドルとして指定されます。大規模構造問題に対して、この関数は実際にHを作らずにヘッセ行列の乗数H * Yを計算します。この関数は次の形式を取ります。

W = hmfun(Hinfo,Y)

ここでHinfoは,H * Yを計算するために使われる行列を含んでいます。

最初の引数は目的関数有趣的で返される3番目の引数と同じにします。次に例を示します。

[f,g,Hinfo] = fun(x)

Yは問題の次元と同じ行数をも行列です。Hが明示的に形成されていない場合でも行列W = h * yを満たします。fminconは前提条件子を計算するためにHinfoを使用します。hmfunが必要とする追加のパラメタを与える方法にいては,追加パラメ,タ,の受け渡しを参照してください。

メモ:

HessianMultiplyFcnオプションを使用するには,HessianFcn[]に,SubproblemAlgorithm“重心”(既定の設定)に設定しなければなりません。

詳細は,ヘッセ乗算関数を参照してください。例にいては,密に構造化されたヘッシアンと線形等式を使用した最小化を参照してください。

optimsetの場合,名前はHessMultです。詳細は,新旧のオプション名を参照してください。

HessPattern

有限差分に対するヘッシアンのスパ,スパタ,ン。∂2有趣的/∂x(我)x (j)≠0をもことができる場合は,hespattern (i,j) = 1を設定します。それ以外の場合は,hespattern (i,j) = 0を設定します。

有趣的でヘッセ行列Hを計算するのが不便な場合はHessPatternを使用します。しかし有趣的の勾配の番目の成分がx (j)によって異なる場合は,見ただけで判断できます。H“スパ,ス構造”HessPatternの値として提供できる場合は,fminconは(勾配の)スパス有限差分を使ってHを近似することができます。まり,非ゼロの位置を指定します。

構造が不明であれば,HessPatternを設定しないでください。既定では,HessPatternは1からなる密行列のように動作します。その後fminconは,非スパ,ス状態の有限差分近似を反復ごとに計算します。大規模な問題では,この計算には多大なリソースが必要となる場合があり,通常はスパース構造を決定するのが妥当です。

MaxPCGIter

前処理付き共役勾配法(pcg)の反復の最大回数(正のスカラ)。既定は,範囲制約付き問題の場合は马克斯(1楼(numberOfVariables / 2))で,等式制約付き問題の場合はnumberOfVariablesです。詳細は,前処理付き共役勾配法を参照してください。

PrecondBandWidth

PCGに対する前提条件子の帯域幅の上限(非負の整数)。既定では,対角型の前提条件を使用します (帯域幅の上限 0)。一部の問題では、帯域幅を上げることで、PCG 法の反復回数を減らします。PrecondBandWidthに設定すると,共役勾配(cg)ではなく,直接因子分解(コレスキ,因子)が使用されます。直接因子分解ではCGより計算量が増加しますが,解を求めるためのステップの質が向上します。

SubproblemAlgorithm

反復ステップの計算方法を定義します。既定の設定である“重心”のステップは“分解”より高速ですが,精度の点で劣ります。詳細は,fminconの信頼領域反射法アルゴリズムを参照してください。

TolPCG

PCG反復に関する終了許容誤差(正のスカラ)。既定値は0.1です。

有効制約法アルゴリズム
FunctionTolerance

関数値に関する終了許容誤差(正のスカラ)。既定値は1 e-6です。詳細は,許容誤差と停止条件を参照してください。

optimsetの場合,名前はTolFunです。詳細は,新旧のオプション名を参照してください。

MaxSQPIter

SQP反復の最大数(正の整数)。既定値は10*max(numberOfVariables, numberOfInequalities + numberOfBounds)です。

RelLineSrchBnd

ラン探索ステップ長の相対範囲(非負の実数スカラ値)。Xの合計変位は,|Δx(我)|≤relLineSrchBnd·马克斯(| x(我)| | typicalx(我)|)を満たします。このオプションはソルバーが大きすぎるステップをとった場合に,xの変位の大きさをコントロールします。既定の設定は範囲なし[]です。

RelLineSrchBndDuration

RelLineSrchBndで指定された範囲の反復数は有効になります(既定値は1です)。

TolConSQP

内部反復SQP制約違反に関する終了許容誤差(正のスカラ)。既定の設定は1 e-6です。

内点法アルゴリズム
BarrierParamUpdate

fminconによる範囲パラメ、タ、の更新方法を選択します(Fminconの内点法アルゴリズムを参照)。選択肢は以下になります。

  • “单调”(既定の設定)

  • 预估的

どの方法を選択するかにより,ソルバ,の速度と収束性に影響が及びますが,その影響の予測は困難です。

HessianApproximation

どのようにfminconがヘッシアンを計算するかを選択してください(入力としてのヘッシアンを参照)。選択肢は以下になります。

  • “蓄热”(既定の設定)

  • 有限差分的

  • “lbfgs”

  • {“lbfgs”,正整数}

メモ

HessianApproximationを使用するには,HessianFcnHessianMultiplyFcnの両方が空のエントリ([])でなければなりません。

optimsetの場合,名前は黑森で,値は用户提供的“蓄热”“lbfgs”“fin-diff-grads”“上”,または“关闭”です。詳細は,新旧のオプション名を参照してください。

HessianFcn

[](既定の設定)の場合,fminconHessianApproximationが指定する方法を使用してヘッシアンを近似するか,指定されたHessianMultiplyFcnを使用します。関数ハンドルの場合,fminconHessianFcnを使用してヘッシアンを計算します。詳細は,入力としてのヘッシアンを参照してください。

optimsetの場合,名前はHessFcnです。詳細は,新旧のオプション名を参照してください。

HessianMultiplyFcn

ヘッシアンとベクトルの積を計算するためにユ、ザ、が提供した関数(ヘッセ乗算関数を参照)。関数ハンドルを渡します。

メモ:

HessianMultiplyFcnオプションを使用するには,HessianFcn[]に,SubproblemAlgorithm“重心”に設定しなければなりません。

optimsetの場合,名前はHessMultです。詳細は,新旧のオプション名を参照してください。

HonorBounds

既定の真正的は範囲制約が各反復で満たされているかを確認します。に設定すると,この動作は無効になります。

optimsetの場合,名前はAlwaysHonorConstraintsで,値は“界限”または“没有”です。詳細は,新旧のオプション名を参照してください。

InitBarrierParam

初期境界値(正のスカラ)。既定の0.1より大きい値を試すのに役立場合があります。特に,目的関数や制約関数が大きい場合役立ます。

InitTrustRegionRadius

信頼領域の初期半径です(正のスカラ)。適切にスケ,ル化されていない問題では既定の n より小さな値を選択すると役立場合があります。ここでnは変数の数です。

MaxProjCGIter

計画された共役勾配の反復回数の許容誤差(停止条件)です。これは内部反復であり,アルゴリズムの反復数ではありません。この正の整数は2*(numberOfVariables - numberofetraits)の既定値をもます。

ObjectiveLimit

スカラ,の許容誤差(停止条件)です。目的関数値がObjectiveLimit以下になり,反復が実行可能な場合,問題が非有界であると推定されるため,その反復は中止されます既定値は1 e20です。

ScaleProblem

真正的を設定すると,アルゴリズムがすべての制約関数とこの目的関数を正規化します。既定のに設定すると,無効になります。

optimsetの場合,値は“obj-and-constr”または“没有”です。詳細は,新旧のオプション名を参照してください。

SubproblemAlgorithm

反復ステップの計算方法を定義します。“重心”は密なヘッシアンをも大規模な問題より高速に解ける可能性がありますが,既定の“分解”は一般に“重心”(共役勾配)より高速になります。詳細は,Fminconの内点法アルゴリズムを参照してください。

TolProjCG

計画された共役勾配アルゴリズムの相対許容誤差(停止条件)です。これは内部の反復に対してであり,アルゴリズムの反復に対してではありません。この正のスカラ,は0.01の既定値をもます。

TolProjCGAbs

計画された共役勾配アルゴリズムの絶対許容誤差(停止条件)です。これは内部の反復に対してであり,アルゴリズムの反復に対してではありません。この正のスカラ,は1平台以及の既定値をもます。

SQPおよびSQPレガシアルゴリズム
ObjectiveLimit

スカラ,の許容誤差(停止条件)です。目的関数値がObjectiveLimit以下になり,反復が実行可能な場合,問題が非有界であると推定されるため,その反復は中止されます既定値は1 e20です。

ScaleProblem

真正的を設定すると,アルゴリズムがすべての制約関数とこの目的関数を正規化します。既定のに設定すると,無効になります。

optimsetの場合,値は“obj-and-constr”または“没有”です。詳細は,新旧のオプション名を参照してください。

例:options = optimoptions('fmincon',' specyobjectivegradient ',true,' specyconstraintgradient ',true)

次のフィルドをも構造体として指定される問題構造体です。

フィ,ルド名 エントリ

客观的

目的関数

x0

xの初期点

Aineq

線形不等式制約の行列

bineq

線形不等式制約のベクトル

Aeq

線形等式制約の行列

说真的

線形等式制約のベクトル
下限のベクトル
乌兰巴托 上限のベクトル

nonlcon

非線形制約関数

解算器

“fmincon”

选项

optimoptionsで作成されたオプション

问题構造体では,少なくとも客观的x0解算器,および选项フィ,ルドを指定しなければなりません。

デ,タ型:结构体

出力引数

すべて折りたたむ

実数ベクトルまたは実数配列として返される解です。xのサ电子邮箱ズは,x0のサ@ @ズと同じです。通常、exitflagが正の場合,xは問題に対する局所的な解になります。解の質に関する詳細は,ソルバ,が成功する場合を参照してください。

解での目的関数値。実数として返されます。一般的に、fval有趣的(x)になります。

fminconの停止理由。整数として返されます。

すべてのアルゴリズム:

1

1次の最適性の尺度が选项。OptimalityToleranceより小さく,最大制約違反が选项。ConstraintToleranceより小さいことを示します。

0

反復回数が选项。麦克斯特ationsを超過,または関数評価の回数が选项。米axFunctionEvaluationsを超過しています。

-1

出力関数またはプロット関数によって停止したことを示します。

-2

実行可能な点が見かりません。

有效集以外のすべてのアルゴリズム:

2

x内の変更が选项。StepToleranceより小さく,最大制約違反が选项。ConstraintToleranceより小さいことを示します。

trust-region-reflectiveアルゴリズムのみ:

3.

目的関数の値の変更が选项。FunctionToleranceより小さく,最大制約違反が选项。ConstraintToleranceより小さいことを示します。

有效集アルゴリズムのみ:

4

探索方向の大きさが2* .选项。StepToleranceより小さく,最大制約違反が选项。ConstraintToleranceより小さいことを示します。

5

方向導関数の大きさが2* .选项。OptimalityToleranceより小さく,制約違反が选项。ConstraintToleranceより小さいことを示します。

内点sqp-legacyおよびsqpアルゴリズム:

3

現在の反復の目的関数が选项。ObjectiveLimitより小さく,最大制約違反が选项。ConstraintToleranceより小さいことを示します。

最適化プロセスに関する情報。次のフィルドをも構造体として返されます。

迭代

実行した反復回数

funcCount

関数評価の回数

lssteplength

探索方向に対するラ▪▪ン探索ステップサ▪▪ズ(有效集アルゴリズムおよびsqpアルゴリズムのみ)

constrviolation

制約関数の最大値

stepsize

xの最終ステップサescズ(有效集アルゴリズム以外)

算法

使用される最適化アルゴリズム

cgiterations

PCG法での合計反復回数(trust-region-reflective内点アルゴリズム)

firstorderopt

1次の最適性の尺度

bestfeasible

検出された最適(最小目的関数)実行可能点。次のフィ,ルドで構成される構造体:

  • x

  • fval

  • firstorderopt

  • constrviolation

実行可能点が見からなかった場合は,bestfeasibleフィ,ルドが空になります。そのため,制約関数の最大値が选项。ConstraintToleranceを超えなければ,点は実行可能になります。

bestfeasibleの点は,さまざまな理由で,返された解の点xとは異なる可能性があります。例にいては,最良実行可能点の取得を参照してください。

消息

終了メッセ,ジ

解におけるラグランジュ乗数。次のフィルドをも構造体として返されます。

较低的

に対応する下限

乌兰巴托に対応する上限

ineqlin

一个およびbに対応する線形不等式

eqlin

Aeqおよび说真的に対応する線形等式

ineqnonlin

nonlconcに対応する非線形不等式

eqnonlin

nonlcon量表信に対応する非線形等式

解での勾配。実数ベクトルとして返されます。研究生は,点x (:)における有趣的の勾配を返します。

ヘッシアンの近似。実数行列として返されます。黑森の意味にいては,ヘッシアン出力を参照してください。

制限

  • fminconは勾配ベ,スの方法です。この方法は目的関数と制約関数が両方とも連続で、1 次導関数をもつ問題に対して動作するように設計されています。

  • “trust-region-reflective”アルゴリズムの場合,有趣的に勾配を与え,“SpecifyObjectiveGradient”オプションを真正的に設定しなければなりません。

  • “trust-region-reflective”アルゴリズムは上限と下限を同じ値に設定できません。たとえば,磅(2)= =乌兰巴托(2)の場合,fminconはエラ,を出力します。

    信任区域反射算法不允许上下界相等。可以使用内点算法或SQP算法。
  • ヘッシアンを渡す構文には2種類あります。また,関数HessianMultiplyFcnを渡す構文も2種類あります。一方はtrust-region-reflectiveであり,他方は内点に対するものです。詳細は,ヘッシアンを含めるを参照してください。

    • trust-region-reflectiveの場合,ラグランジュ関数のヘッシアンは目的関数のヘッシアンと同じです。ヘッシアンは目的関数の3番目の出力として渡すことができます。

    • 内点の場合,ラグランジュ関数のヘッシアンはラグランジュ乗数と非線形制約関数のヘッシアンを伴うものとなります。現在の点xとラグランジュ乗数構造体λの両方を考慮に入れた別の関数としてヘッシアンを渡すことができます。

  • 問題が実行不可能である場合,fminconは最大制約値を最小化にしようと試みます。

詳細

すべて折りたたむ

入力としてのヘッシアン

fminconはオプションの入力としてヘッシアンを使用します。このヘッシアンは,次のようなラグランジュ関数の2次導関数の行列です(式 1を参照)。

x x 2 l x λ 2 f x + λ 2 c x + λ 2 c e x (1)

ヘッシアンをtrust-region-reflectiveアルゴリズムまたは内点アルゴリズムに指定する方法の詳細にいては,ヘッシアンを含めるを参照してください。

有效集アルゴリズムとsqpアルゴリズムは入力ヘッシアンを受け入れません。これらのアルゴリズムは,ラグランジュ関数のヘッシアンに対して準ニュ,トン近似を計算します。

内点アルゴリズムには,“HessianApproximation”オプションの選択肢がいくかあります。内点法fminconに対する入力ヘッセ近似の選択を参照してください。

  • “蓄热”- - - - - -fminconが密な準ニュ,トン近似によってヘッシアンを計算します。これは既定のヘッセ近似です。

  • “lbfgs”- - - - - -fminconが制限されたメモリの大規模の準ニュ,トン近似によってヘッシアンを計算します。既定のメモリでは10回の反復が使用されます。

  • {“lbfgs”,正整数}- - - - - -fminconが制限されたメモリの大規模の準ニュ,トン近似によってヘッシアンを計算します。正の整数は前回の反復がいくまで記憶されているかを指定します。

  • 有限差分的- - - - - -fminconは勾配の有限差分によるヘッシアンとベクトルとの乗算を計算します。目的関数の勾配を与える必要があります。また非線形制約関数がある場合は,その勾配も与えなければなりません。“SpecifyObjectiveGradient”オプションを真正的に設定し,可能な場合は“SpecifyConstraintGradient”オプションを真正的に設定します。“SubproblemAlgorithm”“重心”に設定しなければなりません。

ヘッセ乗算関数

内点アルゴリズムとtrust-region-reflectiveアルゴリズムではヘッセ乗算関数を指定できます。この関数はヘッシアンを直接計算せずに,ヘッシアンとベクトルとの乗算結果を与えます。これによってメモリを節約できます。詳細は,ヘッセ乗算関数を参照してください。

アルゴリズム

すべて折りたたむ

アルゴリズムの選択

アルゴリズムの選択に関するヘルプにいては,Fminconアルゴリズムを参照してください。アルゴリズムを設定するには、optimoptionsを使用して选项を作成し,名前と値のペア“算法”を使用します。

この節の後半では,各アルゴリズムの概要を説明するか,詳細へのポ。

内点法の最適化

このアルゴリズムは,Fminconの内点法アルゴリズムで説明します。この方法は[1][41],および,[9]で詳しく説明します。

SQPおよびSQPレガシ最適化

fmincon“sqp”および“sqp-legacy”アルゴリズムは,有効制約法の最適化に記述されている“激活集”アルゴリズムと同様です。fmincon SQPアルゴリズムに主な相違点が示されています。相違点の概要は以下のとおりです。

有効制約法の最適化

fmincon逐次二次計画法(sqp)法を使用します。この方法では,関数は各反復で二次計画法(qp)の部分問題を解きます。fminconはBFGS式を使用して,ラグランジュ関数のヘッシアンの推定を反復ごとに更新します(fminuncおよび参考文献[7][8]を参照)。

fminconは,[6][7][8]で推奨されるものと同様なメリット関数を使用してラ@ @ン探索を実行します。Qp部分問題を解くには,[5]での説明と同様の有効制約法を使用します。アルゴリズムの詳細は,Fminconアクティブセットアルゴリズムを参照してください。

使用されるアルゴリズムの詳細はSQP法の実装を参照してください。

信頼領域反思法の最適化

“trust-region-reflective”アルゴリズムは部分空間の信頼領域法であり,[3][4]で説明する内反射ニュ,トン法に基づいています。各反復は,前処理付き共役勾配(pcg)法を使用する大型線形システムの近似解を伴います。fminconの信頼領域反射法アルゴリズムにある信頼領域法および前処理付き共役勾配法の説明を参照してください。

代替機能

アプリ

最適化ラ▪▪ブエディタ▪▪タスクがfminconにビジュアル▪▪ンタ▪▪フェ▪▪スを提供します。

参照

伯德,R. H., J. C.吉尔伯特,J.诺西德尔。非线性规划中基于内点技术的信赖域方法。《数学规划》,第89卷,第1期,2000年,149-185页。

[2]伯德,R. H.,玛丽E.赫里巴尔,豪尔赫·诺西德尔。大规模非线性规划的内点算法SIAM期刊优化,Vol 9, No. 4, 1999, pp. 877-900。

[3] Coleman, t.f., Li Y.。有边界的非线性极小化的内部信赖域方法。优化学报,Vol. 6, 1996, pp. 418-445。

[4] Coleman, t.f., Li Y.。大尺度非线性有界极小化问题的反射牛顿方法的收敛性数学规划,第67卷,第2期,1994年,第189-224页。

[5]吉尔,p.e., W.默里和M. H.赖特。《实用优化》,伦敦,学术出版社,1981年。

[6] Han s.p.,“非线性规划的一种全局收敛方法”。优化理论与应用,Vol. 22, 1977, pp. 297。

[7] Powell m.j. D. <非线性约束优化计算的快速算法>。数值分析,编。G. A.沃森,数学讲稿,施普林格出版社,卷630,1978。

[8] Powell, m.j. D. <非线性约束优化计算的变度量方法的收敛性>。非线性规划3 (O. L. Mangasarian, R. R. Meyer和S. M. Robinson主编),学术出版社,1978。

华尔兹,R. A., J. L.莫拉莱斯,J.诺西德尔和D.欧尔班。一种结合了直线搜索和信赖域步骤的非线性优化内部算法。数学规划,Vol 107, No. 3, 2006, pp. 391-408。

拡張機能

R2006aより前に導入