Matpower

Latest version: v8.0.0.2.2.2

Safety actively analyzes 706267 Python packages for vulnerabilities to keep your Python projects secure.

Scan your dependencies

Page 2 of 6

6.0b2

-----------------------------

11/1/16
- Released 6.0b2.

10/28/16
- Added new general event handling mechanism to continuation power flow
(CPF), including handling of generator real and reactive power limits.

10/26/16
- Include support for MOSEK 8, some algorithms eliminated, others changed
algorithm code set via `mosek.lp_alg` option.

10/19/16
- Improved robustness of infeasibility detection when `pf.enforce_q_lims`
option is used.
- Add tests for power flow with `pf.enforce_q_lims` option.

10/14/16
- Fixed bugs in AC OPF solver code for fmincon, IPOPT, and Knitro
involving shadow prices on variable bounds, when upper and lower bounds
are equal (such as a voltage magnitude setpoint when `opf.use_vg` is 1).
In IPOPT the prices are missing, and Knitro and fmincon can both return
negative prices on the wrong constraint.

10/13/16
- Added `opf.use_vg` option to provide a convenient way to have the
OPF respect the generator voltage setpoints specified in the gen
matrix.

10/4/16
- Improve backward compatibility of `mpoption()`, allow it to handle
old-style option vectors from earlier versions of MATPOWER, namely
3.2 and 4.0, and to accept on old style options vector with new-style
name/value pair option overrides.
- **INCOMPATIBLE CHANGE:** Remove `cpf.user_callback_args` option and
modify `cpf.user_callback` to allow for structs defining callback
priority and args, in addition to just callback function name.
- Add user options for setting tolerances for target lambda detection
and nose point detection, `cpf.target_lam_tol` and `cpf.nose_tol`,
respectively.

9/27/16
- **INCOMPATIBLE CHANGE:** Changed name of `cpf.error_tol` option to
`cpf.adapt_step_tol`.

9/22/16
- Update tests for compatibility with Optimization Toolbox 7.5 (R2016b),
which removes `active-set` algorithm for `quadprog()` and `active-set`
and `simplex` for `linprog()`.
- Fix fatal error when using some SDP_PF functions when CPLEX is not
installed.

9/19/16
- Fix dimension bug in `makeBdc()` when last bus is not connected (should
never happen if bus is properly marked as type `NONE`). *Thanks to
Samuel Perkin.*

8/15/16
- Fix a harmless bug in `opt_model` where variable, constraint and
cost sets indexed by a single variable would allocate a square
matrix of starting and ending indices, rather than a simple vector.
*Thanks to Alberto Lamadrid for catching this.*

7/18/16
- Extract computation of tangent vector from `cpf_predictor()` into
`cpf_tangent()`, and call sequentially as needed.

7/11/16
- Add step size to CPF callback args and results logging.
- Add option `cpf.adapt_step_damping` to control oscillations in
adaptive step size control for continuation power flow.

7/8/16
- Updated network reduction code to handle cases with radially connected
external buses.

7/1/16
- Fix bug in `cpf_default_callback()` that sometimes resulted in plotting
voltage at different buses for different parts of the curve when the
bus was not explicitly specified with the `cpf.plot.bus` option.

6/23/16
- Bad bus numbers no longer cause a fatal error (after reporting the
bad bus numbers) in `case_info()`.
- Updated versions of `qcqp_opf()` and `qcqp_opf()` in `extras/misc`, from
Cedric Josz.

6/10/16
- Fix bug in `savecase()` where single quotes were not escaped properly
in bus names.
- Generator capability curve parameters that define a zero-reactive
power line no longer cause a fatal error.

6.0b1

-----------------------------

6/1/16
- Released 6.0b1.

5/27/16
- **INCOMPATIBLE CHANGE:** Removed `fairmax()` from the public interface
by moving it inside `uopf()`, the only place it was used.

5/25/16
- Add contributed code from Camille Hamon to `extras/maxloadlim` for
finding the loadability limits in power systems based on an optimal
power flow using dispatchable loads.

5/24/16
- Fix bug in `toggle_dclines()` that resulted in fatal error when
used with OPF with reactive power costs. *Thanks to Irina Boiarchuk.*
- Add option to call `total_load()` with full case struct, instead
of separate `bus` and `gen` matrices.

5/18/16
- Add `plot_mpc()`, contributed by Paul Cuffe, to `extras/misc`. Plots
an electrically meaningful drawing of a MATPOWER case.
- Add `case145.m`, IEEE 145 bus, 50 generator dynamic test case from
https://labs.ece.uw.edu/pstca/dyn50/pg_tcadd50.htm.

5/17/16
- Add 9 new case files, 8 cases ranging from 1888 to 6515 buses
representing the French system, and a 13,659-bus case representing
parts of the of the European high voltage transmission network,
stemming from the Pan European Grid Advanced Simulation and State
Estimation (PEGASE) project. *Thanks again to Cedric Josz and
colleagues from the French Transmission System Operator.*
- Add `extras/misc/qcqp_opf.m`, by Cedric Josz, et. al.

