Skip to main content
zenodoopen

IEEE-30 energy system data of multi-period market with intertemporal constraints

<p>This is the dataset that is used for the original article: &quot;Locational marginal pricing in multi-period AC OPF environment&quot;</p> <p>The dataset consists of the following files</p> <ul> <li>Case1.zip</li> <li>Case2.zip</li> <li>Case3.zip</li> <li>case_modifications.py</li> <li>data_spec.py</li> <li>OPF_formulation.pdf</li> </ul> <p>Multiperiod AC OPF is given in&nbsp;OPF_formulation.pdf. Modifications of traditional IEEE 30-node case are given in case_modifications.py</p> <p>The case files incorporate&nbsp;input and output multiperiod AC OPF and LMP decomposition&nbsp;data&nbsp;in csv and pickle formats. Data structure of case files is given in&nbsp;data_spec.py.</p> <p>For python users pickle files are given. Nevertheless, python environment is not required. Specification can be read as a text file. All necessary data are repeated in csv format.</p> <p>Step 1 are to define LMPs of&nbsp;&nbsp;limited energy resources or storage resources&nbsp;that are formed by actual marginal resources from all time periods (first LMP definition in&nbsp;fig. 6 in the paper).</p> <p>Step 2 are to define all other LMPs at price-taking nodes (second LMP definition in&nbsp;fig. 6 in the paper).</p> <p>The following interrelation between Lagrange multipliers, LMP components, and price-bonding factors&nbsp;holds true:</p> <pre>assert np.max(np.abs(output_ramp.sensitivities.dot(output_ramp.offer_gen_data.price).tolist() - output_ramp.ramping_gen_data.price)) &lt; 1e-2 if output_pt_step1.components.shape[0]: step1_pf_filter = (~output_pf.is_limited_energy) &amp; (~output_pf.is_storage) assert np.max(np.abs(output_pt_step1.components.node_price - (output_pt_step1.components.f + output_pt_step1.components.tc_sum + output_pt_step1.components.vc_sum))) &lt; 1e-2 assert (output_pt_step1.components.f - output_pt_step1.w_f.dot(output_pf.node_price[step1_pf_filter])).abs().max() &lt; 1e-2 assert (output_pt_step1.components.tc_sum - pd.concat( (w.dot(output_pf.offer_price[step1_pf_filter]) for w in output_pt_step1.w_tc_list), axis=1 ).sum(axis=1)).abs().max() &lt; 1e-2 assert np.max(np.abs(output_pt_step2.components.node_price - (output_pt_step2.components.f + output_pt_step2.components.tc_sum + output_pt_step2.components.vc_sum))) &lt; 1e-2 assert (output_pt_step2.components.f - output_pt_step2.w_f.dot(output_pf.node_price)).abs().max() &lt; 1e-2 assert (output_pt_step2.components.tc_sum - pd.concat( (w.dot(output_pf.offer_price) for w in output_pt_step2.w_tc_list), axis=1 ).sum(axis=1) ).abs().max() &lt; 1e-2</pre> <p>&nbsp;</p>

ShareScore

32/100

Overall dataset sharing score

Score breakdown

These five areas show where the dataset supports — or may limit — practical reuse.

Stewardship
4
Harmonization
4
Access
16
Reuse readiness
8
Engagement
0