Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -109,7 +109,7 @@ LOAD_COL = ["LD_ID", "LD_BUS", "LD_STATUS", "LD_PD", "LD_QD"]

mpc = m.loadcase('case9', verbose=False)
cf = CaseFrames(mpc)
cf.setattr_as_df('load', mpc.load, columns_template=LOAD_COL)
cf.set_attribute_as_df('load', mpc.load, columns_template=LOAD_COL)
```

If data already in `DataFrame`, we can use `setattr` directly as follows,
Expand All @@ -122,7 +122,7 @@ m = start_instance()

mpc = m.loadcase('case9', verbose=False)
cf = CaseFrames(mpc)
cf.setattr('load', df_load)
cf.set_attribute('load', df_load)
```

### Export as `xlsx`
Expand Down
75 changes: 75 additions & 0 deletions data/ex_case3a.m
Original file line number Diff line number Diff line change
@@ -0,0 +1,75 @@
function mpc = ex_case3a
% ex_case3a - Three bus example system.
%
% Please see caseformat for details on the case file format.

% MOST
% Copyright (c) 2015-2024, Power Systems Engineering Research Center (PSERC)
% by Ray Zimmerman, PSERC Cornell
%
% This file is part of MOST.
% Covered by the 3-clause BSD License (see LICENSE file for details).
% See https://github.com/MATPOWER/most for more info.

%% MATPOWER Case Format : Version 2
mpc.version = '2';

%%----- Power Flow Data -----%%
%% system MVA base
mpc.baseMVA = 100;

%% bus data
% bus_i type Pd Qd Gs Bs area Vm Va baseKV zone Vmax Vmin
mpc.bus = [
1 3 0 0 0 0 1 1 0 135 1 1.05 0.95;
2 2 0 0 0 0 1 1 0 135 1 1.05 0.95;
3 2 0 0 0 0 1 1 0 135 1 1.05 0.95;
];

%% generator data
% bus Pg Qg Qmax Qmin Vg mBase status Pmax Pmin Pc1 Pc2 Qc1min Qc1max Qc2min Qc2max ramp_agc ramp_10 ramp_30 ramp_q apf
mpc.gen = [
1 125 0 25 -25 1 100 1 200 0 0 0 0 0 0 0 0 250 250 0 0;
1 125 0 25 -25 1 100 1 200 0 0 0 0 0 0 0 0 250 250 0 0;
2 200 0 50 -50 1 100 1 500 0 0 0 0 0 0 0 0 600 600 0 0;
3 -450 0 0 0 1 100 1 0 -450 0 0 0 0 0 0 0 500 500 0 0;
];

%% branch data
% fbus tbus r x b rateA rateB rateC ratio angle status angmin angmax
mpc.branch = [
1 2 0.005 0.01 0 300 300 300 0 0 1 -360 360;
1 3 0.005 0.01 0 240 240 240 0 0 1 -360 360;
2 3 0.005 0.01 0 300 300 300 0 0 1 -360 360;
];

%%----- OPF Data -----%%
%% generator cost data
% 1 startup shutdown n x1 y1 ... xn yn
% 2 startup shutdown n c(n-1) ... c0
mpc.gencost = [
2 0 0 3 0.1 0 0;
2 0 0 3 0.1 0 0;
2 0 0 3 0.1 0 0;
2 0 0 3 0 1000 0;
];

%%----- Reserve Data -----%%
%% reserve zones, element i, j is 1 if gen j is in zone i, 0 otherwise
mpc.reserves.zones = [
1 1 1 0;
];

%% reserve requirements for each zone in MW
mpc.reserves.req = 150;

%% reserve costs in $/MW for each gen that belongs to at least 1 zone
%% (same order as gens, but skipping any gen that does not belong to any zone)
% mpc.reserves.cost = [ 5; 5; 21; ];
% mpc.reserves.cost = [ 5; 5; 16.25; ];
% mpc.reserves.cost = [ 0; 0; 11.25; ];
mpc.reserves.cost = [ 1; 3; 5; ];

%% OPTIONAL max reserve quantities for each gen that belongs to at least 1 zone
%% (same order as gens, but skipping any gen that does not belong to any zone)
mpc.reserves.qty = [ 100; 100; 200; ];
17 changes: 15 additions & 2 deletions matpowercaseframes/__init__.py
Original file line number Diff line number Diff line change
@@ -1,2 +1,15 @@
from .core import CaseFrames # noqa: F401
from .version import __version__ # noqa: F401
from .core import (
CaseFrames,
DataFramesStruct,
ReservesFrames,
xGenDataTableFrames,
)
from .version import __version__

__all__ = [
"CaseFrames",
"DataFramesStruct",
"ReservesFrames",
"xGenDataTableFrames",
"__version__",
]
45 changes: 45 additions & 0 deletions matpowercaseframes/constants.py
Original file line number Diff line number Diff line change
Expand Up @@ -16,8 +16,16 @@
"dclinecost",
"case",
"reserves",
"xgd_table",
"xgd",
"f",
"et",
"success",
)

ATTRIBUTES_NAME = ("bus_name", "branch_name", "gen_name")
ATTRIBUTES_INFO = ("version", "baseMVA", "f", "et", "success")

COLUMNS = {
"bus": [
"BUS_I",
Expand Down Expand Up @@ -114,10 +122,47 @@
"MU_QMAXT",
],
"reserves": {
"zones": [],
"req": ["PREQ"],
"cost": ["C1"],
"qty": ["PQTY"],
},
"xgd_table": [
"CommitKey",
"CommitSched",
"MinUp",
"MinDown",
"PositiveActiveReservePrice",
"PositiveActiveReserveQuantity",
"NegativeActiveReservePrice",
"NegativeActiveReserveQuantity",
"PositiveActiveDeltaPrice",
"NegativeActiveDeltaPrice",
"PositiveLoadFollowReservePrice",
"PositiveLoadFollowReserveQuantity",
"NegativeLoadFollowReservePrice",
"NegativeLoadFollowReserveQuantity",
],
"xgd": { # xGenData
"CommitSched": [],
"InitialPg": [],
"RampWearCostCoeff": [],
"PositiveActiveReservePrice": [],
"PositiveActiveReserveQuantity": [],
"NegativeActiveReservePrice": [],
"NegativeActiveReserveQuantity": [],
"PositiveActiveDeltaPrice": [],
"NegativeActiveDeltaPrice": [],
"PositiveLoadFollowReservePrice": [],
"PositiveLoadFollowReserveQuantity": [],
"NegativeLoadFollowReservePrice": [],
"NegativeLoadFollowReserveQuantity": [],
"TerminalPg": [],
"CommitKey": [],
"InitialState": [],
"MinUp": [],
"MinDow": [],
},
"if": {
# negative 'BRANCHIDX' defines opposite direction
"map": ["IFNUM", "BRANCHIDX"],
Expand Down
Loading