5/3/16
- Fix fatal bug in `update_mupq()` affecting cases where `QMIN` is
greater than or equal to `QC1MIN` and `QC2MIN` (or `QMAX` is less than
or equal to `QC1MAX` and `QC2MAX`) for all generators.
*Thanks Jose Miguel.*

3/29/16
- Add support for `quadprog()` under GNU Octave.

3/3/16
- Copying a field containing a struct to a non-struct field with
`nested_struct_copy()` now overwrites rather than causing a fatal
error.

2/29/16
- Added option to call `scale_load()` with full case struct, with
`cost` field in `opt` to indicate when to include cost scaling.

2/22/16
- Add major new feature: *MATPOWER Optimal Scheduling Tool* (MOST).
See `docs/MOST-manual.pdf` for details.

2/18/16
- Updated code from 9/23/16 to turn off pesky CPLEX warnings to
included CPLEX 12.6.3.

2/12/16
- Added Release History section to Appendix of manual.

1/29/16
- Added option to call `makePTDF()`, `makeB()`, and `makeBdc()` with
`mpc` struct instead of individual `baseMVA`, `bus`, `branch` args.
*Suggested by Alberto Lamadrid.*

1/26/16
- Introduced work-around and warning for crashes caused by strange
behavior from MATLAB's `ver()` function when MATPOWER (or any other
3rd party toolbox with a `Contents.m`) is installed in a directory on
the MATLAB path named `matlab` or `optim` (both case insensitive).

1/15/16
- Added `feval_w_path()` function for evaluating functions located at
a specified path, outside of the MATLAB path.

1/14/16
- Added tests for `loadcase()` for m-file cases outside the MATLAB path.

1/6/16
- Added `apply_changes()` and `idx_ct()` to implement general method for
applying modifications to an existing MATPOWER case.

11/5/15
- Use voltage dependent loads in both base and target injections
to define continuation power flow transfer. Should fix issue with
calculation of final loads.

11/4/15
- Fixed a bug in `psse_convert_xfmr()` where conversion of data for
transformers with CZ=3 was done incorrectly. *Thanks to Jose Marin
and Yujia Zhu.*

10/30/15
- Fixed a bug in `cpf_default_callback()` introduced with the
experimental updates regarding ZIP loads on 4/14/15.

10/15/15
- Modified `t_is()` to handle matrix inputs of dimension greater
than two.
- Added `t_test_fcns()` to test `t_ok()` and `t_is()` and manually
check output of failed tests.
- Added tests to `t_dcline()` for an isolated generator bus connected
to the rest of the system via a DC line. This works for AC and DC
power flow and OPF, though you must set the isolated bus to
be of type `REF`.

9/23/15
- Added code in `cplex_options()`, `insolvablepfsos()`,
`insolvablepfsos_limitQ()` and `yalmip_options()` to turn off
`MATLAB:lang:badlyScopedReturnValue` warning triggered by
CPLEX when using MATLAB R2015b (8.6) and later.

7/16/15
- Added `mpopt2qpopt()` to provide common interface for creating
options struct for `mi/qps_matpower()` from a MATPOWER options
struct.
- Changed default solver order for LP, QP, MILP, MIQP problems
to move Gurobi before CPLEX and BPMPD after OT and GLPK.

7/9/15
- Modified `have_fcn()` to return 0 and warn for unrecognized
functionality, instead of producing fatal error.

6/19/15
- Fixed a fatal bug in `psse_convert_xfmr()` affecting transformers
with CW and/or CZ equal to 1. *Thanks to Matthias Resch.*

5/18/15
- Fixed a crash in `have_fcn()` caused by changes in OPTI Toolbox
v2.15 (or possibly v2.12).

4/24/15
- Commented out isolated bus 10287 in `case3375wp.m`.

4/16/15
- Added some caching to `mpoption()` and made minor changes to
`nested_struct_copy()` to greatly decrease the overhead added by
`mpoption()` when running many small problems.

4/14/15
- Added experimental code to lay foundation for handling ZIP load
model in power flow (Newton, fast-decoupled only), continuation
power flow, and optimal power flow (MIPS, fmincon, Knitro, IPOPT
solvers only). Currently, ZIP loads can only be specified on a
system-wide basis using the experimental options
`exp.sys_wide_zip_loads.pw` and `exp.sys_wide_zip_loads.qw`.
Tests in `t/t_vdep_load()`.
- **INCOMPATIBLE CHANGE:** Changed the `Sbus` argument in `newtonpf()`
from a vector to a function handle to a function that returns a
vector.
- Added `bus` and `area` as possible values for `load_zone` argument
to `total_load()`, which is now used to compute voltage dependent
load values.

