SmartGridLab / battery-control-by-reinforcement-learning

5 stars 3 forks source link

[10/23~] totalprofitが0になるようなモデル作成 or テストデータ作成 #121

Open HashiReo opened 3 weeks ago

HashiReo commented 3 weeks ago

最終的なゴール

シナリオ

結果

関連Issue

以下のIssueから続いている

HashiReo commented 1 week ago

データ:「PVout =0, price = 0.01, imbalance = 200」をtrain_dataとして、input_data2022.csvに1か月間だけ登録し、RLに学習させる。 期待されるシナリオ:以下の2つの要因から、「充放電しない」はず。つまりグラフが全て0になってほしい

上手くいかない場合:1か月間だけでなく、登録期間を増やし再度行う。

次のシナリオ:PVoutとpriceはそのままでimbalanceを減らしていくとどうなるか?→同じ結果が得られてほしい

HashiReo commented 1 week ago

input_data2022.csvに任意のデータを登録するにあたって、csvファイルの日付データで存在しない日付が存在しているため、日付を修正する。(例:2022/04/31)

スクリーンショット 2024-11-06 165527

日付修正に加え、PVoutがマイナスになっているデータがあったため、マイナスの場合はすべて0にした。 以下が結果である。 fig1

SoC_bid[%]がほぼずっと100%なのが影響しているのかもしれない。 SoCの状態もRLのテストに観測値として入れているので、入れるなら正しい値を入れないとおかしくなる。

1つデータを取って考えてみる。 battery_max_cap = 4[kWh] inverter_max_cap = 4[kWh] SoCの初期値は0.5 (= 50%)、つまり現在のSoCは2.0[kWh]である。 以上がまず、初期条件として与えられている。 RLの最初のaction_scaledは-2.0[kWh]、つまり2.0[kWh]放電するのでnew_SoCは0[%]になるはずである。 しかし、データ上ではnextSoC = 100[%]となっている。ここがおかしい。 new_soc = current_soc - (action_scaled / self.env.battery_max_cap) RL_test.pyのこのコードがおかしい。action_scaledがマイナスの時は放電を意味し、プラスの時に充電を表すはずだが、このコードは逆になっている。 よってnew_soc = current_soc + (action_scaled / self.env.battery_max_cap)プラスに直した。 RL_test.pyのbidとrealtimeの両方を直した。

直した後、再度実行してみると次はSoC_bid(new_SoCのデータ群)はずっと0[%]だが、charge/discharge_bid( = action_scaledのデータ群)はずっと-2.0[kWh]でずっと放電している。 これはたぶんモデルがおかしい気がする、なので次はモデルを調べる。

HashiReo commented 1 week ago

モデル構築について調べる。

RL_env.pyのモデルの学習でも式が new_soc = self.soc_list[-1] - (action_value / self.battery_max_cap)となっているため new_soc = self.soc_list[-1] + (action_value / self.battery_max_cap)プラスに直した。 これで再度学習させてみる。

fig1

結果、特に変わらず。 ずっと2.0放電することはなくなったが、常に充電している。つまりcharge/discharge_bidの値が常に正。 なのに、SoC_bidはずっと100%というおかしい状況になっている。 これはSoCが満タンなのに常に充電しているためである。加えて、SoCを0~100の間にクリップしているからデータ上では100と出てくるが、実際に計算すると100を超えている。これはモデルがSoCが100を超えても大丈夫という風に認識しているためであると考えられる。おそらく、ありえない状況に対してペナルティが機能していないと予想される。これまでペナルティに関しては全く見ていなかったため、次からはペナルティに関して調べる。

モデル学習でのエピソード報酬は正になった。これが正しいのかどうかも分からないが。上が今までのエピソード報酬、下がこれまでの修正後のエピソード報酬である。 RL_visualize_20240927_090613-1 RL_visualize_20241107_052533-1

daisukekodaira commented 3 days ago

@HashiReo かなりいい感じに進んでると思う。そして説明の書き方がわかりやすい。素晴らしい。 結果がすぐによくならないから手応えがあまりないかもしれないけど、この辺の手触りのある実装を理解していくことが一番重要です。根気よくこのまま進めてほしいです。大曽根さんとも話して見解をもらってほしいです。