NMinValue
詳細とオプション
- NMinValueは大域的最適化(GO)としても知られている.
- NMinValueは,与えられた制約条件に従って常に f の最小値を求めようとする.
- NMinValueは,通常,制約が与えられた場合に可能な最小値を求めるために使われる.分野によっては,最適な戦略,最良適合,最適な構成等と呼ばれることがある.
- f と cons が線形または凸のとき,NMinValueが与える結果は実数および整数値の両方の上で最小値になる.それ以外の場合は結果が単に極小値であるかもしれない.
- NMinValueが制約条件を満足できないと判断した場合はInfinityが返される.
- NMinValueは,目的関数 f と制約条件 cons がスカラー変数またはベクトル変数に依存する式で与えられるモデリング言語をサポートする.f と cons は,一般に,非常に効率的な形に解析されるが,f と cons の項が変数の数値に対して数値を与える限りNMinValueはしばしば解を求めることができる.
- 制約条件 cons は以下の論理結合でよい.
-
lhs==rhs 等式 lhs>rhs, lhs≥rhs, lhs<rhs, lhs≤rhs 不等式 (LessEqual, …) lhsrhs, lhsrhs, lhsrhs, lhsrhs ベクトル不等式 (VectorLessEqual, …) {x,y,…}∈rdom 領域指定 - NMinValue[{f,cons},x∈rdom]は,事実上,NMinValue[{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の設定で,最小値の位置の値と最小になったときの関数の値の両方で目標とする桁数を指定する.
- NMinValueは,AccuracyGoalとPrecisionGoalで指定された目標値のどちらかが達成されるまで計算を続ける.
- NMinValueのためのメソッドには2つのクラスがある.最初のクラスは問題の特性を使うので,メソッドが収束する際に求まった最小値は大域的であることが保証される.2番目のクラスは発見的なメソッドで,複数の局所探索を使うことがあるが,一般的には確率論によって調整され,大域的最小値に焦点が当てられる.このメソッドもしばしば大域的な最小値を求めるが,必ずそうするとは保証されない.
- 次は,解に収束する場合に最小値を与えることが保証されているメソッドである.
-
"Convex" 凸法だけを使う "MOSEK" 凸問題用の商用MOSEKライブラリを使う "Gurobi" 凸問題用の商用Gurobiライブラリを使う "Xpress" 凸問題用の商用Xpressライブラリを使う - 次は,発見的な方法である.
-
"NelderMead" Nelder・Meadのシンプレックス法 "DifferentialEvolution" 差分進化を使う "SimulatedAnnealing" 焼きなまし法を使う "RandomSearch" 複数のランダムな初期点から始めて求まった最良の極小値を使う "Couenne" 非凸混合整数非線形問題にCouenneライブラリを使う
例題
すべて開く すべて閉じる例 (4)
NMinValue[2x ^ 2 - 3x + 5, x]NMinValue[(x y - 3) ^ 2 + 1, {x, y}]NMinValue[{x - 2y, x ^ 2 + y ^ 2 ≤ 1}, {x, y}]NMinValue[x + y, {x, y}∈Disk[]]スコープ (40)
基本的な用法 (12)
NMinValue[{x + 2y, x^2 + 2y^2 ≤ 3, x + y == 2, x ≥ 1}, {x, y}]いくつかの線形不等式制約がVectorGreaterEqualで表現できる:
NMinValue[{x + y, VectorGreaterEqual[{{x + 2y, x}, {3, -1}}]}, {x, y}]
v>=
または\[VectorGreaterEqual]を使ってベクトル不等式の記号を入力する:
NMinValue[{x + y, {x + 2y, x}{3, -1}}, {x, y}]NMinValue[{x + y, x + 2y ≥ 3, x ≥ -1}, {x, y}]NMinValue[{{1, 1}.v, {{1, 2}, {1, 0}}.v{3, -1}}, v]
にスレッディングの可能性があるので,不等式
は
とは等しくないかもしれない:
NMinValue[{{1, 1}.x, {{1, 2}, {1, 0}}.x + {-3, 1}0}, x]NMinValue[{{1, 1}.x, {{1, 2}, {1, 0}}.x{3, -1}}, x]
での意図しないスレッディングを避けたければInactive[Plus]を使うとよい:
NMinValue[{{1, 1}.x, {{1, 2}, {1, 0}}.x + {-3, 1}0}, x]定数パラメータを持つ方程式を使って
での意図しないスレッディングを回避する:
parEqs = {a == {{1, 2}, {1, 0}}, b == {3, -1}};NMinValue[{{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}]NMinValue[{{1, 1}.v, constraint}, v]NMinValue[{x + y, x^2 + y^2 ≤ 9}, {x, y}]"NormCone"で錐不等式を使って制約条件
を指定する:
constraint = VectorGreaterEqual[{{x, y, 3}, 0}, {"NormCone", 3}]NMinValue[{x + y, constraint}, {x, y}]{a, b} = {{{1, 1, 0}, {0, 1, 1}, {1, 1, 1}}, {2, 2, -1}};Indexedを使ってベクトル変数の成分(例:
)にアクセスする:
NMinValue[{Total[x], a.xb, Indexed[x, 1] ≥ 1}, x]ベクトル変数の次元と領域が曖昧なときはVectors[n,dom]を使って指定する:
NMinValue[{Indexed[x, {1}] + 2Indexed[x, {2}], (| | |
| --------------- | --------------- |
| Indexed[x, {1}] | 1 |
| 1 | Indexed[x, {2}] |)Underscript[, {"SemidefiniteCone", 2}]0}, x]NMinValue[{Indexed[x, {1}] + Indexed[2x, {2}], (| | |
| --------------- | --------------- |
| Indexed[x, {1}] | 1 |
| 1 | Indexed[x, {2}] |)Underscript[, {"SemidefiniteCone", 2}]0}, x∈Vectors[2, Reals]]NonNegativeReals (
)を使って非負の制約条件を指定する:
NMinValue[{{1, 1}.x, {Indexed[x, {1}], Indexed[x, {2}], 1}Underscript[, {"NormCone", 3}]0}, x∈Vectors[2, NonNegativeReals]]NMinValue[{{1, 1}.x, {Indexed[x, {1}], Indexed[x, {2}], 1}Underscript[, {"NormCone", 3}]0, x0}, x]NonPositiveReals (
)を使って非正の制約条件を指定する:
NMinValue[{-Total[v], {1, 2}.v-3}, v∈Vectors[2, NonPositiveReals]]NMinValue[{-Total[v], {1, 2}.v-3, v0}, v]Orという条件を指定することができる:
NMinValue[{x + y, x ^ 2 + y ^ 2 ≤ 1 || (x + 2) ^ 2 + (y + 2) ^ 2 ≤ 1}, {x, y}]//Quiet領域制約1 (4)
Integersを使って整数領域の制約を指定する:
NMinValue[{x + y, x + 2y ≥ 3, x ≥ -2}, {x, y∈Integers}]Vectors[n,Integers]を使ってベクトル変数に整数領域の制約を指定する:
NMinValue[{Total[x], a == {{1, 2}, {1, 0}}, b == {3, -2},
a.xb}, x∈Vectors[2, Integers]]NonNegativeIntegers (
)を使って非負の整数領域の制約を指定する:
NMinValue[{x + 2y, x^2 + 2y^2 ≤ 3, x + y == 2, x∈NonNegativeIntegers}, {x, y}]NonPositiveIntegers (
)を使って非正の整数領域の制約を指定する:
NMinValue[{-x + y, x + 2y ≥ 3, x∈NonPositiveIntegers}, {x, y}]領域制約2 (5)
t = RotationTransform[{{0, 0, 1}, {1, 1, 1}}];
ℛ = TransformedRegion[Ellipsoid[{0, 0, 0}, {1, 2, 3}], t];NMinValue[z, {x, y, z}∈ℛ]Subscript[ℛ, 1] = Disk[];
Subscript[ℛ, 2] = InfiniteLine[{{-2, 0}, {0, 2}}];NMinValue[EuclideanDistance[{x, y}, {u, v}], {{x, y}∈Subscript[ℛ, 1], {u, v}∈Subscript[ℛ, 2]}]Subscript[ℛ, 1] = Triangle[{{0, 0}, {1, 0}, {0, 1}}];
Subscript[ℛ, 2] = Disk[{1, 1}, {2r, r}];NMinValue[{r, {x, y}∈Subscript[ℛ, 1] && {x, y}∈Subscript[ℛ, 2]}, {r, x, y}]Subscript[ℛ, 3] = Disk[{a, b}, r];NMinValue[{r, ({0, 0} | {1, 0} | {0, 1})∈Subscript[ℛ, 3]}, {a, b, r}]Circumsphereを使って同じ結果を直接得ることができる:
Circumsphere[{{0, 0}, {1, 0}, {0, 1}}]//Nℛ = Sphere[];NMinValue[x.{1, 2, 3}, x∈ℛ]線形問題 (5)
線形の目的関数と制約条件がある場合は,最小値が見付かるとそれは大域的になる:
NMinValue[{x + y, 3x + 2y ≥ 7 && x + 2y ≥ 6 && x ≥ 0 && y ≥ 0}, {x, y}]NMinValue[{x - y, x + y + z == 1 / 2, x - 2z == 1, 2x - y ≥ 1}, {x, y, z}]Equalを使っていくつかの等式制約を一度に表現する:
NMinValue[{x - y, {x + y, x - y} == {1 / 2, 1}}, {x, y}]NMinValue[{x - y, x + y == 1 / 2, x - y == 1}, {x, y}]VectorLessEqualを使っていくつかのLessEqual不等式制約を一度に表現する:
NMinValue[{x + y, VectorLessEqual[{{x - 2y, -x + y}, {3, 2}}]}, {x, y}]NMinValue[{x + y, {x - 2y, -x + y}{3, 2}}, {x, y}]NMinValue[{x + y, {x - 2y ≤ 3, -x + y ≤ 2}}, {x, y}]Intervalを使って変数の境界を指定する:
NMinValue[{x + y, x + 2y ≥ 3}, {x∈Interval[{-1, 2}], y∈Interval[{-1, 1}]}]凸問題 (7)
"NonNegativeCone"を使って
の形の線形関数を指定する:
NMinValue[{Total[x],
VectorGreaterEqual[{{{-1, -1 / 2}, {1, -1 / 2}, {0, 1}}.x, {-1 / 2, -1 / 2, -1 / 2}}, {"NonNegativeCone", 3}]}, x]NMinValue[{Total[x], {{-1, -(1/2)}, {1, -(1/2)}, {0, 1}}.x-(1/2)}, x]NMinValue[{(x - 1)^2 + y^2, x + y / 2 ≤ 1 / 2, x - y ≥ 0}, {x, y}]NMinValue[{(x - 1)^2 + y^2, x^2 + (y^2/2) ≤ (1/2), 2x^2 ≤ 3y}, {x, y}]Subscript[ℛ, 1] = Triangle[{{1, 1}, {2, 1}, {1, 2}}];
Subscript[ℛ, 2] = Disk[];NMinValue[EuclideanDistance[x, y], {x∈Subscript[ℛ, 1], y∈Subscript[ℛ, 2]}]NMinValue[{10x + 11 y, (| | |
| - | - |
| x | 1 |
| 1 | y |)Underscript[, {"SemidefiniteCone", 2}]0}, {x, y}]NMinValue[{-Log[x + y], (| | |
| ----- | ----- |
| x + y | 1 |
| 1 | x - y |)Underscript[, {"SemidefiniteCone", 2}]0, 1 ≤ x ≤ 10, -1 ≤ y ≤ 1}, {x, y}]NMinValue[{(x - 2)^2 + (y - 1 / 2)^2, Inactive[Norm][{x, y}, 4] ≤ 1}, {x, y}]凸に変換可能 (4)
縦が最大で横の半分になるようにして,面積が1の長方形の最短外周を求める:
NMinValue[{2w + 2h, h w == 1, h ≤ (1/2)w, h ≥ 0, w ≥ 0}, {h, w}]この問題は対数凸問題で,変換{hExp[],wExp[ ]}を行なって対数を取り凸問題にすることで解ける:
NMinValue[{Log[Exp[𝓌 + Log[2]] + Exp[𝒽 + Log[2]]], 𝒽 + 𝓌 == 0, 𝒽 - 𝓌 ≤ Log[1 / 2]}, {𝒽, 𝓌}]Exp[%]不等式制約とノルム制約に従って擬似凹関数
の最小値を求める.目的関数は領域上の非負の関数と非正の関数の積なので,擬似凸関数である:
NMinValue[{-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 = NMinValue[{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[{0, -2, res}]}]]制約条件
に従って
を最小化する.制約条件
は凸ではないが凸制約の差
で表すことができる.ただし,
は凸関数である:
res = NMinValue[{x ^ 2 + y, 1 <= Norm[{x, y}] <= 2}, {x, y}]Show[Plot3D[x ^ 2 + y, {x, -2, 2}, {y, -2, 2}, ...], Graphics3D[{PointSize[0.04], Point[{0, -2, res}]}]]一般的な問題 (3)
NMinValue[{x + y, Sin[2x] + Cos[3y] ≤ 1, Norm[{x, y}] ≤ 2}, {x, y}]NMinValue[{Sin[2x] + Cos[x], -2 ≤ x ≤ 3}, x]NMinValue[{Sin[x^2 + y], Sin[2x] + Cos[3y] ≤ 1, Norm[{x^2, y}] ≤ 2}, {x, y}]オプション (7)
AccuracyGoalとPrecisionGoal (2)
NMinValue[Sin[Tan[x] / 2], x, AccuracyGoal -> 9, PrecisionGoal -> 8]次で,収束基準
と
を強制する.これはデフォルトの機械精度計算では達成できない:
NMinValue[Sin[Tan[x] / 2], x, AccuracyGoal -> 20, PrecisionGoal -> 18]WorkingPrecisionの設定値を高くするとプロセスが収束するようになる:
NMinValue[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[
NMinValue[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}, ColorFunction -> (Hue[.6(1 - #1)]&),
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;NMinValue[{objective[x], -9 < x < 9}, {x}, Method -> #]& /@ {"NelderMead", "DifferentialEvolution", "SimulatedAnnealing"}この問題については,自動選択されたメソッドが最適な結果を与える:
minVal = NMinValue[{objective[x], -9 < x < 9}, {x}]Plot[{objective[x], minVal}, {x, -9, 9}]速度を求めるなら,多くの変数がある問題には"NelderMead"メソッドを使う:
n = 50;AbsoluteTiming[NMinValue[Sum[i * (x[i] - i) ^ 2 + Sin[x[i]], {i, 1, n}], Table[x[i], {i, 1, n}], Method -> "NelderMead"]]StepMonitor (1)
NMinValueが古典的なRosenbrock関数の最小値を求めるのに取るステップ:
pts = Reap[NMinValue[(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[(Log[10, #] + 10) / 12]&), ColorFunctionScaling -> False]WorkingPrecision (1)
作業精度を
にする.デフォルトでAccuracyGoalとPrecisionGoalは
に設定されている:
NMinValue[Cos[x ^ 2 - 3 y] + Sin[x ^ 2 + y ^ 2], {x, y}, WorkingPrecision -> 20]アプリケーション (6)
幾何学の問題 (3)
と
を中心とする半径1の2つの円板間の最短距離を求める.
を円板1の上の点,
を円板2の上の点とする.目的は制約条件
に従って
を最小化することである:
res = NMinValue[{Norm[p1 - p2], c2 == {2, 1}, Norm[p1] ≤ 1, Norm[p2 - c2] ≤ 1}, {p1∈Vectors[2, Reals], p2∈Vectors[2, Reals]}]region = [image];constraints = Table[Norm[Inactive[Plus][pi, -c]] ≤ r, {pi, MeshCoordinates[region]}];NMinValue[{r, constraints}, {r, c∈Vectors[3, Reals]}]包み込む最小の球はBoundingRegionを使って効率的に求めることができる:
BoundingRegion[region, "MinBall"]Show[Graphics3D[{Opacity[0.2], Green, %}], region]指定された半径
(
)の重なり合ない
個の円を収めることができる最小の正方形を求める.円の数と各円の半径を指定する:
n = 20;
r = BlockRandom[RandomReal[{0.5, 1.5}, n], RandomSeeding -> 123];
が円の中心
なら目的は
を最小にすることである.目的は
を最小化することに変換できる.ただし,
である:
objectiveConstraint = Table[-s <= Norm[c[i], Infinity] + r[[i]] <= s, {i, n}];nonOverlapConstraint = Table[Norm[c[i] - c[j]] >= r[[i]] + r[[j]],
{i, 1, n}, {j, i + 1, n}];vars = Append[Table[Element[c[i], Vectors[2, Reals]], {i, n}], Element[s, Reals]];NMinValue[{s, objectiveConstraint, nonOverlapConstraint}, vars, Method -> "DifferenceOfConvex"]データフィッティング問題 (1)
非線形離散データにフィットする
の剰余を最小化するガウスの幅パラメータ
を求める:
data = Block[...];basis[ϵ_] = Exp[-(ϵ(x - #)) ^ 2]& /@ Subdivide[-3, 3, 10];a[ϵ_] = DesignMatrix[data, basis[ϵ], x, IncludeConstantBasis -> False];
output = data[[All, 2]];pfun[ϵ_ ? NumericQ] := NMinValue[Norm[Inactive[Plus][a[ϵ].λ, -output], 1], λ]ListLinePlot[Table[{ϵ, pfun[ϵ]}, {ϵ, .5, 2, .1}]]Quiet[FindArgMin[pfun[ϵ], {ϵ, 1}]]反復最適化 (1)
楕円
から点(1,2)までの距離が可能な限り小さくなるようなパラメータ
を求める:
pfun[α_ ? NumericQ] := NMinValue[{Norm[{(x - 1), (y - 2)}],
Norm[{x / α, α y}] ≤ 1}, {x, y}]Plot[pfun[α], {α, 0.1, 2}]Subscript[α, opt] = FindArgMin[{pfun[α], α > 0}, {α, .5}][[1]]Graphics[{{StandardGray, Disk[{0, 0}, {Subscript[α, opt], 1 / Subscript[α, opt]}]}, {Red, Point[{1, 2}]}}, Axes -> True, AspectRatio -> Automatic]軌跡の最適化 (1)
p = {{2, 2}, {7, 6}, {3, 5}, {4, 8}, {8, 9}, {6, 2.5}};
r = {1, 1.3, 1.5, 1, 0.7, 1.5};
{start, end} = {{0, 0}, {10, 10}};
domain = Graphics[{MapThread[Circle[#1, #2]&, {p, r}],
{PointSize[0.02], Point[{start, end}]}}, Frame -> True]経路は
個の異なる点で表すことができる.これらの点の間の距離は
未満でなければならない.ただし,
は最小化する長さである:
n = 30;
distanceConstraints = Table[Inactive[Norm][x[i] - x[i - 1]] <= l / n, {i, n}];objectConstraints = Table[Inactive[Norm][-p[[j]] + x[i]] >= r[[j]], {i, 1, n}, {j, 1, 6}];positionConstraints = {x[0] == start, x[n] == end};vars = Append[Table[x[i]∈Vectors[2, Reals], {i, 0, n}], l∈Reals];NMinValue[{l, distanceConstraints,
objectConstraints, positionConstraints}, vars, Method -> "DifferenceOfConvex"]特性と関係 (8)
NMinimizeは最小値と,変数の値を最小にする規則を与える:
NMinimize[{x.x + y, Norm[x + y] ≤ 1}, {Element[x, Vectors[2, Reals]], y}]NArgMinは最小にする値のリストを与える:
NArgMin[{x.x + y, Norm[x + y] ≤ 1}, {Element[x, Vectors[2, Reals]], y}]NMinValueは最小値だけを与える:
NMinValue[{x.x + y, 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を使って追加的な解の特性が得られるかもしれない:
NMinValue[{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.]}NMinValueを使ってパラメトリック問題についての関数を定義する:
fun[α_ ? NumericQ, β_ ? NumericQ] := NMinValue[{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, rMin} = RobustConvexOptimization[2x + 3y, x + y ≥ α && x - y ≤ β && -1 ≤ α ≤ 1 && 0 ≤ β ≤ 1, {x, y}, {α, β}, {"PrimalMinimumValue", "PrimalMinimizerRules"}]NMinValueはパラメータの特定の値についてより小さい最小値を求めるかもしれない:
NMinValue[{2x + 3y, x + y ≥ α && x - y ≤ β && α == 0 && β == 0}, {x, y}]この値を与えるミニマイザは
と
の使用可能なすべての値についての制約条件は満足しない:
minimizer = Last[NMinimize[{2x + 3y, x + y ≥ α && x - y ≤ β && α == 0 && β == 0}, {x, y}]](x + y ≥ α && x - y ≤ β /. minimizer) /. {α -> 1, β -> 1}パラメータの特定の値について求まった最小値はロバストな最小値以下である:
fun[α_, β_] /; (-1 ≤ α ≤ 1 && 0 ≤ β ≤ 1) :=
NMinValue[{2x + 3y, x + y ≥ α && x - y ≤ β}, {x, y}];testValues = RandomVariate[UniformDistribution[{{-1, 1}, {0, 1}}], 100];
AllTrue[testValues, ((fun@@#) ≤ rMinValue)&]NMinValueは線形計画問題を解くことができる:
NMinValue[{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]RegionDistanceを使って点から領域までの最短距離を求める:
ℛ = Cone[{{-1, 0, 1}, {2, 3, 4}}, 3];
p = {3., 2., 1.};RegionDistance[ℛ, p]NMinValueを使って距離を計算する:
NMinValue[Norm[{x, y, z} - p], {x, y, z}∈ℛ]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), NMinValue, Wolfram言語関数, https://reference.wolfram.com/language/ref/NMinValue.html (2024年に更新).
CMS
Wolfram Language. 2008. "NMinValue." Wolfram Language & System Documentation Center. Wolfram Research. Last Modified 2024. https://reference.wolfram.com/language/ref/NMinValue.html.
APA
Wolfram Language. (2008). NMinValue. Wolfram Language & System Documentation Center. Retrieved from https://reference.wolfram.com/language/ref/NMinValue.html
BibTeX
@misc{reference.wolfram_2026_nminvalue, author="Wolfram Research", title="{NMinValue}", year="2024", howpublished="\url{https://reference.wolfram.com/language/ref/NMinValue.html}", note=[Accessed: 05-July-2026]}
BibLaTeX
@online{reference.wolfram_2026_nminvalue, organization={Wolfram Research}, title={NMinValue}, year={2024}, url={https://reference.wolfram.com/language/ref/NMinValue.html}, note=[Accessed: 05-July-2026]}