エネルギー最適化問題 PuLP

問題

エネルギー最適化問題の例題として、以下のような問題を考えてみましょう。

🔹2つの発電所があり、それぞれ最大で100MW50MWの電力を供給できる。
🔹需要は150MWである。
🔹各発電所の発電コストは、1MWあたりそれぞれ10ドル20ドルである。
🔹目的は、発電コストを最小化することである。

解き方・ソースコード

PythonのPuLPライブラリを使用してこの問題を解いてみます。

[Google Colaboratory]

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
import pulp

# 問題を定義
problem = pulp.LpProblem('Optimization Problem', pulp.LpMinimize)

# 変数を定義
p1 = pulp.LpVariable('p1', lowBound=0, upBound=100, cat='Continuous')
p2 = pulp.LpVariable('p2', lowBound=0, upBound=50, cat='Continuous')

# 目的関数を定義
problem += 10*p1 + 20*p2, 'Total Cost'

# 制約条件を定義
problem += p1 + p2 >= 150, 'Demand'
problem += p1 <= 100, 'Capacity of Plant 1'
problem += p2 <= 50, 'Capacity of Plant 2'

# 問題を解く
problem.solve()

# 結果を出力
print(f'Optimal solution found with total cost of {problem.objective.value():.2f}')
print(f'Plant 1 generates {p1.value()} MW')
print(f'Plant 2 generates {p2.value()} MW')

まずpulpで問題を定義します。

その後、発電所1と発電所2の発電量を表す変数p1p2を定義します。


次に、目的関数を定義します。

この問題では、発電コストを最小化する必要があるため、変数p1とp2に対して、それぞれの発電コストを乗じて、総和をとります。


次に、制約条件を定義します。

この問題では、需要を満たす必要があるため、発電所1と発電所2の発電量の合計が150MW以上でなければなりません。

また、各発電所の発電量は、それぞれ最大で100MWと50MWでなければなりません。


最後に、problem.solve関数を使って最適解を出力します。

解には、発電所1と発電所2の発電量が含まれます。

[実行結果]

Optimal solution found with total cost of 2000.00

Plant 1 generates 100.0 MW

Plant 2 generates 50.0 MW

最適な発電コストは2000.00であり、その時の発電量は発電所1が100.0 MWであり、発電所2が50.0 MWであることが確認できました。