主要内容

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

アルゴリズムの选択

fminconアルゴリズム

粉刺には,次の5つのアルゴリズムオプションがあります。

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

  • “信任区域反射”

  • “小数量议定书”

  • “SQP遗”

  • “有源集”

optimoptionsを使用して,コマンドラインで算法オプションを设定します。

推奨
  • 最初に“内点”アルゴリズムを使用します。

    最小化が失败した场合のヘルプは,ソルバーが失败する场合またはソルバーが成功している可能性がある场合を参照してください。

  • 最适化を再度実行して小规模または中规模の问题に対するスピードを上げるには,次に“小数量议定书”を,最后に“有源集”を试してください。

  • 适用可能なら“信任区域反射”を使用します。问题においては,目的关数に勾配と制约が含まれ,制约条件は范囲のみか线形等式のみ(両方は不可)でなければなりません。

详细は,内点法アルゴリズムによる精度低下の可能性についてを参照してください。

推奨の理由

  • “内点”は大规模なスパース问题と小规模な密问题を处理します。このアルゴリズムは,すべての反复で范囲を満たし,またはINF.の结果から回复できます。これは大规模なアルゴリズムです。大规模アルゴリズムと中规模アルゴリズムを参照してください。このアルゴリズムは,大规模な问题に対して特别な手法を使用できます详细。は,粉刺选项,「内点法アルゴリズム」を参照してください。

  • “小数量议定书”はすべての反复で范囲を満たします。このアルゴリズムは,またはINF.の结果から回复できます。これは大规模なアルゴリズムではありません。大规模アルゴリズムと中规模アルゴリズムを参照してください。

  • “SQP遗”“小数量议定书”に类似していますが,通常,より低速で,さらに多くのメモリを使用します。

  • “有源集”は大きなステップを取ることができるので,高速に处理可能です。このアルゴリズムは,滑らかでない制约をもつ一部の问题に対して效果的です。これは大规模なアルゴリズムではありません。大规模アルゴリズムと中规模アルゴリズムを参照してください。

  • “信任区域反射”は,勾配を与えることを必要とし,范囲のみまたは线形等式制约のみ(ただし両方ではない)が可能です。これらの制限内でならば,このアルゴリズムは大规模なスパース问题と小规模な密问题を效果的に扱うことができます。これは大规模なアルゴリズムです。大规模アルゴリズムと中规模アルゴリズムを参照してください。このアルゴリズムは,ヘッセ乘算关数など,特别な手法を使用してメモリ使用量を节约できます详细。は,粉刺选项,「信頼领域反射法アルゴリズム」を参照してください。

各アルゴリズムの说明については,制约付き非线形最适化アルゴリズムを参照してください。

fsolveアルゴリズム

FSOLVE.は次の3つのアルゴリズムをもっています。

  • “信任区域狗腿”(既定の设定)

  • “信任区”

  • “文伯格 - 马夸特”

optimoptionsを使用して,コマンドラインで算法オプションを设定します。

推奨
  • 最初に“信任区域狗腿”アルゴリズムを使用します。

    FSOLVE.が失败した场合のヘルプは,ソルバーが失败する场合またはソルバーが成功している可能性がある场合を参照してください。

  • ヤコビ乘算关数をもっている场合や,内部アルゴリズムを微调整したい场合(FSOLVE.选项の「信頼领域法アルゴリズム」を参照)に,再び方程式を解くには,“信任区”を试してください。

  • “文伯格 - 马夸特”を含めてすべてのアルゴリズムの时间を测定してみて,自分の问题に最も适したアルゴリズムを探してください。

推奨の理由

  • “信任区域狗腿”は,非线形方程式を解くために特别に设计された唯一のアルゴリズムです。その他は,この关数の二乘和を最小にするよう试みます。

  • “信任区”アルゴリズムは,スパース问题に対して效果的です。このアルゴリズムは,大规模な问题に対して,ヤコビ乘算关数などのような特别な手法を使用できます。

各アルゴリズムの说明については,方程式を解くためのアルゴリズムを参照してください。

