Chapter 8

現実の生産計画 — 工場は教科書通りには動かない

あなたは月曜の朝、自慢の最適化システムを導入したばかりの工場長。
全自動で完璧な計画が出てくるはずだった。

火曜、A 機械が壊れる。
水曜、急ぎの注文 5 件が飛び込む。
木曜、原料納入が 1 日遅れる。
金曜、ベテラン作業員 1 人が休みを取った。

最適化システムは、もう何が「最適」だかわからない顔をしている。

これが現実の工場だ。
ベンチマークの世界では、処理時間は確定値、機械は壊れず、需要は朝に確定する。
本物の工場では、どれもウソだ。

この章では、教科書 JSP のその先に踏み込む。
「ジョブ列を計算した」と言ってから始まる、もう一つの戦い。

8.1 計画は階層構造

そもそも「生産計画」は一つの問題じゃない。 時間スケールの違う計画が階段状に積み重なっている。

戦略 設備投資、能力増強 年〜数年 S&OP 販売・生産のバランス計画 月〜半年 MPS 基準生産計画 (週次) 週〜数週 MRP 原料・部品調達計画 日〜週 スケジューリング (APS) 本書の主戦場 時間〜日 上位の決定が制約として降りてくる
図 8.1 — 計画の階層。本書の主戦場は一番下だが、上から決定が降ってくる。

8.2 教科書 JSP に降ってくる 10 の追加制約

ベンチマークと現実の差はとてつもなく大きい。
現実の工場では、教科書 JSP にこういう制約が乗ってくる:

  1. 🔁 段取り時間: 「赤の次に白を作るには 30 分の洗浄が必要」
  2. カレンダー: 機械は 8:00〜17:00 だけ、土日休み、12:00〜13:00 は昼休み
  3. 👷 : 機械があってもオペレーターがいないと動かない
  4. 📦 調達: 原料が届くまで開始できない
  5. 賞味期限: 加工後 N 時間以内に次工程へ (食品、めっき)
  6. 📐 ロット制約: 最小バッチ、品種家族
  7. 🎯 品質: 材料ロットで処理時間が変動
  8. 🤝 同期: 2 つの工程が同時に動かないといけない
  9. 🚫 禁止組合せ: アレルゲン製品の後は洗浄必須
  10. 🔧 段取り人員: 段取りは人を取る。並列段取りに上限

こうした制約はすべての組み合わせで発生する。
「段取り時間付き × 人員シフト付き × カレンダー付き」みたいな複合は当たり前。
だから教科書 JSP より、ずっと表現力の高いモデリングが必要になる。

8.3 不確実性を 2 × 2 で整理する

モデルがどんなに完璧でも、入力にブレがあれば計画は脆い。
不確実性を 4 種類に整理しておくと、対処法が見えてくる。

予測しやすい 予測しにくい 頻度 低 → 高 ① 計画的揺らぎ 予定メンテ、長期休暇、需要季節性 🛠 モデルに織り込む ② 大規模ショック 機械故障、災害、サプライヤー停止 🛠 コンティンジェンシー計画 ③ 確率的変動 処理時間分布、不良率、納期遅延 🛠 確率最適化 / バッファ ④ 高頻度サプライズ 飛び込みオーダー、欠勤、品質トラブル 🛠 再計画 (Rolling Horizon)
図 8.2 — 不確実性の 4 象限。それぞれに対処法が違う。

8.4 Rolling Horizon — 「未来は刻んで計画する」

④ への対処法、それが Rolling Horizon
APS パッケージはほぼ例外なくこの設計を取っている。

発想はシンプル: 「未来全部を一気に詳細計画しない」
時間軸を窓で切って、窓を前進させながら何度も再計画する。

月曜 凍結 詳細最適化 プレビュー (粗い) 火曜 実績 凍結 詳細最適化 プレビュー 水曜 実績 凍結 詳細最適化 プレビュー 凍結帯 (近未来 - 動かせない) 詳細最適化対象 プレビュー (粗いモデル) 過去 (実績)
図 8.3 — Rolling Horizon: 毎期、凍結 → 詳細 → プレビューの 3 層を更新する。

3 つのゾーン

① 凍結ゾーン (frozen zone): 直近の数時間〜1日。 原料は払い出され、現場は動いている。もう動かさない

② 詳細最適化ゾーン: 1〜数日。分単位の精度で機械別シーケンスまで決める。 CP-SAT / ALNS が走る。

③ プレビューゾーン: 1〜数週間。粗いモデルで「容量や在庫が破綻しないか」だけ確認。 詳細ゾーンが終局的に収まるよう、ここを境界条件として渡す。

落とし穴 — End-of-horizon 効果

