NMaximize

NMaximize[f,x]

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

NMaximize[f,{x,y,}]

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

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

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

NMaximize[,xrdom]

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

詳細とオプション

  • NMaximizeは大域的最適化(GO)としても知られている.
  • NMaximizeは,与えられた制約条件に従って常に f の最大値を求めようとする.
  • NMaximizeは,通常,制約が与えられた場合に可能な最大値を求めるために使われる.分野によっては,最適な戦略,最良適合,最適な構成等と呼ばれることがある.
  • NMaximize{fmax,{x->xmax,y->ymax,}}の形のリストを返す.
  • f および cons が線形または凹のとき,NMaximizeが与える結果は実数および整数値の両方の上で最大値になる.それ以外の場合は結果が単に極大値であるかもしれない.
  • NMaximizeが制約条件を満足できないと判断した場合は{Infinity,{x->Indeterminate,}}が返される.
  • NMaximizeは,目的関数 f と制約条件 cons がスカラー変数またはベクトル変数に依存する式で与えられるモデリング言語をサポートする.fcons は,一般に,非常に効率的な形に解析されるが,fcons の項が変数の数値に対して数値を与える限りNMaximizeはしばしば解を求めることができる.
  • 制約条件 cons は以下の論理結合でよい.
  • lhs==rhs等式
    lhs>rhs, lhsrhs, lhs<rhs, lhsrhs不等式 (LessEqual, )
    lhsrhs, lhsrhs, lhsrhs, lhsrhsベクトル不等式 (VectorLessEqual, )
    {x,y,}rdom領域指定
  • NMaximize[{f,cons},xrdom]は事実上 NMaximize[{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の設定で最大値の位置の値と最大になったときの関数の値の両方で目標とする桁数を指定する.
  • NMaximizeは,AccuracyGoalPrecisionGoalで指定された目標値のどちらかが達成されるまで計算を続ける.
  • NMaximizeのためのメソッドには2つのクラスがある.最初のクラスは問題の特性を使うので,メソッドが収束する際に求まった最大値は大域的であることが保証される.2番目のクラスは発見的なメソッドで,複数の局所探索を使うことがあるが,一般的には確率論によって調整され,大域的最大値に焦点が当てられる.このメソッドもしばしば大域的な最大値を求めるが,必ずそうするとは保証されない.
  • 次は,解に収束する場合に最大値を与えることが保証されているメソッドである.
  • "Convex"凸法だけを使う
    "MOSEK"凸問題用の商用MOSEKライブラリを使う
    "Gurobi"凸問題用の商用Gurobiライブラリを使う
    "Xpress"凸問題用の商用Xpressライブラリを使う
  • 次は,発見的な方法である.
  • "NelderMead"Nelder・Meadのシンプレックス法
    "DifferentialEvolution"差分進化を使う
    "SimulatedAnnealing"焼きなまし法を使う
    "RandomSearch"複数のランダムな初期点から始めて求まった最良の極小値を使う
    "Couenne"非凸混合整数非線形問題にCouenneライブラリを使用する

例題

すべて開くすべて閉じる

  (3)

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

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

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

幾何学領域上で関数を最大にする:

これをプロットする:

スコープ  (35)

基本的な用法  (11)

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

VectorGreaterEqualでいくつかの線形不等式制約が表現できる:

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

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

ベクトル変数 を使う:

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

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

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

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

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

解を求める:

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

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

解を求める:

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

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

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

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

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

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

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

領域制約1  (5)

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

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

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

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

Orという制約を指定することができる:

領域制約2  (5)

領域上で最大化する:

これをプロットする:

異なる2つの領域内にあるように制約されている2点間の可能な最大距離を求める:

これをプロットする:

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

これをプロットする:

指定された3点を含むような最大半径の円を求める:

これをプロットする:

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

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

線形問題  (5)

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

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

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

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

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

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

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

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

凸問題  (3)

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

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

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

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

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

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

凸に変換可能  (3)

不等式制約とノルム制約に従って擬似凸関数 を最大化する.目的関数は2つの非負のアフィン関数の積なので,擬似凸関数である:

最大化は負の目的関数(擬似凸関数)を最小化することで解くことができる.擬似凸問題はパラメータ についてのパラメトリック凸最適化問題として解くことができる:

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

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

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

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

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

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

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

一般的な問題  (3)

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

プロットする:

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

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

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

プロットする:

オプション  (10)

AccuracyGoalとPrecisionGoal  (2)

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

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

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

EvaluationMonitor  (1)

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

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

Method  (5)

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

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

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

解をプロットして最大値を示す:

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

目的関数と最大値の解をプロットする:

速度を求める場合は,複数の変数を含む問題に"NelderMead"メソッドを使う:

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

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

StepMonitor  (1)

NMaximizeが関数の最大値を求めるのに取るステップ:

WorkingPrecision  (1)

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

アプリケーション  (8)

幾何学の問題  (4)

表面積が最大で1の楕円体の体積を最大にする主軸 の半分の長さを求める:

表面積は以下で近似できる:

逆数を最小化することで体積を最大化する:

以下は球である.軸の長さについての制約条件を加えるとこれが変化する:

結果の楕円体をプロットする:

凸多角形の解析的中心を求める.解析的中心は制約条件までの距離の積を最大にする点である:

凸多角形の各線分は半平面との交点として表すことができる .線形不等式を抽出する:

目的は を最大化することである.対数関数は単調なので,これはを最大化することに等しい:

制約のない問題を解く:

中心の位置を可視化する:

凸多角形に収まる,としてパラメータ化可能な最大面積の楕円を求める:

凸多角形の各線分は半平面との交点として表すことができる .線形不等式を抽出する:

半平面にパラメータ化を適用するとが与えられる.項.したがって,制約条件はである:

面積を最大にすることはを最大にすることに等しい:

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

の正方形に収まる重なり合ない 個の円の最大半径 とその中心を求める.このボックスの制約条件は で表すことができる:

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

変数を集める:

最大半径 と円の中心 を求める:

円と境界ボックスをプロットする:

正方形の円で覆われている部分を計算する:

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

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

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

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

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

株式の売買による株式の市場価格への影響はでモデル化されるが,これは,エピグラフ変換を使ったPower Coneによってモデル化できる:

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

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

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

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

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

投資問題  (2)

投資収益率が最大となるように,資本金250,000ドルを2つの株と1つの債権に割り当てる方法を求める.2つの株への投資額を ,債権への投資額を とする:

電気・ガス株に投資される金額は40,000ドルを超えることはできない:

債権に投資される金額は最低でも70,000ドルでなければならない:

2つの株への投資総額は全投資額の少なくとも半分でなければならない:

株式からはそれぞれ9%と4%の年間配当が支払われる.債権は5%の配当がある.投資の全収益は以下の通りである:

株式と債権の購入および取引実行のための費用はである:

投資する最適金額は,費用を最小限に抑えながら利益を最大化することで求められる:

投資総額と投資から受け取った年間配当金は以下の通りである:

最大の利益を生み出す投資の最適な組合せを求める.各投資に関連する純現在価値と費用は次の通りである:

を,投資 を選択した場合に となる決定変数であるとする. 目的は,収益を最大にして費用を最小にすることである:

最高で14,000ドルを投資することができる:

投資の最適な組合せを得るために最大化問題を解く:

巡回セールスマン問題  (1)

セールスマンが 都市をそれぞれ1回だけ通り,旅費を最大限に抑えて旅行距離は最短にする経路を求める.場所を生成する:

都市 から都市 までの距離を とする. は,なら経路が都市 から都市 へ向かう決定変数である:

一つの都市から次の都市への旅費は15ドルである.セールスマンは,2都市間の距離が50マイル以内の場合は5ドル,それ以外の場合は10ドルの定額料金を支払う.節約総額は以下の通りである:

目的は節約を最大にして距離を最小にすることである:

セールスマンは厳密に1つの都市に到着して厳密に1つの別の都市に向けて出発する:

セールスマンはある都市に到着して同じ都市に向けて出発することはできない:

セールスマンは1回のツアーですべての場所を回らなければならない:

決定変数はバイナリ変数で,ダミー変数は である:

距離が最短となる経路を求める:

経路を抽出する:

移動距離は以下の通りである:

節約総額は以下の通りである:

特性と関係  (6)

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

NArgMaxは最大化する値のリストを与える:

NMaxValueは最大値だけを与える:

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

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

最大化問題の双対解を得る:

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

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

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

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

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

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

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

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

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

NMaximizeは最大値を求めようとするのに対し,FindMaximumは極大値を求めようとする:

Maximizeは最大値を求め,無限大の精度で使うことができる:

考えられる問題  (4)

非線形関数については,特定のメソッドではNMaximizeが極大値しか求められないことがある:

極大値をプロットする:

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

NMaximizeは,特定のメソッドについて二次元関数の極大値を円板上で求める:

初期区間を指定すると最大値に達するのに役立つ:

NMaximizeは,この問題については自動選択されたメソッドを使って大域的解を求める:

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

NMaximizeおよびNMinimizeを使って同じ境界を計算する:

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

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

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

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

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

数値で計算する:

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

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

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

テキスト

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

CMS

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

APA

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

BibTeX

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

BibLaTeX

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