NMinimize

NMinimize[f,x]

x について f の数値的最小値を求める.

NMinimize[f,{x,y,}]

x, y, について f の数値的最小値を求める.

NMinimize[{f,cons},{x,y,}]

制約条件 cons 下で f の数値的最小値を求める.

NMinimize[,xrdom]

x が領域 rdom 内にあるように制限する.

詳細とオプション

  • NMinimizeは大域的最適化(GO)としても知られている.
  • NMinimizeは,与えられた制約条件に従って常に f の最小値を求めようとする.
  • NMinimizeは,通常,制約が与えられた場合に可能な最小値を求めるために使われる.分野によっては,最適な戦略,最良適合,最適な構成等と呼ばれることがある.
  • NMinimize{fmin,{x->xmin,y->ymin,}}の形のリストを返す.
  • f および cons が線形または凸のとき,NMinimizeが与える結果は実数および整数値の両方の上で最小値になる.それ以外の場合は結果が単に極小値であるかもしれない.
  • NMinimizeが制約条件を満足できないと判断した場合は{Infinity,{x->Indeterminate,}}が返される.
  • NMinimizeは,目的関数 f と制約条件 cons がスカラー変数またはベクトル変数に依存する式で与えられるモデリング言語をサポートする.fcons は,一般に,非常に効率的な形に解析されるが,fcons の項が変数の数値に対して数値を与える限りNMinimizeはしばしば解を求めることができる.
  • 制約条件 cons は以下の論理結合でよい.
  • lhs==rhs等式
    lhs>rhs, lhsrhs, lhs<rhs, lhsrhs不等式 (LessEqual, )
    lhsrhs, lhsrhs, lhsrhs, lhsrhsベクトル不等式 (VectorLessEqual, )
    {x,y,}reg領域指定
  • NMinimize[{f,cons},xrdom]は,事実上,NMinimize[{f,cons&&xrdom},x]に等しい.
  • xrdom については,Indexed[x,i]を使って別の座標に言及することができる.
  • 次は,使用可能な領域 rdom である.
  • Reals実数スカラー変数
    Integers整数スカラー変数
    Vectors[n,dom]のベクトル変数
    Matrices[{m,n},dom]の行列変数
    幾何学領域 に制限されたベクトル変数
  • デフォルトでは,すべての変数が実数であると仮定される.
  • 指定可能なオプション
  • AccuracyGoalAutomatic目標となる最終確度桁数
    EvaluationMonitor Nonef が評価されたときに常に評価される式
    MaxIterationsAutomatic使用する最大反復回数
    Method Automatic使用されるアルゴリズム
    PrecisionGoalAutomatic目標となる最終精度桁数
    StepMonitor Noneステップを取るたびに常に評価される式
    WorkingPrecision MachinePrecision内部計算に使用する精度
  • AccuracyGoalPrecisionGoalの設定で最小値の位置の値と最小になったときの関数の値の両方で目標とする桁数を指定する.
  • NMinimizeAccuracyGoalPrecisionGoalで指定された目標値のどちらかが達成されるまで計算を続ける.
  • NMinimizeのためのメソッドには2つのクラスがある.最初のクラスは問題の特性を使うので,メソッドが収束する際に求まった最小値は大域的であることが保証される.2番目のクラスは発見的なメソッドで,複数の局所探索を使うことがあるが,一般的には確率論によって調整され,大域的最小値に焦点が当てられる.このメソッドもしばしば大域的な最小値を求めるが,必ずそうするとは保証されない.
  • 次は,解に収束する場合に最小値を与えることが保証されているメソッドである.
  • "Convex"凸法だけを使う
    "MOSEK"凸問題用の商用MOSEKライブラリを使う
    "Gurobi"凸問題用の商用Gurobiライブラリを使う
    "Xpress"凸問題用の商用Xpressライブラリを使う
  • 次は,発見的な方法である.
  • "NelderMead"Nelder・Meadのシンプレックス法
    "DifferentialEvolution"差分進化を使う
    "SimulatedAnnealing"焼きなまし法を使う
    "RandomSearch"複数のランダムな初期点から始めて求まった最良の極小値を使う
    "Couenne"非凸混合整数非線形問題にCouenneライブラリを使用する

