生産計画問題 CVXPY

生産計画問題

経済学の問題の一例として、生産計画問題を取り上げてみましょう。

具体的には、異なる製品の生産を最適化する問題を考えます。

[条件]

  • ある製造会社では、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

# パラメータ
# 製品Aと製品Bの一つ当たりの売上価格と利益
selling_price_A = 20
profit_A = 8
selling_price_B = 30
profit_B = 12

# 製品Aと製品Bの機械時間と原材料の要求
machine_hours_A = 2
raw_material_A = 3
machine_hours_B = 3
raw_material_B = 2

# 製品Aと製品Bの生産量を変数として設定
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 ライブラリをインポートします。

1
import cvxpy as cp

2. 問題に関連するパラメータを定義します。

これらは、製品Aと製品Bに関する売上価格、利益、機械時間、原材料の要求などの情報です。

1
2
3
4
5
6
7
8
9
10
11
# 製品Aと製品Bの一つ当たりの売上価格と利益
selling_price_A = 20
profit_A = 8
selling_price_B = 30
profit_B = 12

# 製品Aと製品Bの機械時間と原材料の要求
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_Ax_B を作成します。

1
2
3
# 製品Aと製品Bの生産量を変数として設定
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の生産量および最適な利益が計算されます。

1
2
# 問題を解く
problem.solve()

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の生産計画を最適化し、最適な利益を計算する完全なプロセスを示しています。

最適な生産量は整数制約を満たし、最適な利益は問題の解として計算されます。