生産量最適化 CVXPY

生産量最適化

ある製造会社が3つの製品を生産しており、それぞれの製品の生産量と利益が与えられています。

また、製造には制約条件があり、生産量の合計や資源の制約を考慮する必要があります。

以下のようなデータが与えられたとします:

  • 製品1の生産量: 100個、利益: 10ドル/個
  • 製品2の生産量: 200個、利益: 15ドル/個
  • 製品3の生産量: 150個、利益: 12ドル/個

また、以下の制約条件があります:

  • 製品1の生産量は最大200個まで
  • 製品2の生産量は最大300個まで
  • 製品3の生産量は最大250個まで
  • 資源の制約により、生産量の合計は最大500個まで

この問題を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
import cvxpy as cp

# 変数の定義
x1 = cp.Variable(integer=True)
x2 = cp.Variable(integer=True)
x3 = cp.Variable(integer=True)

# 制約条件の定義
constraints = [
x1 >= 0,
x2 >= 0,
x3 >= 0,
x1 <= 200,
x2 <= 300,
x3 <= 250,
x1 + x2 + x3 <= 500
]

# 目的関数の定義
objective = cp.Maximize(10*x1 + 15*x2 + 12*x3)

# 最適化問題の定義
problem = cp.Problem(objective, constraints)

# 問題の解決
result = problem.solve()

# 結果の表示
print("最適な生産量:")
print("製品1:", x1.value)
print("製品2:", x2.value)
print("製品3:", x3.value)
print("最大利益:", result)

このコードを実行すると、最適な生産量と最大利益が表示されます。

[実行結果]

1
2
3
4
5
最適な生産量:
製品1: 0.0
製品2: 300.0
製品3: 200.0
最大利益: 6900.0

ソースコード解説

以下はコードの各部分の詳細です。

1. import cvxpy as cp:

CVXPYをインポートしています。
CVXPYは凸最適化問題を解決するためのPythonライブラリです。

2. 変数の定義:

x1x2x3はそれぞれ製品1、製品2、製品3の生産量を表す整数変数です。
整数変数として定義されているため、これらの変数は整数値しか取ることができません。

3. 制約条件の定義:

constraintsリストには、製品の生産量に関する制約条件が含まれています。
これらの制約条件は次の通りです。

  • x1 >= 0: 製品1の生産量は0以上である必要があります。
  • x2 >= 0: 製品2の生産量は0以上である必要があります。
  • x3 >= 0: 製品3の生産量は0以上である必要があります。
  • x1 <= 200: 製品1の生産量は最大で200である必要があります。
  • x2 <= 300: 製品2の生産量は最大で300である必要があります。
  • x3 <= 250: 製品3の生産量は最大で250である必要があります。
  • x1 + x2 + x3 <= 500: 生産総量は500以下である必要があります。

4. 目的関数の定義:

objectiveは最大化したい目的関数です。
この場合、最大化したいのは総利益であり、それは 10*x1 + 15*x2 + 12*x3 という式で表されています。
製品ごとの単価(10、15、12)と生産量の積の総和を最大化します。

5. 最適化問題の定義:

problemは最適化問題を定義するために使用されます。
目的関数と制約条件がこの問題に含まれています。

6. 問題の解決:

result = problem.solve()で最適化問題が解かれ、最適解が計算されます。
最適解は最大利益を示します。

7. 結果の表示:

最適な生産量と最大利益が表示されます。
x1.valuex2.valuex3.valueには最適な製品の生産量が格納され、resultには最大利益が格納されます。

このコードは、制約条件を満たしながら最大の利益を達成するために製品の生産量を最適化する方法を示しています。