fminuncアルゴリズム

Fminunc.は次の2つのアルゴリズムをもっています。

  • “准牛顿”(既定の设定)

  • “信任区”

optimoptionsを使用して,コマンドラインで算法オプションを设定します。

推奨
  • 目的关数が勾配を含む场合は,“算法” =“信任区域”を使用して,SpecifyObjectiveGradientオプションを真的に设定します。

  • そうでない场合は“算法” ='准牛顿を使用します。

最小化が失败した场合のヘルプは,ソルバーが失败する场合またはソルバーが成功している可能性がある场合を参照してください。

各アルゴリズムの说明については,制约なし非线形最适化アルゴリズムを参照してください。

最小二乘アルゴリズム

lsqlin

lsqlinは次の3つのアルゴリズムをもっています。

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

  • “信任区域反射”

  • “有源集”

optimoptionsを使用して,コマンドラインで算法オプションを设定します。

推奨
  • 最初に“内点”を试行します。

    ヒント

    入力行列Cの非ゼロ入力の割合が高い场合に,より优れたパフォーマンスを得るには,Cを通常の双行列として指定します。同様に,Cの非ゼロ入力が比较的少ない场合に,より优れたパフォーマンスを得るには,Cをスパースとして指定します。データ型の详细については,スパース行列を参照してください。'LinearSolver'オプションを使用すると,内部的な线形代数タイプを设定することもできます。

  • 制约がない场合または范囲制约のみの场合に,より高い精度,速度が必要な场合または线形最小二乘付きヤコビ乘算关数を使用するには,“信任区域反射”を试行します。

  • 多数の线形制约があるものの変数の数は多くない场合は,“有源集”を试してください。

最小化が失败した场合のヘルプは,ソルバーが失败する场合またはソルバーが成功している可能性がある场合を参照してください。

详细は,内点法アルゴリズムによる精度低下の可能性についてを参照してください。

各アルゴリズムの说明については,最小二乘(モデル当てはめ)アルゴリズムを参照してください。

lsqcurvefitとlsqnonlin

lsqcurvefitlsqnonlinは次の2つのアルゴリズムをもっています。

  • “信任区域反射”(既定の设定)

  • “文伯格 - 马夸特”

optimoptionsを使用して,コマンドラインで算法オプションを设定します。

推奨
  • 一般に,最初に“信任区域反射”を试行します。

  • 问题が劣决定(次元より方程式が少ない)の场合は,“文伯格 - 马夸特”を使用します。

最小化が失败した场合のヘルプは,ソルバーが失败する场合またはソルバーが成功している可能性がある场合を参照してください。

各アルゴリズムの说明については,最小二乘(モデル当てはめ)アルゴリズムを参照してください。

线形计画法のアルゴリズム

linprogは次の3つのアルゴリズムをもっています。

  • “双单”(既定の设定)

  • “内点遗留”

  • “内点”

optimoptionsを使用して,コマンドラインで算法オプションを设定します。

推奨

まず“双单”アルゴリズムまたは“内点”アルゴリズムを使用します。

最小化が失败した场合のヘルプは,ソルバーが失败する场合またはソルバーが成功している可能性がある场合を参照してください。

详细は,内点法アルゴリズムによる精度低下の可能性についてを参照してください。

推奨の理由

  • 多くの场合,“双单”アルゴリズムと“内点”アルゴリズムは高速で,最小限のメモリを使用します。

  • “内点遗留”アルゴリズムは“内点”に类似していますが,“内点遗留”では速度やロバスト性が低下したり,メモリ使用量が増加したりすることがあります。

各アルゴリズムの说明については,线形计画法のアルゴリズムを参照してください。

二次计画法のアルゴリズム

quadprogは次の3つのアルゴリズムをもっています。

  • “内点凸”(既定の设定)

  • “信任区域反射”

  • “有源集”

optimoptionsを使用して,コマンドラインで算法オプションを设定します。

