Mímisbrunnr知恵の泉

← 数理最適化 一覧

🎓 レベル:発展 | 重要度:A(必須)

📎 前提:確率計画法凸最適化問題と双対理論 | 関連:リスクを織り込む最適化(CVaR最小化)

要点(BLUF)

概念 ── 分布でなく集合で備える

確率計画は「パラメータの分布」を要求するが、分布が分からないことも多い。ロバスト最適化は、パラメータ aaある集合 U\mathcal{U} の中のどこかにあるとしか仮定せず、U\mathcal{U} 内のどんな値でも制約を破らない解を探す。

minx cxs.t.axb  aU\min_x\ c^\top x \quad \text{s.t.}\quad a^\top x \le b \ \ \forall a \in \mathcal{U}

aU\forall a\in\mathcal{U}」が肝:不確実集合内の 最悪の aa でも制約が成り立つ。これは無限個の制約に見えるが、U\mathcal{U} の形に応じて有限の ロバスト対応問題へ書き直せる。

ロバスト対応(robust counterpart)

制約 axb (aU)a^\top x \le b\ (\forall a\in\mathcal{U}) は「maxaUaxb\max_{a\in\mathcal{U}} a^\top x \le b」と同値。最悪ケースを内側の最大化で表すのがコツ。

aˉx+ia^ixib\bar a^\top x + \sum_i \hat a_i |x_i| \le b

(絶対値は線形化でき、LP のまま)。

ここで内側の最大化を双対(凸最適化問題と双対理論)で書き換えるのが、ロバスト対応導出の常套手段。

Pythonで名目解とロバスト解を比べる

生産計画で機械時間の消費が不確実:xAx_A2±0.52\pm0.5xBx_B1±0.21\pm0.2 時間消費する。ボックス不確実集合のロバスト対応(最悪消費 2xA+xB+0.5xA+0.2xB1202x_A+x_B+0.5x_A+0.2x_B\le120)と名目(2xA+xB1202x_A+x_B\le120)を比べる。

import cvxpy as cp

for robust in [False, True]:
    x = cp.Variable(2, nonneg=True)
    if robust:
        # 最悪ケース: 名目消費 + 変動分(x>=0なので符号はそのまま加算)
        machine = 2*x[0] + x[1] + (0.5*x[0] + 0.2*x[1]) <= 120
    else:
        machine = 2*x[0] + x[1] <= 120                       # 名目のみ
    prob = cp.Problem(cp.Maximize(40*x[0] + 30*x[1]),
                      [machine, x[0] + x[1] <= 100])
    prob.solve()
    tag = "ロバスト" if robust else "名目  "
    print(f"{tag}: xA={x.value[0]:.1f}, xB={x.value[1]:.1f}, 利益={prob.value:.1f}")

実行結果:

名目  : xA=20.0, xB=80.0, 利益=3200.0
ロバスト: xA=0.0, xB=100.0, 利益=3000.0

名目解 (20,80)(20,80) は利益 3200 だが、機械時間消費が上振れすると制約 2xA+xB1202x_A+x_B\le120破る2.520+1.280=146>1202.5\cdot20+1.2\cdot80=146>120)。ロバスト解 (0,100)(0,100) は利益 3000 と低いが、最悪の消費でも制約を満たす。保守性(利益の犠牲)と頑健性(制約違反しない保証)のトレードオフがロバスト最適化の本質。この差 200 が「不確実性に備える保険料(price of robustness)」。

分布ロバスト最適化(補足)

確率計画(分布が必要)とロバスト最適化(分布を全く使わない)の 中間分布ロバスト最適化(DRO)。「真の分布は分からないが、ある 分布の集合(曖昧集合) の中にある」と仮定し、その集合上の 最悪期待値を最適化する:

minx maxPP EP[f(x,ξ)]\min_x\ \max_{P \in \mathcal{P}}\ \mathbb{E}_P[\,f(x,\xi)\,]

曖昧集合 P\mathcal{P} をモーメント条件や Wasserstein 距離の球で定めると、扱いやすい凸問題に帰着することが知られ、近年の主流。データから分布を推定する誤差まで頑健化できる。

数式の直観的意味

ロバスト最適化の核心は min-max 構造:外側で意思決定 xx を最小化、内側で敵対者が最悪パラメータ aa を選ぶ。これはゲーム理論の二人ゼロ和ゲームと同じ構図で、内側の最大化を双対(凸最適化問題と双対理論)で書き換えると、min-max が単一の min(有限個の制約)に畳まれる ── これがロバスト対応問題。不確実集合の「大きさ」が保守性のつまみで、大きいほど安全だが利益を削る。確率計画が「平均的に良い」を狙うのに対し、ロバストは「最悪でも破綻しない」を狙う ── 安全性が決定的に重要な場面(電力・医療・サプライチェーン)で好まれる。不確実集合の幾何(ボックス→LP、楕円→SOCP)がそのまま問題クラスを決めるのは、錐計画の表現力(錐計画(SOCP・SDP)入門)の応用。

⚠️ よくある誤解・落とし穴

関連ノート