Below is a summary of the changes since version 6.0 of MATPOWER. See the
CHANGES.md
file for all the gory details. For release notes for
previous versions, see Appendix H of the MATPOWER User's Manual.
- New MATPOWER installer script
install_matpower()
automatically updates MATLAB or Octave paths or optionally provides the commands required to so. - Support for additional user-defined general nonlinear constraints and costs in AC OPF.
- Support for exporting MATPOWER case to PSS/E RAW data format.
- Three new variants of the standard Newton AC power flow, for a total
of four, including both nodal power and current balance constraints
and both polar and cartesian representations of voltage. See the new
pf.current_balance
andpf.v_cartesian
options. Thanks to Baljinnyam Sereeter. - Three new variants of the standard AC OPF formulation, for a total of
four, including both nodal power and current balance constraints and
both polar and cartesian representations of voltage. See the new
opf.current_balance
andopf.v_cartesian
options. Thanks to Baljinnyam Sereeter. - Three new power flow algorithms for radial distribution systems
selected via the three new options for
pf.alg
, namely'PQSUM'
,'ISUM'
,'YSUM'
. Also includes new MATPOWER optionspf.radial.max_it
andpf.radial.vcorr
. See Section 4.3 on "Distribution Power Flow" in the MATPOWER User's Manual for details. Thanks to Mirko Todorovski. - Major upgrade to OPF soft limit functionality, supporting soft limits on all AC and DC OPF inequality constraints, including branch flow constraints, bus voltage bounds, generator active and reactive bounds, branch flow and branch angle difference limits. Thanks to Eran Schweitzer.
- Docker image tagged
matpower/matpower-desktop
, providing a pre-packaged Ubuntu desktop environment with Octave, MATPOWER, and the MATPOWER Extras all pre-installed. See thedocker/MATPOWER-Docker.md
page for more details. Thanks to Richard Lincoln. - New options:
pf.nr.lin_solver
controls the linear solver used to compute the Newton update step in the Newton-Raphson power flow.pf.radial.max_it
andpf.radial.vcorr
are options for the new radial power flow algorithms. Thanks to Mirko Todorovski.cpf.enforce_flow_lims
andcpf.enforce_v_lims
control enforcement of branch flow and bus voltage magnitude limits in the continuation power flow andcpf.flow_lims_tol
andcpf.v_lims_tol
control the respective detection tolerances. Thanks to Ahmad Sadiq Abubakar and Shrirang Abhyankar.pf.current_balance
andpf.v_cartesian
control formulation used for Newton AC power flow. Thanks to Baljinnyam Sereeter.opf.current_balance
andopf.v_cartesian
control formulation used for AC OPF. Thanks to Baljinnyam Sereeter.opf.softlims.default
determines whether or not to include soft limits on constraints whose parameters are not specified explicitly in thempc.softlims
struct. For use with enhancedtoggle_softlims()
functionality. Thanks to Eran Schweitzer.opf.start
replaces deprecatedopf.init_from_mpc
and adds a new possibility to automatically run a power flow to initialize the starting state for the OPF.
- New functions:
calc_branch_angle
calcultes voltage angle differences for branches.dImis_dV()
evaluates the partial derivatives of nodal current balance with respect to bus voltages.d2Imis_dV2()
evaluates the 2nd derivatives of nodal current balance with respect to bus voltages.d2Imis_dVdSg()
evaluates the 2nd derivatives of nodal current balance with respect to bus voltages and generator injections.d2Abr_dV2()
evaluates the 2nd derivatives of squared branch flows with respect to bus voltages.gentypes()
andgenfuels
provide list of standard generator unit types and fuel types, respectively.install_matpower()
installs MATPOWER by automatically modifying or, alternatively, showing needed modifications to MATLAB or Octave path.loadshed()
computes MW curtailments of dispatchable loads.opf_branch_ang_fcn()
evaluates AC branch flow limit constraints and gradients.opf_branch_ang_hess()
evaluates Hessian of AC branch flow limit constraints.opf_current_balance_fcn()
evaluates AC current balance constraints and gradients.opf_current_balance_hess()
evaluates Hessian of AC current balance constraints.opf_veq_fcn()
evaluates voltage magnitude equality constraints and gradients.opf_veq_hess()
evaluates Hessian of voltage magnitude equality constraints.opf_vlim_fcn()
evaluates voltage magnitude limit constraints and gradients.opf_vlim_hess()
evaluates Hessian of voltage magnitude limit constraints.opf_vref_fcn()
evaluates reference voltage angle equality constraints and gradients.opf_vref_hess()
evaluates Hessian of reference voltage angle equality constraints.opt_model.add_lin_constraint()
to add linear constraints to an optimization model.opt_model.add_nln_constraint()
to add nonlinear constraints to an optimization model.opt_model.init_indexed_name()
to initialize the indices for an indexed name set of constraints, costs or variables.save2psse()
to export a MATPOWER case to PSS/E RAW data format.savechgtab()
to save change tables, such as those used byapply_changes
, to a file.
-
Seven new purely synthetic cases from the ACTIVSg team (ASU, Cornell, Texas A&M, U of Illinois, and VCU - Synthetic grids), resulting from work supported by the ARPA-E GRID DATA program. Thanks to Adam Birchfield and the ACTIVSg team.
case_ACTIVSg200
-- 200-bus Illinois synthetic modelcase_ACTIVSg500
-- 500-bus South Carolina synthetic modelcase_ACTIVSg2000
-- 2000-bus Texas synthetic modelcase_ACTIVSg10k
-- 10,000-bus US WECC synthetic modelcase_ACTIVSg25k
-- 25,000-bus US Northeast/Mid-Atlantic synthetic modelcase_ACTIVSg70k
-- 70,000-bus Eastern US synthetic modelcase_SyntheticUSA
-- 82,000-bus continental USA synthetic model (aggregation ofcase_ACTIVSg70k
,case_ACTIVSg10k
, andcase_ACTIVSg2000
, connected by 9 DC lines)
Some of these cases also include contingency tables and/or hourly load scenarios for 1 year.
contab_ACTIVSg200
contab_ACTIVSg500
contab_ACTIVSg2000
contab_ACTIVSg10k
scenarios_ACTIVSg200
scenarios_ACTIVSg2000
-
New RTS-GMLC case from https://github.com/GridMod/RTS-GMLC.
case4_RTS_GMLC
-
Six new radial distribution system cases. Thanks to Mirko Todorovski.
case4_dist
case18
case22
case69
case85
case141
- Two new Tech Notes, available from MATPOWER home page.
- B. Sereeter and R. D. Zimmerman, "Addendum to AC Power Flows and their Derivatives using Complex Matrix Notation: Nodal Current Balance", MATPOWER Technical Note 3, April 2018.
- B. Sereeter and R. D. Zimmerman, "AC Power Flows and their Derivatives using Complex Matrix Notation and Cartesian Coordinate Voltages", MATPOWER Technical Note 4, April 2018.
- LaTeX source code for MATPOWER User's Manual included in
docs/src
, for MIPS User's Manual inmips/docs/src
and for MOST User's Manual inmost/docs/src
.
- MATPOWER has a new website at https://matpower.org. Please discontinue use of the old http://www.pserc.cornell.edu/matpower/ address.
- Update versions of included packages:
- MIPS 1.3.1.
- MOST 1.0.2.
- MP-Test 7.0.
- Continuous integration testing via GitHub and Travis-CI integration.
- Support added in core optimization model
opt_model
for:- general nonlinear constraints
- general nonlinear costs
- quadratic costs
- Refactor OPF code to take advantage of new
opt_model
capabilities for nonlinear constraints and quadratic and nonlinear costs. - Derivative functions now support cartesian coordinates for voltage in addition to polar coordinates.
- In the Newton power flow, for larger systems use explicit LU
decomposition with AMD reordering and the 3 output argument form of
lu
(to select the Gilbert-Peierls algorithm), resulting in up to a 2x speedup in MATLAB, 1.1x in Octave. Thanks to Jose Luis Marín. - Improve performance of
makeYbus()
. Thanks to Binbin Chen. - Support plotting of multiple nose curves in CPF by allowing option
cpf.plot.bus
to take on vector values. - Add line for curtailed load to
case_info()
output. - Change default implementation of active power line flow constraints
(
opf.flow_lim = 'P'
) to use flow directly, rather than square of flow, which is now a separate option, namelyopf.flow_lim = '2'
. Thanks to Nico Meyer-Huebner. - Add
genfuels
andgentypes
to establish standard set of values for optionalmpc.genfuel
andmpc.gentype
fields for generator fuel type and generator unit type, respectively. - Add support for
gentype
andgenfuel
fields of MATPOWER case struct inextract_islands
,ext2int
,int2ext
,load2disp
andsavecase
. - Add support for
bus_name
field of MATPOWER case struct toextract_islands
,ext2int
andint2ext
. - Add support for IPOPT solver under Octave, including in the Travis-CI testing. Thanks to Richard Lincoln.
- Add support for YALMIP, SeDuMi and SDPT3 to be recognized under Octave. Thanks to Richard Lincoln.
- Add
'clear_cache'
options tohave_fcn()
(see #65) to facilitate re-checking for optional functionality after changes to the MATLAB/Octave path. - Deprecated functions:
d2AIbr_dV2()
-- usedA2br_dV2()
instead.d2ASbr_dV2()
-- usedA2br_dV2()
instead.opt_model.add_constraints()
-- use the corresponding one of the following methods instead:add_lin_constraint()
,add_nln_constraint()
, orinit_indexed_name()
.opt_model.add_costs()
-- use the corresponding one of the following methods instead:add_quad_cost()
,add_nln_cost()
,add_legacy_cost()
, orinit_indexed_name()
.opt_model.linear_constraints()
-- useopt_model.params_lin_constraint()
instead.opt_model.build_cost_params()
-- no longer needed, incorporated intoopt_model.params_legacy_cost()
.opt_model.get_cost_params()
-- useopt_model.params_legacy_cost()
instead.
- Fix bug in conversion of older versions of MATPOWER options.
- Fix bug #4 where some Q limits were not being respected by CPF when buses were converted to PQ by initial power flow run. Thanks to Shruti Rao.
- Fix fatal bug #8 when calling
runcpf
with base and target cases with identical load and generation. Thanks to Felix. - Fix fatal bug in
get_losses
when computing derivatives of reactive branch injections and fix some related tests. - Fix #11 fatal error encountered when running
test_matpower
withSDP_PF
and YALMIP installed, but no SDP solver. Now checks for availability of SeDuMi, SDP3 or MOSEK before attempting to runSDP_PF
tests that require solving an SDP. Thanks to Felix. - Fix bug #12 where the CPF could terminate early when requesting trace of the full curve with P or Q limits enforced, if a limit becomes binding at the base case. Thanks to Felix.
- Fix bug #13 where setting all buses to type
NONE
(isolated) resulted in a fatal error forext2int
,runpf
,runcpf
andrunopf
. Thanks to SNPerkin. - Fix bug #21 where a continuation power flow that failed the first corrector step would produce a fatal error. Thanks to Elis Nycander.
- Fix bug #23 where the continuation power flow could switch directions unexpectedly when the operating point switched from stable to unstable manifold or vice-versa after hitting a limit. Thanks to Elis Nycander and Shrirang Abhyankar.
- Fix bug #26 where, in a continuation power flow, a reactive limit at a bus could be detected in error if multiple generators at the bus had reactive ranges of very different sizes. Thanks to Elis Nycander and Shrirang Abhyankar.
- Fix
runpf
handling of case where individual power flow fails during Q limit enforcement. - Fix #53 where certain OPF cases (e.g.
case33bw
) resulted in a fatal error under versions of MATLAB prior to R2016b (v9.1). Thanks to Jane Cheung. - Fix #56 where
save2psse
was missing entries for two transformer columns, namely,VMA1
andVMI1
. Thanks to Amin Gholami. - Fix #57 where
save2psse
always used 1 for theCKT
number, even for parallel branches or transformers. Thanks to Amin Gholami. - Fix bug in
have_fcn()
where it would incorrectly mark Gurobi as available even if it had an expired license or failed for some other reason. - Fix #60 by adding missing generator at slack bus in RTE cases. Affects
the following cases:
case1888rte
case1951rte
case2848rte
case2868rte
case6468rte
case6470rte
case6495rte
case6515rte
Thanks to Jean Maeght.
-
Move included MATPOWER case files to new
data
subdirectory. -
Turning soft limits on without specifying any parameters explicitly in
mpc.softlims
now implements soft limits for all constraints, by default, not just branch flow limits. And the format of the input parameters inmpc.softlims
has changed. Seehelp toggle_softlims
or Tables 7-9, 7-10 and 7-11 in the MATPOWER User's Manual for the details. -
Swap the order of the output arguments of
dSbus_dV()
) for polar coordinate voltages (angle before magnitude) for consistency. -
Correct signs of phase shifter angles in Polish system cases, since they were based on the old sign convention used by MATPOWER prior to v3.2 (see change on 6/21/07). Affects the following cases:
case2383wp
case2736sp
case2737sop
case2746wop
case2746wp
case3375wp
Thanks to Mikhail Khokhlov and Dr. Artjoms Obusevs for reporting.
-
Remove
nln.mu.l.<name>
andnln.mu.u.<name>
fields from OPFresults
struct. Usenle.lambda.<name>
andnli.mu.<name>
fields instead for nonlinear constraint multipliers. -
Modify order of default output arguments of
opt_model.get_idx()
. -
Add
mpopt
to input args for OPF'ext2int'
,'formulation'
, and'int2ext'
callbacks. -
Eliminate unnecessary reordering of on-line generators (sorted by increasing bus index) from
ext2int()
. The order is now left unmodified byext2int()
. This change should only affect user code that explicitly depends on the order of generators with internal numbering (hopefully quite rare).