🎓 レベル:標準 | 重要度:A(必須)
📎 前提:モンテカルロ積分の原理 | 最適化:サンプル平均近似(SAA)
要点(BLUF)
- サンプル平均近似(SAA):期待値を目的とする確率最適化 を、有限標本の経験的期待値 の最適化に置き換えます。
- 期待値が解析的に書けなくても、乱数で目的関数を評価して最適化できる——モンテカルロ積分(モンテカルロ積分の原理)と最適化の合流点です。
- 新聞売り子問題で、真の最適発注量(臨界比の分位点 48)を SAA が標本から復元することを実証します。
1. 確率最適化と SAA
不確実性 の下で期待コストを最小化したい問題
を考えます。期待値 が閉形式で書ければ普通の最適化ですが、 が複雑だと積分が解けません。SAA は、 の標本 を一度引いて固定し、経験的な目的関数
を最小化します。 はモンテカルロ推定なので の不偏推定。 で最適解・最適値が真の問題に収束します(SAA の一致性)。
2. 実装:新聞売り子問題
新聞売り子問題:需要 が不確実なとき、何部仕入れるか。1部の利益 (売れた場合)、売れ残りは仕入原価 の損。最適発注量は臨界比 の需要分位点、という解析解があります(最適化の本拠)。SAA がこれを標本から復元するか見ます。
import numpy as np
from scipy import stats
# 乱数シードを固定
rng = np.random.default_rng(62)
p, c = 10, 6 # 売価・原価
crit = (p - c) / p # 臨界比 = 0.4
true_opt = stats.poisson.ppf(crit, 50) # 真の最適(需要~Poisson(50)の分位点)
print(f"臨界比 = {crit}, 真の最適発注量 = {true_opt}")
N = 5000
demand = rng.poisson(50, N) # 需要標本を一度引いて固定
def empirical_profit(q): # 経験的期待利益
return (p*np.minimum(q, demand) - c*q).mean()
qs = np.arange(30, 70)
profits = np.array([empirical_profit(q) for q in qs])
saa_opt = qs[profits.argmax()]
print(f"SAA 最適発注量 = {saa_opt}, SAA 期待利益 = {profits.max():.2f}")
出力:
臨界比 = 0.4, 真の最適発注量 = 48.0
SAA 最適発注量 = 48, SAA 期待利益 = 172.34
出力の意味:解析解(臨界比0.4に対応する需要分位点)の最適発注量48を、SAA が需要標本だけから正確に復元しました。SAA は「需要の分布を知らなくても、需要の標本さえあれば最適化できる」点が実務的に強力。新聞売り子は解析解があるので検証に使えましたが、多段階・多制約で解析解が無い問題でこそ SAA の真価が出ます。
3. SAA の使い方と注意
- 同じ標本を固定:最適化中は標本 を固定します。毎評価で引き直すと目的関数がノイズで揺れ、最適化が収束しません(これがシミュレーション最適化シミュレーション最適化との違い)。
- 複数バッチで評価:SAA 解の質は、独立な標本バッチで複数回解いて最適値のばらつきを見て評価します(最適性ギャップの統計的推定)。
- の選択: が小さいと SAA 解が真の最適からずれる(過学習に類似)。大きいほど良いが計算コスト増。
- 凸性: が について凸なら も凸で、最適化が容易・収束保証が強い。
境界:SAA の収束論・最適性ギャップの理論・確率計画法は数理最適化の本拠(サンプル平均近似(SAA)・確率計画法)。ここは「モンテカルロで目的関数を評価して最適化に渡す」というシミュレーション側の手続きに集中します。
数式の直観的意味
SAA は「期待値の最小化を、サンプルの平均の最小化にすり替える」操作です。本来の目的 は無限個のシナリオの平均ですが、それを有限 個の代表シナリオの平均で近似し、その上で最適化する。モンテカルロ積分(モンテカルロ積分の原理)が「固定した での期待値」を標本平均で推定したのに対し、SAA は「 を動かしながら、各 での期待値を同じ標本で推定し続ける」。標本を固定するのが鍵で、こうすると は の決定的な関数になり、通常の最適化アルゴリズム(凸なら勾配法・線形計画)がそのまま使える。新聞売り子で最適量が分位点になるのは、利益関数の「売り切れる確率」と「余る確率」が臨界比で釣り合う点だから——SAA はこの釣り合いを、需要標本の経験分位点として再発見しています。
⚠️ よくある誤解・落とし穴
- 「評価ごとに乱数を引き直す」は誤り:SAA は標本を固定。引き直すと目的が揺れて最適化が収束しません。
- 「 サンプルあれば真の最適」ではない:SAA 解は真の最適の推定で、 有限ならずれ(最適性ギャップ)があります。複数バッチで評価を。
- 「SAA とシミュレーション最適化は同じ」ではない:SAA は標本固定で決定的最適化、シミュ最適化(シミュレーション最適化)はノイズ付き目的を逐次評価。別物。
- 「凸でなくても安心」ではない:非凸だと局所解に嵌る・収束保証が弱い。凸性が効きます。
- 「最適化理論をここで展開」ではない:確率計画・SAA の収束論は数理最適化の本拠(サンプル平均近似(SAA))。ここは目的関数評価(境界)。
対応シミュレーション参照
本文の新聞売り子 SAA(default_rng(62)、真の最適48を復元)。理論はサンプル平均近似(SAA)へ。
関連ノート
- モンテカルロ積分の原理(前提・期待値の標本平均推定)
- シミュレーション最適化(次のトピック・ノイズ付き目的の最適化)
- サンプル平均近似(SAA)・確率計画法(最適化・理論の本拠)
- 在庫・窓口のモデル化(新聞売り子の在庫文脈)
- 第9章 応用 目次
- シミュレーション・モンテカルロ法 全体目次