推奨
  • 凸问题の场合や问题が凸であるかどうかわからない场合には,“内点凸”を使用します。

  • ヒント

    ヘッセ行列Hの非ゼロ入力の割合が高い场合に,より优れたパフォーマンスを得るには,Hを通常の双行列として指定します。同様に,Hの非ゼロ入力が比较的少ない场合に,より优れたパフォーマンスを得るには,Hをスパースとして指定します。データ型の详细については,スパース行列を参照してください。'LinearSolver'オプションを使用すると,内部的な线形代数タイプを设定することもできます。

  • 范囲のみまたは线形等式のみをもつ非凸问题の场合は,“信任区域反射”を使用します。

  • 多数の线形制约があるものの変数の数は多くない半正定値问题の场合は,“有源集”を试してください。

最小化が失败した场合のヘルプは,ソルバーが失败する场合またはソルバーが成功している可能性がある场合を参照してください。

详细は,内点法アルゴリズムによる精度低下の可能性についてを参照してください。

各アルゴリズムの说明については,二次计画法のアルゴリズムを参照してください。

大规模アルゴリズムと中规模アルゴリズム

非スパース行列を保存したり,演算する必要がない线形代数を使用する场合,最适化アルゴリズムは大规模になります。内部の计算处理では可能な限り,スパース行列を用いた保存やスパース线形代数を用いた演算を行います。さらに内部アルゴリズムはスパースコレスキー因子などのようなスパース性を维持し,共役勾配法のように行列を生成することはありません。

一方,中规模メソッドは非スパース行列を内部的に作成し,密な线形代数を利用します。问题が十分に大きい场合,非スパース行列はメモリを大量に消费し,密な线形代数を计算するのに时间がかかります。

「大规模」という名前に间违った印象をもたないでください。大规模アルゴリズムは小规模な问题にも使用できます。また,大规模アルゴリズムを使用するためにスパース行列を指定する必要はありません。制约タイプを追加するなどの追加机能にアクセスする场合は,中规模を选択してください。パフォーマンスが向上する场合があります。

内点法アルゴリズムによる精度低下の可能性について

粉刺quadproglsqlinおよびlinprogの内点法アルゴリズムには,メモリの消费量が少ないことや,大规模な问题をすばやく解决できるなど,多くの利点があります。ただし,その解は他のアルゴリズムの解と比较して精度がやや落ちる可能性があります。潜在的な精度の低下の原因は,内部计算されるバリア关数によって,反复が不等式制约の境界から远ざけられるためです。

実际に多くの场合,この精度の低下は非常に小さなものです。

精度の低下を抑えるには,以下を试してください。

  • StepToleranceOptimalityTolerance,また场合によってはConstraintToleranceの许容误差を小さくしてソルバーを再実行します(ただし,妥当な许容误差は维持してください)。许容误差と停止条件を参照してください。

  • 内点法の求解から始め,别のアルゴリズムを実行します。一部のアルゴリズムでは大量のメモリや长时间を要することがあり,また,すべてのlinprogアルゴリズムと一部のquadprogアルゴリズムは初期点を受け入れないため,この方法は失败することがあります。

たとえば,下限が0という制约で关数Xを最小化してみます。粉刺の既定の内点アルゴリズムを使用します。

选项= optimoptions(@fmincon,'算法'“内点”'展示''离开');X = fmincon(@(X)X,1,[],[],[],[],0,[],[],选项)
X = 2.0000E-08

粉刺SQPアルゴリズムを使用すると次のようになります。

options.Algorithm =“小数量议定书”;X2 = fmincon(@(X)X,1,[],[],[],[],0,[],[],选项)
X2 = 0

同様に,linprog内点遗留アルゴリズムを使用して同じ问题を解きます。

OPTS = optimoptions(@linprog,'展示''离开''算法'“内点遗留”);X = linprog(1,[],[],[],[],0,[],1,OPTS)
X = 2.0833e-13

linprog双单アルゴリズムを使用すると次のようになります。

opts.Algorithm =“双单”;X2 = linprog(1,[],[],[],[],0,[],1,OPTS)
X2 = 0

これらの场合,内点法アルゴリズムで精度は低下しますが,正しい解にきわめて近くなっています。