例題

すべて開くすべて閉じる

  (3)

制約条件がない問題の最小値を求める:

最小化の引数を抽出する:

制約条件がある問題の最小値を求める:

幾何学領域上で関数を最小化する:

これをプロットする:

スコープ  (40)

基本的な用法  (12)

制約条件 に従って を最小化する:

いくつかの線形不等式条件はVectorGreaterEqualで表すことができる:

v>= または \[VectorGreaterEqual]を使ってベクトル不等式の記号を入力する:

スカラー不等式を使った同等の形:

ベクトル変数 を使う:

にスレッディングの可能性があるので,不等式 とは等しくないかもしれない:

での意図しないスレッディングを避けたければInactive[Plus]を使うとよい:

定数パラメータを持つ方程式を使って での意図しないスレッディングを回避する:

VectorGreaterEqual"NonNegativeCone"についての錐不等式を表す:

円錐の次元を明示的に指定したければ,{"NonNegativeCone",n}を使うとよい:

解を求める:

制約条件 に従って を最小化する:

"NormCone"で錐不等式を使って制約条件 を指定する:

解を求める:

制約条件 に従って関数 を最小化する:

Indexedを使ってベクトル変数の成分(例:TemplateBox[{x, 1}, IndexedDefault])にアクセスする:

ベクトル変数の次元と領域が曖昧なときはVectors[n,dom]を使って指定する:

NonNegativeReals (TemplateBox[{}, NonNegativeReals])を使って非負の制約条件を指定する:

ベクトル不等式 を使った同等の形:

NonPositiveReals (TemplateBox[{}, NonPositiveReals])を使って非正の制約条件を指定する:

ベクトル不等式を使った同等の形:

Orという条件を指定することができる:

領域制約1  (4)

Integersを使って整数領域の制約を指定する:

Vectors[n,Integers]を使ってベクトル変数に整数領域の制約を指定する:

NonNegativeIntegers (TemplateBox[{}, NonNegativeIntegers])を使って非負の整数領域の制約を指定する:

NonPositiveIntegers (TemplateBox[{}, NonPositiveIntegers])を使って非正の整数領域の制約を指定する:

領域制約2  (5)

領域上で最小化する:

これをプロットする:

2領域間の最短距離を求める:

これをプロットする:

三角形と楕円形が交差するような最小の を求める:

これをプロットする:

指定された3点を含む最小半径の円板を求める:

これをプロットする:

Circumsphereを使うと,同じ結果が直接与えられる:

を使って 内のベクトルであると指定する,ただし,TemplateBox[{x}, Norm]<=1

線形問題  (5)

線形の目的関数と制約条件がある場合は,最小値が見付かるとそれは大域的になる:

制約条件は等式制約および不等式制約である:

Equalを使っていくつかの等式制約を一度に表現する:

いくつかのスカラー等式を使った同等の形:

VectorLessEqualを使っていくつかのLessEqual不等式制約を一度に表現する:

v<= を使ってベクトル不等式をコンパクトな形で入力する:

スカラー不等式を使った同等の形:

Intervalを使って変数の境界を指定する:

凸問題  (7)

"NonNegativeCone"を使って の形の線形関数を指定する:

v>= を使ってベクトル不等式をコンパクトな形で入力する:

線形制約条件に従って凸二次関数を最小化する:

領域と最小化点をプロットする:

凸二次制約条件の集合に従って凸二次関数を最小化する:

領域と最小化点をプロットする:

2つの凸領域間の最短距離を求める:

これをプロットする:

が半正定値になるように を最小化する:

目的関数のプロット上にミニマイザを示す:

が半正定値でとなるように凸目的関数を最小化する:

領域と最小化点をプロットする:

4ノルムの単位円板上で凸目的関数を最小化する:

