本ページは 数理最適化(Mathematical Optimization)を多角的に解説します。 上のチップは、 検索・関連語の手がかりです。
数理最適化(Mathematical Optimization)は、 AI・機械学習・オペレーションズリサーチ(OR)の 共通基盤。 機械学習の「学習」は 損失関数の最小化問題に他なりません。 物流のルート、 シフト計画、 ポートフォリオ、 化学プロセスの最適化など、 産業のあらゆる場面で使われます。
最適化問題の一般形:
目的関数 $f(x)$ を最小化、 制約 $g_i(x) \le 0$ のもとで
例:
| 分野 | 目的関数 | 制約 |
|---|---|---|
| 機械学習 | 予測誤差を最小化 | 過学習しないこと |
| 物流 | 配送コストを最小化 | 時間・容量制約 |
| 金融 | ポートフォリオのリスク最小化 | 期待収益 ≥ X% |
| 製造 | 生産コスト最小化 | 需要を満たす |
問題の 形(凸 / 非凸、 線形 / 非線形、 連続 / 整数)で適用手法が大きく変わります。
例:簡単な 2 次関数 $f(x) = (x-3)^2$ を勾配降下で最小化
| ステップ | $x_t$ | $f(x_t)$ | 勾配 $2(x-3)$ |
|---|---|---|---|
| 0 | 0.0 | 9.0 | −6.0 |
| 1 ($\eta=0.3$) | 1.8 | 1.44 | −2.4 |
| 2 | 2.52 | 0.23 | −0.96 |
| 3 | 2.81 | 0.04 | −0.38 |
| 10 | 3.00 | 0.000 | 0.00 |
10 ステップで最小値 $x = 3$ に到達。 学習率が大きすぎると振動、 小さすぎると遅い。
最小コードで動かしてみる例:
1 2 3 4 5 6 7 8 9 10 | from scipy.optimize import minimize import numpy as np # Rosenbrock 関数の最小化(最適化ベンチマーク) def rosenbrock(x): return (1 - x[0])**2 + 100 * (x[1] - x[0]**2)**2 result = minimize(rosenbrock, x0=[0, 0], method='BFGS') print(f'最適解: {result.x}') print(f'最適値: {result.fun:.6f}') |