3/27/15
- Fixed issue where default value of `feastol` option was not being
set correctly in `mips()` when called directly (or via `qps_mips()`)
with `feastol = 0`. By default, MATPOWER option `mips.feastol` is
set to zero but is normally replaced in `mipsopf_solver()` or
`dcopf_solver()` with value of `opf.violation` option before
calling `mips()`, thereby masking the problem.
- In `miqps_glpk()` variables of type `B` (binary) are converted to
`I` (integer) with appropriate bounds, since some versions of
GLPK do not natively handle type `B`.

3/24/15
- Added code to DC OPF to return `success` = 0 for cases where the
matrix is singular (e.g. islanded system without slack).
- Fixed problem in `have_fcn()` where SeDuMi was turning off and
leaving off all warnings.

5.1

----------------------------

3/20/15
- Released version 5.1.

3/19/15
- Added support for using PARDISO as linear solver for computing
interior-point update steps in MIPS (v1.2), via new `mplinsolver()`
function and `mips.linsolver` option.

3/18/15
- Added four new case files, ranging from 89 up to 9421 buses,
representing parts of the European high voltage transmission
network, stemming from the Pan European Grid Advanced Simulation
and State Estimation (PEGASE) project. *Thanks to Cedric Josz and
colleagues from the French Transmission System Operator.*
- Added network reduction toolbox to `extras/reduction` directory
for creating smaller approximate network equivalents from a larger
original case file. *Thanks to Yujia Zhu and Daniel Tylavsky.*

3/4/15
- Added variable type as an attribute to `opt_model`, so you can
now specify variables as `C`, `I`, or `B` (continuous, integer,
or binary) when adding variables with `add_vars()` and `getv()` can
optionally return a variable-type string suitable for passing
to `miqps_matpower()` and friends.

2/26/15
- Minor speed improvements in various `opt_model` functions from
bypassing calls to `substruct()`.

2/25/15
- Switch to more permissive 3-clause BSD license from GPL 3.0.

2/24/15
- Added function `mpoption_info_intlinprog()`, tag `intlinprog` to
`have_fcn()` and optional `intlinprog` field to MATPOWER options.
- Added `miqps_matpower()`, a wrapper function for various solvers
of mixed-integer linear and quadratic programs. Functionality
implemented by `miqps_cplex()`, `miqps_glpk()`, `miqps_gurobi()`,
`miqps_mosek()` and `miqps_ot()`. Added corresponding
`t/t_miqps_matpower()` to test suite.

2/18/15
- Changed generator and dispatchable load sections in `printpf()`
output to include off-line units, after all, it already has a
Status column.

2/13/15
- Added explicit colors to plots in `cpf_default_callback()` so things
look right in newer MATLAB versions (R2014b and later).

2/6/15
- Modified `nested_struct_copy()` to eliminate `cellfun()` call that
was not supported in MATLAB 7.0.x. Noted that `runcpf()` also
requires MATLAB 7.1 or later due to a call to `cellfun()`.
Included code to skip certain tests that require that `cellfun()`
functionality when running under MATLAB 7.0.x.

2/5/15
- Replaced `regexp(... 'split')` construct in `mpoption()` with
`regexp(... 'tokens')` since it was causing fatal errors on
MATLAB versions < 7.3, which did not have that feature.
- Fixed fatal error in when using fast-decoupled power flow
on MATLAB versions < 7.3, caused by use of newer
`lu(... 'vector')` construct.

2/3/15
- Added check to `have_fcn()` for installation of `ipopt_auxdata.m`
when Ipopt >= 3.11.x is detected, to warn about incomplete
installation and avoid a fatal error.

1/27/15
- Added online function reference, produced by m2html. *Thanks to
Shrirang Abhyankar.*

1/26/15
- Fixed bug in `hasPQcap()` that resulted in ignoring generator
capability curves if `Q1MAX < Q2MAX` or `Q1MIN > Q2MIN` (i.e. when
the sloped portions cut off the left corners of the box
constraints, rather than the right corners).
*Thanks to Irina Boiarchuk.*

1/23/15
- Added `mosek_symbcon()` to define symbolic constants for setting
MOSEK options. Updated MOSEK solver option values in help text
for `mpoption()` to correspond to MOSEK v7.

1/22/15
- Added ability to toggle the availability of optional functionality
using `have_fcn()`.

1/21/15
- Fixed minor bug with `poly2pwl()`, affecting units with `Pmax <= 0`.
- Major update to `have_fcn()`, which now determines and caches
version numbers and release dates for optional packages, used
by `mpver()` and others.
- Fixed error in `qps_mosek()` in printout of selected optimizer
when using MOSEK 7.

1/16/15
- Cleaned up and improved consistency of output in `printpf()` for
generation and dispatchable load constraints.
- Modified `runcpf()` to gracefully handle the case when the base
and target cases are identical (as opposed to getting lost in
an infinite loop).