領域と最小化点をプロットする:

凸に変換可能  (4)

面積が1で縦が最大でも横の1/2になるようにして長方形の外周を最小化する:

この問題は対数凸関数で,変換{hExp[],wExp[ ]}を行なって対数を取って凸問題を得ることで解くことができる:

不等式制約とノルム制約に従って擬似凸関数 を最小化する.目的関数は領域上の非負の関数と非正の関数の積なので,擬似凸関数である:

擬似凸問題はパラメータ についてのパラメトリック凸最適化問題として解くことができる:

目的関数を等位集合 の関数としてプロットする:

内の等位集合の値について,最小の目的関数が求まる:

等位集合の値が大きくなると,問題は実行不可能になる:

制約条件に従って を最小化する.目的関数は凸関数ではないが凸関数の差 で表すことができる.ただし, は凸関数である:

領域と最小化点をプロットする:

制約条件に従って を最小化する.制約条件が凸ではないが凸制約条件 の差で表すことができる.ただし, は凸関数である:

領域と最小化点をプロットする:

一般的な問題  (3)

非線形制約条件に従って線形目的関数を最小化する:

プロットする:

非線形目的関数を線形制約条件に従って最小化する:

目的関数と最小化点をプロットする:

非線形目的関数を非線形制約条件に従って最小化する:

プロットする:

オプション  (10)

AccuracyGoalとPrecisionGoal  (2)

次は,収束基準を強制する:

次は,収束基準を強制する.これはデフォルトの機械精度計算では達成できない:

WorkingPrecisionの設定値を高くするとプロセスが収束する:

EvaluationMonitor  (1)

関数の解を出す過程で評価したすべての点を環状の最小値で記録する:

呼び出した点の中で目的関数の値において最終的な解に近いすべての点をプロットする:

Method  (5)

メソッドの中には問題によっては準最適解を与えるものがある:

この問題に対しては,自動選択されたメソッドが最適解を与える:

自動メソッド選択がこの非凸問題に選ぶのは"Couenne"メソッドである:

解を最小値とともにプロットする:

"Couenne"メソッドを使って複数の極小値を含む関数の最小値を求める:

最小化関数と最小値解をプロットする:

速度を求めるなら,たくさんの変数がある問題には"NelderMead"メソッドを使う:

"Convex"メソッドあるいはExcept["Convex"]を使って凸法を使うかどうかを指定する:

"Couenne"メソッドあるいはExcept["Couenne"]を使ってCouenneソルバを選択するか除外するかする:

StepMonitor  (1)

古典的なRosenbrock関数の最小値を求める際にNMinimizeが取ったステップ:

WorkingPrecision  (1)

作業精度をにする.デフォルトでAccuracyGoalPrecisionGoalに設定されている:

アプリケーション  (19)

幾何学の問題  (4)

を中心とする半径1の2つの円板間の最短距離を求める.を円板1の上の点,円板2の上の点とする.目的は制約条件に従ってを最小化することである:

2点の位置を可視化する:

与えられた領域を包み込む最小の球の半径 と中心 を求める:

制約条件 に従って半径 を最小にする:

包み込んでいる球を可視化する:

包み込む最小の球はBoundingRegionを使って効率的に求めることができる:

3Dの点集合を体積を最小にして包み込む,{x:TemplateBox[{{{a, ., x}, +, b}}, Norm]<=1}とパラメータ化できる最小の楕円体を求める:

各点 について,定数TemplateBox[{{{a, ., {p, _, i}}, +, b,  }}, Norm]<=1, i=1,2,...,n が満足されなければならない:

体積の最小化はの最小化に等しい:

パラメータ化された楕円を明示的な形に変換する:

境界楕円体(体積は必ずしも最小ではない)もBoundingRegionを使って求めることができる:

半径 ()の重なり合ない 個の円が入る最小の正方形を求める.円の数と各円の半径を指定する:

が円 の中心なら,目的はを最小化することになる.目的は を最小化するように変換できる:

