-----------------------------
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.