前提・実現したいこと
pythonで、pvパネル、蓄電池を備えた家での24時間でのコスト最小化を目的としています。
入力変数として電力需要、pv発電量を乱数として与えています。
最適化の繰り返しの処理をしなければ上手く最適化することができたので最適化に関するプログラムは正しいと思います。
ここから、繰り返しごとに変数を変更して、最適化を繰り返して複数の最適値を発生させて、その中から最小の最適値を得るプログラムを書こうとしています。
繰り返し回数は3回としています。
発生している問題・エラーメッセージ
最後以外の目的関数の値が上手く出ません。
### 該当のソースコード from pulp import LpVariable, LpProblem, LpStatus, lpSum, value import numpy as np import random,pulp # 変数(連続)を宣言 demand=[np.random.uniform (2,5) for i in range(24)] solar=[np.random.uniform (0,10) for i in range(24)] # Tarrifs ######### buy = 30.0 # 買電価格buy price (円/kWh) sell = 10.0 # 売電価格sell price (円/kWh) # Battery parameters #################### Energymax = 25 # 容量battery capacity (kWh) powermax = (1 / 6) * Energymax # 出力battery max power (kW) eff=0.8 #効率 # Battery variables Energy = [LpVariable('Energy_{}'.format(i), 0, None) for i in range(24) ] # battery energy (kWh)、バッテリーの残量 pcharge =[LpVariable('pcharge_{}'.format(i), 0, None) for i in range(24) ] # battery charge (kW) pdischarge = [LpVariable('pdischarge_{}'.format(i), 0, None) for i in range(24) ] # battery discharge (kW) power = [LpVariable('power_{}'.format(i), None, None) for i in range(24)] # total house power (kW) costpower = [LpVariable('costpower_{}'.format(i), None, None) for i in range(24)] # power cost for k in range(3): objective=[LpVariable('objective_{}'.format(k), None, None) for k in range(3)] # Optimisation problem 目的関数(最小化) prb = LpProblem('Battery Operation') # Objective 目的関数 prb +=objective[k] objective[k]=lpSum(costpower) # Constraints 制約 for i in range(24): prb += power[i] == pcharge[i] - pdischarge[i] + demand[i] - solar[i] # total power prb += costpower[i] >= buy * power[i] prb += costpower[i] >= sell * power[i] prb += Energy[i] <= Energymax # battery capacity prb += pcharge[i] <= powermax prb += pdischarge[i] <= powermax # Battery charge state constraints # Batteries must start and finish half charged prb += Energy[0] == 0.5*Energymax # starting energy prb += Energy[23] == 0.5*Energymax # finishing energy for i in range(1, 24): prb += Energy[i] == Energy[i-1] + eff*pcharge[i] - pdischarge[i]*(1/eff) # battery transitions # Solve problem prb.solve() print('Status {}'.format(LpStatus[prb.status])) print('Cost {}'.format(value(prb.objective))) for k in range(3): print('objective{} = {}'.format( k, pulp.value(objective[k]) )) print('objective{} = {}'.format( k, objective[k]))
試したこと
for文を使って最適化を繰り返そうとしましたが上手くいきませんでした。
結果は
Status Unbounded
Cost 0.0
objective0 = None
objective0 = objective_0
objective1 = None
objective1 = objective_1
objective2 = 373.20738500000004
objective2 = costpower_0 + costpower_1 + costpower_10 + costpower_11 + costpower_12 + costpower_13 + costpower_14 + costpower_15 + costpower_16 + costpower_17 + costpower_18 + costpower_19 + costpower_2 + costpower_20 + costpower_21 + costpower_22 + costpower_23 + costpower_3 + costpower_4 + costpower_5 + costpower_6 + costpower_7 + costpower_8 + costpower_9
のようになってしまい、最後しか計算できませんでした。
補足情報(FW/ツールのバージョンなど)
ここにより詳細な情報を記載してください。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/10/11 00:55