空間情報システム #10

数理最適化超入門

田村一軌

佐賀大学経済学部

2026年6月19日

Q. 今日、大学に来たルートは?

  • なぜそのルートを選びましたか?
  • 時間が短い? 乗り換えが楽? 景色がいい?
  • 時刻・体力・費用の制約の中で、選んでいたと思います。
  • 制約のもとで目的を最良にする選択 = これが最適化です

最適化の3要素

概念 数学の言葉 通学の例
変えられない条件 制約条件 始業時刻・体力・費用
何を良くしたいか 目的関数 所要時間を最小化
何を決められるか 決定変数 ルート・出発時刻

最適化とは

制約のもとで、目的を最もよく達成する選択肢を見つけること

実はミクロ経済学でやっていた

消費者問題(ミクロ)

  • 予算制約のもとで
  • 効用を最大化する
  • \(x_1, x_2\)の数量を決める

最適化問題(一般形)

  • 制約条件のもとで
  • 目的関数を最大化する
  • 決定変数を求める

ヒント

💡 ミクロ経済学 = 最適化問題の応用だった!

例題:お菓子の効用最大化

  • 週のおやつ予算は600円
  • 摂取カロリーは1,300 kcalまで。
  • クッキー🍪とチョコレート🍫、どちらをどれだけ買う?
チョコ(1枚) クッキー(1袋)
価格 150円 100円
カロリー 150 kcal 300 kcal
満足度 4 3
  • 満足度の合計を最大にするには?

数式で書くと

決定変数
チョコ \(x\) 枚、クッキー \(y\) 袋 \((x,\, y \geq 0)\)
目的関数
\(\displaystyle\max\; 4x + 3y\)  (満足度最大化)
制約条件①
\(150x + 100y \leq 600\)  (予算制約)
制約条件②
\(150x + 300y \leq 1200\)  (カロリー制約)

ノート

ミクロ経済学の「効用最大化問題」とまったく同じ構造です

グラフで書くと

なぜ「かど」が最適解になるのか?

  • 目的関数(満足度)は直線 → 勾配が一定
  • 実行可能領域は凸多角形
  • 満足度が大きくなる方向に直線をスライドさせると…
  • 最後に触れるのは必ず頂点(コーナー)

ノート

これが線形計画法の基本定理です

現実への応用

分野 最適化の問題
企業経営 生産計画/資源配分/メディアミックス
政策 予算配分・社会厚生の最大化
金融 ポートフォリオ最適化(リスク vs リターン)
サプライチェーン コスト最小の輸送計画
AI・機械学習 損失関数の最小化(モデルの学習)

線形計画法「だけでは」解けない問題もある

  • 変数が整数でなければならない → 整数計画問題
  • 目的関数が非線形 → 非線形計画問題
  • 不確実性がある → 確率的最適化
  • 変数が数百万個 → 大規模最適化

→ 次々に手法が開発され、多くの問題が解けるようになっています

ここまでのまとめ

  1. 最適化 = 制約のもとで目的を達成する
  2. ミクロ経済学はすでに最適化問題だった
  3. お菓子の例でグラフを使って解いた
  4. 現実の経済・ビジネス問題に直結している

組み合わせ最適化

線形計画から整数計画へ

  • お菓子の例:クッキー \(x = 3.7\) 袋…買えない
  • 変数が整数でなければならない制約を加えると?

線形計画(LP)

  • 実行可能領域 = 連続な多角形
  • 最適解は必ず頂点
  • 比較的速く解ける

整数計画(IP)

  • 実行可能解 = 格子点のみ
  • LP の最適解とずれることがある
  • はるかに難しい

LP と IP の違いを図で見る

今回はたまたま LP 最適解が整数 → 一般にはずれる

整数計画問題の例:グループ分け

  • 8人の学生を2つのグループに分けたい。
  • 過去のグループワークですでに同じグループだったペアをできるだけ少なくするには?

決定変数\(x_{ig} \in \{0, 1\}\quad i=\{1,2,\ldots , 8\}\quad g=\{1, 2\}\)

\[x_{ig} = \begin{cases} 1 & \text{学生} i \text{ がグループ} g \text{ に入る} \\ 0 & \text{それ以外} \end{cases}\]

変数の数:8人 × 2グループ = 16個の0/1変数

決定変数

g \ i 1 2 3 4 5 6 7 8
1 \(x_{11}\) \(x_{21}\) \(x_{31}\) \(x_{41}\) \(x_{51}\) \(x_{61}\) \(x_{71}\) \(x_{81}\)
2 \(x_{12}\) \(x_{22}\) \(x_{32}\) \(x_{42}\) \(x_{52}\) \(x_{62}\) \(x_{72}\) \(x_{82}\)

例えば、グループ1={1, 2, 3, 4}、グループ2={5, 6, 7, 8}のとき、

g \ i 1 2 3 4 5 6 7 8
1 1 1 1 1 0 0 0 0
2 0 0 0 0 1 1 1 1

決定変数

g \ i 1 2 3 4 5 6 7 8
1 \(x_{11}\) \(x_{21}\) \(x_{31}\) \(x_{41}\) \(x_{51}\) \(x_{61}\) \(x_{71}\) \(x_{81}\)
2 \(x_{12}\) \(x_{22}\) \(x_{32}\) \(x_{42}\) \(x_{52}\) \(x_{62}\) \(x_{72}\) \(x_{82}\)

グループ1={1, 3, 5, 7}、グループ2={2, 4, 6, 8}のとき、

