Below is a summary of the changes since version 7.1 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.
MATPOWERÊ8 introduces a major redesign and rewrite of all of the MATPOWER internals in the form of the flexible, all-new MATPOWER object-oriented core architecture (MP-Core) and new two user-level frameworks to access it. (Previously developed under the name MP-Element in a separate repository at https://github.com/MATPOWER/mp-element.)
- MP-Core -- Provides unparalleled flexibility and customization capabilities at all levels. Built around an explicit three-layer modeling structure, with data, network and mathematical model objects and a task object to manage them. Facilitates new modeling (e.g. unbalanced multiphase elements, FACTS devices, etc.), new controls (e.g. optimization of transformer taps, PAR angles, etc.), new problem formulations, and more.
- Flexible Framework -- Provides new top-level functions (note underscores)
run_pf()
,run_cpf()
,run_opf()
for running power flow (PF), continuation power flow (CPF) and optimal power flow (OPF), along with new MATPOWER Extension API for user access to the full customization capability of MP-Core. - Legacy Framework -- Allows MP-Core modeling to be used internally by
legacy
runpf()
,runcpf()
,runopf()
, etc. Facilitates use of legacy test suite, but is restricted to legacy customization mechanisms.
See the new MATPOWER Developer's Manual and MATPOWER Technical NoteÊ5 for details of the new architecture. The User's Manual has not yet been updated for the flexible framework.
The features based on MP-Core are available under MATLAB 9.1 or Octave 6.2 or newer, where the legacy framework uses MP-Core's new modeling by default for:
rundcpf
-- DC power flowrundcopf
-- DC optimal power flowrunpf
-- AC power flow, for all except radial and hybrid Newton-Raphson formulations/solversruncpf
-- AC continuation power flowrunopf
-- AC OPF, for solvers MIPS,fmincon
, IPOPT, and Artelys Knitro, for all formulations
Under older versions of MATLAB or Octave, MATPOWER automatically reverts to the legacy core code, which is still included. The legacy core can also be selected manually on newer versions with the 'exp.use_legacy_core'
option or by disabling MP-Core in the legacy framework via have_feature('mp_core', 0)
.
Prototype examples of PF, CPF, and OPF, built using the new MATPOWER Extension API, for:
- unbalanced three-phase models
- hybrid transmission (balanced single-phase) / distribution (unbalanced three-phase) models
- multiple problem formulations
Note: These are proof-of-concept only, with much work remaining to define a full set of three-phase model elements and their respective parameters and data formats. But they do work!
-
MP-Test 8.0b1 includes new functions for testing string values and text file contents. For details, see the MP-Test 8.0b1 release notes.
-
MIPS 1.5 adds to
mplinsolve()
the ability to save an LU factorization and reuse it to solve for additional right-hand sides. For details, see the MIPS 1.5 release notes (also in Appendix C in the MIPS User's Manual). -
MP-Opt-Model 4 adds support for:
- New class of problems -- parameterized nonlinear equations (PNE),
providing generalized continuation power flow (CPF) capabilities to
MP-Core.
- Predictor/corrector numerical continuation method for tracing solution curves for PNE problems.
- Plotting of solution curves.
- User-defined event functions and callback functions.
- Warm-start capabilities.
- Artelys Knitro 13.1 and more.
For details, see the release notes for MP-Opt-Model 4.0 and 4.1 (also in Appendix C in the MP-Opt-Model User's Manual).
- New class of problems -- parameterized nonlinear equations (PNE),
providing generalized continuation power flow (CPF) capabilities to
MP-Core.
-
MOST 1.2 adds calculation of expected temporal locational marginal price (TLMP), includes transitions into first period in ramping reserves, and more. For details, see the MOST 1.2 release notes (also in Appendix B in the MOST User's Manual).
-
New options:
- New AC power flow solver based on
fsolve()
function, selected by setting'pf.alg'
option to'FSOLVE'
. (fsolve()
is part of the MATLAB Optimization Toolbox and included in Octave. Supported via MP-Core only.) - New Implicit Z-bus Gauss method power flow for distribution systems,
selected by setting
pf.alg
option to'ZG'
. (Support for PV buses is very limited.) - New
'exp.use_legacy_core'
option to bypass MP-Core and force use of legacy core code forrunpf()
,runcpf()
,runopf()
.
- New AC power flow solver based on
-
New functions/methods:
have_feature_mp_core
- Determines availability of MP-Core.run_mp
- Top-level function for running any task (PF, CPF, OPF) with the new MP-Core and flexible framework.run_pf
- Wrapper aroundrun_mp
for running PF.run_cpf
- Wrapper aroundrun_mp
for running CPF.run_opf
- Wrapper aroundrun_mp
for running OPF.- MP-Opt-Model 4.1
pnes_master()
unified interface for parameterized nonlinear equation (PNE) solversmpopt2pneopt()
creates or modifies an options struct forpnes_master()
from a MATPOWER options struct- other functions used to implment PNE functionality
- MP-Test 8.0b1
t_str_match()
-- test that a string matches expected valuet_file_match()
-- test that the content of a text files matches that of another file
- Two new European case files. Thanks to Florin Capitanescu.
case60nordic
-- 60-bus Nordic casecase8387pegase
-- 8387-bus PEGASE case
- MATPOWER Developer's Manual -- describes the architecture of the new MP-Core and MATPOWER flexible framework
- MATPOWER Technical NoteÊ5 "MP-Element: A Unified MATPOWER Element Model, with Corresponding Functions and Derivatives"
- MP-Opt-Model object is now used for power flow as well as OPF and is
added as
om
field to power flowresults
struct. - New MATPOWER Docker image (named
matpower/matpower
) is based on the official GNU Octave image (gnuoctave/octave
) and is available for multiple MATPOWER and Octave versions. - Each power flow is initialized with the solved voltages of the previous one when changing PV buses to PQ during Q limit enforcement. Thanks to Tostado-VŽliz, Kamel, Jurado.
- The
makePTDF()
function can now optionally use a different slack distribution for each bus by specifying theslack
input as a matrix. Thanks to Jon Martinez Corral. - Automatically reduce order of polynomial generator costs with higher order coefficients equal to zero. Allows the DC OPF to solve cases, e.g. with cubic costs where the 3rd order term is 0, such as cases exported by PowerWorld. Thanks to Rajesh Mookerjee.
- Fatal bug in
int2ext()
when called withmpopt
and anint2ext
user callback function. - Bug affecting AC OPF initialization for cases with piecewise linear costs and cartesian voltage representations. Fix results in improved convergence for affected cases.
- Fix generator voltage set points in
case9target
to matchcase9
. - A vector-valued
label
passed toapply_changes()
now throws a useful error. - Fix bug in previously undocumented feature of
makePTDF()
where theslack
input is a matrix. Thanks to Jon Martinez Corral.
- Removed unused
mpopt
argument fromopf_gen_cost_fcn()
inputs. - Remove deprecated functions:
d2AIbr_dV2()
-- usedA2br_dV2()
instead.d2ASbr_dV2()
-- usedA2br_dV2()
instead.- Deprecated methods of
@opf_model
:add_constraints()
-- use the corresponding one of the following methods instead:add_lin_constraint()
,add_nln_constraint()
, orinit_indexed_name()
.add_costs()
-- use the corresponding one of the following methods instead:add_quad_cost()
,add_nln_cost()
,add_legacy_cost()
, orinit_indexed_name()
.add_vars()
-- use the corresponding one of the following methods instead:add_var()
, orinit_indexed_name()
.build_cost_params()
-- no longer needed, incorporated intoparams_legacy_cost()
.get_cost_params()
-- useparams_legacy_cost()
instead.getv()
-- useparams_var()
instead.linear_constraints()
-- useparams_lin_constraint()
instead.
- Remove deprecated option:
'opf.init_from_mpc'
-- use'opf.start'
instead.