RobustConvexOptimization[f,ForAll[pars,pcons,vcons],vars]
パラメータ的な制約 pcons を満足するパラメータ pars の可能なすべての値について制約 vcons を満足する vars についての f の最小値を与える vars の値を求める.
RobustConvexOptimization[…,"prop"]
解のどの特性"prop"を返すかを指定する.
RobustConvexOptimization
RobustConvexOptimization[f,ForAll[pars,pcons,vcons],vars]
パラメータ的な制約 pcons を満足するパラメータ pars の可能なすべての値について制約 vcons を満足する vars についての f の最小値を与える vars の値を求める.
RobustConvexOptimization[…,"prop"]
解のどの特性"prop"を返すかを指定する.
詳細とオプション
- ロバスト最適化は最悪な場合の最適化としても知られている.
- ロバスト最適化は,一般に,パラメータ制約があるパラメータによって表される不確かさのもとで最適化問題を解く際に使われる.
- ロバスト最適化は,与えられた最適条件には可能なすべてのパラメータ値で達することができるという意味で,最も保守的な解を与える.
- ロバスト最適化は,以下の問題を解くロバストなミニマイザ
を求める. -
最小化 

ただし 
- ロバストミニマイザ
は,パラメータ集合内のすべての
について
を満足する. - ロバスト最小値
は,パラメータ集合内のすべての
について
を満足する. - pcons または vcons には,線形等式制約
または
が含まれるかもしれない. - RobustConvexOptimization[f,cons,vars,pars]を使うこともできる.制約条件 cons は純粋にパラメータ的な制約条件
とパラメータ
に依存する変数の制約条件に自動的に分離される.この形式はParametricConvexOptimizationと互換である. - ロバスト最適化問題は,可解のあるいは凸最適化で近似可能な問題の型にはめられる場合は扱いやすいと考えられる.扱いやすさは変数制約
のタイプとパラメータ制約
のタイプの組合せに依存する. - 次の変数制約とパラメータ制約の組合せが扱いやすいと考えられる.
-
変数制約 パラメータ制約 

![TemplateBox[{{{a, ., x}, +, b}}, Norm]<=c(theta).x+d(theta) TemplateBox[{{{a, ., x}, +, b}}, Norm]<=c(theta).x+d(theta)](Files/RobustConvexOptimization.ja/1.png)

![TemplateBox[{{{{a, (, theta, )}, ., x}, +, {b, (, theta, )}}}, Norm]<=c.x+d TemplateBox[{{{{a, (, theta, )}, ., x}, +, {b, (, theta, )}}}, Norm]<=c.x+d](Files/RobustConvexOptimization.ja/2.png)

![TemplateBox[{{{{a, (, {theta, _, l}, )}, ., x}, +, {b, (, {theta, _, l}, )}}}, Norm]<=c(theta_r).x+d(theta_r) TemplateBox[{{{{a, (, {theta, _, l}, )}, ., x}, +, {b, (, {theta, _, l}, )}}}, Norm]<=c(theta_r).x+d(theta_r)](Files/RobustConvexOptimization.ja/3.png)



![a_0(theta)+a_1(theta) x_1+...+a_k(theta) x_k>=_(TemplateBox[{n}, SemidefiniteConeList])0 a_0(theta)+a_1(theta) x_1+...+a_k(theta) x_k>=_(TemplateBox[{n}, SemidefiniteConeList])0](Files/RobustConvexOptimization.ja/4.png)

