原子力発電 最適化 PuLP

原子力発電 最適化

原子力発電に関する最適化問題の一例を挙げ、PuLPを使用して解く方法を示します。

この例では、特定の原子力発電所の燃料供給を最適化する問題を考えます。

問題設定:

🔹原子力発電所は1つあり、1か月(30日)の期間で運転します。
🔹燃料はウラン(Uranium)とプルトニウム(Pu)の2種類があり、各日における燃料の消費量を最適化します。
🔹ウランの価格は1キログラムあたり500ドル、プルトニウムの価格は1キログラムあたり1000ドルです。
🔹各日における燃料消費量は最低制約と最大制約があり、最低制約はウラン500キログラム、プルトニウム100キログラム、最大制約はウラン1500キログラム、プルトニウム300キログラムです。
🔹目的は燃料の総コストを最小化することです。

解法

PuLPを使った最適化問題の解法は以下のようになります。

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
from pulp import *

# 問題の定義
problem = LpProblem("Nuclear Power Plant Fuel Optimization", LpMinimize)

# 変数の定義
uranium = LpVariable("Uranium", lowBound=500, upBound=1500)
plutonium = LpVariable("Plutonium", lowBound=100, upBound=300)

# 目的関数の定義
cost = 500 * uranium + 1000 * plutonium
problem += cost

# 制約条件の定義
problem += uranium + plutonium >= 600 # ウラン+プルトニウムの合計の最低制約
problem += uranium + plutonium <= 1800 # ウラン+プルトニウムの合計の最大制約

# 問題の解決
problem.solve()

# 結果の表示
print("Optimization Status:", LpStatus[problem.status])
print("Optimal Solution:")
print("Uranium:", value(uranium), "kg")
print("Plutonium:", value(plutonium), "kg")
print("Total Cost: $", value(problem.objective))

このコードでは、PuLPのLpProblemを使用して最小化問題を定義し、LpVariableを使用して変数を定義します。

目的関数に燃料の総コストを設定し、制約条件を追加します。

最後にproblem.solve()で問題を解決し、結果を表示します。


上記のコードを実行して得られる結果を以下に示します。

[実行結果]
Optimization Status: Optimal
Optimal Solution:
Uranium: 500.0 kg
Plutonium: 100.0 kg
Total Cost: $ 350000.0

最適化の結果、最適解が見つかりました(Optimization Status: Optimal)。

最適解では、ウランの消費量が500キログラム、プルトニウムの消費量が100キログラムとなっています。

燃料の総コストは550,000ドルです(Total Cost: $ 550000.0)。


この結果は、ウランとプルトニウムの最小限の消費量で制約条件を満たしながら、総コストを最小化する最適な燃料供給計画を示しています。