------------------------------
12/24/09
- Released version 4.0b1.
12/18/09
- Make `OPF_ALG` default to 540 then 560 (no 500 MINOPF) and
`OPF_ALG_DC` default to 200 (no 100 BPMPD_MEX).
12/10/09
- Fixed a bug, where calling `opf()` directly with individual
input data matrices in version 2 format resulted in the matrices
being inadvertently run through a version 1 to version 2 format
conversion, stripping out generator capability curves, ramp
limits and branch angle difference limits before setting up and
running the OPF. The fix for this subtle bug involved changing
loadcase to not assume that an input struct without a `version`
field is in version 1 format. It now checks the size of the `gen`
matrix to make the determination.
12/8/09
- Misc cleanup based on mlint suggestions, including:
- Replaced `|` with `||` and `&` with `&&` where appropriate.
- Removed unnecessary `sprintf` (and `fprintf`!?) calls from args
to `error()`.
- Replaced `j` (=`sqrt(-1)`) with `1j` for speed and robustness.
- Replaced unecessary brackets `[]` with parentheses.
- Made sure all calls to `exist()` have 2 args.
- more
12/4/09
- Fixed bug in `savecase[]` for cases where `A` or `N` matrix is a single
row.
11/4/09
- Removed unnecessary `return` statement at end of all M-files. If
anything it should be an `end` statement, but even that is
optional, so we just let functions get terminated by the
end-of-file or another function declaration.
11/3/09
- Removed `genform.m`, `runcomp.m` and `t/t_opf.m`.
- Renamed `compare.m` to `compare_case.m` and updated it to work with
unsolved cases, solved PF cases and solved OPF cases.
10/9/09
- Added ability to specify interface flow limits (based on
DC model flows).
7/10/09
- Removed `sparse_qp` and `sparse_lp` from `have_fcn()`.
- Major speed-up in `opf_model.linear_constraints()` for
large problems (esp. DC OPF) and various other optimizations
from profiling code.
7/7/09
- Fixed bug in `opf.m` introduced by automatic conversion of
single-block piecewise linear costs to linear polynomial costs.
5/27/09
- Added `total_load.m` to provide convenient way to retreive the total
load for the entire system, a specific zone or bus with options to
include just fixed load, just dispatchable load, or both.
5/19/09
- The `results` struct returned by power flow or optimal power flow
is now a strict superset of a MATPOWER case struct.
- Extended `ext2int.m` and `int2ext.m` to handle converting entire case
struct in a single call, storing the re-indexing info in the
struct, using it to reorder other data structures/fields,
execute callbacks to convert additional user data.
- Split userfcn callbacks into multiple stages. Currently there are
five: ext2int, formulation, int2ext, printpf, savecase.
4/14/09
- Deprecated use of `areas` data matrix. Removed it everywhere
possible without breaking backward compatibility with version 1
case files, which required it.
- **INCOMPATIBLE CHANGE:** Calling `loadcase()` with 5 output arguments
is now interpreted as ...
- `[baseMVA, bus, gen, branch, gencost] = loadcase(casefile)`
... instead of ...
- `[baseMVA, bus, gen, branch, info] = loadcase(casefile)`
3/25/09
- Added `add_userfcn.m` as to make it easy to add a new
userfcn to a case struct, whether or not it already
has any. Modified the fixed reserve example to use this.
3/24/09
- Added step-controlled PDIPM variant (`OPF_ALG = 565`) of
AC OPF solver.
3/19/09
- Added `pdipm_qp()` as a new QP/LP solver based on the
pure MATLAB PDIPM solver used for AC OPFs.
- Added option `OPF_ALG_DC` and refactored some code to allow
the user to select the desired solver for DC OPF.
- Added code to `opf.m` to automatically convert single-block
piecewise linear costs to linear polynomial costs to reduce
the number of variables and constraints in the problem.
3/17/09
- Numerous code optimizations based on profiling code, e.g.
changed all calls to `spdiags()` to equivalent call to `sparse()`.
3/13/09
- Added a pure MATLAB implementation of the PDIPM (primal-dual
interior point method) solver for the AC OPF. Now the default
solver (`OPF_ALG = 560`) if there are no optional MEX solvers
installed.
- Modified `fmincopf`, `copf`, `lpopf` and `dcopf` to allow branch
`RATE_A = 0` or `RATE_A > 1e10` to mean the branch is unconstrained
(not included at all in inequality constraints). TSPOPF solvers
already did this. Included in tests.
3/11/09
- Allow userfcn to be an array, with elements processed in order.
1/14/09
- New version of `case39.m` with some additional versions, created
from documented sources.
7/3/08
- Added a top level program, `runopf_w_res()`, to solve an OPF with
fixed reserve requirements. This is a good example of how to use
the new userfcn mechanism to add vars, costs, constraints to an
OPF (see also `toggle_reserves.m` and `t_case30_userfcns.m`).
- Added option to return solution as a `results` struct to `runpf()`,
`runopf()`, `runuopf()`, `rundcpf()`, `rundcopf()`, `runduopf()`.
- Updated `uopf.m` so input/output args match `opf.m`.
- Added option `ENFORCE_Q_LIMS = 2` for runpf to allow one-at-a-time
conversion of buses from PV to PQ for generator reactive power
limit violations.
- Fixed a (new) bug which caused the DC OPF solver to crash on
problems with only polynomial costs.
- Added `userdata` to `opf_model` class.
6/10/08
- Added new way to specify user vars, constraints, costs via
userfcn for OPF.
- Added option to return OPF `results` in a struct.
- Added defaults for user cost params in `fparm` and `H`, making them
optional even when `N` and `Cw` are given.
5/22/08
- Major refactorization of OPF implementation with shared code
for a generalized formulation that includes the DC OPF as
well as the legacy solvers based on `constr` and `LPconstr`.
- Deprecated `OPF_ALG` values 100, 120, 140, 160, 200, 220, 240,
and 260 in favor of the new generalized formulation
equivalents 300, 320, 340 and 360.
- Removed options `OPF_ALG_POLY`, `OPF_ALG_PWL` and
`OPF_POLY2PWL_PTS`.
5/2/08
- Move OPF input argument processing into `opf_args.m`, now
shared by `opf.m`, `dcopf.m`, `fmincopf.m`, `mopf.m` and `tspopf.m`.
- Rewrote the DC OPF to include generalized user constraints,
costs and extra vars (like AC formulation). Note, that if
`A` or `N` have enough columns for the AC formulation, `opf.m`
assumes they are for the AC OPF and strips out the extra
columns before passing to `dcopf.m`.
- Added the ability to read and save generalized OPF user
constraints, costs and var limits in case struct.
- Modified `savecase.m` to include saving of `MU_ANGMIN`, `MU_ANGMAX`
columns of `branch` matrix.
3/13/08
- Added a function `makeLODF.m` to compute line outage distribution
factors.
- Added a function `scale_load.m` to scale load by zones.
3/7/08
- Updated `fmincopf` and `mpoption` to work with version 4 of
Optimization Toolbox. Added option `FMC_ALG` for select between
fmincon's active set method and variations of the new
interior-point algorithm.
- Added functions to compute second derivatives of constraints
and cost (explicit Hessian evaluation) for use with
interior-point solvers, etc.
- **INCOMPATIBLE CHANGE:** `dAbr_dV()` now gives partial derivatives
of the *squared* magnitudes of flows w.r.t. V, as opposed
to the magnitudes.
- Modified the implementation of all flow constraints for `fmincon`
(and `constr`) to use squared flow limits instead of absolute
value to correctly avoid div-by-zero errors in computing
gradients, and to prepare for implementing Hessian code.
Shadow prices still correspond to absolute value limits.
- Fixed bug in `fmincon` (and `constr` and LP) based OPF which
allowed an active power flow limit to be violated when using
`OPF_FLOW_LIM = 1` (missing absolute value).
3/3/08
- **INCOMPATIBLE CHANGE:** Changed input argument order for `uopf`
and added general linear constraints and generalized costs.
1/10/08
- Significant speed improvements in `makeYbus.m` and `makeBdc.m`.