- Tweak tests (again) to avoid warnings and presolve bug with HiGHS-based
linprog
andintlinprog
in Optimization Toolbox R2024b.
- Fix issue with
most_summary()
when ramp results are missing.
- Fix issue #45 where
most()
does not properly handle cases with contingencies defined only in some periods/scenarios. Thanks to Stefano Nicolin. - Update
most_summary()
to skip display of non-existent contingencies.
- Release 1.3.
- Tweak tests to avoid warnings and presolve bug with new HiGHS-based
linprog
andintlinprog
in Optimization Toolbox R2024a.
- Add Sphinx-based Reference documentation.
- Speed up building unit commitment (min up/down time) constraints. Improvement can be quite substantial on large problems.
- Reduce memory requirements for long horizon cases with storage by forming/storing transposes of matrices for storage constraints. Requires MP-Opt-Model version > 4.1.
- Fix issue #39 in which the value of
mdi.Delta_T
, the number of hours represented by each period, was not being accounted for in most of the terms in the objective function. Thanks to Stefano Nicolin.
- Fix issue #37 which caused a fatal error in storage input checks with multiple storage units under some circumstances. Thanks to Keir Steegstra.
- Remove extra column in mdo.results.ExpectedRampCost and ignore for single period.
- Release 1.2.
- Update
addgen2mpc()
to expand fixed reserve parameters to keep sizes compatible.
- Silence near singular matrix warnings in some tests that began with MATLAB R2022b.
- Fix issue #29, where a typo caused a check on
md.UC.MinDown
>= 1 to be skipped. Thanks to Talha Iqbal.
- Add TLMP (temporal locational marginal price) for storage units
based on work by Chen, Tong in [Chen2022] and returned in
mdo.results.StorageTLMPc
,mdo.results.StorageTLMPd
,mdo.results.CondStorageTLMPc
,mdo.results.CondStorageTLMPd
. See Table 5-13 in the User's Manual. - Add tests for TLMP in
t_most_tlmp
based on toy examples from Cong Chen, including both ramping and storage.
- For deterministic cases with storage where
ForceCyclicStorage
is 0, ensure that initial storage bounds are equal to initial storage and output a warning if they are modified. Fix deterministic UC tests where this was causing results to change depending on value ofrho
.
- Add calculation of expected TLMP (temporal locational marginal price)
based on work by Guo, Chen, Tong in [Guo2021] and [Chen2021]
and returned in
mdo.results.GenTLMP
andmdo.results.CondGenTLMP
. See Table 5-13 in the User's Manual.
- Ramping reserves and constraints are now included for the transition from the initial state into period 1, except for single-period problems.
- INCOMPATIBLE CHANGE: Modified definition of ramping reserves for
period t (and all corresponding input and output parameters) to refer
to the transition from t-1 to t, not t to t+1. This means that
the ramping reserves for the transition into the first period are now
optimization variables and the corresponding constraints are explicit.
This is for multiperiod problems only. Ramping reserves and contraints
are explicitly excluded for single-period problems.
Note: This change also corrects an error in (4.11) in the manual. The superscript t on gamma is now correct. Previously it should have been t+1, as it was in the code.
- Fix tests that were failing under Octave 7.x.
- Fix bug in
plot_uc()
that prevented it from working properly in a subplot, such as int_most_uc()
. Thanks to Lim Han.
Requires MATPOWER with 7.1 or later (for MP-Opt-Model 3.0 or later).
- Release 1.1.
- Use
opt_model.get_soln()
to extract variable and shadow price results, rather than doing the indexing manually.
- Convert to using
opt_model.solve()
method rather than callingmiqps_matpower()
orqps_matpower()
directly. - INCOMPATIBLE CHANGE: Update objective function value returned in
mdo.QP.f
to include the previously missing constant term.
- Fix issue #16, where the
om
field of the output MOST data struct (mdo
) was a handle to the same object as as theom
field of the input MOST data struct (mdi
), meaning that changing one would modify the other. Thanks to Baraa Mohandes.
- Update
most_summary
to include sections for fixed loads and storage expected stored energy. Thanks to Baraa Mohandes. - Move assembly of constraints and variable bounds inside the
build_model
conditional. Thanks to Baraa Mohandes.
- Fix bug #6 where building a model without solving it, or solving a previously built model resulted in a fatal error. Thanks to Baraa Mohandes.
- Fix bug #11 where storage constraints were not correct for
t=1 and
rho ~= 1
. Thanks to Baraa Mohandes.
- Release 1.0.2.
- Add
CITATION
file. - Other miscellaneous documentation updates, e.g. MATPOWER website links updated to https://matpower.org, separate references for MATPOWER software and User's Manual, with DOIs.
- Fix selection of default solver for
t_most_w_ds
and add option to specify solver directly in optional input arg.
- Release 1.0.1.
- INCOMPATIBLE CHANGE: Failure of the optimization no longer halts execution and jumps to the debugger.
- Add
success
flag tomd.results
output MOST Data struct to indicate success or failure of optimization.
- Fix bugs in
plot_uc_data()
resulting in incorrect legends.
- Replace
clock()
/etime()
withtic()
/toc()
for timing.
- Fix bug #1 in
loadmd()
where profiles that modify xGenData or StorageData resulted in a fatal error.
- Update for
opt_model
API cleanup.
- Use MATPOWER's new quadratic costs in
opt_model
in place of the legacy cost model.
- Switch to OOP notation everywhere for
opt_model
object, e.g.om.method()
. - Use
om.init_indexed_name()
instead of deprecated form of calls toadd_vars()
,add_constraints()
oradd_costs()
. - Use
om.add_lin_constraint()
in place of deprecatedadd_constraints()
.
- Fix dimension of
RampWear
cost indexing ifmdi.OpenEnded
is true. - Add missing constant term to objective function value reported
by
most_summary
.
- Add MOST User's Manual to
docs
and sources todocs/src
.
- Add Travis-CI integration. Thanks to Richard Lincoln.
- Released 1.0.
- Moved development to GitHub: https://github.com/MATPOWER/most.
- no changes from v1.0b2
- Silence some warnings during tests on Octave 4.2.
- Released 1.0b2.
- Fixed some MOSEK related issues in tests and tutorial examples.
- Released 1.0b1.
- Put checks in
loadmd()
andmost()
to require internal bus ordering formpc
, plus explicit notes in documentation.
- Rename example files in
most/t
to start withex_
instead ofeg_
.
- Add MATPOWER option
most.fixed_res
with default of -1 (depends on presence ofmd.FixedReserves
) to controlmd.IncludeFixedReserves
. - Move fixed zonal reserve output fields (
R
,prc
,mu.l
,m.u
,m.Pmax
,totalcost
) frommdo.FixedReserves(t,j,k)
tomdo.flow(t,j,k).mpc.reserves
.
- Add
most_summary()
function to summarize and print some summary results. Moved from some of the test files into its own public function. (Still very incomplete). - For consistency, rename MOST data struct variables everywhere to
mdi
(input) fromIstr
,md_in
, andmdin
, and tomdo
(output) fromOstr
,md_out
, andmdout
. - Rename
md.idx
fields for dimensions of dynamic system constraints.nyo
-->nyds
nzd
-->nzds
nyt
-->ntds
- (Tentatively) modify
md_init()
to initialize only what is needed to runloadmd()
andmost()
.
- Renamed
mops
tomost
, and re-wrote history below accordingly.
- Fixed fatal crash triggered by failed solve with
verbose
option off.
- Added
ExpectedTerminalStorageMax
,ExpectedTerminalStorageMin
tomd.Storage
andStorageData
structs. If presentExpectedTerminalStorageAim
now simply overwrites both.
- Renamed
apply_contingency()
toapply_changes()
and moved from sopf to matpower.
- Fixed bug preventing proper printing of exit flag on failed solve.
- Added
mpopt
as optional second argument tomost()
.
- Removed all of the old indexing fields from
md_init()
. - Added
most
tohave_fcn()
. - Added
most
options tompoption()
, addedmpoption_info_most()
.
- Renamed
loadmpsd()
toloadmd()
,mpsd_init()
tomd_init()
,mpsd
tomd
.
- Added
plot_uc()
function for plotting unit commitment schedules.
- Moved lots of
mpsopf
related files tomatpower/dist/most
temporarily. - Commented out call to
oldidx()
.
- In
loadmpsd()
xgd.CommitKey
must be non-empty (in addition to just being present) in order to process unit commitment fields.
- Added
fixed_gencost
field to flow-specificmpc
fields to save the fixed cost portion that is removed fromgencost
, to allow for computation of full flow-specific generator costs from solution.
- Modified
filter_ramp_transitions()
to multiply conditional probability of transition by conditional probability of being in source state (assuming we've made it to that period) before applying cutoff threshold. This will typically cut off more transitions for the same threshold value. - Minor fixes, updates to
plot_gen()
.
- Forked development from
mpsopfl_fixed_res()
, which is currently identical except for function names in error messages.