医療最適化問題
ある病院における輸血の最適化問題を考えてみましょう。
具患者に輸血を行う場合、その輸血に使用する血液の種類によって、患者に不適切な血液を投与してしまうリスクがあります。
このため、輸血に使用する血液の種類を適切に選択することが重要です。
この問題をPuLPを使って解くためには、以下のような手順を踏みます。
必要なパッケージをインポートします。
1
from pulp import *
問題を定義します。
1
2# 問題を定義
prob = LpProblem('Blood_Transfusion', LpMinimize)変数を定義します。
1
2
3
4# 変数を定義
blood_type_A = LpVariable('Blood_Type_A', lowBound=0, cat='Integer')
blood_type_B = LpVariable('Blood_Type_B', lowBound=0, cat='Integer')
blood_type_O = LpVariable('Blood_Type_O', lowBound=0, cat='Integer')目的関数を定義します。
1
2# 目的関数を定義
prob += 10 * blood_type_A + 20 * blood_type_B + 30 * blood_type_O
各血液の種類について、そのコストを10, 20, 30としました。
血液の種類がAの場合には10のコスト、Bの場合には20のコスト、Oの場合には30のコストがかかるということになります。
- 制約条件を定義します。
1
2
3
4
5# 制約条件を定義
prob += blood_type_A + blood_type_B + blood_type_O >= 100
prob += blood_type_A >= 20
prob += blood_type_B >= 30
prob += blood_type_O >= 40
病院で必要な総血液量が100であること、血液の種類Aが20以上必要であること、血液の種類Bが30以上必要であること、血液の種類Oが40以上必要であることを制約条件として定義しています。
最適化を実行します。
1
2# 最適化を実行
prob.solve()結果を表示します。
1
2
3
4
5# 結果を表示
print('Blood Type A: ', blood_type_A.value())
print('Blood Type B: ', blood_type_B.value())
print('Blood Type O: ', blood_type_O.value())
print('Total Cost: ', value(prob.objective))
完全なソースコード
以上の手順をすべて組み合わせた完全なコードは次のようになります。
[Google Colaboratory]
1 | from pulp import * |
[実行結果]
Blood Type A: 30.0 Blood Type B: 30.0 Blood Type O: 40.0 Total Cost: 2100.0
この結果から、血液の種類Aが30、種類Bが30、種類Oが40必要であり、総コストが2100であることが確認できました。