円は重なり合ってはならない:

変数を集める:

目的関数 を最小化する:

円は正方形内に収まっている:

正方形の円で覆われた部分の割合を計算する:

データフィッティング問題  (3)

与えられた行列 a とベクトル b について,を制約条件 に従って最小にする:

データの最初と最後の点が曲線上にあるようにして,三次曲線を離散データにフィットする:

DesignMatrixを使って行列を構築する:

最初と最後の点が必ず曲線上にあるように,制約条件を定義する:

を最小にすることで係数 を求める:

フィットとデータを比較する:

を最小化することで,非線形データの外れ値にあまり敏感ではないフィットを求める:

基底 を使ってデータをフィットする.補間関数は である:

解を求める:

フィットを可視化する:

補間関数を参照関数と比較する:

分類問題  (5)

2つの点集合 を分離する直線 を求める:

分離するためには,集合1は を,集合2は を満足しなければならない:

目的は の間の厚みの2倍を与えるを最小化することである:

分離線は以下のようになる:

3Dの2つの点集合 を分離する二次多項式を求める:

DesignMatrixを使って2つの集合のための二次多項式データ行列を構築する:

分離するためには,集合1は を集合2は を満足しなければならない:

を最小化することで分離多項式を求める:

2つの点集合を分離する多項式は以下である:

2つのデータ集合を分離する多項式をプロットする:

与えられた点集合 を分離して別の集合にする.これは,を最小化して各群の中心 を求めることで行える.ただし,は与えられた局所カーネル,は与えられたペナルティパラメータである:

カーネル は,でそれ以外は となるような k-最近傍 () 関数である.この問題のために の最近傍が選択されている:

目的関数は以下である:

各群の中心を求める:

各データ点に対応する中心がある.同じ群に属するデータは同じ中心値を持つ:

グループ化された点を抽出してプロットする:

正の整数のリストを与えられたときに,このリストを重なり合ない2つの部分集合に分割する.ただし,2つの部分集合の合計の差を最小にしなければならない.リストを定義する:

値が1か1であるバイナリ変数を定義する.リストの要素が部分集合1に属するなら,これに関連付けられたバイナリ変数の値は1になる.部分集合2に関連付けられたバイナリ変数は1である:

目的は2つの部分周濠の和の差を最小にすることである:

部分集合を求める:

重さが異なるオブジェクトの集合と2つの袋が与えられたとして,袋の可搬重量を超えない範囲で合計重量が最大になるように2つの袋に入れられるオブジェクトを求める.オブジェクトの数と重さを求める:

オブジェクトを袋1に入れるか,袋2に入れるか,あるいはどちらでもないかを決定するためにバイナリ変数を使用する:

各袋の可搬重量は5000である.

目的は,2つの袋に入るオブジェクトの重さを最大にすることである:

問題を解く:

バイナリ変数 は袋1に入るオブジェクトに関連付けられる.変数 の補集合である.袋に入ったオブジェクトの重さは以下の通りである:

画像処理  (1)

全変動ノルムの下で最も近い画像を求めることで,破損した画像を回復する:

40%のデータ点をランダムに削除することで破損画像を作成する:

目的はsum_(i=1)^(n-1)sum_(j=1)^(m-1)sqrt(TemplateBox[{{TemplateBox[{u, {i, +, 1}, j}, IndexedDefault], -, TemplateBox[{u, i, j}, IndexedDefault]}}, Abs]^2+TemplateBox[{{TemplateBox[{u, i, {j, +, 1}}, IndexedDefault], -, TemplateBox[{u, i, j}, IndexedDefault]}}, Abs]^2)を最小にすることである.ただし, は画像データである:

任意の非零のデータ点 TemplateBox[{u, i, j}, IndexedDefault]は破損していないと仮定する.これらの点について,TemplateBox[{u, i, j}, IndexedDefault]=u_(i j)^(orig)と設定する:

解を求め,回復された画像を表示する:

施設の場所の問題  (1)

