数理最適化ライブラリ(PuLP)

数理最適化

数理最適化ライブラリ PuLP を使って、連立一次方程式を解いてみます。

本来の数理最適化ライブラリの使い方とは少々異なりますが、数理モデルを初めて実装するにはとてもよい題材です。

[問題]

1個120円のリンゴと1個150円のミカンを合わせて10個買ったら代金の合計が1440円でした。

リンゴとミカンをそれぞれ何個買ったでしょうか。

この問題は、リンゴの個数を x、ミカンの個数を y として連立一次方程式を立てることができます。

120x + 150y = 1440
x + y = 10


ソースコード

まずは 数理最適化ライブラリ PuLP をインストールできます。 [Google Colaboratory]
1
!pip install pulp
連立一次方程式をソースコードにすると下記のようになります。 [Google Colaboratory]
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
import pulp

# 第1引数は任意の名前、第2引数は最大化問題を解く指定(今回は連立一次方程式を解くのでとくに意味はない)
problem = pulp.LpProblem('Test', pulp.LpMaximize)

x = pulp.LpVariable('x') # 変数xをpulp.LpVariable関数を定義
y = pulp.LpVariable('y') # 変数yをpulp.LpVariable関数を定義

problem += 120 * x + 150 * y == 1440 # 連立一次方程式を定義
problem += x + y == 10 # 連立一次方程式を定義

status = problem.solve() # 数理モデルを解く

print('Status:', pulp.LpStatus[status]) # 結果
print('x =', x.value(), 'y =', y.value()) # xとyの解
[実行結果]
Status: Optimal
x = 2.0 y = 8.0

Optimal は、最適化計算をした結果最適解が得られたという意味です。

リンゴの個数は2、ミカンの個数は8となり、合わせて10個 であり、代金の合計も 1440円 で、連立一次方程式の解として正しいことが確認できます。