- 一般に,変数制約
は
の形の円錐制約に変換される.ただし,
は,"NonNegativeCone","NormCone","SemidefiniteCone"のいずれかであり,
と
のパラメータに対する依存関係はアフィンでなければならない. - 目的関数
がパラメータに依存する,あるいは非線形である場合は,追加的な変数
が導入され,エピグラフ変換によって,問題が目的変数
と追加的な制約条件
を持つようになる. - 変数指定とパラメータ指定の vars と pars は,それぞれ,以下のいずれかの形で変数とパラメータを与える要素のリストでなければならない.
-
v 次元が推測される変数か名前が
のスカラーパラメータv∈Reals 実数のスカラー変数 v∈Integers 整数のスカラー変数 v∈Complexes 複素数のスカラー変数 v∈ℛ 幾何学領域
に制限されるベクトル変数v∈Vectors[n,dom]
,
あるいは
のベクトル変数v∈Matrices[{m,n},dom]
,
あるいは
の行列変数 - 使用可能な解の特性"prop"には以下がある.
-
"PrimalMinimizer" 
を最小化する変数値のリスト"PrimalMinimizerRules" 
を最小化する変数 vars={v1,…}の値"PrimalMinimizerVector" 
を最小化するベクトル"PrimalMinimumValue" 
最小値
{"prop1","prop2",…} いくつかの解の特性 - 次は,使用可能なオプションである.
-
MaxIterations Automatic 使用する最大反復数 Method Automatic 使用するメソッド PerformanceGoal $PerformanceGoal 最適化するパフォーマンスの局面 Tolerance Automatic 内部比較の許容度 - オプションMethodmethod を使って使用するメソッドが指定できる.以下は使用可能なメソッドである.
-
Automatic メソッドを自動的に選択する "CuttingSet" CuttingSet法を使う "PolyhedralApproximation" 線形制約集合がある近似"NormCone"制約 "SCS" SCS(錐ソルバの分割)ライブラリ "CSDP" CSDP(COIN半定値計画)ライブラリ "DSDP" DSDP(半定値計画)ライブラリ - いくつかの扱いにくいロバストな最適化問題も,ほぼCuttingSet法で解くことができる.
例題
すべて開く すべて閉じる例 (2)
mrule = RobustConvexOptimization[x + y, Subscript[∀, {α, β}, -1 ≤ α ≤ 1 && 0 ≤ β ≤ 1](10 x ≥ α && y ≥ β), {x, y}]Outer[Function[{α, β}, (10 x ≥ α && y ≥ β)] /. mrule, {-1, 1}, {0, 1}]変数の制約条件
に従う
についてのロバストミニマイザを求める:
res = RobustConvexOptimization[x, ForAll[{α}, α∈Interval[{-(1/2), (1/2)}], Inactive[Norm][{x + α, y}] ≤ 1], {x, y}]ロバストミニマイザはすべての α∈[-.5,.5]についての制約条件集合の共通(緑)の部分である:
regions = (Norm[{x + #, y}] ≤ 1)& /@ Range[-.5, .5, .25];
RegionPlot[{regions, And@@regions}, ...]スコープ (29)
基本的な用法 (15)
のとき,すべての
について,
についての
に従うロバストなミニマイザを求める:
RobustConvexOptimization[x + y, ForAll[{θ}, -1 ≤ θ ≤ 1, {x + 2y ≥ 3 + θ, x ≥ -1}], {x, y}]区間
内のすべての
について,
についての
に従うロバストなミニマイザを求める:
RobustConvexOptimization[x + y, ForAll[θ, θ∈Interval[{-1, 1}],
{x + 2y ≥ 3 + θ, x ≥ -1}], {x, y}]
となるようなすべての
について,
に従う
についてのロバストなミニマイザを求める:
RobustConvexOptimization[x - y, ForAll[θ, -1 ≤ θ ≤ 1,
{x + 2y + z ≤ 1 + θ, x - 2z == 1, 2x - y ≥ 1 + θ}], {x, y, z}]
のとき,すべての
について
に従う
についてのロバストなミニマイザを求める:
RobustConvexOptimization[α x + β y, ForAll[{α, β}, {0 ≤ α ≤ 1, 0 ≤ β ≤ 1}, {x + 2y ≥ 3 + α, x ≥ β}], {x, y}]明示的なForAllなしで代替構文を使う:
RobustConvexOptimization[α x + β y, {x + 2y ≥ 3 + α, x ≥ β, 0 ≤ α ≤ 1, 0 ≤ β ≤ 1}, {x, y}, {α, β}]この構文をParametricConvexOptimizationで直接使って
の特定の値を試してみる:
pfun = ParametricConvexOptimization[α x + β y, {x + 2y ≥ 3 + α, x ≥ β, 0 ≤ α ≤ 1, 0 ≤ β ≤ 1}, {x, y}, {α, β}]{pfun[1, 1], pfun[0, 0]}VectorLessEqualを使っていくつかのLessEqual不等式制約を一度に表す:
RobustConvexOptimization[x + y, ForAll[{α, β}, Inactive[Norm][{α, β}] ≤ 1,
VectorLessEqual[{{x - 2 y, -x + y}, {3 + α, 2 + β}}]], {x, y}]RobustConvexOptimization[x + y, ForAll[{α, β}, Inactive[Norm][{α, β}] ≤ 1,
{x - 2 y, -x + y}{3 + α, 2 + β}], {x, y}]RobustConvexOptimization[x + y, ForAll[{α, β}, Inactive[Norm][{α, β}] ≤ 1,
{x - 2y ≤ 3 + α, -x + y ≤ 2 + β}], {x, y}]VectorGreaterEqualを使っていくつかのGreaterEqual不等式制約を一度に表す:
RobustConvexOptimization[x + y, ForAll[{α, β},
VectorGreaterEqual[{{-α - β, α, β}, {-1, 0, 0}}],
VectorGreaterEqual[{{x + 2y, x}, {3 + α, -1 + β}}]], {x, y}]RobustConvexOptimization[x + y, ForAll[{α, β}, {-α - β, α, β}{-1, 0, 0},
{x + 2 y, x}{3 + α, -1 + β}], {x, y}]スカラー不等式とベクトル不等式を組み合せて制約条件を指定する:
RobustConvexOptimization[x + y, ForAll[θ, 1 ≤ θ ≤ 2,
{θ x + 2y ≥ 3, -1{x, y}{2, 1}}], {x, y}]RobustConvexOptimization[x + y, ForAll[θ, 1 ≤ θ ≤ 2,
{θ x + 2y ≥ 3, -1 ≤ x ≤ 2, -1 ≤ y ≤ 1}], {x, y}]RobustConvexOptimization[Total[v], ForAll[θ, 1 ≤ θ ≤ 2, {{θ, 2}.v ≥ 3,
-1v1}], v]
であるすべての
について,制約条件
に従って関数
を最小化する:
{a, b} = {{{1, 1, 0}, {0, 1, 1}, {1, 1, 1}}, {2, 2, -1}};Indexedを使ってベクトル変数の成分(例:
)にアクセスする:
RobustConvexOptimization[Total[x], ForAll[{α, β}, Inactive[Norm][{α, β}] ≤ 1,
{a.xb + β, Indexed[x, 1] ≥ 1 + α}], x]制約条件のパラメータ方程式を使って目的関数と制約条件の係数を指定する:
constantEquations = {c == {3, 4}, a1 == {1, -2}, a2 == {-1, 1}};
constraints = {a1.{x, y} ≤ 3 + α, a2.{x, y} ≤ 2 + β};RobustConvexOptimization[c.{x, y}, ForAll[{α, β}, Inactive[Norm][{α, β}] ≤ 1,
{constantEquations, constraints}], {x, y}]
であるすべての
について,制約条件
に従って関数
を最小にする:
constantEquations = {a == {{1, 2}, {1, 0}}, b == {3, -1}};RobustConvexOptimization[Total[x] + Total[y], ForAll[θ, -1 ≤ θ ≤ 1,
{constantEquations, a.xb, y2 + θ}], {x, y}]必要なときは,Vectors[n,Reals]を使ってベクトル変数の次元を指定する:
RobustConvexOptimization[Total[x] + Total[y], ForAll[θ, -1 ≤ θ ≤ 1,
{constantEquations, a.xb, y2 + θ}], {x, y∈Vectors[3, Reals]}]NonNegativeReals (
)を使って非負の制約条件を指定する:
RobustConvexOptimization[Total[v], ForAll[θ, -0.1 ≤ θ ≤ 0.1, {1, 2}.v ≥ 3 + θ], v∈Vectors[2, NonNegativeReals]]RobustConvexOptimization[Total[v], ForAll[θ, -0.1 ≤ θ ≤ 0.1,
{{1, 2}.v ≥ 3 + θ, v0}], v]NonPositiveReals (
)を使って非正の制約条件を指定する:
RobustConvexOptimization[-Total[v], ForAll[θ, -1 ≤ θ ≤ 1, {1, 2}.v-3 + θ], v∈Vectors[2, NonPositiveReals]]Intervalを使って境界を指定する:
RobustConvexOptimization[-Total[v], ForAll[θ, θ∈Interval[{-1, 1}],
{1, 2}.v-3 + θ], v∈Vectors[2, NonPositiveReals]]パラメータがグループ化され変数に割り当てられたときに,Evaluateを使ってForAllの第1引数が確実に評価されるようにする:
parameters = {α, β};
parameterConstraints = {-α - β ≥ -1, α ≥ 0, β ≥ 0};
constraints = {x + 2y ≥ 3 + α, x ≥ -1 + β};RobustConvexOptimization[x + y, ForAll[Evaluate[parameters],
parameterConstraints, constraints], {x, y}]線形変数制約 (5)
区間[0,2]内のすべての
について,
に従う
についてのロバストなミニマイザを求める:
RobustConvexOptimization[x, ForAll[θ, θ∈Interval[{0, 2}], x ≥ θ], x][0,2]内のすべての
についての制約条件
とは,数学的には
を意味する.従って,この問題は以下と等しい:
LinearOptimization[x, {x ≥ 2.}, x]区間で制限されるすべての
について,変数の制約条件
に従って
についてのロバストなミニマイザを求める:
res = RobustConvexOptimization[x + y, ForAll[{α, β},
{α∈Interval[{-.1, .1}], β∈Interval[{0, 1}]}, {x ≥ α, y ≥ β}], {x, y}]
の極値に設定されたミニマイザと変数制約を可視化する.緑で示されているパラメータ
の可能なすべての値に対して実行可能である
の集合は,パラメトリック実行可能領域の交点である:
RegionPlot[{x ≥ -0.1 && y ≥ 0.1, x ≥ 0.1 && y ≥ 0, x ≥ -0.1 && y ≥ 1, x ≥ 0.1 && y ≥ 1}, ...]区間に制約されるすべての
について,変数制約条件
に従う
についてのロバストなミニマイザを求める:
res = RobustConvexOptimization[x, ForAll[{α, β}, {α∈Interval[{-.1, .1}],
β∈Interval[{0, 1}]}, {x + y ≥ α, x - y ≥ β}], {x, y}]ミニマイザ,パラメータ
の極値についての変数制約集合,実行可能領域(緑で表示)を可視化する:
RegionPlot[{x + y ≥ -0.1 && x - y ≥ 0.1, x + y ≥ 0.1 && x - y ≥ 0, x + y ≥ -0.1 && x - y ≥ 1, x + y ≥ 0.1 && x - y ≥ 1}, ...]
であるすべての
について,変数制約
に従う
についてのロバストなミニマイザを求める:
res = RobustConvexOptimization[x + y, ForAll[{α, β}, {Inactive[Norm][{α, β}] ≤ 1,
0 ≤ β ≤ 1}, {x ≥ α, y ≥ β, -x + y ≥ 0.1}], {x, y}]ミニマイザ,パラメータ
の極値についての変数制約集合,実行可能領域(緑で表示)を可視化する:
region[α_, β_] := x ≥ α && y ≥ β && y - x ≥ 0.1;
RegionPlot[{region[-1, 0], region[1, 0], region[0, -1], region[0, 1],
y - x ≥ 0.1 && x ≥ 1}, ...]
であるすべての
について,変数制約
に従う
についてのロバストなミニマイザを求める:
res = RobustConvexOptimization[x + y, ForAll[{α, β, δ}, {1 ≤ α ≤ 2,
0 ≤ β ≤ 1, δ ≥ -3 / 2, (| | |
| - | - |
| α | δ |
| δ | β |)Underscript[, {"SemidefiniteCone", 2}]0}, {x ≥ α, y ≥ β, x - y ≤ δ}], {x, y}]パラメータの極値
について,行列
が半正定値になるような
の範囲を求める:
ListPlot[Table[...], ...]
を変化させて生成された領域の共通部分で形成されたミニマイザと実行可能領域(緑で表示)を可視化する:
region[α_, β_, δ_] := x ≥ α && y ≥ β && x - y ≤ δ;
RegionPlot[{region[1, 0, 3 / 2], region[2, 0, 3 / 2], region[1, 1, 3 / 2], region[2, 1, 3 / 2], region[1, 0, -3 / 2], region[2, 0, -3 / 2], region[1, 1, -3 / 2], region[2, 1, -3 / 2], x - y ≤ -(3/2) && x ≥ 2}, ...]NormCone変数制約 (7)
であるすべての
についての変数制約
上の
についてのロバストミニマイザを求める:
res = RobustConvexOptimization[x, ForAll[θ, θ∈Interval[{-0.2, 0.2}],
Inactive[Norm][{(1 + θ)x, y}] ≤ 1], {x, y}]
の極値に設定されたミニマイザと変数制約を可視化する.パラメータ
の可能なすべての値に対して実行可能な
の集合は,全実行可能領域の共通部分(緑色で表示)である:
RegionPlot[{Norm[{0.8x, y}] ≤ 1, Norm[{1.2x, y}] ≤ 1}, {x, -1.5, 1.5}, {y, -1.5, 1.5}, ...]
であるすべての
についての変数制約
上の
についてのロバストなミニマイザを求める:
res = RobustConvexOptimization[y, ForAll[{α, β}, {-0.3 ≤ α ≤ 0.3,
-0.2 ≤ β ≤ 0.2}, Inactive[Norm][{(1 + α)x + β, y}] ≤ 1], {x, y}]ミニマイザ,パラメータ
の極値に設定された変数制約,実行可能領域(緑色で表示)を可視化する:
reg[α_, β_] := Norm[{(1 + α) x + β, y}] ≤ 1;
RegionPlot[{reg[-.3, -.2], reg[-.3, .2], reg[.3, -.2], reg[.3, .2], reg[.3, .2] && reg[.3, -.2]}, ...]
であるすべての
についての変数制約
上の
についてのロバストなミニマイザを求める:
res = RobustConvexOptimization[x, ForAll[θ, -0.2 ≤ θ ≤ 0.2,
{Inactive[Norm][{(1 + θ)x, y}] ≤ 2, x + y ≥ -1, y ≥ 0}], {x, y}]ミニマイザ,
の極値についての変数制約集合,実行可能領域(緑で表示)を可視化する:
region[α_] := Norm[{(1 + α)x, y}] ≤ 2 && x + y ≥ -1 && y ≥ 0;
RegionPlot[{region[-0.2], region[0.2]}, ...]
であるすべての
についての変数制約
上の
についてのロバストなミニマイザを求める:
res = RobustConvexOptimization[y, ForAll[{α, β}, {-0.2 ≤ α ≤ 0.2,
-0.1 ≤ β ≤ 0.1}, Inactive[Norm][{x + α, y}] ≤ 1 + β], {x, y}]ミニマイザ,
の極値についての変数制約集合,実行可能領域(緑で表示)を可視化する:
region[α_, β_] := Norm[{x + α, y}] ≤ 1 + β;
RegionPlot[{region[-0.2, -0.1], region[-0.2, 0.1], region[0.2, -0.1], region[0.2, 0.1], region[-0.2, -0.1] && region[0.2, -0.1]}, ...]
であるすべての
についての変数制約
上の
についてのロバストなミニマイザを求める:
RobustConvexOptimization[y, ForAll[{α, β}, {-0.2 ≤ α ≤ 0.2,
Inactive[Norm][{β}] ≤ 0.25}, Inactive[Norm][{x + α, y}] ≤ 1 + β],
{x, y}]
であるすべての
についての変数制約
上の
についてのロバストなミニマイザを求める:
res = RobustConvexOptimization[x - y, ForAll[{α, β}, Inactive[Norm][{α, β}] ≤ 0.4,
Inactive[Norm][{α + x, β + y}] ≤ 1], {x, y}]ミニマイザ,
の極値についての変数制約集合,実行可能領域(緑で表示)を可視化する:
region[α_, β_] := Norm[{x + α, y + β}] ≤ 1;
extremeRegions = {region[-0.4, 0], region[0.4, 0], region[0, -0.4], region[0, 0.4]};
RegionPlot[Evaluate[Append[extremeRegions, And@@extremeRegions]], ...]
であるすべての
についての変数制約
上の
についてのロバストなミニマイザを求める:
res = RobustConvexOptimization[x, ForAll[{α, β, δ},
{Inactive[Norm][{α, β}] ≤ 0.5, 1 ≤ δ ≤ 2}, {Inactive[Norm][{α + x, β + y}] ≤ δ + x, x + y ≥ -1}], {x, y}]ミニマイザ,
の極値についての変数制約集合,実行可能領域(緑で表示)を可視化する:
extremeRegions = Table[...];
RegionPlot[Evaluate[Append[extremeRegions, And@@extremeRegions]], ...]SemidefiniteCone変数制約 (2)
であるすべての
についての変数制約
に従う
についてのロバストな近似ミニマイザを求める:
RobustConvexOptimization[x + y, ForAll[θ, θ∈Interval[{0, 2}],
VectorGreaterEqual[{{{x, 1 + θ}, {1 + θ, y}}, 0}, {"SemidefiniteCone", 2}]], {x, y}]ミニマイザ,パラメータ
の極値についての変数制約集合,実行可能領域(緑で表示)を可視化する:
region[α_] := VectorGreaterEqual[{{{x, 1 + α}, {1 + α, y}}, 0}, {"SemidefiniteCone", 2}];
RegionPlot[{region[0], region[2]}, ...]
であるすべての
についての変数制約
に従う
についてのロバストな近似ミニマイザを求める:
RobustConvexOptimization[2x + 3y, ForAll[{α, β}, Inactive[Norm][{α, β}] ≤ 1,
VectorGreaterEqual[{{{1 + α + x, 1 + β}, {1 + β, 1 + α + y}}, 0}, {"SemidefiniteCone", 2}]], {x, y}]ミニマイザ,パラメータ
の極値についての変数制約集合,実行可能領域(緑で表示)を可視化する:
region[α_, β_] := VectorGreaterEqual[{{{1 + α + x, 1 + β}, {1 + β, 1 + α + y}}, 0}, {"SemidefiniteCone", 2}];
extremeRegions = {region[0, 1], region[1, 0], region[0, -1], region[-1, 0]};
RegionPlot[Evaluate[Append[extremeRegions, And@@extremeRegions]], ...]オプション (3)
Method (2)
Method"CuttingSet"を使ってロバストな対応部分が扱いにくい問題を解く:
RobustConvexOptimization[x + y, ForAll[{α, β}, {1 ≤ α ≤ 3,
0.9 ≤ α + 5β ≤ 3.1}, {Inactive[Norm][{-6 + x, -4 + y}] ≤ 1 + 0.001 α, (| | |
| ------------- | ------------- |
| 1 + (1 + β) x | 1 + α |
| 1 + α | 1 + (1 + β) y |)Underscript[, {"SemidefiniteCone", 2}]0}], {x, y}];
RobustConvexOptimization[x + y, ForAll[{α, β}, {1 ≤ α ≤ 3,
0.9 ≤ α + 5β ≤ 3.1}, {Inactive[Norm][{-6 + x, -4 + y}] ≤ 1 + 0.001 α, (| | |
| ------------- | ------------- |
| 1 + (1 + β) x | 1 + α |
| 1 + α | 1 + (1 + β) y |)Underscript[, {"SemidefiniteCone", 2}]0}], {x, y}, Method -> "CuttingSet"]パラメータの2つの極値についてのミニマイザと変数制約集合を(緑で示された)実行可能領域と一緒に可視化する.
fun[α_, β_] = VectorGreaterEqual[{{{1 + (1 + β) x, 1 + α}, {1 + α, 1 + (1 + β) y}}, 0}, {"SemidefiniteCone", 2}];
RegionPlot[{fun[1, -0.1 / 5], fun[1, 2.1 / 5], fun[3, -2.1 / 5], fun[3, 0.1 / 5], Norm[{x - 6, y - 4}] ≤ 1, Norm[{x - 6, y - 4}] ≤ 1 && fun[3, -2.1 / 5]}, ...]Method"PolyhedralApproximation"を使って"NormCone"制約を線形化する.こうすることで,他の方法では扱いにくいロバストな対応部分を使った近似解の問題が可能になる:
RobustConvexOptimization[x, ForAll[{α, β}, {-0.2 ≤ α + β ≤ 0.2,
-0.1 ≤ α ≤ 0.1}, Inactive[Norm][{x + α, y + β}] ≤ 1], {x, y}]
res = RobustConvexOptimization[x, ForAll[{α, β}, {-0.2 ≤ α + β ≤ 0.2,
-0.1 ≤ α ≤ 0.1}, Inactive[Norm][{x + α, y + β}] ≤ 1], {x, y}, Method -> "PolyhedralApproximation"]パラメータの2つの極値について,ミニマイザと変数制約集合を可視化する:
region[α_, β_] := Norm[{x + α, y + β}] ≤ 1;
extremeRegions = {region[-0.1, -0.1], region[-0.1, 0.3], region[0.1, -0.3], region[0.1, 0.1]};
RegionPlot[Evaluate[Append[extremeRegions, And@@extremeRegions]], ..., Epilog -> {PointSize[0.02], Point[{x, y} /. res]}]Tolerance (1)
Toleranceの設定を小さくするとより厳密な結果が与えられる:
{obj, varConstraints, vars} = {x, Inactive[Norm][{α + x, β + y}] ≤ 1, {x, y}};
{parConstraints, parameters} = {{-0.1 ≤ α ≤ 0.1, -0.2 ≤ β ≤ 0.2,
Inactive[Norm][{α, β}] ≤ 0.1}, {α, β}};exact = ConicOptimization[obj, {varConstraints, α == -0.1, β == 0}, vars, "PrimalMinimizerVector"]Toleranceの設定値を変えて誤差を計算する:
err = Table[{tol, Norm[RobustConvexOptimization[obj,
ForAll[Evaluate[parameters], parConstraints, varConstraints], vars, "PrimalMinimizerVector", Method -> "PolyhedralApproximation", Tolerance -> tol, MaxIterations -> 100000] - exact]}, {tol, 10 ^ -Range[4., 9]}]ListLogLogPlot[err, PlotRange -> All, Joined -> True, PlotMarkers -> Automatic]アプリケーション (14)
幾何学問題 (2)
サブサークルの集合を囲い込む最小な円の中心
と半径
を求める:
SeedRandom[1234];
n = 20;
centers = RandomReal[{-1, 1}, {n, 2}];
radii = RandomReal[{.1, .3}, n];サブサークルは,不確かさの円板の中心である点によって表される:
Δ = Table[Indexed[δ, i], {i, n}];
uncertainPoints = MapThread[Inactive[Plus], {centers, Δ}];
uncertaintyConstraints = MapThread[Norm[#1] ≤ #2&, {Δ, radii}];constraints = Table[Norm[Inactive[Plus][pi, -c]] ≤ r, {pi, uncertainPoints}];res = RobustConvexOptimization[r,
ForAll[δ, {Element[δ, Matrices[{n, 2}, Reals]], uncertaintyConstraints}, constraints],
{r, c∈Vectors[2, Reals]}]Graphics[{Circle[c, r] /. res, {Red, PointSize[0.02], Point[centers]}, MapThread[{Opacity[0.2], Blue, Disk[##]}&, {centers, radii}]}]不確かさが楕円
でモデル化されるときの,半径が
で中心が
と
の2つの円板の最短距離を求める:
center1 = {α, β};
center2 = {2.5 + α, 1.5 + β};
と
を円板1と円板2に関連付けられた点とする.目的は
に従って
を最小化することである:
res = RobustConvexOptimization[Inactive[Norm][Subscript[p, 1] - Subscript[p, 2]], ForAll[{α, β, δ},
δ∈Interval[{-.4, .4}], {Inactive[Norm][Subscript[p, 1] + {α, β}] ≤ 1 + δ,
Inactive[Norm][Subscript[p, 2] + {-2.5 - α, -1.5 - β}] ≤ 1 + δ, Inactive[Norm][{α, β}] ≤ 0.3}], {Subscript[p, 1]∈Vectors[2, Reals], Subscript[p, 2]∈Vectors[2, Reals]}]中心と半径が不確かな2つの円板の最短距離は以下のようになる:
Norm[Subscript[p, 1] - Subscript[p, 2]] /. res2つの点の位置を不確かな円板のいくつかの極端な例と一緒に可視化する:
SeedRandom[123];
offset = Block[...];
radius = RandomReal[{-0.4, 0.4}, Length[offset]];
extreme = {{{-0.3, 0}, 1 - 0.4}, {{0, -0.3}, 1 - 0.4}, {{-0.3, -0.3} / Sqrt[2], 1 - 0.4}};
Graphics[...]データフィッティング問題 (3)
区間の不確かさに従って,応答があるデータのロバストな線形フィットを求める:
{input, response} = {...};
n = Length[input];
dataPlot = ListPlot[Transpose[{input, response + Interval[{-.25, .25}]}]]目的は,区間の不確かさ
に従って入出力間の誤差を最小にすることである:
objective = Inactive[Norm][b + m input + -response + -θ];ロバストなフィット y=m x+b の傾き m と切片 b を求める:
robustFit = RobustConvexOptimization[objective, ForAll[θ, {θ∈Vectors[n, Reals], -0.25θ0.25}], {m, b}]simpleFit = ConvexOptimization [objective, {θ == 0}, {m, b}]不確かさの100の可能な実現のためのフィットモデルを求める:
pfun = ParametricConvexOptimization [objective, {}, {m, b}, {θ∈Vectors[n, Reals]}];
models = Table[pfun[RandomReal[{-.25, .25}, n]], {100}];ロバストフィット(マゼンタ),単純フィット(緑),データで,フィットモデルの包絡線を表示する:
Show[Plot[{m x + b /. robustFit, m x + b /. simpleFit, Min[m x + b /. models], Max[m x + b /. models]}, {x, 0, 1}, Filling -> {3 -> {4}}, PlotStyle -> {Directive[Thickness[.01], Magenta],
Green, Automatic, Automatic}], dataPlot]出力に区間の不確かさ
が含まれる離散データに三次曲線をフィットする:
{input, output} = Block[{n = 30, input, output}, SeedRandom[12345];input = Range[0., 1., (1/n)];output = Sin[3 input^3 / 2] + RandomReal[{-0.1, 0.1}, n + 1];{input, output}];
dataplot = ListPlot[Transpose[{input, Interval[{-0.1, 0.1}] + output}]]DesignMatrixを使って入力行列を構築する:
basis = {1, x, x^2, x^3};
mat = DesignMatrix[Transpose[{input, output}], basis, x];目的は区間の不確かさ
に従って入出力間の誤差を最小にすることである:
objective = Inactive[Norm][mat.coeffs + -(output + θ)];res = RobustConvexOptimization[objective, ForAll[θ, {-0.1θ0.1,
θ∈Vectors[Length[output], Reals]}], coeffs]不確かさの可能な100の実現についてのフィットモデルを求める:
n = Length[output];
pfun = ParametricConvexOptimization [objective, {}, coeffs, θ∈Vectors[n, Reals]];
models = Table[pfun[RandomReal[{-.1, .1}, n]], {200}];フィットモデルの包絡線を,ロバストなフィット(緑)およびデータとともに表示する:
Show[Plot[{(coeffs /. res).basis, Min[(coeffs /. models).basis], Max[(coeffs /. models).basis]}, ...], dataplot]ロバストなフィット(緑)と平均モデル(赤)をノイズのない厳密解と比較する:
Plot[Evaluate[{(coeffs /. res).basis,
Mean[(coeffs /. models).basis]} - Sin[3x^3 / 2]], {x, 0, 1}, PlotStyle -> {Green, Red}, PlotRange -> All]ロバストなフィットは平均モデルよりも誤差が大きくなる傾向がある:
Abs[NIntegrate[#, {x, 0, 1}]& /@ ({(coeffs /. res).basis,
Mean[(coeffs /. models).basis]} - Sin[3x^3 / 2])]測定のインスタンス(入力)が不確かな範囲
にある離散データに三次曲線をフィットする:
{input, output} = Block[...];
basis = {1, x, x^2, x^3};mat = DesignMatrix[Transpose[{input, output}], basis, x];
res = RobustConvexOptimization[Inactive[Norm][(mat + θ).coeffs + -output],
ForAll[θ, {-0.1θ0.1, θ∈Matrices[Dimensions[mat], Reals]}], coeffs]入力ノイズのランダムなインスタンスから生成された包絡線を使用して,ロバストなフィットを表示する:
curves = Block[...];
envelope = Plot[{Min[curves], Max[curves]}, {x, 0, 1}, Filling -> {1 -> {2}}];Show[envelope, Plot[(coeffs /. res).basis, {x, 0, 1}, PlotStyle -> Green]]ロバストなフィット(緑)と平均モデル(赤)をノイズのない厳密解と比較する:
Plot[Evaluate[{(coeffs /. res).basis, Mean[curves]} - Sin[3x^3 / 2]], {x, 0, 1}, PlotStyle -> {Green, Red}]製造問題 (3)
2つの異なる原材料
から活性剤を抽出する際の不確かさを考慮して利益を最大化するためにある会社が製造する2つの薬剤
の最適な組合せを求める.医薬品の単位あたりの収益は以下の通りである:
revenuePerUnit = {6200, 6900};storageConstraint = Subscript[r, 1] + Subscript[r, 2] ≤ 1000;2つの薬の製造には90から100時間の人的資源が必要である.同社の人的資源は2000時間分しかない:
manPowerConstraint = 90Subscript[d, 1] + 100Subscript[d, 2] ≤ 2000;2つの薬を製造するのに40から50時間の機械時間が必要である.同社の機械時間は800時間しかない:
equipmentConstraint = 40Subscript[d, 1] + 50Subscript[d, 2] ≤ 800;2つの薬を製造するための運用コストはそれぞれ700と800である.キログラムあたりの原材料費はそれぞれ100と199.9である:
operationalCost = 700Subscript[d, 1] + 800 Subscript[d, 2];
purchasingCost = 100Subscript[r, 1] + 199.9Subscript[r, 2];
totalCost = operationalCost + purchasingCost;budgetConstraint = totalCost ≤ 100000;同社は数単位の薬を製造しなければならず,したがってある程度の原材料を購入しなければならない:
productConstraint = {Subscript[d, 1] ≥ 0, Subscript[d, 2] ≥ 0, Subscript[r, 1] ≥ 0, Subscript[r, 2] ≥ 0};2つの原材料から抽出される活性剤の量は,それぞれ
g/kgおよび
g/kgの原材料である.2つの薬はそれぞれ0.5g /単位と0.6g /単位の活性剤を必要とする:
activeAgentConstraint = (0.01 + Subscript[θ, A])Subscript[r, 1] + (0.02 + Subscript[θ, B])Subscript[r, 2] ≥ 0.5Subscript[d, 1] + 0.6Subscript[d, 2];
activeAgentUncertainityConstraint = {-0.00005 ≤ Subscript[θ, A] ≤ 0.00005,
-0.0004 ≤ Subscript[θ, B] ≤ 0.0004};目的は,購入コストと運用コストを最小限に抑えながら収益を最大化することである:
objective = totalCost - revenuePerUnit.{Subscript[d, 1], Subscript[d, 2]};res = RobustConvexOptimization[objective, ForAll[{Subscript[θ, A], Subscript[θ, B]}, activeAgentUncertainityConstraint, {storageConstraint,
manPowerConstraint, equipmentConstraint, budgetConstraint, productConstraint, activeAgentConstraint}], {Subscript[d, 1], Subscript[d, 2], Subscript[r, 1], Subscript[r, 2]}]robustProfit = -objective /. respfun = ParametricConvexOptimization[objective, {storageConstraint,
manPowerConstraint, equipmentConstraint, budgetConstraint, productConstraint, activeAgentConstraint, activeAgentUncertainityConstraint}, {Subscript[d, 1], Subscript[d, 2], Subscript[r, 1], Subscript[r, 2]}, {Subscript[θ, A], Subscript[θ, B]}]原材料に活性剤の変動がない場合は,2番目の原材料が優先される:
nominalRes = pfun[0, 0]nominalProfit = -objective /. nominalRes(nominalProfit - robustProfit) / nominalProfitロバストな解は,原材料から抽出される活性剤の量が最も少ないという最悪のシナリオに対応する:
pfun[-0.00005, -0.0004]ロバストな解を使用する利点を確認するために,原材料と活性剤の不確かさをパラメータとして使ってパラメトリック関数を生成する:
pfun2 = ParametricConvexOptimization[objective, {
manPowerConstraint, equipmentConstraint, budgetConstraint, activeAgentConstraint, activeAgentUncertainityConstraint, Subscript[d, 1] ≥ 0, Subscript[d, 2] ≥ 0}, {Subscript[d, 1], Subscript[d, 2]}, {Subscript[r, 1], Subscript[r, 2], Subscript[θ, A], Subscript[θ, B]}, "PrimalMinimumValue"];名目上の結果,つまり
を使用して原材料を購入した場合,原材料から抽出できる活性剤の量によっては,利益が21%減少する可能性がある:
(nominalProfit - (-pfun2[0, 438.789, 0, -0.0004])) / nominalProfit原材料がロバストな結果を使用して購入された場合,つまり,
の場合,利益は最大6%減少する可能性がある:
(nominalProfit - (-pfun2[877.732, 0, -0.00005, 0])) / nominalProfit2番目の原材料から抽出できる活性剤の関数として利益をプロットする:
Plot[{nominalProfit, -pfun2[877.732, 0, -0.00005, 0], -pfun2[0, 438.789, 0, Subscript[θ, B]]}, {Subscript[θ, B], -0.0004, 0.0004}, ...]製造入力に不確かさがある企業の利益を最大化する製造製品の組合せを求める.同社は3つの製品を製造している.理想的な条件下では,単位あたりの収益,単位あたりのコスト,最大容量は次の式で与えられる:
baseRevenuePerUnit = {90., 100., 70.};
baseCostPerUnit = {45., 40., 20.};
baseCapacity = {100, 40, 60};各製品は4台の機械を使用して作られる.機械が各製品に費やす時間は次の通りである:
TableForm[machineTime = {{20, 10, 10}, {12, 28, 16}, {15, 6, 5}, {10, 15, 0}}, Rule[...]]市場の変動のために,製品の各単位によって生成される収益は5ドル減少する可能性がある:
revenuePerUnit = Inactive[Plus][baseRevenuePerUnit, -Subscript[θ, r]];
revenueUncertaintyConstraint = 0Subscript[θ, r]5;機械のダウンタイムを考慮すると,製造能力は製品ごとに5ユニット減少する可能性がある:
capacity = Inactive[Plus][baseCapacity, -Subscript[θ, cap]];
capacityUncertaintyConstraint = 0Subscript[θ, cap]5;
capacityConstraint = 0xcapacity;各機械は週に最大2400分実行できる.機械が稼働していない場合,稼働状態に戻るまでに最大120分かかる:
timeConstraint = machineTime.x2400 - Subscript[θ, time];
timeUncertaintyConstraint = 0Subscript[θ, time]120;4台の機械のいずれかを修理するためのコストは,各製品のコストを1単位あたり5ドル増加させる:
costPerUnit = Inactive[Plus][baseCostPerUnit, Subscript[θ, cost]];
costUncertaintyConstraint = 0Subscript[θ, cost]5;利益は収益からコストを引いたものに製品
の単位数
を掛けたものに等しくなる:
profit = Inactive[Plus][revenuePerUnit, -costPerUnit].x;variableConstraints = {capacityConstraint, timeConstraint};parameterConstraints = {revenueUncertaintyConstraint, capacityUncertaintyConstraint, timeUncertaintyConstraint, costUncertaintyConstraint};parameters = {Subscript[θ, r], Subscript[θ, cap], Subscript[θ, time], Subscript[θ, cost]};
parameterDomains = {Subscript[θ, r]∈Vectors[3, Reals], Subscript[θ, cap]∈Vectors[3, Reals], Subscript[θ, time]∈Vectors[4, Reals], Subscript[θ, cost]∈Vectors[3, Reals]};目的は,収益を最大にすることである.最適な製品の組合せは以下で与えられる:
res = RobustConvexOptimization[-profit, ForAll[Evaluate[parameters],
{parameterDomains, parameterConstraints}, variableConstraints], x∈Vectors[3, Integers]]さまざまなパラメータを変更するためのパラメトリック関数を作成する:
pfun = ParametricConvexOptimization[-profit, {variableConstraints, parameterConstraints}, x∈Vectors[3, Integers], parameterDomains, {"PrimalMinimumValue", "PrimalMinimizerRules"}]最良のシナリオでは,収益の減少や機械のダウンタイムは発生せず,以下のようになる:
pfun[{0, 0, 0}, {0, 0, 0}, {0, 0, 0, 0}, {0, 0, 0}]最悪のシナリオは,RobustConvexOptimizationによって得られた結果に対応する:
pfun[{5, 5, 5}, {5, 5, 5}, {120, 120, 120, 120}, {5, 5, 5}]価格と供給の変動に応じて3つの製品
を販売する会社の利益を最大化する製造製品の組合せを求める.
単位あたり
の価格変動を考慮した単位あたりの収益は以下の通りである:
baseRevenuePerUnit = {50., 40., 40.};
revenuePerUnit = Inactive[Plus][baseRevenuePerUnit, -Subscript[θ, r]];
revenueUncertaintyConstraint = -5Subscript[θ, r]5;この工場は100日しか稼働しない.理想的には,各単位の製造に2,4,5日かかるが,予期しない遅延により製造時間が1日長くなる可能性がある:
laborConstraint = Inactive[Plus][{2 , 4, 5}, Subscript[θ, delay]].x ≤ 100;
delayUncertaintyConstraint = 0Subscript[θ, delay]1;各製品には金と錫が含まれている.各単位で使用可能な金と錫は,それぞれ
および
である:
goldConstraint = {1, 1, 1}.x ≤ 30 + Subscript[θ, gold];
tinConstraint = {10, 5, 3}.x ≤ 200 + Subscript[θ, tin];
goldUncertaintyConstraint = -5 ≤ Subscript[θ, gold] ≤ 5;
tinUncertaintyConstraint = -10 ≤ Subscript[θ, tin] ≤ 10;製品が製造された場合,会社は各製品のセットアップ費用を負担する:
setupCost = {500, 500, 300};セットアップ費用が比較的高いため,一部の製品を全く製造しないことが望ましい場合がある.
を,製品
が製造されている場合は
,それ以外の場合は
となる決定変数とする.制限
は他の制約よりも
のサイズを制限することなく,
が0の場合は
も0であることを保証する:
decisionConstraints = {0w1, 0x1000w};profit = revenuePerUnit.x - setupCost.w;variableConstraints = {laborConstraint, goldConstraint, tinConstraint, decisionConstraints};parameterConstraints = {revenueUncertaintyConstraint, delayUncertaintyConstraint, goldUncertaintyConstraint, tinUncertaintyConstraint};parameters = {Subscript[θ, r], Subscript[θ, delay], Subscript[θ, gold], Subscript[θ, tin]};
parameterDomains = {Subscript[θ, r]∈Vectors[3, Reals], Subscript[θ, delay]∈Vectors[3, Reals], Subscript[θ, gold]∈Reals, Subscript[θ, tin]∈Reals};RobustConvexOptimization[-profit, ForAll[Evaluate[parameters], {parameterDomains, parameterConstraints}, variableConstraints], {x∈Vectors[3, Integers], w∈Vectors[3, Integers]}]さまざまなパラメータを変えるためのパラメトリック関数を構築する:
pfun = ParametricConvexOptimization[-profit, {variableConstraints,
parameterConstraints}, {x∈Vectors[3, Integers],
w∈Vectors[3, Integers]}, parameterDomains]pfun[{-5, -5, -5}, {1, 1, 1}, -5, -10]構造最適化問題 (1)
バネの剛性と平衡長の両方が製造上の不確かさの影響を受ける各リンクの端に垂直荷重がかかった状態で,
のバネリンクによって形成される吊り下げチェーンの形状を求める.目的はリンクの位置
を求めることである:
重力による位置エネルギーは
である.ただし,
は両端の垂直荷重,
は重力である:
n = 20;
gravityPE = m g Total[y];伸縮によるバネリンクの張力による位置エネルギーは
である.ここで,
はバネリンク
の伸縮,
はバネの不確かな剛性であり,
はバネの理想的な剛性である.
を使用してエネルギーを
に変換する:
springPE = (1 + Subscript[θ, s])k u;auxConstraint = Norm[t]^2 ≤ 2u;
energyConstraint = VectorGreaterEqual[{t, 0}];リンクチェーンの端は(0,0)と(2,-1)に固定されている:
endConditions = {Indexed[x, 1] == 0, Indexed[y, 1] == 0, Indexed[x, n + 1] == 2, Indexed[y, n + 1] == -1};各リンクは制約条件
を満足しなければならない.ただし,
は不確かさ
に従う各バネの静止長である:
linkConditions = Table[Inactive[Norm][{Indexed[x, i] - Indexed[x, i + 1],
Indexed[y, i] - Indexed[y, i + 1]}] - (1 + Indexed[δ, i])Subscript[l, 0] ≤ Indexed[t, i], {i, 1, n}];constants = {k -> 500, m -> 1, g -> 9.81, Subscript[l, 0] -> 0.25};最終的な目的関数は,最小化する必要がある重力とバネの位置エネルギーの合計である:
totalEnergy = (gravityPE + springPE) /. constants;res = RobustConvexOptimization[totalEnergy, ForAll[{Subscript[θ, s], δ}, {Subscript[θ, s]∈Interval[{-0.01, 0.01}], δ∈Vectors[n, Reals], -0.01δ0.01}, {auxConstraint, endConditions, linkConditions} /. constants], {t∈Vectors[n, Reals], x∈Vectors[n + 1, Reals], y∈Vectors[n + 1, Reals], u}, MaxIterations -> 10 ^ 5]ListLinePlot[Transpose[{x, y} /. res], PlotMarkers -> Automatic]伸びはリンクチェーンの端のリンクで最大になる.伸びが最小なのはリンク12である:
BarChart[Evaluate[t /. res], ChartLabels -> Range[n], ImageSize -> 300]ポートフォリオの最適化 (2)
平均リターンに不確実性がある場合にリスクを最小限に抑えながらリターンを最大化するために,市場のボラティリティの影響を受ける可能性のある20の候補株から投資する6つの株の最適な組合せを見付ける.株式
の期待収益値
および株式
間の共分散は次の通りである:
{μ, Σ} = Block[...];
n = Length[μ];市場の変動のために各株式の平均収益値は不確実性
の影響を受ける:
meanUncertaintyConstraint = -4Subscript[θ, m]4;return = (μ + Subscript[θ, m]).w;risk = Inactive[Norm][CholeskyDecomposition[Σ].w];
は
ならばその株を買うことになる決定ベクトルであるとすると,6つの株を選択しなければならない:
decisionConstraints = {Total[x] == 6, 0x1};weightConstraints = {0wx, Total[w] == 1};リスクを最小にしてリターンを最大にする株の最適な組合せを求める:
{pval, res} = RobustConvexOptimization[risk - return, ForAll[Subscript[θ, m], Subscript[θ, m]∈Vectors[n, Reals], {decisionConstraints,
weightConstraints, meanUncertaintyConstraint}], {w, x∈Vectors[n, Integers]}, {"PrimalMinimumValue",
"PrimalMinimizerRules"}]stockPicks = Flatten[Position[x /. res, 1]](w /. res)[[stockPicks]]{safeRisk = Activate[risk /. res], safeReturn = safeRisk - pval}さまざまなパラメータを変更するためのパラメトリック関数を作成する:
pfun = ParametricConvexOptimization[risk - return, {decisionConstraints,
weightConstraints}, {w, x∈Vectors[n, Integers]}, Subscript[θ, m]∈Vectors[n, Reals]]最も安全で最適な株式の組合せは,不確実性のランダムなインスタンスを持つ最適な株式と比較して,最小のリスクとリターンを提供する:
optimalRiskReturns = Table[...];
ListPlot[{optimalRiskReturns, {{safeRisk, safeReturn}}}, ...]平均リターンと共分散の両方に不確実性がある場合に,リスクを最小化しながらリターンを最大化するためのに6つの株に投資する資本の分布を見付ける.株
の期待収益値
および株
間の共分散は次の通りである:
{μ, Σ} = Block[...];
n = Length[μ];市場の変動のために,各株式のリターン値は不確実性
の影響を受ける:
meanUncertaintyConstraint = -4Subscript[θ, m]4;return = (μ + Subscript[θ, m]).w;;共分散は有限のデータ集合から抽出され,不確実性
の影響を受ける:
u = Inactive[Plus][CholeskyDecomposition[Σ], δ];
varianceUncertaintyConstraint = -0.1δ0.1;risk = Inactive[Norm][u.w];目的は,指定されたリスク回避パラメータ
のリスクを最小限に抑えながらリターンを最大にすることである:
objective[α_ ? NumericQ] := -(return - α risk);weightConstraints = {w0, Total[w] == 1};一連のリスク回避パラメータのリターンと対応するリスクを計算する:
riskAversionParameter = N@{1 / 100, 1 / 2, 1, 10, 100, 1000};
res = Table[{α, w} /. RobustConvexOptimization[objective[α],
ForAll[{Subscript[θ, m], δ}, {Subscript[θ, m]∈Vectors[n], δ∈Matrices[{n, n}]}, {weightConstraints, meanUncertaintyConstraint,
varianceUncertaintyConstraint}], w, Method -> "CSDP"], {α, riskAversionParameter}];リスク回避パラメータ
を大きくすると,リスクを減らすための株式の分散に繋がる:
Legended[BarChart[res[[All, -1]], ...], SwatchLegend[...]]施設の場所問題 (1)
ある会社が新しい工場を開設したいと考えている.工場には5つの倉庫からの原材料が必要である.新しい工場と倉庫の間の,
の間で変動する単位距離あたりの輸送コストは次の通りである:
costPerUnitDist = Inactive[Plus][{1000, 1500, 2000, 1000, 1500}, Subscript[θ, cost]];
costUncertaintyConstraint = -100Subscript[θ, cost]100;
を工場と倉庫
の間の距離とする.目的は
を最小化することである:
totalCost = costPerUnitDist.d;pos = {{0, 0}, {1, 0}, {3 / 2, 1}, {-1 / 2, 1}, {1 / 2, 3 / 2}};constraints = Table[Norm[Inactive[Plus][pos[[i]], -Subscript[p, new]]] ≤ Indexed[d, i], {i, Length[pos]}];res = RobustConvexOptimization[totalCost, ForAll[Subscript[θ, cost], Subscript[θ, cost]∈Vectors[5, Reals], {constraints,
costUncertaintyConstraint}], {d, Subscript[p, new]∈Vectors[2]}]ListPlot[Thread[{pos}], Sequence[...], Epilog -> {Red, PointSize[0.03], Point[Subscript[p, new] /. res]}]分類問題 (2)
2つの点集合
と
を分離する線分
を求める.ただし,
は区間の不確かさである:
{set1, set2} = Block[...];分離するために,集合1は
を,集合2は
を満足しなければならない:
constraints = {Inactive[Plus][set1, α].a + b1, Inactive[Plus][set2, β].a + b-1};目的は
を最小化することである.これによって
と
の間の最大の厚さが得られる:
res = RobustConvexOptimization[Norm[a], ForAll[{α, β}, {α∈Matrices[Dimensions[set1], Reals], β∈Matrices[Dimensions[set2], Reals],
-0.05α0.05, -0.05β0.05}, constraints], {a, b}]line = a.{x, y} + b /. resShow[RegionPlot[line ≤ 0, {x, 0, 1}, {y, 0, 1}], Graphics[{EdgeForm[StandardGray], FaceForm[None], Rectangle[# - 0.05, # + 0.05]& /@ Join[set1, set2]}], ListPlot[{set1, set2}, PlotMarkers -> {Automatic, PointSize[0.025]}]]RobustConvexOptimization[Norm[a], ForAll[{α, β}, {α∈Matrices[Dimensions[set1], Reals], β∈Matrices[Dimensions[set2], Reals],
-0.11α0.11, -0.11β0.11}, constraints], {a, b}]不確かさが大きくなった集合を可視化すると,2つの集合に不確かさのボックスが重なるいくつかの点があることが分かる:
Show[Graphics[{EdgeForm[StandardGray], FaceForm[None],
Rectangle[# - 0.11, # + 0.11]& /@ Join[set1, set2]}], ListPlot[{set1, set2}, PlotMarkers -> {Automatic, PointSize[0.025]}]]2つの3Dの点集合
と
を分離する二次多項式を求める.ただし,
は不確かさの区間である:
{set1, set2} = Block[...];
dataplot = ListPointPlot3D[{set1, set2}, Sequence[...]]DesignMatrixを使って2つの集合のために二次多項式データ行列を構築する:
{data1, data2} = DesignMatrix[#, {x, x^2, y, y^2, x y}, {x, y}]& /@ {set1, set2};分離するためには,集合1は
を,集合2は
を満足しなければならない:
constraints = {Inactive[Plus][data1, α].a + b1, Inactive[Plus][data2, β].a + b-1};res = RobustConvexOptimization[Norm[a], ForAll[{α, β}, {α∈Matrices[Dimensions[data1], Reals], β∈Matrices[Dimensions[data2], Reals], -0.02α0.02, -0.02β0.02}, constraints], {a, b}, MaxIterations -> 10 ^ 5]poly = (a.{1, x, x^2, y, y^2, x y} + b) /. resShow[dataplot, ContourPlot3D[poly == 0, {x, -1.5, 1.5}, {y, -1.5, 1.5}, {z, -1, 1}, Sequence[...]]]考えられる問題 (1)
問題の中には,ForAllの第1引数が評価されないために失敗するものがある:
parameters = {α, β};
parameterConstraints = {-α - β ≥ -1, α ≥ 0, β ≥ 0};
constraints = {x + 2y ≥ 3 + α, x ≥ -1 + β};RobustConvexOptimization[x + y, ForAll[parameters,
parameterConstraints, constraints], {x, y}]Evaluateを使って ForAllの第引数が確実に評価されるようにする:
RobustConvexOptimization[x + y, ForAll[Evaluate[parameters],
parameterConstraints, constraints], {x, y}]関連するガイド
-
▪
- 凸最適化 ▪
- 最適化 ▪
- 記号的なベクトル,行列,配列
テキスト
Wolfram Research (2020), RobustConvexOptimization, Wolfram言語関数, https://reference.wolfram.com/language/ref/RobustConvexOptimization.html.
CMS
Wolfram Language. 2020. "RobustConvexOptimization." Wolfram Language & System Documentation Center. Wolfram Research. https://reference.wolfram.com/language/ref/RobustConvexOptimization.html.
APA
Wolfram Language. (2020). RobustConvexOptimization. Wolfram Language & System Documentation Center. Retrieved from https://reference.wolfram.com/language/ref/RobustConvexOptimization.html
BibTeX
@misc{reference.wolfram_2026_robustconvexoptimization, author="Wolfram Research", title="{RobustConvexOptimization}", year="2020", howpublished="\url{https://reference.wolfram.com/language/ref/RobustConvexOptimization.html}", note=[Accessed: 14-November-2026]}
BibLaTeX
@online{reference.wolfram_2026_robustconvexoptimization, organization={Wolfram Research}, title={RobustConvexOptimization}, year={2020}, url={https://reference.wolfram.com/language/ref/RobustConvexOptimization.html}, note=[Accessed: 14-November-2026]}