NMaxValue
詳細とオプション
- NMaxValueは大域的最適化(GO)としても知られている.
- NMaxValueは,与えられた制約条件に従って常に f の最大値を求めようとする.
- NMaxValueは,通常,制約が与えられた場合に可能な最大値を求めるために使われる.分野によっては,最適な戦略,最良適合,最適な構成等と呼ばれることがある.
- f が線形または凹で cons が線形または凸のとき,NMaxValueが与える結果は実数および整数値の両方の上で最大値になる.それ以外の場合は結果が単に極大値であるかもしれない.
- NMaxValueが制約条件を満足できないと判断した場合は-Infinityが返される.
- NMaxValueは,目的関数 f と制約条件 cons がスカラー変数またはベクトル変数に依存する式で与えられるモデリング言語をサポートする.f と cons は,一般に,非常に効率的な形に解析されるが,f と cons の項が変数の数値に対して数値を与える限りNMaxValueはしばしば解を求めることができる.
- 制約条件 cons は以下の論理結合でよい.
-
lhs==rhs 等式 lhs>rhs, lhs≥rhs, lhs<rhs, lhs≤rhs 不等式 (LessEqual, …) lhsrhs, lhsrhs, lhsrhs, lhsrhs ベクトル不等式 (VectorLessEqual, …) {x,y,…}∈rdom 領域指定 - NMaxValue[{f,cons},x∈rdom]は,事実上,NMaxValue[{f,cons&&x∈rdom},x]に等しい.
- x∈rdom については,Indexed[x,i]を使って別の座標に言及することができる.
- 次は,使用可能な領域 rdom である.
-
Reals 実数スカラー変数 Integers 整数スカラー変数 Vectors[n,dom]
のベクトル変数Matrices[{m,n},dom]
の行列変数ℛ 幾何学領域
に制限されたベクトル変数 - デフォルトで,変数はすべて実数であるとみなされる.
- 次は,指定可能なオプションである.
-
AccuracyGoal Automatic 目標となる最終確度桁数 EvaluationMonitor None f が評価されたときに常に評価される式 MaxIterations Automatic 使用する最大反復回数 Method Automatic 使用されるメソッド PrecisionGoal Automatic 目標となる最終精度桁数 StepMonitor None ステップを取るたびに常に評価される式 WorkingPrecision MachinePrecision 内部計算に使用する精度 - AccuracyGoalとPrecisionGoalの設定で,最大値の位置の値と最大になったときの関数の値の両方で目標とする桁数を指定する.
- NMaxValueは,AccuracyGoalとPrecisionGoalで指定された目標値のどちらかが達成されるまで計算を続ける.
- NMaxValueのためのメソッドには2つのクラスがある.最初のクラスは問題の特性を使うので,メソッドが収束する際に求まった最大値は大域的であることが保証される.2番目のクラスは発見的なメソッドで,複数の局所探索を使うことがあるが,一般的には確率論によって調整され,大域的最大値に焦点が当てられる.このメソッドもしばしば大域的な最大値を求めるが,必ずそうするとは保証されない.
- 次は,解に収束する場合に最大値を与えることが保証されているメソッドである.
-
"Convex" 凸法だけを使う "MOSEK" 凸問題用の商用MOSEKライブラリを使う "Gurobi" 凸問題用の商用Gurobiライブラリを使う "Xpress" 凸問題用の商用Xpressライブラリを使う - 次は,発見的な方法である.
-
"NelderMead" Nelder・Meadのシンプレックス法 "DifferentialEvolution" 差分進化を使う "SimulatedAnnealing" 焼きなまし法を使う "RandomSearch" 複数のランダムな初期点から始めて求まった最良の極小値を使う "Couenne" 非凸混合整数非線形問題にCouenneライブラリを使う
例題
すべて開く すべて閉じる例 (5)
NMaxValue[-2x ^ 2 - 3x + 5, x]NMaxValue[1 - (x y - 3) ^ 2, {x, y}]NMaxValue[{x - 2y, x ^ 2 + y ^ 2 ≤ 1}, {x, y}]MaxValue[x + y, {x, y}∈Disk[]]NMaxValue[x + y, {x, y}∈Disk[]]スコープ (34)
基本的な用法 (12)
NMaxValue[{x + 2y, x^2 + 2y^2 ≤ 3, x + y == 2, x ≥ 1}, {x, y}]いくつかの線形不等式制約はVectorGreaterEqualで表現できる:
NMaxValue[{-x - y, VectorGreaterEqual[{{x + 2y, x}, {3, -1}}]}, {x, y}]
v>=
または\[VectorGreaterEqual]を使ってベクトル不等式の記号を入力する:
NMaxValue[{-x - y, {x + 2y, x}{3, -1}}, {x, y}]NMaxValue[{-x - y, x + 2y ≥ 3, x ≥ -1}, {x, y}]NMaxValue[{{-1, -1}.v, {{1, 2}, {1, 0}}.v{3, -1}}, v]
にスレッディングの可能性があるので,不等式
は
とは等しくないかもしれない:
NMaxValue[{{-1, -1}.x, {{1, 2}, {1, 0}}.x + {-3, 1}0}, x]NMaxValue[{{-1, -1}.x, {{1, 2}, {1, 0}}.x{3, -1}}, x]
での意図しないスレッディングを避けたければInactive[Plus]を使うとよい:
NMaxValue[{{-1, -1}.x, {{1, 2}, {1, 0}}.x + {-3, 1}0}, x]定数パラメータを持つ方程式を使って
での意図しないスレッディングを回避する:
parEqs = {a == {{1, 2}, {1, 0}}, b == {3, -1}};NMaxValue[{{-1, -1}.x, {parEqs, a.x + b0}}, x]VectorGreaterEqualは"NonNegativeCone"についての錐不等式を表す:
constraint = VectorGreaterEqual[{{{1, 2}, {1, 0}}.v, {3, -1}}, "NonNegativeCone"]円錐の次元を明示的に指定したければ,{"NonNegativeCone",n}を使うとよい:
constraint = VectorGreaterEqual[{{{1, 2}, {1, 0}}.v, {3, -1}}, {"NonNegativeCone", 2}]NMaxValue[{{-1, -1}.v, constraint}, v]NMaxValue[{x + 2y, x^2 + y^2 ≤ 9}, {x, y}]"NormCone"で錐不等式を使って制約条件
を指定する:
constraint = VectorGreaterEqual[{{x, y, 3}, 0}, {"NormCone", 3}]NMaxValue[{x + 2y, constraint}, {x, y}]{a, b} = {-{{1, 1, 0}, {0, 1, 1}, {1, 1, 1}}, {2, 2, -1}};Indexedを使ってベクトル変数の成分(例:
)にアクセスする:
NMaxValue[{Total[x], a.xb, Indexed[x, 1] ≥ 1}, x]ベクトル変数の次元と領域が曖昧なときはVectors[n,dom]を使って指定する:
NMaxValue[{Indexed[x, {1}] + 2Indexed[x, {2}], (| | |
| ---------------- | ---------------- |
| Indexed[-x, {1}] | 1 |
| 1 | Indexed[-x, {2}] |)Underscript[, {"SemidefiniteCone", 2}]0}, x]NMaxValue[{Indexed[x, {1}] + Indexed[2x, {2}], (| | |
| ---------------- | ---------------- |
| Indexed[-x, {1}] | 1 |
| 1 | Indexed[-x, {2}] |)Underscript[, {"SemidefiniteCone", 2}]0}, x∈Vectors[2, Reals]]NonNegativeReals (
)を使って非負の制約条件を指定する:
NMaxValue[{{1, 1}.x, {Indexed[x, {1}], Indexed[x, {2}], 1}Underscript[, {"NormCone", 3}]0}, x∈Vectors[2, NonNegativeReals]]NMaxValue[{{1, 1}.x, {Indexed[x, {1}], Indexed[x, {2}], 1}Underscript[, {"NormCone", 3}]0, x0}, x]NonPositiveReals (
)を使って非正の制約条件を指定する:
NMaxValue[{Total[v], {1, 2}.v-3}, v∈Vectors[2, NonPositiveReals]]NMaxValue[{Total[v], {1, 2}.v-3, v0}, v]Orという制約を指定することができる:
NMaxValue[{x + y, x ^ 2 + y ^ 2 ≤ 1 || (x + 2) ^ 2 + (y + 2) ^ 2 ≤ 1}, {x, y}]//Quiet領域制約1 (4)
Integersを使って整数領域の制約を指定する:
NMaxValue[{x + y, x + 2y ≤ 3, x ≤ 1}, {x, y∈Integers}]Vectors[n,Integers]を使ってベクトル変数に整数領域の制約を指定する:
NMaxValue[{Total[x], a == {{1, 2}, {1, 0}}, b == {-3, 2},
a.xb}, x∈Vectors[2, Integers]]NonNegativeIntegers (
)を使って非負の整数領域の制約を指定する:
NMaxValue[{x + 2y, x^2 + 2y^2 ≤ 3, x + y == 2, x∈NonNegativeIntegers}, {x, y}]NonPositiveIntegers (
)を使って非正の整数領域の制約を指定する:
NMaxValue[{x - y, x + 2y ≥ 3, x∈NonPositiveIntegers}, {x, y}]領域制約2 (3)
NMaxValue[x.{1, 2, 3}, x∈Ball[]]t = RotationTransform[{{0, 0, 1}, {1, 1, 1}}];
ℛ = TransformedRegion[Ellipsoid[{0, 0, 0}, {1, 2, 3}], t];NMaxValue[z, {x, y, z}∈ℛ]異なる2つの領域内にあるように制約されている2点間の可能な最大距離を求める:
Subscript[ℛ, 1] = Disk[];
Subscript[ℛ, 2] = Line[{{-2, 0}, {0, 2}}];NMaxValue[EuclideanDistance[{x, y}, {u, v}], {{x, y}∈Subscript[ℛ, 1], {u, v}∈Subscript[ℛ, 2]}]線形問題 (5)
線形の目的関数と制約条件がある場合は,最大値が見付かるとそれは大域的になる:
NMaxValue[{x + y, 3x + 2y ≤ 7 && x + 2y ≤ 6 && x ≥ 0 && y ≥ 0}, {x, y}]NMaxValue[{y - x, x + y + z == 1 / 2, x - 2z == 1, 2x - y ≥ 1}, {x, y, z}]Equalを使っていくつかの等式制約を一度に表現する:
NMaxValue[{y - x, {x + y, x - y} == {1 / 2, 1}}, {x, y}]NMaxValue[{y - x, x + y == 1 / 2, x - y == 1}, {x, y}]VectorLessEqualを使っていくつかのLessEqual不等式制約を一度に表現する:
NMaxValue[{x + y, VectorGreaterEqual[{{x - 2y, -x + y}, {3, 2}}]}, {x, y}]NMaxValue[{x + y, {x - 2y, -x + y}{3, 2}}, {x, y}]NMaxValue[{x + y, {x - 2y ≥ 3, -x + y ≥ 2}}, {x, y}]Intervalを使って変数の境界を指定する:
NMaxValue[{x + y, x + 2y ≥ 3}, {x∈Interval[{-1, 2}], y∈Interval[{-1, 1}]}]凸問題 (4)
"NonNegativeCone"を使って
の形の線形関数を指定する:
NMaxValue[{Total[x],
VectorGreaterEqual[{{{-1, -1 / 2}, {1, -1 / 2}, {0, 1}}.x, {-1 / 2, -1 / 2, -1 / 2}}, {"NonNegativeCone", 3}]}, x]NMaxValue[{Total[x], {{-1, -(1/2)}, {1, -(1/2)}, {0, 1}}.x-(1/2)}, x]res = NMaxValue[{-((x - 1)^2 + y^2), x^2 + (y^2/2) ≤ (1/2), 2x^2 ≤ 3y}, {x, y}]Plot3D[-((x - 1)^2 + y^2), {x, -1, 1}, {y, 0, 1}, ...]NMaxValue[{-(10x + 11 y), (| | |
| - | - |
| x | 1 |
| 1 | y |)Underscript[, {"SemidefiniteCone", 2}]0}, {x, y}]Plot3D[-(10x + 11y), {x, 0, 5}, {y, 0, 5}, ...]res = NMaxValue[{Log[x + y], (| | |
| ----- | ----- |
| x + y | 1 |
| 1 | x - y |)Underscript[, {"SemidefiniteCone", 2}]0, 1 ≤ x ≤ 10, -1 ≤ y ≤ 1}, {x, y}]Show[Plot3D[Log[x + y], {x, 1, 10}, {y, -1, 1}, ...], Graphics3D[{Red, PointSize[0.05], Point[{10, 1, res}]}]]凸に変換可能 (3)
不等式制約とノルム制約に従って擬似凹関数
を最大化する.目的関数は2つの非負のアフィン関数の積なので,擬似凹関数である:
NMaxValue[{x y, x ≥ 0, y ≥ 0, Norm[{x - 1, y - 2}] ≤ 1}, {x, y}]最大化は負の目的関数
(擬似凹関数)を最小化することで解くことができる.擬似凹問題はパラメータ
についてのパラメトリック凸最適化問題として解くことができる:
pfun = ParametricConvexOptimization[0, {-x y ≤ α, x ≥ 0, y ≥ 0,
Norm[{x - 1, y - 2}] ≤ 1}, {x, y}, α, "PrimalMinimizerRules"]fun[α_ ? NumericQ] := -x * y /. pfun[α];
Plot[fun[α], {α, -4.68, 0}, PlotRange -> All]pfun[-4.68]pfun[-4.69]制約条件
に従って
を最大にする.目的関数は凸関数ではないが凸関数の差
として表すことができる.ただし,
と
は凸関数である:
res = NMaxValue[{x ^ 2 - y ^ 2, Norm[{x, y}] <= 2}, {x, y}]Show[Plot3D[x ^ 2 - y ^ 2, {x, -2, 2}, {y, -2, 2}, ...], Graphics3D[
{PointSize[0.04], Point[{2, 0, res}]}]]制約条件
に従って
を最大にする.制約条件の
は凸ではないが,凸条件の差
で表すことができる.ただし,
と
は凸関数である:
res = NMaxValue[{x ^ 2 + y ^ 2 + x + y, 1 <= Norm[{x, y}] <= 2}, {x, y}]Show[Plot3D[x ^ 2 + y ^ 2 + x + y, {x, -2, 2}, {y, -2, 2}, ...], Graphics3D[
{PointSize[0.04], Point[{Sqrt[2], Sqrt[2], res}]}]]一般的な問題 (3)
res = NMaxValue[{x + y, Sin[2x] + Cos[3y] ≤ 1, Norm[{x, y}] ≤ 2}, {x, y}]Show[Plot3D[x + y, {x, -2, 2}, {y, -2, 2}, ...], Graphics3D[{Blue, PointSize[0.03], Point[{1.414, 1.414, res}]}]]res = NMaxValue[{Sin[2x] + Cos[x], -2 ≤ x ≤ 3}, x]Plot[Sin[2x] + Cos[x], {x, -2, 3}, Rule[...]]res = NMaxValue[{Sin[x^2 + y], Sin[2x] + Cos[3y] ≤ 1, Norm[{x^2, y}] ≤ 2}, {x, y}]Show[Plot3D[Sin[x^2 + y], {x, -2, 2}, {y, -2, 2}, ...], Graphics3D[{Blue, PointSize[0.03], Point[{0.719, 1.054, res}]}]]オプション (7)
AccuracyGoalとPrecisionGoal (2)
NMaxValue[-Sin[Tan[x] / 2], x, AccuracyGoal -> 9, PrecisionGoal -> 8]次で,収束基準
と
を強制する.これはデフォルトの機械精度計算では達成できない:
NMaxValue[-Sin[Tan[x] / 2], x, AccuracyGoal -> 20, PrecisionGoal -> 18]WorkingPrecisionの設定値を高くするとプロセスが収束するようになる:
NMaxValue[-Sin[Tan[x] / 2], x, AccuracyGoal -> 20, PrecisionGoal -> 18, WorkingPrecision -> 40]EvaluationMonitor (1)
関数の解を求める過程で評価したすべての点を最小値の環で記録する:
f[x_, y_] := -(x ^ 2 + y ^ 2 - 16) ^ 2;
{sol, pts} = Reap[
NMaxValue[f[x, y], {{x, -5, 5}, {y, -5, 5}}, Method -> "DifferentialEvolution", EvaluationMonitor :> Sow[{x, y}]]];訪れた点の中で目的関数の値で最終的な解に近いすべての点をプロットする:
ContourPlot[f[x, y], {x, -5, 5}, {y, -5, 5},
Epilog -> Map[Point, Cases[First[pts], x_ /; Abs[f@@x - sol] ≤ .05]], Contours -> -4Range[0, 10] ^ 2]Method (2)
メソッドの中には特定の問題に対して準最適な結果を与えるものがある:
objective[x_] := Sin[.4 x ^ 2] + .7Cos[.6 x] x; NMaxValue[{objective[x], -11 < x < 11}, {x}, Method -> #]& /@ {"NelderMead", "SimulatedAnnealing"}この問題の場合は,自動選択されたメソッドが最適な結果を与える:
NMaxValue[{objective[x], -11 < x < 11}, {x}]この非凸問題に対して自動メソッド選択は"Couenne"を選ぶ:
maxVal = NMaxValue[{objective[x], -11 < x < 11}, {x}, Method -> "Couenne"]Plot[{objective[x], maxVal}, {x, -11, 11}]速度を求めるなら,たくさんの変数がある問題には"NelderMead"メソッドを使う:
n = 50;AbsoluteTiming[NMaxValue[Sum[-i * (x[i] - i) ^ 2 + Sin[x[i]], {i, 1, n}], Table[x[i], {i, 1, n}], Method -> "NelderMead"]]StepMonitor (1)
NMaxValueが関数の最大値を求めるのに取るステップ:
pts = Reap[NMaxValue[-(1 - x) ^ 2 - 100(-x ^ 2 - y) ^ 2, {x, y}, Method -> "NelderMead", StepMonitor :> Sow[{x, y}]]][[2, 1]];
pts = Join[{{-1.2, 1}}, pts];ContourPlot[-(1 - x) ^ 2 - 100(-x ^ 2 - y) ^ 2, {x, -1.3, 1.5}, {y, -1.5, 1.4}, Epilog -> {Arrow[pts], Point[pts]}, Contours -> Table[-10 ^ -i, {i, -2, 10}], ColorFunction -> (Hue[0.5 * (Log[10, -#] + 11) / 13]&), ColorFunctionScaling -> False]WorkingPrecision (1)
作業精度を
にする.デフォルトでAccuracyGoalとPrecisionGoalは
に設定されている:
NMaxValue[Cos[x ^ 2 - 3 y] + Sin[x ^ 2 + y ^ 2], {x, y}, WorkingPrecision -> 20]アプリケーション (4)
幾何学の問題 (2)
Subscript[ℛ, 1] = Triangle[{{0, 0}, {1, 0}, {0, 1}}];
Subscript[ℛ, 2] = Circle[{1, 1}, {2r, r}];Subscript[r, opt] = NMaxValue[{r, {x, y}∈Subscript[ℛ, 1] && {x, y}∈Subscript[ℛ, 2]}, {r, x, y}]Graphics[{Blue, Subscript[ℛ, 1], Subscript[ℛ, 2] /. r -> Subscript[r, opt]}]
の正方形内に収まる
個の重なり合ない円の最大半径
とその中心を求める.ボックス制約は
として表すことができる:
n = 3;
boxConstraint = Table[-1 <= Norm[c[i], Infinity] + r <= 1, {i, n}];nonOverlapConstraint = Table[Norm[c[i] - c[j]] >= 2r,
{i, 1, n}, {j, i + 1, n}];vars = Append[Table[Element[c[i], Vectors[2, Reals]], {i, n}], Element[r, Reals]];NMaxValue[{r, boxConstraint, nonOverlapConstraint, r >= 0}, vars]投資問題 (1)
投資収益率が最大となるように,資本金250,000ドルを2つの株と1つの債権に割り当てる方法を求める.2つの株への投資額を
,債権への投資額を
とする:
capitalConstraint = Subscript[x, 1] + Subscript[x, 2] + Subscript[x, 3] ≤ 250000;電気・ガス株に投資される金額は40,000ドルを超えることはできない:
utilityStockConstraint = 0 ≤ Subscript[x, 1] ≤ 40000;債権に投資される金額は最低でも70,000ドルでなければならない:
bondConstraint = Subscript[x, 3] ≥ 70000;2つの株への投資総額は全投資額の少なくとも半分でなければならない:
investmentConstraint = Subscript[x, 1] + Subscript[x, 2] ≥ (Subscript[x, 1] + Subscript[x, 2] + Subscript[x, 3]) / 2;株式からはそれぞれ9%と4%の年間配当が支払われる.債権は5%の配当がある.投資の全収益は以下の通りである:
totalProfit = (0.09Subscript[x, 1] + 0.04Subscript[x, 2] + 0.05Subscript[x, 3]);株式と債権の購入および取引実行のための費用は
であり,1000ドルを超えてはならない:
costConstraint = Sum[Abs[Subscript[x, i]]^0.5, {i, 3}] ≤ 1000;NMaxValue[{totalProfit,
capitalConstraint, utilityStockConstraint, bondConstraint, investmentConstraint, costConstraint}, {Subscript[x, 1], Subscript[x, 2], Subscript[x, 3]}]反復最適化 (1)
の最大値が最小となるような,楕円
に関連付けられたパラメータ
の値を求める:
pfun[α_ ? NumericQ] := NMaxValue[{(x - 1)(y - 2),
Norm[{x / α, α y}] ≤ 1}, {x, y}]Plot[pfun[α], {α, 0.1, 2}, PlotPoints -> 2, PlotRange -> All]FindMinimum[{pfun[α], 0.1 ≤ α ≤ 1}, {α, .5}, AccuracyGoal -> 3]特性と関係 (7)
NMaximizeは最大値と,変数の値を最大にする規則を与える:
NMaximize[{y - x.x , Norm[x + y] ≤ 1}, {Element[x, Vectors[2, Reals]], y}]NArgMaxは最大化する値のリストを与える:
NArgMax[{y - x.x , Norm[x + y] ≤ 1}, {Element[x, Vectors[2, Reals]], y}]NMaxValueは最大値だけを与える:
NMaxValue[{y - x.x , Norm[x + y] ≤ 1}, {Element[x, Vectors[2, Reals]], y}]NMinValue[{x ^ 2 + y ^ 2, x + 2 y ≥ 3}, {x, y}]-NMaxValue[{-(x ^ 2 + y ^ 2), x + 2 y ≥ 3}, {x, y}]凸問題については,ConvexOptimizationを使って追加的な解の特性が得られるかもしれない:
NMaxValue[{-(x ^ 2 + y ^ 2), x + 2 y ≥ 3}, {x, y}]ConvexOptimization[x ^ 2 + y ^ 2, x + 2 y ≥ 3, {x, y}, "PrimalMinimumValue"]ConvexOptimization[x ^ 2 + y ^ 2, x + 2 y ≥ 3, {x, y}, "DualMaximizer"]パラメータがある凸問題について,ParametricConvexOptimizationを使うとParametricFunctionが与えられる:
pfun = ParametricConvexOptimization[-(x + 2 y), (x - α) ^ 2 + (y - β) ^ 2 ≤ 1, {x, y}, {α, β}, "PrimalMinimumValue"]ParametricFunctionはパラメータの値について評価できる:
{pfun[0., 0.], pfun[.5, 1.], pfun[2., 1.]}NMaxValueを使ってパラメトリック問題についての関数を定義する:
fun[α_ ? NumericQ, β_ ? NumericQ] := NMaxValue[{x + 2 y, (x - α) ^ 2 + (y - β) ^ 2 ≤ 1}, {x, y}];
{fun[0., 0.], fun[.5, 1.], fun[2., 1.]}testData = RandomReal[{0, 4}, {1000, 2}];
{First[AbsoluteTiming[pfun @@@testData]], First[AbsoluteTiming[fun @@@ testData]]}ParametricFunctionの導関数も計算できる:
D[pfun[α, β], {{α, β}}] /. {α -> 2., β -> 1.}RobustConvexOptimizationは,パラメータ制約がある凸問題についてはパラメータの可能なすべての値について有効な最適値を求める:
{rMinValue, rOptimizer} = RobustConvexOptimization[-(2x + 3y), x + y ≤ α && x - y ≥ β && -1 ≤ α ≤ 1 && 0 ≤ β ≤ 1, {x, y}, {α, β}, {"PrimalMinimumValue", "PrimalMinimizerRules"}];
rMaxValue = -rMinValue;
{rMaxValue, rOptimizer}NMaxValueはパラメータの特定の値についてより大きい最大値を求めるかもしれない:
NMaxValue[{2x + 3y, x + y ≤ α && x - y ≥ β && α == 0 && β == 0}, {x, y}]この値を与えるマキシマイザは
と
の使用可能なすべての値についての制約条件は満足しない:
maximizer = Last[NMaximize[{2x + 3y, x + y ≤ α && x - y ≥ β && α == 0 && β == 0}, {x, y}]](x + y ≤ α && x - y ≥ β /. maximizer) /. {α -> 1, β -> 1}パラメータの特定の値について求まった最大値はロバストな最大値以上である:
fun[α_, β_] /; (-1 ≤ α ≤ 1 && 0 ≤ β ≤ 1) :=
NMaxValue[{2x + 3y, x + y ≤ α && x - y ≥ β}, {x, y}];testValues = RandomVariate[UniformDistribution[{{-1, 1}, {0, 1}}], 100];
AllTrue[testValues, ((fun@@#) ≥ rMaxValue)&]NMaxValueは線形計画問題を解くことができる:
NMaxValue[{2x + 3y - z, 1 ≤ x + y + z ≤ 2 && 1 ≤ x - y + z ≤ 2 && x - y - z == 3}, {x, y, z}]LinearProgrammingを使って行列記法で与えられた同じ問題を解くことができる:
c = {2., 3., -1.};
m = {{1, 1, 1}, {1, 1, 1}, {1, -1, 1}, {1, -1, 1}, {1, -1, -1}};
b = {{1, 1}, {2, -1}, {1, 1}, {2, -1}, {3, 0}};c.LinearProgramming[-c, m, b, -Infinity]RegionBoundsを使って境界ボックスを計算する:
f = x^4 + 3. x^2 y + 2. x^2 y^2 - y^3 + y^4 ≤ 0;
ℛ = ImplicitRegion@@{f, {x, y}}RegionBounds[ℛ]NMaxValueおよびNMinValueを使って同じ境界を計算する:
{{x1, x2}, {y1, y2}} = {NMinValue[#, {x, y}∈ℛ], NMaxValue[#, {x, y}∈ℛ]}& /@ {x, y}Show[{Graphics[{LightBlue, Rectangle[{x1, y1}, {x2, y2}]}], RegionPlot[f, {x, x1 - 1, x2 + 1}, {y, y1 - 1, y2 + 1}]}]テクニカルノート
-
▪
- 数値解析 ▪
- 数値最適化 ▪
- 大域的非線形数値最適化 ▪
- 制約条件付き最適化 ▪
- 制約条件のない最適化 ▪
- 内部実装について:数値関数および関連関数
関連するガイド
-
▪
- 最適化 ▪
- 記号的なベクトル,行列,配列 ▪
- 凸最適化
テキスト
Wolfram Research (2008), NMaxValue, Wolfram言語関数, https://reference.wolfram.com/language/ref/NMaxValue.html (2024年に更新).
CMS
Wolfram Language. 2008. "NMaxValue." Wolfram Language & System Documentation Center. Wolfram Research. Last Modified 2024. https://reference.wolfram.com/language/ref/NMaxValue.html.
APA
Wolfram Language. (2008). NMaxValue. Wolfram Language & System Documentation Center. Retrieved from https://reference.wolfram.com/language/ref/NMaxValue.html
BibTeX
@misc{reference.wolfram_2026_nmaxvalue, author="Wolfram Research", title="{NMaxValue}", year="2024", howpublished="\url{https://reference.wolfram.com/language/ref/NMaxValue.html}", note=[Accessed: 02-November-2026]}
BibLaTeX
@online{reference.wolfram_2026_nmaxvalue, organization={Wolfram Research}, title={NMaxValue}, year={2024}, url={https://reference.wolfram.com/language/ref/NMaxValue.html}, note=[Accessed: 02-November-2026]}