g \ i 1 2 3 4 5 6 7 8
1 1 0 1 0 1 0 1 0
2 0 1 0 1 0 1 0 1

制約条件

制約①:各学生は必ずどちらか1つのグループに所属

\[x_{i1} + x_{i2} = \sum_gx_{ig} = 1 \quad \text{(全員分)}\]

制約②:グループサイズ(上限4人)

\[x_{1g} + x_{2g} + \cdots x_{8g} = \sum_ix_{ig} \leq 4 \quad \text{(グループごと)}\]

目的関数

目的関数:過去ペアの重複を最小化

補助変数 \(y_{ij} \in \{0,1\}\) を導入:

\[y_{ij} = \begin{cases} 1 & \text{学生}i\text{と}j\text{が今回同じグループに入る} \\ 0 & \text{それ以外} \end{cases}\]

\[\min \sum_{i,j} w_{ij} \cdot y_{ij}\]

\(w_{ij}\):過去に同じグループだった回数 (\(y_{ij}\)\(x_{ig}\) の関係は制約式で規定)

手作業でやってみよう

【練習1】8人・履歴1回・2チーム(4+4)

  • 過去のチーム分け:チームX = {A, B, C, D}、チームY = {E, F, G, H}
  • できるだけ過去ペアが少なくなるよう2チームに分けてください。
チーム1 チーム2
? ?

スコア(残った過去ペアの数):____ 組

手作業でやってみよう

【練習2】8人・履歴2回・2チーム(4+4)

  • 過去のチーム分け
    • 1回目:チームX = {A, B, C, D}、チームY = {E, F, G, H}
    • 2回目:チームX’ = {A, D, E, H}、チームY’ = {B, C, F, G}

できるだけ過去ペアが少なくなるよう2チームに分けてください。

チーム1(4人) チーム2(4人)
? ?

スコア:____ 組 ←「これが本当に最小か」自信を持って言えますか?

コンピュータで解くと…

  • スコアは何でしたか?
  • 最適値 = スコア 8(これが証明された最小値)
  • でも…スコア8を達成する並べ方は9通りあります
  • 「正解はこれ」だけではなく「最適値が8であること(それよりも良い解がないこと)が証明された」ことも大事

練習2:最適解は9通り

スコア8を達成するすべての組み合わせ:

チーム1 チーム2
A, B, E, F C, D, G, H
A, B, E, G C, D, F, H
A, B, F, H C, D, E, G
A, B, G, H C, D, E, F
A, C, E, F B, D, G, H
A, C, E, G B, D, F, H
A, C, F, H B, D, E, G
A, C, G, H B, D, E, F
A, D, F, G B, C, E, H

ノート

どれを選んでも同じ「最適」。追加条件(男女比など)で絞ることもできる

実践:来週からのグループ分け

  • 24人の学生を6人ずつ4つのグループに分ける
  • 何通りの分け方がある?

\[ \frac{{}_{24}C_{6}\times {}_{18}C_{6}\times {}_{12}C_{6}}{4!} = \text{9,663,972,130} \]

  • 96.6億通りの計算が必要(全ての分け方について過去ペア数の合計を計算するには、コンピュータを使っても数分〜数時間必要)
  • 整数計画を使えば、短時間で最適解を求めることができる

実践:来週からのグループ分け

  • 過去2回の履歴をもとに整数計画問題を解く(実演)
  • 残った過去ペア:8組(すべて1回だけの重複)
  • これが証明された最小値
  • これも最適解は複数存在する

定式化をΣ記号でまとめると

\[\min \sum_{i < j} w_{ij} \cdot y_{ij}\]

\[\text{s.t.} \quad \sum_{g} x_{ig} = 1 \quad \forall i\]

\[\sum_{i} x_{ig} \leq 6 \quad \forall g\]

\[y_{ij} \geq x_{ig} + x_{jg} - 1 \quad \forall i,j,g\]

\[x_{ig},\, y_{ij} \in \{0, 1\}\]

さっきの表で見ていたものを、まとめて書くとこうなります

空間最適化

空間最適化へ:「人」の最適化から「場所」の最適化へ

  • グループ分け:をグループに割り当てる
  • 施設配置問題:人を施設に割り当てる
    • どこに施設を置けば住民の移動距離が最小になるか
  • 輸送問題:施設と施設を割り当てる
    • 工場から倉庫への輸送コストを最小化
  • 巡回セールスマン問題(TSP):人を経路に割り当てる
    • 全都市を最短経路で回るルートを探す

→ すべて「制約のもとで目的を最小化/最大化する」整数計画問題

施設配置問題

  • 福岡市内に宅配ピザ店を3店舗新設する。
  • 商圏人口を最大化するには、どこに置く?
  • 決定変数:各候補地に置くか否か(0/1)
  • 目的関数:カバーされる人口の最大化
  • 制約:出店数 = 3

→ 1店舗だけ出店する場合とは考え方が変わりますよね。

巡回セールスマン問題(TSP)

  • \(n\) 都市をすべて1回ずつ訪問して出発地に戻る、最短ルートは?
  • 8都市:全経路数 = 7! / 2 = 2,520通り → 都市が増えると経路数は爆発的に増加
  • コンピュータを使っても、大きなスケールの問題は困難

まとめ

  1. 線形計画:連続変数、グラフで解ける
  2. 整数計画:0/1変数、組み合わせ爆発、でも定式化は同じ発想
  3. グループ分けも施設配置もTSPも同じ枠組み
  4. GISと組み合わせると空間的な最適化

ヒント

次回:空間最適化の考え方を使って、自転車観光ルートを考えてみよう