生産計画問題
経済学の問題の一例として、生産計画問題を取り上げてみましょう。
具体的には、異なる製品の生産を最適化する問題を考えます。
[条件]
- ある製造会社では、2つの異なる製品(製品Aと製品B)を生産しています。
- 各製品の生産には機械時間と原材料が必要です。
また、売上価格と製品ごとの利益も異なります。
- 最大の利益を得るために、各製品の生産量を最適化する必要があります。
以下に、CVXPYを使用してこの問題を解くPythonコードの一部を示します:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48
| import cvxpy as cp
selling_price_A = 20 profit_A = 8 selling_price_B = 30 profit_B = 12
machine_hours_A = 2 raw_material_A = 3 machine_hours_B = 3 raw_material_B = 2
x_A = cp.Variable(integer=True) x_B = cp.Variable(integer=True)
constraints = [ machine_hours_A * x_A + machine_hours_B * x_B <= 80, raw_material_A * x_A + raw_material_B * x_B <= 100, x_A >= 0, x_B >= 0 ]
total_profit = selling_price_A * x_A * profit_A + selling_price_B * x_B * profit_B
problem = cp.Problem(cp.Maximize(total_profit), constraints)
problem.solve()
optimal_production_A = x_A.value optimal_production_B = x_B.value
optimal_profit = total_profit.value
print("最適な生産量:") print(f"製品A: {optimal_production_A:.0f} 単位") print(f"製品B: {optimal_production_B:.0f} 単位") print(f"最適な利益: ${optimal_profit:.2f}")
|
このコードでは、製品Aと製品Bの生産を最適化し、最大の利益を得るための最適な生産量と最適な利益を求めています。
[実行結果]
1 2 3 4
| 最適な生産量: 製品A: 1 単位 製品B: 26 単位 最適な利益: $9520.00
|
ソースコード解説
以下はコードの詳細な説明です:
1. cvxpy
ライブラリをインポートします。
2. 問題に関連するパラメータを定義します。
これらは、製品Aと製品Bに関する売上価格、利益、機械時間、原材料の要求などの情報です。
1 2 3 4 5 6 7 8 9 10 11
| selling_price_A = 20 profit_A = 8 selling_price_B = 30 profit_B = 12
machine_hours_A = 2 raw_material_A = 3 machine_hours_B = 3 raw_material_B = 2
|
3. 製品Aと製品Bの生産量を変数として定義します。
cp.Variable
関数を使用して、整数制約(integer=True
)および非負制約(nonneg=True
)を持つ変数 x_A
と x_B
を作成します。
1 2 3
| x_A = cp.Variable(integer=True) x_B = cp.Variable(integer=True)
|
4. 制約条件を設定します。
この場合、2つの制約があります。
1つは機械時間の制約で、もう1つは原材料の制約です。
また、製品Aと製品Bの生産量が非負であることも制約条件に含まれています。
1 2 3 4 5 6 7
| constraints = [ machine_hours_A * x_A + machine_hours_B * x_B <= 80, raw_material_A * x_A + raw_material_B * x_B <= 100, x_A >= 0, x_B >= 0 ]
|
5. 目的関数を定義します。
この場合、最大化したい目的は総利益です。
総利益は、製品Aと製品Bの売上価格と利益から計算されます。
1 2
| total_profit = selling_price_A * x_A * profit_A + selling_price_B * x_B * profit_B
|
6. 問題を設定します。
ここでは、目的関数を最大化する問題と制約条件を指定しています。
1 2
| problem = cp.Problem(cp.Maximize(total_profit), constraints)
|
7. 最適化問題を解きます。
problem.solve()
を呼び出すことで、最適な製品Aと製品Bの生産量および最適な利益が計算されます。
8. 最適な生産量と最適な利益を取得し、結果を表示します。
1 2 3 4 5 6 7 8 9 10 11 12
| optimal_production_A = x_A.value optimal_production_B = x_B.value
optimal_profit = total_profit.value
print("最適な生産量:") print(f"製品A: {optimal_production_A:.0f} 単位") print(f"製品B: {optimal_production_B:.0f} 単位") print(f"最適な利益: ${optimal_profit:.2f}")
|
このコードは、製品Aと製品Bの生産計画を最適化し、最適な利益を計算する完全なプロセスを示しています。
最適な生産量は整数制約を満たし、最適な利益は問題の解として計算されます。