数理最適化
数理最適化ライブラリ PuLP を使って、連立一次方程式を解いてみます。
本来の数理最適化ライブラリの使い方とは少々異なりますが、数理モデルを初めて実装するにはとてもよい題材です。
[問題]
1個120円のリンゴと1個150円のミカンを合わせて10個買ったら代金の合計が1440円でした。 リンゴとミカンをそれぞれ何個買ったでしょうか。
この問題は、リンゴの個数を x、ミカンの個数を y として連立一次方程式を立てることができます。
120x + 150y = 1440
x + y = 10
ソースコード
まずは 数理最適化ライブラリ PuLP をインストールできます。 [Google Colaboratory]連立一次方程式をソースコードにすると下記のようになります。 [Google Colaboratory]
1 !pip install pulp[実行結果]
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.0Optimal は、最適化計算をした結果最適解が得られたという意味です。
リンゴの個数は2、ミカンの個数は8となり、合わせて10個 であり、代金の合計も 1440円 で、連立一次方程式の解として正しいことが確認できます。