このペ,ジの翻訳は最新ではありません。ここをクリックして,英語の最新版を参照してください。
制約付き非線形多変数関数の最小値を求める
非線形計画法ソルバ,です。
以下で指定された問題の最小値を見けます。
bおよびbeqはベクトル,一个およびAeqは行列,c (x)および量表(x)はベクトルを返す関数,f (x)はスカラーを返す関数です.f (x), c (x)量表(x)を非線形関数にすることもできます。
X, lbおよびubはベクトルまたは行列として渡すことができます。行列引数を参照してください。
は,解が常にx
= fmincon (有趣的
,x0
,一个
,b
,Aeq
,说真的
,磅
,乌兰巴托
)磅
≤x
≤乌兰巴托
の範囲に存在するように,設計変数x
に上限と下限を定義します。等式が存在しない場合にはAeq = []
とBeq = []
を設定してください。x(我)
の下に非有界の場合はlb(i) = -无穷大
を設定してください。x(我)
の上に非有界の場合はub(i) =无穷大
を設定してください。
メモ
問題の指定された入力範囲が矛盾する場合,fmincon
はエラ,をスロ,します。この場合,出力x
はx0
で,fval
は[]
です。
既定の“内点”
アルゴリズムの場合,fmincon
は,範囲Lb≤x≤ub
に違反する,または範囲に等しいx0
の成分を範囲領域内に設定します。“trust-region-reflective”
アルゴリズムの場合,fmincon
は違反する成分を範囲領域内に設定します。他のアルゴリズムの場合,fmincon
は違反する成分を最も近い範囲に設定します。範囲内の要素は変更されません。詳細は,反復は制約に違反する可能性ありを参照してください。
線形不等式制約がある場合の罗森布罗克関数の最小値を求めます。
目的関数有趣的
が罗森布罗克関数になるように設定します。罗森布洛克関数は,最小化が難しいことがよく知られています。これは点(1,1)で目的関数の最小値0になります。詳細は,制約付き非線形問題の解法,ソルバ,ベ,スを参照してください。
趣味= @(x)100*(x(2)-x(1)^2)^2 + (1-x(1))^2;
点[1,2]
から開始して,
を満たすように制約された最小値を求めます。形式Ax <= b
のこの制約をA = [1,2]
およびB = 1
で表します。この制約は,解が制約なしの解(1,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)
から開始して,
および
を満たすように制約された最小値を求めます。
形式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));
が正の値 および である領域内を探索します。
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;
領域、内を探索します。
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”);
単位円板上の罗森布罗克関数の最小値を求めます。まず,非線形制約を表す関数を作成します。これを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,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
出力および输出
出力を要求します。
罗森布洛克関数を単位円板上で最小化する問題を設定します。まず,非線形制約を表す関数を作成します。これを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]
exitflag
値1
は,解が局所的最小値であることを示します。
输出
構造体は,解法プロセスに関する各種の統計を報告します。具体的には,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
- - - - - -初期点初期点。実数ベクトルまたは実数配列として指定されます。ソルバーは、x0
の要素数およびサ电子邮箱ズを使用して,有趣的
が受け入れる変数の数およびサ@ @ズを決定します。
例:X0 = [1,2,3,4]
デ,タ型:双
一个
- - - - - -線形不等式制約実数行列として指定される線形不等式制約です。一个
は米
行N
列の行列で,米
は不等式の数,N
は変数の数(x0
の要素数)です。大規模な問題の場合は,一个
をスパ,ス行列として渡します。
一个
は米
個の線形不等式を符号化します。
A*x <= b
,
ここで,x
はN
個の変数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
をスパ,スベクトルとして渡します。
b
は米
個の線形不等式を符号化します。
A*x <= b
,
ここで,x
はN
個の変数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
を使用します。
デ,タ型:双
Aeq
- - - - - -線形等式制約実数行列として指定される線形等式制約です。Aeq
は我
行N
列の行列で,我
は等式の数,N
は変数の数(x0
の要素数)です。大規模な問題の場合は,Aeq
をスパ,ス行列として渡します。
Aeq
は我
個の線形等式を符号化します。
Aeq*x = beq
,
ここで,x
はN
個の変数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
,
ここで,x
はN
個の変数x (:)
の列ベクトル,Aeq
は我
行N
列の行列です。
たとえば,次の等式を考えてみましょう。
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
- - - - - -非線形制約非線形制約。関数ハンドルまたは関数名として指定されます。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
を返さなければなりません。GC
とGCeq
はスパ,スか密である可能性があります。GC
かGCeq
が大きく,比較的非零の項目が少ない場合は,それらをスパ,ス行列として使用して,内点
アルゴリズム内の実行時間とメモリを節約します。詳細は,非線形制約を参照してください。
デ,タ型:字符
|function_handle
|字符串
选项
- - - - - -最適化オプションoptimoptions
の出力|optimset
などによって返される構造体最適化オプション。optimoptions
の出力,またはoptimset
などによって返される構造体として指定されます。
いくつかのオプションはすべてのアルゴリズムに適用することができ,その他のオプションは特定のアルゴリズムに関連します。詳細は,最適化オプションリファレンスを参照してください。
一部のオプションは,optimoptions
に表示されません。このようなオプションは,次の表では。詳細は,表示オプションを参照してください。
すべてのアルゴリズム | |
算法 |
最適化アルゴリズムを選択します。
アルゴリズムの選択にいての詳細は,アルゴリズムの選択を参照してください。
|
CheckGradients |
ユ,ザ,設定の導関数(目的関数または制約の勾配)と有限差分による導関数とを比較します。選択肢は,
|
ConstraintTolerance |
制約違反に関する許容誤差(正のスカラ)。既定値は
|
诊断 | 最小化または計算する関数に関する情報を表示します。選択肢は, |
DiffMaxChange | 有限差分勾配を計算する場合に変数内で生じる最大変化量です(正のスカラ)。既定値は |
DiffMinChange | 有限差分勾配を計算する場合に変数内で生じる最小変化量です(正のスカラ)。既定値は |
显示 |
表示レベル(反復表示を参照):
|
FiniteDifferenceStepSize |
有限差分のスカラまたはベクトルのステップサズファクタ。
符号' (0)= 1 を除き符号' (x) =符号(x) です。中心有限差分法では
FiniteDifferenceStepSize はベクトルに拡張します。既定値は、前進有限差分法ではsqrt (eps) ,中心有限差分法ではeps ^ (1/3) です。
|
FiniteDifferenceType |
勾配推定に使用される有限差分は
|
FunValCheck | 目的関数値が正しいかどうかチェックします。既定の設定 |
MaxFunctionEvaluations |
可能な関数評価の最大回数(正の整数)。
|
MaxIterations |
可能な反復の最大数(正の整数)。
|
OptimalityTolerance |
1次の最適性に関する終了許容誤差(正のスカラ)。既定値は
|
OutputFcn |
各反復で最適化関数が呼び出すユザ定義の関数を1以上指定します。関数ハンドルか,関数ハンドルの单元格配列を渡します。既定の設定はなし( |
PlotFcn |
アルゴリズムが実行中のさまざまな進行状況の測定値をプロットします。事前定義されたプロットから選択するか,独自のコ,ドを記述してください。組み込みプロット関数名,関数ハンドル,または組み込みプロット関数名か関数ハンドルの细胞配列を渡します。カスタムプロット関数の場合は,関数ハンドルを渡します。既定の設定はなし(
カスタムのプロット関数は,出力関数と同じ構文を使用します。詳細は,优化工具箱™の出力関数と出力関数とプロット関数の構文を参照してください。
|
SpecifyConstraintGradient |
ユ,ザ,により定義される非線形制約関数に対する勾配。既定の
|
SpecifyObjectiveGradient |
ユ,ザ,が定義する目的関数の勾配。
|
StepTolerance |
|
TypicalX |
典型的な
|
UseParallel |
|
信頼領域反思法アルゴリズム | |
FunctionTolerance |
関数値に関する終了許容誤差(正のスカラ)。既定値は
|
HessianFcn |
|
HessianMultiplyFcn |
ヘッセ乗算関数。関数ハンドルとして指定されます。大規模構造問題に対して、この関数は実際に W = hmfun(Hinfo,Y) ここで 最初の引数は目的関数 [f,g,Hinfo] = fun(x)
メモ:
詳細は,ヘッセ乗算関数を参照してください。例にいては,密に構造化されたヘッシアンと線形等式を使用した最小化を参照してください。
|
HessPattern | 有限差分に対するヘッシアンのスパ,スパタ,ン。∂2
構造が不明であれば, |
MaxPCGIter | 前処理付き共役勾配法(pcg)の反復の最大回数(正のスカラ)。既定は,範囲制約付き問題の場合は |
PrecondBandWidth | PCGに対する前提条件子の帯域幅の上限(非負の整数)。既定では,対角型の前提条件を使用します (帯域幅の上限 0)。一部の問題では、帯域幅を上げることで、PCG 法の反復回数を減らします。 |
SubproblemAlgorithm |
反復ステップの計算方法を定義します。既定の設定である |
TolPCG | PCG反復に関する終了許容誤差(正のスカラ)。既定値は |
有効制約法アルゴリズム | |
FunctionTolerance |
関数値に関する終了許容誤差(正のスカラ)。既定値は
|
MaxSQPIter | SQP反復の最大数(正の整数)。既定値は |
RelLineSrchBnd | ラン探索ステップ長の相対範囲(非負の実数スカラ値)。Xの合計変位は,|Δx(我)|≤relLineSrchBnd·马克斯(| x(我)| | typicalx(我)|)を満たします。このオプションはソルバーが大きすぎるステップをとった場合に,xの変位の大きさをコントロールします。既定の設定は範囲なし |
RelLineSrchBndDuration |
|
TolConSQP | 内部反復SQP制約違反に関する終了許容誤差(正のスカラ)。既定の設定は |
内点法アルゴリズム | |
BarrierParamUpdate |
どの方法を選択するかにより,ソルバ,の速度と収束性に影響が及びますが,その影響の予測は困難です。 |
HessianApproximation |
どのように
メモ
|
HessianFcn |
|
HessianMultiplyFcn |
ヘッシアンとベクトルの積を計算するためにユ、ザ、が提供した関数(ヘッセ乗算関数を参照)。関数ハンドルを渡します。 メモ:
|
HonorBounds |
既定の
|
InitBarrierParam | 初期境界値(正のスカラ)。既定の |
InitTrustRegionRadius | 信頼領域の初期半径です(正のスカラ)。適切にスケ,ル化されていない問題では既定の より小さな値を選択すると役立場合があります。ここでnは変数の数です。 |
MaxProjCGIter | 計画された共役勾配の反復回数の許容誤差(停止条件)です。これは内部反復であり,アルゴリズムの反復数ではありません。この正の整数は |
ObjectiveLimit |
スカラ,の許容誤差(停止条件)です。目的関数値が |
ScaleProblem |
|
SubproblemAlgorithm |
反復ステップの計算方法を定義します。 |
TolProjCG | 計画された共役勾配アルゴリズムの相対許容誤差(停止条件)です。これは内部の反復に対してであり,アルゴリズムの反復に対してではありません。この正のスカラ,は |
TolProjCGAbs | 計画された共役勾配アルゴリズムの絶対許容誤差(停止条件)です。これは内部の反復に対してであり,アルゴリズムの反復に対してではありません。この正のスカラ,は |
SQPおよびSQPレガシアルゴリズム | |
ObjectiveLimit |
スカラ,の許容誤差(停止条件)です。目的関数値が |
ScaleProblem |
|
例:options = optimoptions('fmincon',' specyobjectivegradient ',true,' specyconstraintgradient ',true)
问题
- - - - - -問題構造体次のフィルドをも構造体として指定される問題構造体です。
フィ,ルド名 | エントリ |
---|---|
|
目的関数 |
|
x の初期点 |
|
線形不等式制約の行列 |
|
線形不等式制約のベクトル |
|
線形等式制約の行列 |
|
線形等式制約のベクトル |
磅 |
下限のベクトル |
乌兰巴托 |
上限のベクトル |
|
非線形制約関数 |
|
“fmincon” |
|
optimoptions で作成されたオプション |
问题
構造体では,少なくとも客观的
、x0
、解算器
,および选项
フィ,ルドを指定しなければなりません。
デ,タ型:结构体
x
——解実数ベクトルまたは実数配列として返される解です。x
のサ电子邮箱ズは,x0
のサ@ @ズと同じです。通常、exitflag
が正の場合,x
は問題に対する局所的な解になります。解の質に関する詳細は,ソルバ,が成功する場合を参照してください。
fval
-解での目的関数値解での目的関数値。実数として返されます。一般的に、fval
=有趣的(x)
になります。
exitflag
- - - - - -fmincon
の停止理由fmincon
の停止理由。整数として返されます。
すべてのアルゴリズム: |
|
|
1次の最適性の尺度が |
|
反復回数が |
|
出力関数またはプロット関数によって停止したことを示します。 |
|
実行可能な点が見かりません。 |
|
|
|
|
|
|
|
目的関数の値の変更が |
|
|
|
探索方向の大きさが2* . |
|
方向導関数の大きさが2* . |
|
|
|
現在の反復の目的関数が |
输出
-最適化プロセスに関する情報最適化プロセスに関する情報。次のフィルドをも構造体として返されます。
迭代 |
実行した反復回数 |
funcCount |
関数評価の回数 |
lssteplength |
探索方向に対するラ▪▪ン探索ステップサ▪▪ズ( |
constrviolation |
制約関数の最大値 |
stepsize |
|
算法 |
使用される最適化アルゴリズム |
cgiterations |
PCG法での合計反復回数( |
firstorderopt |
1次の最適性の尺度 |
bestfeasible |
検出された最適(最小目的関数)実行可能点。次のフィ,ルドで構成される構造体:
実行可能点が見からなかった場合は,
|
消息 |
終了メッセ,ジ |
研究生
-解での勾配解での勾配。実数ベクトルとして返されます。研究生
は,点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を参照)。
(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]で詳しく説明します。
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。
使用上の注意および制限
fmincon
は,関数codegen
(MATLAB编码器)またはMATLAB编码器™アプリを使用したコ,ド生成をサポ,トしています。コ,ドを生成するにはMATLAB编码器ラ@ @センスが必要です。
タ,ゲットハ,ドウェアは,標準的な倍精度浮動小数点計算をサポ,トしていなければなりません。単精度計算や固定小数点計算のコ,ドは生成できません。
コド生成タゲットは,matlabソルバと同じ数学カネルラブラリを使用しません。そのため,コード生成解法は,特に,条件付けが不十分な問題の場合に,ソルバー解法と異なる可能性があります。
生成用のコ,ドはすべて,matlabコ,ドでなければなりません。特に,カスタムブラックボックス関数をfmincon
の目的関数として使用することはできません。coder.ceval
を使用して,cまたはc++でコド化されたカスタム関数を評価することはできます。ただし,そのカスタム関数はmatlab関数内で呼び出さなければなりません。
コ,ド生成の場合,fmincon
は问题
引数をサポ,トしていません。
[x,fval] = fmincon(问题)%不支持万博1manbetx
字符串や文字名ではなく,関数ハンドルを使用して,目的関数と非線形制約関数を指定しなければなりません。
x = fmincon(@fun,x0,A,b,Aeq,beq,lb,ub,@nonlcon)%的万博1manbetx支持%不支持:f万博1manbetxmincon(‘有趣的’,…)或fmincon(“有趣”,…)
fmincon
の入力行列(一个
、Aeq
、磅
、乌兰巴托
など)はすべてフル(非スパ,ス)でなければなりません。関数完整的
を使用することで,スパ,ス行列を非スパ,スに変換できます。
磅
引数と乌兰巴托
引数は,x0
引数と同じ数のエントリを持か,空の[]
でなければなりません。
組み込みプロセッサを使用する高度なコ,ド最適化には,嵌入式编码器®ラ@ @センスも必要です。
fmincon
のオプションを含め,関数optimoptions
を使用して指定しなければなりません。オプションには算法
オプションを含め,“sqp”
または“sqp-legacy”
に設定しなければなりません。
选项= optimoptions(“fmincon”,“算法”,“sqp”);[x,fval,exitflag] = fmincon(fun,x0,A,b,Aeq,beq,lb,ub,nonlcon,options);
コ,ド生成では次のオプションをサポ,トしています。
算法
- - - - - -“sqp”
または“sqp-legacy”
でなければなりません
ConstraintTolerance
FiniteDifferenceStepSize
FiniteDifferenceType
MaxFunctionEvaluations
MaxIterations
ObjectiveLimit
OptimalityTolerance
ScaleProblem
SpecifyConstraintGradient
SpecifyObjectiveGradient
StepTolerance
TypicalX
生成コ,ドでは,オプションに対して限られたエラ,チェックしか行われません。オプションの更新方法として,ドット表記ではなく,optimoptions
を使用することを推奨します。
Opts = optimoptions(“fmincon”,“算法”,“sqp”);Opts = optimoptions(Opts,“MaxIterations”1 e4);%推荐选择。米axIterations = 1e4;%不推荐
オプションはファ@ @ルから読み込まないでください。そうした場合,コ,ド生成に失敗することがあります。代わりに,コ,ド内でオプションを作成してください。
通常,サポートされていないオプションを指定すると,コード生成の際にそのオプションは暗黙的に無視されます。ただし,ドット表記を使用してプロット関数や出力関数を指定すると、コード生成でエラーが発生することがあります。信頼性を確保するために、サポートされているオプションのみを指定してください。
出力関数とプロット関数はサポ,トされていないため,fmincon
は終了フラグ-1を返しません。
fmincon
から生成されたコ,ドでは,返された输出
構造体内にbestfeasible
フィ,ルドがありません。
例にいては,最適化のためのコ,ド生成の基本を参照してください。
並列実行するには,“UseParallel”
オプションを真正的
に設定します。
Options = optimoptions('
solvername
”、“UseParallel’,真的)
詳細は,优化工具箱での並列計算の使用を参照してください。
次のmatlabコマンドに対応するリンクがクリックされました。
コマンドをmatlabコマンドウィンドウに入力して実行してください。Webブラウザ,はMATLABコマンドをサポ,トしていません。
您也可以从以下列表中选择一个网站:
选择中国站点(中文或英文)以获得最佳站点性能。其他MathWorks国家站点没有针对您所在位置的访问进行优化。