数理最適化問題の基本要素

数理最適化とは何か

数理最適化は、特定の制約条件の下で、与えられた選択肢の中から「最良」の結果を見つけ出すための数学的なアプローチです。その目的は、ビジネス上の意思決定、工学設計、資源配分など、様々な現実世界の問題において、目的関数と呼ばれる評価指標を最大化または最小化する解(決定変数の値の組)を発見することにあります。

例えば、物流における配送ルートの最適化、金融ポートフォリオにおけるリスク対リターンの最適化、製造業における生産スケジュールの最適化、エネルギー分野における発電計画の最適化など、その応用範囲は極めて広範です。数理最適化は、限られたリソースの中で最善の策を見つけ出すための強力なツールとして、多くの分野で活用されています。

数理最適化に取り組むにあたり、まずその基本的な構成要素を把握する必要があります。主要な要素は以下の3つです。

数理最適化の基本要素

  • 決定変数 (Decision Variables):
    最適化を行う上で、私たちがコントロールできる、あるいは決定すべき選択肢を表す変数。これらの変数の値を見つけることが、最適化の目標となる。
  • 目的関数 (Objective Function):
    最適化によって達成したい目標を、決定変数を用いて表現した数式。最大化(例:利益、価値、効率)または最小化(例:コスト、時間、リスク)を目指す。
  • 制約条件 (Constraints):
    決定変数が満たさなければならない条件や制限を表す数式または論理式。これらの条件により決定変数の取りうる範囲が決まる。

これらの要素を正確に特定し、数学的に表現すること(定式化)が、数理最適化問題を解くための第一歩となります。

実社会に存在する応用例の数理最適化における目的関数、制約条件、決定変数を以下の表に示します。

応用例 目的関数 制約条件 決定変数
配送ルート最適化 総移動距離または時間の最小化
  • すべての顧客に配送する
  • 車両の容量制限
  • 配送時間枠の遵守
各車両のルート(訪問順序)
投資ポートフォリオ最適化 期待リターンの最大化またはリスクの最小化
  • 予算制約(総投資額)
  • リスク許容度
  • 資産クラス別の配分制限
各資産への投資割合
生産計画最適化 総利益の最大化または生産コストの最小化
  • 生産能力の制限
  • 原材料の在庫制約
  • 需要を満たす必要性
  • 最小ロットサイズ
各製品の生産量、生産タイミング
人員配置スケジューリング 人件費の最小化または従業員満足度の最大化
  • 必要な人員数の確保
  • スキル要件の充足
  • 労働法規制の遵守
  • 従業員の希望考慮
各従業員のシフト割り当て
電力系統最適化 発電コストの最小化またはCO2排出量の最小化
  • 電力需要の充足
  • 発電機の容量制限
  • 送電網の制約
  • 再生可能エネルギー比率
各発電所の出力レベル、電力フロー
ジョブショップスケジューリング メイクスパン(全てのジョブが完了するまでの時間)の最小化
  • 各ジョブは1台の機械にのみ割り当てる
  • 各機械の処理時間は割り当てられたジョブの合計
  • メイクスパンは全機械の処理時間の最大値
どのジョブをどの機械に割り当てるか(バイナリ変数)

定式化の例:ナップザック問題

数理最適化の基本的な考え方を理解するために、シンプルな「ナップザック問題」を例に定式化プロセスを見てみましょう。

問題設定

あなたは限られた容量(例:重さ)のナップサックを持っています。目の前にはそれぞれ価値と重さが異なる複数のアイテムがあります。ナップサックの容量を超えない範囲で、入れるアイテムの合計価値が最大になるように選びたい。

具体的なイメージを持つために、以下のデモで実際に試してみましょう。各アイテムをクリックしてみてください。
アイテムを多く選択すると入れるアイテムの合計価値が増えますが、入れすぎるとナップザックの容量を超えてしまいます。
ナップザックの容量を超えない範囲で、入れるアイテムの合計価値が最大になるように選んでみてください。
合計価値はいくつになったでしょうか?
デモを触ってみよう

ナップザック問題デモ

操作方法

ナップザック問題のインタラクティブなデモを体験してみましょう。アイテムを選択して、ナップサックに入れるアイテムの合計価値を最大化してください。

ナップザック問題デモ

ナップザックの容量 (最大重量): 15 kg

アイテムを選択してください (クリックで選択/解除):

アイテムA

重さ: 4 kg

価値: 8

アイテムB

重さ: 6 kg

価値: 13

アイテムC

重さ: 5 kg

価値: 10

アイテムD

重さ: 7 kg

価値: 15

アイテムE

重さ: 3 kg

価値: 6

現在の状態:

合計重量: 0 kg

合計価値: 0

ステータス:

この問題の定式化は以下のようなステップとなります。

定式化

ナップザック問題は、以下のように定式化できます。

  • 決定変数: 各アイテム $i$ をナップサックに入れるかどうかを決めます。これは「入れる(1)」か「入れない(0)」の二択なので、バイナリ変数 $x_i$ を使います。
    • $x_i = 1$ (アイテム $i$ を入れる場合)
    • $x_i = 0$ (アイテム $i$ を入れない場合)
  • 目的関数: ナップサックに入れるアイテムの合計価値を最大化します。
    \[\max \sum_{i=1}^{n} v_i \cdot x_i\]

    ここで $v_i$ はアイテム $i$ の価値です

  • 制約条件: ナップサックに入れるアイテムの合計の重さが、ナップサックの容量 W を超えてはいけません。
    \[\sum_{i=1}^{n} w_i \cdot x_i \leq W\]

    ここで $w_i$ はアイテム $i$ の重さ、$W$ はナップサックの容量です

    この条件を満たすように、アイテムを選ぶ、つまり $x_i$ の値を決定する問題と定式化できます。