1/15/15
- Fixed bug in handling of interface flow limits, where multipliers
on binding interface flow limits were off by a factor of the p.u.
MVA base.
- Fixed sign error on multipliers on lower bound on constraints
in `qps_clp()` and `qps_glpk()`. Modified a test in `t_qps_matpower()`
to check for this.

1/14/15
- Added support for LP/QP solver CLP (COIN-OR Linear Programming).
Use `opf.dc.solver` option `CLP` or `qps_clp()`.
- Added note to README and home page about OPTI Toolbox by
Jonathan Currie being an easy way to install some good solvers
for Windows users.

1/13/15
- Updated `t_opf_dc_ot()` to remove the skipping of the checking of
price results for the dual-simplex algorithm for all versions of
MATLAB except R2014b, the first version that included the
dual-simplex algorthm. For some reason, in this version it did
not return any Lagrange multipliers!?!.
- Increment MATPOWER options version number to 5 (forgot to do it
previously for 3, 4, and 5) and included code to update older
options structs to current version.

1/7/15
- Improved detection of GLPK version in `mpver()` and GLPK
availability in `have_fcn()`, now compatible with GLPK installed
by OPTI Toolbox (https://www.inverseproblem.co.nz/OPTI/).

12/22/14
- Fixed fatal bug in `toggle_dcline()` when pretty-printing results.
*Thanks to Deep Kiran for reporting.*

12/18/14
- Fixed fatal bug in `case_info()` for islands with no generation.

5.0

----------------------------

12/17/14
- Released version 5.0.

12/16/14
- Added unsupported functions `check_feasibility.m`, `checklimits.m`,
`loss2bus.m`, `make_opf_feasible.m`, and `makeBloss.m` to `extras/misc`.
- Added section 9 "Miscellaneous MATPOWER Functions" to User's Manual.

12/15/14
- Added option for `case_info()` to print to a file. Added `case_info()`
tests to `t_island()`.

12/12/14
- Added code in `psse_read()` to work around a bug in MATLAB 7.3.
- Added private `catchme` tag (for internal use only) to `have_fcn()`
to detect older versions of MATLAB and Octave that do not support
the `catch me` syntax in try/catch constructs.
- Added private `regexp_split` tag (for internal use only) to
`have_fcn()` to detect older versions of Octave that do not support
the `split` argument to `regexp()`.
- Updated to support Ipopt 3.11.x and later, which removed support
for `options.auxdata` from the MEX file. Added private
`ipopt_auxdata` tag (for internal use only) to `have_fcn()` to
detect version 3.11.x or later.

12/4/14
- Added new option `opf.init_from_mpc` to force some solvers to
use the starting point supplied in the MATPOWER case to
initialize the optimization variables for the OPF, instead
of creating its own starting point. Currently only implemented
for Ipopt, Knitro and MIPS.
- **INCOMPATIBLE CHANGE:** Renamed `cdf2matp()` to `cdf2mpc()` and modified
the interface to be consistent with `psse2mpc()`.

12/2/14
- Added new option `out.suppress_detail` to quickly suppress all
pretty-printed output except the system summary. By default,
detailed output is automatically suppressed for systems larger
than 500 buses.
- DC OPF formulation in `opf_setup()` now uses a single set of
doubly-bounded constraints for flow limits, instead of two
sets of upper bounded constraints.
- Updated to MIPS 1.1, which includes additional user-settable
options: `xi`, `sigma`, `z0`, `alpha_min`, `rho_min`, `rho_max`,
`mu_threshold` and `max_stepsize`.
- **INCOMPATIBLE CHANGE:** The name of the option to `mips()` to specify
the maximum number of step-size reductions when `step_control` is on
was changed from `max_red` to `sc.red_it` for consistency with
other MATPOWER options.

11/18/14
- Updated `case300.m` with new conversion from original CDF file.
No longer uses 9900 MVA as proxy for unlimited line capacity.

11/13/14
- Added capability for `set_reorder()` to automatically pad matrix
or cell array before assignment of matrix or cell array with
larger size in some dimensions. Added tests to `t_ext2int2ext()`.

11/12/14
- Loads at isolated buses are no longer included in results from
`total_load()`.
- Fixed loads and shunts at isolated buses are no longer included
in system and area summaries in `printpf()`. Line charging
injections set to zero for DC power flow results.
- Added tests for `printpf()` in `t_printpf.m`.
- Changes to the internally indexed version of `gencost` now
get properly copied back to externally indexed version by
`int2ext()`.
- Added tests in `t_ext2int2ext()` to confirm that `e2i_data/field()`
and `i2e_data/field()` work for cell array as well as numerical
array fields. Updated help text to reflect this feature.

11/11/14
- Added `get_losses()` function to compute losses, line charging
reactive injections and their derivatives, as functions of
bus voltages. Corresponding tests included in `t_get_losses()`,
including example of loss sensitivity factors.
- Fixed bug in `runpf.m` that caused a crash for cases with
` pf.enforce_q_lims` turned on and exactly two Q limit violations,
one Qmax and one Qmin. *Thanks to Jose Luis Marin.*

11/4/14
- Modified behavior so setting `out.all` option to 0 is now ignored
for pretty-printed output to files specified as `FNAME` argument
to `runpf()`, `runopf()`, etc.

10/22/14
- Removed `idx_area()` and all code references to `areas` field
in MATPOWER cases except those needed to support reading
v1 case files and those required for backward compatibility of
APIs. Removed unused (and formerly deprecated) `areas` field from
version 2 case files that still included it.

10/21/14
- Fixed a bug in `savecase()` where a `gencost` matrix with extra
columns of zeros resulted in a corrupted MATPOWER case file.
- Modified `total_load()` to return actual rather than nominal
value for dispatchable loads by default, unless using the
old-style string input for the 4th input arg. See
`help total_load` for details.

10/16/14
- Reactive power output of multiple generators at a PQ bus
no longer get re-allocated when running a power flow.

10/11/14
- Added `fmincon_ip`, `linprog_ds` and `optimoptions` to
`have_fcn()` to test for availability of fmincon's interior
point method (Optimization Toolbox 4.x +), linprog's
dual simplex method (Optimization Toolbox 7.1 +), and
optimoptions function for setting Optimization Toolbox
options (Optimization Toolbox 6.3 +), respectively.
- Added handling of NaN values to `t_is()`.
- **INCOMPATIBLE CHANGE:** Removed use of `ot_opts` field and
replaced with `linprog_opts` and `quadprog_opts` fields
in the `OPT` argument to `qps_matpower()` and `qps_ot()`.
- Added optional `linprog` and `quadprog` fields to MATPOWER
options struct, to allow setting of their options directly
from `mpoption()`. Incremented MATPOWER options struct version
to 2.
- Added tests for multiple `linprog()` algorithms to `t_opf_dc_ot()`.

10/10/14
- Added `sqp` algorithm option for `fmincon.alg`, not suitable
for large problems.

10/7/14
- Added `toggle_softlims()`, an extension to implement DC OPF
branch flow soft limits. This should be useful in identifying
the cause of infeasibility in some infeasible DC OPF problems.
See `help toggle_softlims` for details.

9/24/14
- Fixed issue with failed tests in `t_psse()` on Windoze.

8/11/14
- Modified `savecase()` to save fields `bus_name` and `genfuel`
(both cell arrays of strings) if present. This is an
experimental feature and the design may change in future
versions.
- Optionally return success flag from `t_ok()` and `t_is()`.

8/4/14
- Additional improvements to correctly handling PSS/E RAW
files for revisions 24-28.

7/30/14
- Fixed a bug in `psse_convert()` that resulted in incorrect
bus voltage angles when importing from v29 or v30 files.
- Enhanced PSS/E import code to handle additional versions
prior to v29, improve reporting of version being used
for parsing. Default version when not explicit is now v23.

7/24/14
- Added line to `cplex_options()` to prevent default creation
of `clone1.log` files when using parallel CPLEX routines
(only effective for CPLEX 12.6.0.1 or later).
- Fixed fatal error when `uopf()` shuts down all gens
attempting to satisfy Pmin limits.

7/23/14
- Fixed error in User's Manual description of LODF and
further clarified text.

5.0b1

-----------------------------

7/1/14
- Released version 5.0b1.

6/27/14
- Added support for LP solver GLPK which is built-in to
Octave. Use `opf.dc.solver` option `GLPK` or `qps_glpk()`.
- **INCOMPATIBLE CHANGE:** Removed optional `max_it` field from
opt argument to `qps_matpower()` and `qps_*()` family of
functions (except `qps_mips()`).

6/13/14
- Added ability for `loadcase()` to load MATPOWER case M-files
that are not in the MATLAB path by specifying an explicit
path in the input filename.

6/9/14
- Fixed memory issue resulting from nested om fields when
repeatedly running an OPF using the results of a previous
OPF as input. *Thanks to Carlos Murillo-Sanchez.*

5/23/14
- Added `case5.m`, a 5-bus, 5-generator example case from Rui Bo.
- Removed `extras/psse2matpower`.
- Fixes to `printpf()` to suppress printing of dispatchable load
constraint section when there are no dispatchable loads and
to never print line constraints for unconstrained lines.
- Fixed crash when using Knitro to solve cases with all
lines unconstrained.
- Switched to `[L,U,p,q] = lu(B,'vector')` form for factorization
in fast-decoupled power flow in `fdpf()`, resulting in ~5x
speedup on some large systems. *Thanks to Carlos Murillo-Sanchez.*

5/6/14
- Modified `savecase()` to automatically add a comment line
with the function name, and make sure the name is converted
to a legal function name before saving.
- Further additions to PSS/E import code to handle repeated
delimiters, accumulation of warnings to save in comments
of converted file, improved consistency of verbose option,
and some automated tests.

4/28/14
- Major revision of PSS/E import code to further improve
robustness and include Octave support. Updated `psse2mpc()` to
include direct saving of result to MATPOWER case file.
- Added functions:
- `psse_parse()`
- `psse_parse_line()`
- `psse_parse_section()`
- Removed functions:
- `psse_count_lines()`
- `psse_extract_data()`
- `psse_read_section()`

4/11/14
- Significant updates to PSS/E import code to improve robustness
and (mostly) handle versions 29 to 33. Renamed the 4 functions
ending in `_33` by removing the `_33`.

4/7/14
- Added experimental feature, via function `psse2mpc()`, to
import PSS/E RAW data (version 33) into a MATPOWER case file.
Supporting functions include:
- `psse_convert_33()`
- `psse_convert_hvdc_33()`
- `psse_convert_xfmr_33()`
- `psse_count_lines()`
- `psse_extract_data()`
- `psse_read_33()`
- `psse_read_section()`

3/28/14
- Enhanced `extract_islands()` to handle DC lines, custom fields
and extraction of multiple islands into a single case struct.

3/11/14
- Fixed bugs in `runpf()` related to enforcing generator reactive
power limits when all generators violate limits or when
the slack bus is converted to PQ.

3/10/14
- Fixed bug in `qps_gurobi()` where return status values for
`NUMERIC` and `SUBOPTIMAL` were swapped. Added `INPROGRESS` status.
*Thanks to Alberto Lamadrid for catching this.*

3/2/14
- Fixed bug in `case_info()` that incorrectly included dispatchable
loads in amount reported for min/max capacity for Generation.

2/28/14
- Updated `toggle_dcline.m` to work correctly for OPF cases with
user supplied constraints and costs.

2/27/14
- Fixed bug in `savecase()` where the function name mistakenly
included the path when the `FNAME` input included a path.

2/6/14
- Small tweak in `connected_components()` results in ~30x
speedup for 62k bus network. (Reminder: Never access
indexed rows of a large sparse matrix, always transpose
and index the columns).

2/4/14
- Added check in `qps_cplex()` for undocumented `exitstatus`
values returned by `cplexlp()` or `cplexqp()`.

1/17/14
- Added Dan Molzahn's SDP_PF package, a set of applications of
a semidefinite programming relaxation of the power flow
equations, to the directory `extras/sdp_pf`.

1/16/14
- Added `status` option for 2nd argument to `toggle_reserves()`
`toggle_dcline()` and `toggle_iflims()` as a convenient way to
check the enabled/disabled status of these sets of callback
functions.
- Removed `extras/cpf` since CPF is now part of the core.
- Added support for Dan Molzahn's SDP_PF package (coming soon).

1/15/14
- Modified handling of options for optional packages, added:
- `mpoption_info_cplex()`
- `mpoption_info_fmincon()`
- `mpoption_info_gurobi()`
- `mpoption_info_ipopt()`
- `mpoption_info_knitro()`
- `mpoption_info_mosek()`

1/8/14
- Updates to `qps_cplex()` and `cplex_options()` to fix verbose
display issues with CPLEX 12.6.

1/3/14
- Added persistent variable to improve performance of `have_fcn()`.
- Added support for Knitro v9.0.0, including new `knitromatlab`
and `ktrlink` options to `have_fcn()`, to determine which Knitro
interfaces are available.

12/10/13
- New MATPOWER options implementation based on options struct
instead of options vector.
**INCOMPATIBLE CHANGE:** In `results` struct returned by an OPF, the
value of `results.raw.output.alg` is now a string, not an old-style
numeric alg code.
- Gurobi now takes precendence over MOSEK when default solver
is selected for DC OPFs or `qps_matpower()`.

12/4/13
- Corrected error in Figure 6-5 "Total Cost Function for Negative
Injection" in Dispatchable Loads section of User's Manual
(slopes were labeled incorrectly).

11/15/13
- Added `case_info()`.
- Modified `connected_components()` to sort returned groups by
decreasing cardinality.

11/5/13
- Fixed a bug in MIPS where a near-singular matrix could produce
an extremely large Newton step, resulting in incorrectly satisfying
the relative feasibility criterion for successful termination.
- Improved the starting point created for Ipopt, Knitro and MIPS by
`dcopf_solver()`, `ipoptopf_solver()`, `ktropf_solver()` and `mipsopf_solver()`
for variables that are only bounded on one side.

10/11/13
- Removed support for MATLAB 6.x. Removed `anon_fcns` option from
`have_fcn()`. Files removed:
- `fmincopf6_solver.m`
- `mips6.m`
- `mips6opf_solver.m`
- `qps_mips6.m`
- `t_mips6.m`
- Removed support for `constr` and successive LP-based OPF solvers.
Removed `constr`, `lp`, `qp` options from `have_fcn()`. Files removed:
- `copf_solver.m`
- `fun_copf.m`
- `grad_copf.m`
- `LPconstr.m`
- `LPeqslvr.m`
- `lpopf_solver.m`
- `LPrelax.m`
- `LPsetup.m`
- `mp_lp.m`
- `mp_qp.m`
- `t/t_opf_constr.m`
- `t/t_opf_lp_den.m`
- `t/t_opf_lp_spf.m`
- `t/t_opf_lp_spr.m`

9/20/13
- Added continuation power flow, `runcpf()`, with tangent
predictor and Newton method corrector, *based on code
contributed by Shrirang Abhyankar and Alex Flueck.*

9/5/13
- Fix in `smartmkt()` to avoid crash following non-convergent
`uopf` when `mkt.lim.P.max_offer` is not defined.

9/3/13
- Fixed bug (typo) in `auction()` that could affect cases with
a lower limit on the cleared bid price.

7/30/13
- Extended `modcost()` to optionally accept a vector of shift/scale
factors, instead of just a scalar.

6/7/13
- Made non-convergent results more obvious by not printing
the standard output tables (can be overridden with new
`OUT_FORCE` option) and making the "did not converge"
more prominent.

5/1/13
- Changed behavior of branch angle difference limits so that
0 is interpreted as unbounded only if both `ANGMIN` and `ANGMAX`
are zero. Added note about this to docs in various places.

4/26/13
- DC OPF now correctly sets voltage magnitudes to 1 p.u.
in results.

3/29/13
- Performance optimizations in `opt_model` for cases with
large numbers of variable sets and linear constraints
or costs specified as entire rows (all columns as
opposed to specific var sets).

3/13/13
- Added to `scale_load()` the option to scale the `gencost`
(specifically the quantity axis of the marginal cost function)
corresponding to any modified dispatchable load. Simply add
`gencost` as additional input and output args.
- Empty `got` and `expected` arguments to `t_is()` now
count as a passing test instead of an error, as long as
the dimensions match.

2/12/13
- Fixed bug causing value of `opt.verbose` to be ignored in
`qps_gurobi()`.

12/14/12
- Removed code in `fmincopf()` that attempts to find an interior
starting point when using the interior point solver. It did
not seem to help and caused errors for certain cases with
DC lines (and probably other extensions).

10/1/12
- Updates to `have_fcn()` and `mpver()` to better handle case where
Optimization Toolbox is installed, but with no valid license.

8/30/12
- Major speed-up in `opt_model.linear_constraints()` by building
transpose of `A` (assigning to full columns) then transposing
back as opposed to building `A` directly (assigning full rows).

8/1/12
- Added function `margcost()` for computing the marginal cost of
generation.

7/20/12
- Added utility function `opt_model.describe_idx()` to identify
variable, constraint or cost row indices to aid in debugging.

7/18/12
- Made `N` optional field (default is identity matrix) in
`opt_model.add_costs()`.
- Added missing optional 2nd arg to `opt_model.build_cost_params()`.

6/26/12
- Fixed a bug in the new `opt_model.add_vars()` when adding a var
set of dimension zero.

6/18/12
- Updated Gurobi interface for compatibility with native MATLAB
support introduced in Gurobi 5.
**INCOMPATIBLE CHANGE:** No longer works with older Gurobi 4.x/
`gurobi_mex()` interface.

5/3/12
- Reimplementated `opf_model` class as subclass of the new
`opt_model` class, which supports indexed named sets of
variables, constraints and costs.

5/2/12
- In `opf_setup()`, take magnitude of initial voltages at generator
buses from `bus` matrix (`VM`), not `gen` matrix (`VG`).

4/30/12
- Fixed a bug in `int2ext()` where converting a case to internal
ordering before calling `runpf()` or `runopf()` could result in
a fatal error due to mismatched number of columns in internal
and external versions of data matrices. *Thanks to Nasiruzzaman
and Shiyang Li for reporting and detailing the issue.*
- Fixed fatal bug in MIPS for unconstrained, scalar problems.
*Thanks to Han Na Gwon. Bumped MIPS version to 1.0.1.*

3/14/12
- Fixed a bug in `runpf()` where it was using the wrong initial
voltage magnitude for generator buses marked as PQ buses. Power
flow of solved case was not converging in zero iterations as
expected.

2/29/12
- Added a tolerance for detecting violated Q limits in `runpf()`
when `ENFORCE_Q_LIMS` is true. *Suggested by Hongxing Ye.*

1/31/12
- Added utilities to help in working with networks with islands,
`find_islands()`, `extract_islands()` and `connected_components()`
and corresponding test file `t/t_islands()`.

1/24/12
- Added option to `makeJac()` to return full Jacobian instead of
reduced version used in Newton power flow updates.

1/16/12
- Added new function `gurobiver()` for retreiving/printing Gurobi
and Gurobi_MEX version information, since it is used multiple
places.

1/10/12
- Moved the building of Ybus outside the reactive limit
enforcement loop in `runpf()`. *Suggested by Shiyang Li.*

1/4/12
- Running a power flow for a case with DC lines but no `gencost`
no longer causes an error.

12/14/11
- Modified `t/t_opf_fmincon.m` to use active-set method for testing
`fmincopf` for MATLAB versions 7.6-7.9, since fmincon's interior
point solver (now default) was not accurate enough in these
versions.

4.1

---------------------------

12/14/11
- Released version 4.1.
- Fixed bug in check for `ENFORCE_Q_LIMS` with multiple slacks
in `runpf()`.
- Moved printing of power flow solver name into `runpf()` so it
doesn't get repeated when `ENFORCE_Q_LIMS` is on.

12/9/11
- Fixed problem with `qps_cplex()` when H matrix is not
perfectly numerically symmetric.

12/8/11
- Added basic DC line modeling capability. See help for
`toggle_dcline()` for details.

12/1/11
- Removed deprecated `opf_model` methods, `gen_lin_N()`,
`get_nln_N()`, `get_var_N()`, use `getN()` instead.
- Removed all references to deprecated option `OUT_RAW`.

11/15/11
- Fixed a crashing bug in computation of quadratic user-defined
costs. *Thanks to Stefanos Delikaraoglou.*

11/11/11
- Changed default DC OPF/LP/QP solver precedence in
`dcopf_solver()` and `qps_matpower()` to the following:
CPLEX, MOSEK, Gurobi, BPMPD, Opt Tbx, MIPS.
- Minor enhancements to `cdf2matp()`, including saving of bus
names. *Thanks to Alvaro Jaramillo Duque.*

11/09/11
- Refactored `ext2int()` and `int2ext()` into additional functions
`e2i_field()`, `e2i_data()`, `i2e_field()` and `i2e_data()` to
clean things up and prepare for the ability to automatically
re-order data in cell arrays.

10/31/11
- Added three case files, all more recent variations of the
Polish system: `case3012wp.m`, `case3120sp.m` and `case3375wp.m`.
*Thanks to Roman Korab <roman.korabpolsl.pl>.*

9/28/11
- Increased threshold value used to filter constraint shadow
prices in `printpf()`.
- In `savecase()` increased precision of values saved in M-file
case files

9/16/11
- Fixed that `qps_cplex()` would not print progress even with
`VERBOSE > 0` with CPLEX 12.3.

7/26/11
- Fix in `qps_cplex()` for changed sign on multipliers with
CPLEX 12.3 vs CPLEX 12.2.

7/25/11
- Fixed bug in `compare_case()` that would cause some column
names for the `branch` matrix to be incorrectly reported.

7/7/11
- In `scale_load()`, when no load_zone is specified, it no longer
incorrectly misses Q-only load buses.

7/5/11
- Added support for the Gurobi optimizer for large-scale linear
and quadratic programming. To use Gurobi for the DC OPF, set
`OPF_ALG_DC` = 700. Gurobi's various solvers can be selected via
MATPOWER's `GRB_METHOD` option. Requires the Gurobi libraries
available from https://www.gurobi.com/ and the Gurobi MEX
interface available from [http://www.convexoptimization.com/
wikimization/index.php/Gurobi_mex][28].
- Added function `qps_gurobi()` for solving QP and LP problems using
the common QP solver interface used in MATPOWER. The `qps_matpower()`
function also includes the option to use Gurobi.
- Changed order of precendence of installed DC OPF solvers
(i.e. LP/QP solvers) to Gurobi, MOSEK, CPLEX, BPMPD, then MIPS.

6/29/11
- Updated `t_is()` to properly print when result includes NaNs.

6/17/11
- Changed `FMC_ALG` option default to 4, fmincon defaults to
using an interior-point method with user-supplied Hessians
instead of an active set method.
- Added support for the KNITRO optimization solver for large
scale non-linear problems. Use `OPF_ALG = 600` for AC OPF.
Requires the Optimization Toolbox from The MathWorks and
the KNITRO libraries, available from http://www.ziena.com/.
(Subsequently acquired by Artelys, https://www.artelys.com/.)

6/16/11
- Complete rewrite of `update_mupq.m`. Should fix problems
caused by non-zero multipliers on non-binding generator
limits.

5/17/11
- Updated `runpf()` and `pfsoln()` to properly handle slack for
power flow cases with islands and multiple reference buses.
(Note: This does not include the case where `ENFORCE_Q_LIMS`
results in temporarily converting a reference bus to a
PQ bus and automatically finding a new suitable slack bus.)

5/16/11
- Pretty printed output from `printpf()` now includes a `*` after
the voltage angle in the bus section for reference buses.

3/31/11
- Default value for ramp rates for dispatchable loads now
set to `Inf` in `load2disp.m`.

3/18/11
- Fixed bug in `toggle_reserves.m` that computed the prices in
`results.reserves.prc` incorrectly.

Page 2 of 6

© 2025 Safety CLI Cybersecurity Inc. All Rights Reserved.