さまざまな携帯電話基地局 の場所と にいるクライアントにサービスを提供するために必要な範囲 を求める:

各基地局は,範囲に比例する電力(で与えられる)を消費する.目的は電力消費量を最小にすることである:

を,クライアント が携帯基地局 でカバーされるなら であることを示す決定変数とする:

各携帯基地局はその範囲がクライアントの何人かをカバーするような場所になければならない:

各携帯基地局は複数のクライアントをカバーする:

各携帯基地局は最低と最高のカバレッジを持つ:

すべての変数を集める:

各携帯基地局の位置とその範囲を求める:

各携帯基地局の位置とその範囲を抽出する:

各携帯基地局の位置とその範囲をクライアントの場所について可視化する:

ポートフォリオの最適化  (1)

リスクが最小でリターンが最大になるような,資本 の6つの株式への投資配分を求める:

リターンは で与えられる.ただし, は個別の株式の予想収益の値のベクトルである:

リスクは で与えられる. はリスク回避パラメータであり, である:

目的は,指定されたリスク回避パラメータについてリスクを最小にしつつリターンを最大にすることである:

株式の売買による株式の市場価格への影響はでモデル化される:

重み はどれも0より大きくなければならず,重みに市場影響コストを加えたものは1でなければならない:

リスク回避パラメータの範囲について,利益と対応するリスクを計算する:

範囲 での最適な は,リスクとリターンのトレードオフの上界包絡線を与える:

指定数のリスク回避パラメータについて重みを計算する:

市場コストを説明することで,低リスク回避のための多様化したポートフォリオが得られるが,リスク回避が高い場合は,多様化されていない株式を購入するため,市場への影響コストが支配的になる:

軌道最適化  (1)

円形の障害物を迂回する始点から終点までの距離が最短の経路を求める:

この経路は,点の間の距離が である 個の点に離散化される. は最小化される軌道の長さである:

点は円形オブジェクトの中にあってはならない:

始点と終点は既知である:

変数を集める:

制約条件に従って の長さを最短にする:

結果を可視化する:

製造問題  (3)

指定された歯車比を生成するために,ギア に必要な歯車 の数を求める:

それぞれのギアには個から個までの歯がある:

指定された歯車列構成の場合,歯車比は で与えられる:

歯車比をにするために必要な,各ギアの歯の数を求める:

圧力釜の製造コストを最小にする.釜は長さ ,半径 の円柱形シェルで,円柱の両端に半球のキャップが付いている:

釜の体積制約は以下の通りである:

シェルの厚さは で半球キャップの厚さは である.シェルとキャップの厚さには上限と下限が指定されており,半径との比よりも大きくなければならない:

シェルとキャップの厚さには追加の制約がある:

釜の寸法制約は以下の通りである:

シェルとキャップの材料の密度は である.材料コストは以下の通りである:

シェルとキャップの溶接コストは以下の通りである:

総製造コストは溶接コストと材料コストの合計である:

制約条件を指定する:

製造コストを最小にする釜の寸法を求める:

軸荷重をに依存する,巻き径 ,線バネ径,バネコイル の最小体積の圧縮コイルバネを設計する:

バネの体積は以下の通りである:

バネにかかる剪断応力は,最大許容軸荷重 に依存し,最大許容応力 より低くなければならない:

バネのたわみは以下のように定義される:

バネの自由長は,最大許容長 より短くなければならない:

線バネの直径は指定された最小直径を超えてはならない:

バネの外径は指定された最大直径 未満でなければならない:

巻き径 は,バネコイルがキツく巻かれすぎないようにするために,少なくとも線バネ径 の3倍でなければならない.

予荷重時のたわみは指定された まででなければならない:

たわみと事前荷重によって生じる荷重 は,最大荷重 を超えてはならない:

バネコイルはミュージックワイヤー スプリング鋼ASTM A228から製造され,ワイヤーの直径は一連の所定の直径から選択する必要がある:

線バネ径 はバイナリ変数を使って所定の集合から選ばれる:

