数理最適化は、特定の制約条件の下で、与えられた選択肢の中から「最良」の結果を見つけ出すための数学的なアプローチです。その目的は、ビジネス上の意思決定、工学設計、資源配分など、様々な現実世界の問題において、目的関数と呼ばれる評価指標を最大化または最小化する解(決定変数の値の組)を発見することにあります。
例えば、物流における配送ルートの最適化、金融ポートフォリオにおけるリスク対リターンの最適化、製造業における生産スケジュールの最適化、エネルギー分野における発電計画の最適化など、その応用範囲は極めて広範です。数理最適化は、限られたリソースの中で最善の策を見つけ出すための強力なツールとして、多くの分野で活用されています。
数理最適化に取り組むにあたり、まずその基本的な構成要素を把握する必要があります。主要な要素は以下の3つです。
これらの要素を正確に特定し、数学的に表現すること(定式化)が、数理最適化問題を解くための第一歩となります。
実社会に存在する応用例の数理最適化における目的関数、制約条件、決定変数を以下の表に示します。
応用例 | 目的関数 | 制約条件 | 決定変数 |
---|---|---|---|
配送ルート最適化 | 総移動距離または時間の最小化 |
| 各車両のルート(訪問順序) |
投資ポートフォリオ最適化 | 期待リターンの最大化またはリスクの最小化 |
| 各資産への投資割合 |
生産計画最適化 | 総利益の最大化または生産コストの最小化 |
| 各製品の生産量、生産タイミング |
人員配置スケジューリング | 人件費の最小化または従業員満足度の最大化 |
| 各従業員のシフト割り当て |
電力系統最適化 | 発電コストの最小化またはCO2排出量の最小化 |
| 各発電所の出力レベル、電力フロー |
ジョブショップスケジューリング | メイクスパン(全てのジョブが完了するまでの時間)の最小化 |
| どのジョブをどの機械に割り当てるか(バイナリ変数) |
数理最適化の基本的な考え方を理解するために、シンプルな「ナップザック問題」を例に定式化プロセスを見てみましょう。
あなたは限られた容量(例:重さ)のナップサックを持っています。目の前にはそれぞれ価値と重さが異なる複数のアイテムがあります。ナップサックの容量を超えない範囲で、入れるアイテムの合計価値が最大になるように選びたい。
ナップザックの容量 (最大重量): 15 kg
重さ: 4 kg
価値: 8
重さ: 6 kg
価値: 13
重さ: 5 kg
価値: 10
重さ: 7 kg
価値: 15
重さ: 3 kg
価値: 6
合計重量: 0 kg
合計価値: 0
ステータス:
ナップザック問題は、以下のように定式化できます。
ここで $v_i$ はアイテム $i$ の価値です
ここで $w_i$ はアイテム $i$ の重さ、$W$ はナップサックの容量です
この条件を満たすように、アイテムを選ぶ、つまり $x_i$ の値を決定する問題と定式化できます。