線形計画問題(Linear Programming Problem)
目的最適化の一つの例として、線形計画問題(Linear Programming Problem)を挙げることができます。
以下に、シンプルな線形計画問題をPythonで解く方法を示します。
ここではscipy.optimize.linprog
を使います。
例題
問題の目的は、以下の制約条件を満たしつつ、次の目的関数を最小化することです。
目的関数:
$
f(x, y) = 3x + 4y
$
制約条件:
- $( x + 2y \geqq 4 )$
- $( 3x + y \geqq 3 )$
- $( x \geqq 0 )$
- $( y \geqq 0 )$
この問題をPythonで解く方法を以下に示します。
Pythonコード:
1 | import numpy as np |
[実行結果]
解説
目的関数の係数:
c = [3, 4]
- 目的関数 $ ( f(x, y) = 3x + 4y ) $の係数です。
制約条件の係数行列:
A = [[-1, -2], [-3, -1]]
- 制約条件を標準形$( (Ax \leqq b) )$にするために、不等式の符号を反転させています。
制約条件の右辺ベクトル:
b = [-4, -3]
- 同様に符号を反転させた右辺ベクトルです。
変数の下限定義:
x_bounds = (0, None), y_bounds = (0, None)
- 変数$ (x, y) $が非負であることを示しています。
linprog
関数の実行:- 目的関数、制約条件、変数の範囲を指定して、線形計画問題を解きます。
method='highs'
は最先端のアルゴリズムを使って最適化を行うオプションです。
結果の表示:
result.success
がTrue
の場合、最適解と目的関数値を表示します。
このようにして、この線形計画問題の最適化をPythonコードで解くことができます。