制約条件を指定する:

制約条件をまとめる:

問題を解く:

特性と関係  (9)

NMinimizeは最小値と,変数の値を最小にする規則を与える:

NArgMinは最小化する値のリストを与える:

NMinValueは最小値だけを与える:

関数 f の最大化は-f の最小化に等しい:

凸問題については,ConvexOptimizationを使って追加的な解の特性が得られるかもしれない:

双対解を得る:

パラメータがある凸問題についてParametricConvexOptimizationを使うとParametricFunctionが与えられる:

ParametricFunctionはパラメータの値について評価できる:

NMinimizeを使ってパラメトリック問題についての関数を定義する:

2通りのアプローチの所要時間を比較する:

ParametricFunctionの導関数も計算できる:

RobustConvexOptimizationは,パラメータ制約がある凸問題についてはパラメータの可能なすべての値について有効な最適値を求める:

NMinimizeはパラメータの特定の値についてより小さい値を求めるかもしれない:

このミニマイザは αβ の使用可能なすべての値についての制約条件は満足しない:

パラメータの特定の値について求まった最小値はロバストな最小値以下である:

NMinimizeは大域的である最小値を求めようとするのに対し,FindMinimumは極小値(局所的な最小値)を求めようとする:

FindFitNMinimizeを使って大域的最適フィットを求めることができる.次でそのモデルを設定する:

モデルとパラメータから関数を作成し,サンプル点を生成する:

デフォルトで,FindFitは局所的最適フィットしか求めない:

NMinimizeメソッドを使うと大域的最適フィットが求まる:

RegionDistanceRegionNearestを使って距離と最近点を計算する:

どちらもNMinimizeを使って計算することができる:

RegionBoundsを使って境界ボックスを計算する:

NMaximizeNMinimizeを使っても同じ境界が計算できる:

考えられる問題  (3)

非線形の関数の場合は,NMinimizeは,メソッドによっては極小値しか見付けられないことがある:

解を極小値とともにプロットする:

初期区間を指定するとよりよい極小値を求めるのに役立つ:

自動メソッドの方がよい解を与える:

NMinimizeは,メソッドによっては円板上で二次元関数の極小値を求める:

初期区間を設定すると最小値を求めるのに役立つ:

指定されたパラメータについて数値積分を行う関数を定義する:

パラメータ値2で計算する:

この関数を記号パラメータに適用するとNIntegrateからメッセージが生成される:

この関数をNMinimizeのような他の数値関数と一緒に使っても同じように警告が出る:

メッセージが出るのを避けるために,引数が数値のときにだけ評価する関数を定義する:

数値で計算する:

この関数は引数が数値以外のときは評価されない:

これで,この関数をNMinimizeのような他の数値関数と一緒に使えるようになった:

Wolfram Research (2003), NMinimize, Wolfram言語関数, https://reference.wolfram.com/language/ref/NMinimize.html (2024年に更新).

テキスト

Wolfram Research (2003), NMinimize, Wolfram言語関数, https://reference.wolfram.com/language/ref/NMinimize.html (2024年に更新).

CMS

Wolfram Language. 2003. "NMinimize." Wolfram Language & System Documentation Center. Wolfram Research. Last Modified 2024. https://reference.wolfram.com/language/ref/NMinimize.html.

APA

Wolfram Language. (2003). NMinimize. Wolfram Language & System Documentation Center. Retrieved from https://reference.wolfram.com/language/ref/NMinimize.html

BibTeX

@misc{reference.wolfram_2024_nminimize, author="Wolfram Research", title="{NMinimize}", year="2024", howpublished="\url{https://reference.wolfram.com/language/ref/NMinimize.html}", note=[Accessed: 22-November-2024 ]}

BibLaTeX

@online{reference.wolfram_2024_nminimize, organization={Wolfram Research}, title={NMinimize}, year={2024}, url={https://reference.wolfram.com/language/ref/NMinimize.html}, note=[Accessed: 22-November-2024 ]}