給食 最適化
給食に関する最適化問題の例として、以下の問題を考えてみます。
ある学校では、毎日ランチとしてA,B,Cの3種類のメニューから1つを提供します。
各メニューには以下のような栄養素が含まれます。
栄養素 | メニューA | メニューB | メニューC |
---|---|---|---|
カロリー | 700 kcal | 600 kcal | 800 kcal |
タンパク質 | 30 g | 25 g | 20 g |
脂質 | 10 g | 15 g | 20 g |
炭水化物 | 50 g | 40 g | 60 g |
また、各クラスには生徒が20名ずつ在籍しており、1日に必要な栄養素の量は以下の通りとします。
栄養素 | 必要量 |
---|---|
カロリー | 10000 kcal |
タンパク質 | 500 g |
脂質 | 200 g |
炭水化物 | 700 g |
このとき、1日の給食で提供する各メニューの量を決定し、必要な栄養素を満たすことができる最小のコストを求める最適化問題を考えます。
解法
下記のコードでは、変数a,b,cをそれぞれメニューA,B,Cの提供量とし、目的関数 2a + 3b + 4c を最小化するように設定しています。
制約条件は、各栄養素の必要量を満たすように設定しています。
最後に、PuLPのsolve()メソッドを呼び出して最適化問題を解き、結果を出力しています。
1 | import pulp |
実際に上記のコードを実行すると、以下のような結果が得られます。
[実行結果]
Result: a: 15.0 b: 0.0 c: 2.5 Minimum Cost: 40.0
この結果から、メニューAを15人分、メニューBを0人分、メニューCを2.5人分提供することで、必要な栄養素を満たすことができ、最小のコストは40であることがわかります。