yg-smile / RL_VVC_dataset

A Reinforcement Learning-based Volt-VAR Control Dataset
MIT License
19 stars 7 forks source link

regarding offline training #6

Open Venura00 opened 5 months ago

Venura00 commented 5 months ago

Dear author,

First of all, thank you for the incredible effort in creating this valuable work. I am trying to adapt your environment into my project but my environment consists of PV inverters in several nodes in the IEEE123 feeder. So, my guess is that the offline training dataset would not be applicable in my case (I am using a custom dataset as load profiles as well).

My initial guess was to eliminate the idea of offline training. If I am correct, what are the changes I have to make in the code? And if I am wrong, do you mind explaining a better approach? Looking forward to your reply.

Thank you.

yg-smile commented 5 months ago

Hi @Venura00, thank you for reaching out.

Eliminating offline training may or may not be required depending on the problem setup. If in your setup, there is a default control policy for PV inverters and it already generated some operational data, you can use them for offline training. If not, then yes we should remove offline training.

There are 2 other places we need to change:

  1. In the current implementation, we assumed that all load nodes in the 123 feeder are PQ nodes (P and Q specified, voltage magnitude and angle to be calculated). Here is the code that specifies the P and Q to the load flow program:

https://github.com/yg-smile/RL_VVC_dataset/blob/9546fa468d00ed5f0b4b2a7872d24eff464e4b6f/envs/env.py#L170-L175

If your PV inverter nodes are PV (P and voltage magnitude specified, Q and voltage angle to be found), we need to change the above code accordingly. Otherwise if the PV inverter are still PQ, then no code changes needed. We will just have to subtract the PQ generation from the load in the data file.

  1. The RL agent only controls discrete VVC devices. We need to add new action spaces for PV inverters, and change the environment's step() function to define how the PV inverter output affect the load flow.
Venura00 commented 5 months ago

Hi @yg-smile , thank you for your prompt and detailed answer. I have three more questions.

  1. Number of columns in the first_2897_ami_aggto_580.csv file is much higher than the number of load nodes in 123 feeder. Is it correct to say that only the required number of columns are extracted when setting the load?

  2. Can you very briefly explain about the data in the csv files of data->processed->123 ? I am confused about two things.

    1. As i noticed in the code, new data from running the power flow simulation, are not appended to these csv files.
    2. What are the columns in these csv files represent?
  3. As per your response, I am assuming the operational data of added PV inverters means the generated P,Q profiles from inverters. If i need to add operational data of PV inverters, do i need to make any changes in the data of data->processed->123

I apologize for replying late to your quick response. Thank you.

yg-smile commented 4 months ago

Hi @Venura00 ,

Thank you for your questions.

  1. Yes. Only the first N columns of first_2897_ami_aggto_580.csv file are used for loads.
  2. (1) We don't append reinforcement learning results to these files. The data in data/processed/123 are power flow results solved by OpenDSS. The control devices' status are obtained by the default control logic of OpenDSS. These can be computed offline therefore we can store them in files and refer to them later.

(2) loss.csv -> network total real loss. This is a single value for each time step so the file only has 1 column. status.csv -> capacitor status (0: off, 1: on). One column for each capacitor. tap.csv -> load tap changer status. One column for each LTC. volt.csv -> voltage magnitude in 120 base (1 p.u. = 120). One column for each load node. substation_pq.csv -> first 3 columns: real power at substation bus, phase ABC; last 3 columns: reactive power at substation. load.csv -> first N columns: real power at load nodes; last N columns: reactive power at load nodes. The column ID and bus are the same as the OpenDSS load definition file: https://github.com/yg-smile/RL_VVC_dataset/blob/9546fa468d00ed5f0b4b2a7872d24eff464e4b6f/envs/dss_123/IEEE123Loads.DSS

  1. To add operational data of PV inverters, First, subtract PV's P from load_kw and subtract PV's Q from load_kvar: https://github.com/yg-smile/RL_VVC_dataset/blob/9546fa468d00ed5f0b4b2a7872d24eff464e4b6f/envs/env.py#L170 Second, subtract PV's P from first N elements of self.load; and subtract PV's Q from last N elements of self.load. https://github.com/yg-smile/RL_VVC_dataset/blob/9546fa468d00ed5f0b4b2a7872d24eff464e4b6f/envs/env.py#L108 (subtract BEFORE dividing by self.load_avg). The column ID and bus are the same as the OpenDSS load definition file mentioned above.

Thank you