詳細ゾーンの終端で「ジョブを全部詰め込んで終わり!」みたいな解になり、 翌期に大きな手戻りが起きる。これが定番の罠。
プレビューゾーンを置く、終端ペナルティをかける、終端在庫の目標を制約に入れる、で防ぐ。

8.5 再計画のタイミング — いつ走らせる?

戦略トリガ性格
定期型毎日 6:00、毎週月曜など運用が単純、現場が予測できる。緊急対応は弱い
イベント駆動故障・受注・遅延などで都度現実に即応。だが計画が頻繁に変わって現場が混乱しがち
閾値型逸脱が閾値を超えたとき必要なときだけ。閾値の調整が難しい
ハイブリッド定期 + 緊急のみイベント実務で最も多い ⭐

再計画のスタイル: 完全 vs 修復

完全再計画

白紙から最適化。質は高いが、結果が前計画と大きく異なる → 現場が混乱。

最小修復

前計画を可能な限り保持し、最小の変更で実行可能化。連続性は高いが、最適性は妥協。

実務でバランスする答え: 「凍結帯は固定、その先は完全再計画、ただし前計画との変更量にペナルティ」

8.6 多目的最適化 — 「全部同時に最小化」は不可能

現実の生産計画では、これらを同時に小さくしたい:

だが当然、トレードオフがある。 段取りを減らそうとロットを大きくすると、makespan が伸びる、みたいな。
すべて同時に最小化はできない。

総遅れ ΣT makespan C_max Pareto frontier 劣解 (他より全部悪い)
図 8.4 — Pareto フロンティア。赤の点はどれも「どっちかを犠牲にしないと改善できない」均衡点。

実務でいちばん使える: 辞書順

理論的にはいろいろあるが (加重和、ε-制約、NSGA-II)、現場で最も使いやすいのは 辞書順 (lexicographic):

  1. まず納期遵守 (ΣT_j) を最小化
  2. その下でmakespan を最小化
  3. さらにその下で段取り を最小化

業務での優先順位がそのままアルゴリズムになる。説明もしやすい。

8.7 説明可能性 — 「なぜこの計画?」

本番投入の最大の敵は性能ではなく 信頼だ。
「ALNS の重み更新の結果ですね」と言われて、現場リーダーは納得しない。

レベル説明の内容必要な実装
L1: 結果だけ「これがインプット、これが計画」ガントチャート
L2: 制約と影響「M3 が金曜午後ふさがっていたから、Jを翌週へ」クリティカルパスの可視化、制約タグ
L3: 反実仮想 (What-if)「M3 をもう一台増やすと makespan が 4 時間縮みます」パラメータを変えて再計算する UX

「説明可能性は別タスク」と思いがちだが、これは最適化エンジンの設計判断に直結する。
L2 を出すには、解と一緒にクリティカルパスを返す API が必要。
L3 には What-if 分析の UX が必要。

8.8 商用 APS パッケージの教訓

製品得意苦手
Asprova (Japan)製造業ドメイン、UIパラメータ地獄 (数百の設定)
FLEXSCHE (Japan)柔軟なルール記述プラットフォーム型、導入次第
Quintiq / DELMIA表現力、独自 DSL独自言語によるロックイン
SAP APO / IBP大規模 ERP 統合個別最適化の精度
Kinaxis / RapidResponseWhat-if が強い最適化能力は別物
業界の闇

APS パッケージ導入プロジェクトの9 割は「うまくいかなかった」と業界調査で報告される。
主因は技術ではなく、業務側が制約と目的を整理しきれないこと。
最適化システムを入れる前に、「制約と目的関数を文書化できるか」を組織能力として確認すべし。

8.9 設計の最初に決めること

生産計画システムを設計する最初の段階で、決めるべき項目のチェックリスト:

  1. 計画階層: 上位 (MPS) と下位 (APS) の境界はどこ?
  2. 計画粒度: タスクの最小単位 (分・時間・日)?
  3. 計画期間と凍結ゾーン: 何時間先まで凍結、何日まで詳細、何週まで概略?
  4. 再計画の頻度とトリガ: 定期? イベント? ハイブリッド?
  5. 目的関数の優先順位: 辞書順? 重み付き和?
  6. 不確実性: 確定モデル + 再計画? 確率モデル?
  7. 制約の硬さ: ハード? ソフト (ペナルティ)?
  8. ソルバー: CP-SAT? MIP? ALNS? ハイブリッド?
  9. 説明可能性: L1 / L2 / L3 どこまで?
  10. What-if: 必要? UI まで? エンジンのみ?
  11. 性能 SLA: 何分以内に応答?
  12. 計画スナップショット: 履歴保存・比較・復元できるか?

8.10 この章の振り返り