diff --git a/CHANGES.md b/CHANGES.md index 511e37f..9b8a9ee 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -2,8 +2,11 @@ Change history for MP-Opt-Model =============================== -since last release ------------------- +Version 3.0 - *Oct 8, 2020* +--------------------------- + +#### 10/8/20 + - Release 3.0. #### 9/23/20 - Move `have_feature()` to [MP-Test][8] and respective feature detection @@ -83,7 +86,7 @@ since last release Version 2.1 - *Aug 25, 2020* ---------------------------- +---------------------------- #### 8/25/20 - Release 2.1. diff --git a/CITATION b/CITATION index d5d1dcb..6d6aa0d 100644 --- a/CITATION +++ b/CITATION @@ -1,11 +1,11 @@ We request that publications derived from the use of MP-Opt-Model explicitly acknowledge that fact by citing the MP-Opt-Model User's Manual. The citation and DOI can be version-specific or general, as -appropriate. For version 2.1, use: +appropriate. For version 3.0, use: - R. D. Zimmerman. MP-Opt-Model User's Manual, Version 2.1. 2020. - [Online]. Available: https://matpower.org/docs/MP-Opt-Model-manual-2.1.pdf - doi: 10.5281/zenodo.4001106 + R. D. Zimmerman. MP-Opt-Model User's Manual, Version 3.0. 2020. + [Online]. Available: https://matpower.org/docs/MP-Opt-Model-manual-3.0.pdf + doi: 10.5281/zenodo.4073361 For a version non-specific citation, use the following citation and DOI, with *\* replaced by the year of the most recent release: diff --git a/README.md b/README.md index 4c81db7..73c88c2 100644 --- a/README.md +++ b/README.md @@ -48,20 +48,20 @@ of MATLAB or Octave, including setting up your MATLAB path. [MIPS][6]) The result should resemble the following: ``` >> test_mp_opt_model - t_nested_struct_copy....ok t_have_fcn..............ok + t_nested_struct_copy....ok t_nleqs_master..........ok (30 of 150 skipped) - t_qps_master............ok (100 of 396 skipped) + t_qps_master............ok (100 of 432 skipped) t_miqps_master..........ok (68 of 288 skipped) t_nlps_master...........ok t_opt_model.............ok t_om_solve_leqs.........ok - t_om_solve_nleqs........ok (36 of 170 skipped) - t_om_solve_qps..........ok (79 of 319 skipped) - t_om_solve_miqps........ok (12 of 72 skipped) + t_om_solve_nleqs........ok (36 of 194 skipped) + t_om_solve_qps..........ok (81 of 387 skipped) + t_om_solve_miqps........ok (14 of 118 skipped) t_om_solve_nlps.........ok - All tests successful (2713 passed, 325 skipped of 3038) - Elapsed time 3.37 seconds. + All tests successful (3032 passed, 329 skipped of 3361) + Elapsed time 3.11 seconds. ``` Sample Usage @@ -199,11 +199,11 @@ function, e.g.: `qps_master`, `miqps_master`, and `nlps_master`. We request that publications derived from the use of MP-Opt-Model explicitly acknowledge that fact by citing the [MP-Opt-Model User's Manual][7]. The citation and DOI can be version-specific or general, as appropriate. -For version 2.1, use: +For version 3.0, use: -> R. D. Zimmerman. *MP-Opt-Model User's Manual, Version 2.1*. 2020. - [Online]. Available: https://matpower.org/docs/MP-Opt-Model-manual-2.1.pdf - doi: [10.5281/zenodo.4001106](https://doi.org/10.5281/zenodo.4001106) +> R. D. Zimmerman. *MP-Opt-Model User's Manual, Version 3.0*. 2020. + [Online]. Available: https://matpower.org/docs/MP-Opt-Model-manual-3.0.pdf + doi: [10.5281/zenodo.4073361](https://doi.org/10.5281/zenodo.4073361) For a version non-specific citation, use the following citation and DOI, with *\* replaced by the year of the most recent release: diff --git a/docs/MP-Opt-Model-manual.pdf b/docs/MP-Opt-Model-manual.pdf index 1aef093..17d2df2 100644 Binary files a/docs/MP-Opt-Model-manual.pdf and b/docs/MP-Opt-Model-manual.pdf differ diff --git a/docs/relnotes/MP-Opt-Model-Release-Notes-3.0.md b/docs/relnotes/MP-Opt-Model-Release-Notes-3.0.md new file mode 100644 index 0000000..f4d24ef --- /dev/null +++ b/docs/relnotes/MP-Opt-Model-Release-Notes-3.0.md @@ -0,0 +1,61 @@ +What's New in MP-Opt-Model 3.0 +------------------------------ + +#### Released October 8, 2020 + +Below is a summary of the changes since version 2.1 of MP-Opt-Model. See +the [`CHANGES.md`][1] file for all the gory details. For release notes +for previous versions, see Appendix C of the [MP-Opt-Model User's +Manual][2]. + + +#### New Features + - Support for [OSQP][3] solver for LP and QP problems (https://osqp.org). + - Support for modifying parameters of an existing MP-Opt-Model object. + - Support for extracting specific named/indexed variables, costs, constraint + values and shadow prices, etc. from a solved MP-Opt-Model object. + - Results of the `solve()` method saved to the `soln` field of the + MP-Opt-Model object. + - Allow `v0`, `vl`, and `vu` inputs to `opt_model/add_var()` method, and + `l` and `u` inputs to `opt_model/add_lin_constraint()` to be scalars + that get expanded automatically to the appropriate vector dimension. + - New functions: + - `opt_model/set_params()` method modifies parameters for a given named + set of existing variables, costs, or constraints of an MP-Opt-Model + object. + - `opt_model/get_soln()` method extracts solved results for a given + named set of variables, constraints or costs. + - `opt_model/parse_soln()` method returns a complete set of solution + vector and shadow price values for a solved model. + - `opt_model/eval_lin_constraint()` method computes the constraint values + for the full set or an individual named subset of linear constraints. + - `qps_osqp()` provides standardized interface for using [OSQP][3] to + solve LP/QP problems + - `osqp_options()` initializes options for [OSQP][3] solver + - `osqpver()` returns/displays version information for [OSQP][3] + - ... plus 29 individual feature detection functions for + `have_feature()`, see Table A-7 in the [MP-Opt-Model User's Manual][2] + for details. + +#### Bugs Fixed: + - Starting point supplied to `solve()` via `opt.x0` is no longer ignored + for nonlinear equations. + - Calling `params_var()` method with empty `idx` no longer results in + fatal error. + - For `opt_model`, incorrect evaluation of constant term has been fixed for + vector valued quadratic costs with constant term supplied as a vector. + +#### Other Changes + - Simplified logic to determine whether a quadratic cost for an + MP-Opt-Model object is vector vs. scalar valued. If the quadratic + coefficient is supplied as a matrix, the cost is scalar varied, + otherwise it is vector valued. + - Deprecated `have_fcn()` and make it a simple wrapper around the new + modular and extensible `have_feature()`, which has now been moved to + [MP-Test][4] (https://github.com/MATPOWER/mptest). + + +[1]: ../../CHANGES.md +[2]: ../MP-Opt-Model-manual.pdf +[3]: https://osqp.org +[4]: https://github.com/MATPOWER/mptest diff --git a/docs/src/MP-Opt-Model-manual/MIPS-manual.aux b/docs/src/MP-Opt-Model-manual/MIPS-manual.aux index 6dd17b4..48662fe 100644 --- a/docs/src/MP-Opt-Model-manual/MIPS-manual.aux +++ b/docs/src/MP-Opt-Model-manual/MIPS-manual.aux @@ -65,21 +65,21 @@ \newlabel{tab:mips_input}{{3\unhbox \voidb@x \hbox {-}1}{11}{Input Arguments for \code {mips}\tnote {\dag }\relax }{table.caption.4}{}} \@writefile{lot}{\contentsline {table}{\numberline {3\unhbox \voidb@x \hbox {-}2}{\ignorespaces Output Arguments for {\relsize {-0.5}{\tt {{mips}}}}\relax }}{12}{table.caption.6}\protected@file@percent } \newlabel{tab:mips_output}{{3\unhbox \voidb@x \hbox {-}2}{12}{Output Arguments for \code {mips}\relax }{table.caption.6}{}} -\@writefile{toc}{\contentsline {subsection}{\numberline {3.1}Example 1}{12}{subsection.3.1}\protected@file@percent } -\newlabel{sec:ex1}{{3.1}{12}{Example 1}{subsection.3.1}{}} -\@writefile{lot}{\contentsline {table}{\numberline {3\unhbox \voidb@x \hbox {-}3}{\ignorespaces Options for {\relsize {-0.5}{\tt {{mips}}}}\TPToverlap {\textsuperscript {\dag }}\relax }}{13}{table.caption.8}\protected@file@percent } -\newlabel{tab:mips_options}{{3\unhbox \voidb@x \hbox {-}3}{13}{Options for \code {mips}\tnote {\dag }\relax }{table.caption.8}{}} +\@writefile{lot}{\contentsline {table}{\numberline {3\unhbox \voidb@x \hbox {-}3}{\ignorespaces Options for {\relsize {-0.5}{\tt {{mips}}}}\relax }}{13}{table.caption.8}\protected@file@percent } +\newlabel{tab:mips_options}{{3\unhbox \voidb@x \hbox {-}3}{13}{Options for \code {mips}\relax }{table.caption.8}{}} \@writefile{brf}{\backcite{wang2007a}{{13}{3\unhbox \voidb@x \hbox {-}3}{table.caption.8}}} \@writefile{brf}{\backcite{wang2007a}{{13}{3\unhbox \voidb@x \hbox {-}3}{table.caption.8}}} -\@writefile{toc}{\contentsline {subsection}{\numberline {3.2}Example 2}{14}{subsection.3.2}\protected@file@percent } -\newlabel{sec:ex2}{{3.2}{14}{Example 2}{subsection.3.2}{}} +\@writefile{toc}{\contentsline {subsection}{\numberline {3.1}Example 1}{14}{subsection.3.1}\protected@file@percent } +\newlabel{sec:ex1}{{3.1}{14}{Example 1}{subsection.3.1}{}} +\@writefile{toc}{\contentsline {subsection}{\numberline {3.2}Example 2}{15}{subsection.3.2}\protected@file@percent } +\newlabel{sec:ex2}{{3.2}{15}{Example 2}{subsection.3.2}{}} \citation{wang2007a,wang2007} -\@writefile{toc}{\contentsline {subsection}{\numberline {3.3}Primal-Dual Interior Point Algorithm}{16}{subsection.3.3}\protected@file@percent } -\@writefile{brf}{\backcite{wang2007a, wang2007}{{16}{3.3}{subsection.3.3}}} -\@writefile{toc}{\contentsline {subsubsection}{\numberline {3.3.1}Notation}{16}{subsubsection.3.3.1}\protected@file@percent } -\@writefile{toc}{\contentsline {subsubsection}{\numberline {3.3.2}Problem Formulation and Lagrangian}{17}{subsubsection.3.3.2}\protected@file@percent } +\@writefile{toc}{\contentsline {subsection}{\numberline {3.3}Primal-Dual Interior Point Algorithm}{17}{subsection.3.3}\protected@file@percent } +\@writefile{brf}{\backcite{wang2007a, wang2007}{{17}{3.3}{subsection.3.3}}} +\@writefile{toc}{\contentsline {subsubsection}{\numberline {3.3.1}Notation}{17}{subsubsection.3.3.1}\protected@file@percent } +\@writefile{toc}{\contentsline {subsubsection}{\numberline {3.3.2}Problem Formulation and Lagrangian}{18}{subsubsection.3.3.2}\protected@file@percent } \newlabel{eq:L}{{3.23}{18}{Problem Formulation and Lagrangian}{equation.3.23}{}} -\@writefile{toc}{\contentsline {subsubsection}{\numberline {3.3.3}First Order Optimality Conditions}{18}{subsubsection.3.3.3}\protected@file@percent } +\@writefile{toc}{\contentsline {subsubsection}{\numberline {3.3.3}First Order Optimality Conditions}{19}{subsubsection.3.3.3}\protected@file@percent } \@writefile{toc}{\contentsline {subsubsection}{\numberline {3.3.4}Newton Step}{19}{subsubsection.3.3.4}\protected@file@percent } \newlabel{eq:newton_step}{{3.34}{19}{Newton Step}{equation.3.34}{}} \newlabel{eq:2nd_row}{{3.35}{19}{Newton Step}{equation.3.35}{}} @@ -94,36 +94,47 @@ \newlabel{sec:mplinsolve}{{4.1}{22}{Linear System Solver - {\tt mplinsolve}}{subsection.4.1}{}} \@writefile{toc}{\contentsline {subsection}{\numberline {4.2}Quadratic Programming Solver - {\tt qps\_mips}}{22}{subsection.4.2}\protected@file@percent } \newlabel{sec:qps_mips}{{4.2}{22}{Quadratic Programming Solver - {\tt qps\_mips}}{subsection.4.2}{}} -\@writefile{toc}{\contentsline {section}{Appendix \numberline {A}{MIPS}{} Files and Functions}{24}{Appendix.1.A}\protected@file@percent } -\newlabel{app:functions}{{A}{24}{\mips {} Files and Functions}{Appendix.1.A}{}} -\@writefile{lot}{\contentsline {table}{\numberline {A\unhbox \voidb@x \hbox {-}1}{\ignorespaces {MIPS}{} Files and Functions\relax }}{24}{table.caption.10}\protected@file@percent } -\newlabel{tab:files}{{A\unhbox \voidb@x \hbox {-}1}{24}{\mips {} Files and Functions\relax }{table.caption.10}{}} +\@writefile{toc}{\contentsline {subsection}{\numberline {4.3}Private Feature Detection Functions}{23}{subsection.4.3}\protected@file@percent } +\newlabel{sec:featuredetection}{{4.3}{23}{Private Feature Detection Functions}{subsection.4.3}{}} +\@writefile{toc}{\contentsline {subsubsection}{\numberline {4.3.1}\tt have\_feature\_lu\_vec}{23}{subsubsection.4.3.1}\protected@file@percent } +\newlabel{sec:have_feature_lu_vec}{{4.3.1}{23}{\tt have\_feature\_lu\_vec}{subsubsection.4.3.1}{}} +\@writefile{toc}{\contentsline {subsubsection}{\numberline {4.3.2}\tt have\_feature\_pardiso\_legacy}{23}{subsubsection.4.3.2}\protected@file@percent } +\newlabel{sec:have_feature_pardiso_legacy}{{4.3.2}{23}{\tt have\_feature\_pardiso\_legacy}{subsubsection.4.3.2}{}} +\@writefile{toc}{\contentsline {subsubsection}{\numberline {4.3.3}\tt have\_feature\_pardiso\_object}{23}{subsubsection.4.3.3}\protected@file@percent } +\newlabel{sec:have_feature_pardiso_object}{{4.3.3}{23}{\tt have\_feature\_pardiso\_object}{subsubsection.4.3.3}{}} +\@writefile{toc}{\contentsline {subsubsection}{\numberline {4.3.4}\tt have\_feature\_pardiso}{24}{subsubsection.4.3.4}\protected@file@percent } +\newlabel{sec:have_feature_pardiso}{{4.3.4}{24}{\tt have\_feature\_pardiso}{subsubsection.4.3.4}{}} +\@writefile{toc}{\contentsline {section}{\numberline {5}Acknowledgments}{25}{section.5}\protected@file@percent } +\@writefile{toc}{\contentsline {section}{Appendix \numberline {A}{MIPS}{} Files and Functions}{26}{Appendix.1.A}\protected@file@percent } +\newlabel{app:functions}{{A}{26}{\mips {} Files and Functions}{Appendix.1.A}{}} +\@writefile{lot}{\contentsline {table}{\numberline {A\unhbox \voidb@x \hbox {-}1}{\ignorespaces {MIPS}{} Files and Functions\relax }}{26}{table.caption.10}\protected@file@percent } +\newlabel{tab:files}{{A\unhbox \voidb@x \hbox {-}1}{26}{\mips {} Files and Functions\relax }{table.caption.10}{}} \citation{pardiso,pardiso2} -\@writefile{toc}{\contentsline {section}{Appendix \numberline {B}{PARDISO}{} -- Parallel Sparse Direct and Multi-Recursive Iterative Linear Solvers}{25}{Appendix.1.B}\protected@file@percent } -\newlabel{app:pardiso}{{B}{25}{\pardiso {} -- Parallel Sparse Direct and Multi-Recursive Iterative Linear Solvers}{Appendix.1.B}{}} -\@writefile{brf}{\backcite{pardiso, pardiso2}{{25}{B}{Appendix.1.B}}} -\@writefile{toc}{\contentsline {section}{Appendix \numberline {C}Release History}{26}{Appendix.1.C}\protected@file@percent } -\newlabel{app:release_history}{{C}{26}{Release History}{Appendix.1.C}{}} -\@writefile{toc}{\contentsline {subsection}{\numberline {C.1}Version 1.0 -- released Feb 7, 2011}{26}{subsection.1.C.1}\protected@file@percent } -\newlabel{app:v10}{{C.1}{26}{Version 1.0 -- released Feb 7, 2011}{subsection.1.C.1}{}} -\@writefile{toc}{\contentsline {subsection}{\numberline {C.2}Version 1.0.1 -- released Apr 30, 2012}{26}{subsection.1.C.2}\protected@file@percent } -\newlabel{app:v101}{{C.2}{26}{Version 1.0.1 -- released Apr 30, 2012}{subsection.1.C.2}{}} -\@writefile{toc}{\contentsline {subsection}{\numberline {C.3}Version 1.0.2 -- released Nov 5, 2013}{26}{subsection.1.C.3}\protected@file@percent } -\newlabel{app:v102}{{C.3}{26}{Version 1.0.2 -- released Nov 5, 2013}{subsection.1.C.3}{}} -\@writefile{toc}{\contentsline {subsection}{\numberline {C.4}Version 1.1 -- released Dec 17, 2014}{27}{subsection.1.C.4}\protected@file@percent } -\newlabel{app:v11}{{C.4}{27}{Version 1.1 -- released Dec 17, 2014}{subsection.1.C.4}{}} -\@writefile{toc}{\contentsline {subsection}{\numberline {C.5}Version 1.2 -- released Mar 20, 2015}{27}{subsection.1.C.5}\protected@file@percent } -\newlabel{app:v12}{{C.5}{27}{Version 1.2 -- released Mar 20, 2015}{subsection.1.C.5}{}} -\@writefile{toc}{\contentsline {subsection}{\numberline {C.6}Version 1.2.1 -- released Jun 1, 2016}{28}{subsection.1.C.6}\protected@file@percent } -\newlabel{app:v121}{{C.6}{28}{Version 1.2.1 -- released Jun 1, 2016}{subsection.1.C.6}{}} -\@writefile{toc}{\contentsline {subsection}{\numberline {C.7}Version 1.2.2 -- released Dec 16, 2016}{28}{subsection.1.C.7}\protected@file@percent } -\newlabel{app:v122}{{C.7}{28}{Version 1.2.2 -- released Dec 16, 2016}{subsection.1.C.7}{}} -\@writefile{toc}{\contentsline {subsection}{\numberline {C.8}Version 1.3 -- released Oct 30, 2018}{29}{subsection.1.C.8}\protected@file@percent } -\newlabel{app:v13}{{C.8}{29}{Version 1.3 -- released Oct 30, 2018}{subsection.1.C.8}{}} -\@writefile{toc}{\contentsline {subsection}{\numberline {C.9}Version 1.3.1 -- released Jun 20, 2019}{30}{subsection.1.C.9}\protected@file@percent } -\newlabel{app:v131}{{C.9}{30}{Version 1.3.1 -- released Jun 20, 2019}{subsection.1.C.9}{}} -\@writefile{toc}{\contentsline {subsection}{\numberline {C.10}Version 1.3.2? -- released ??? ??, 202?}{30}{subsection.1.C.10}\protected@file@percent } -\newlabel{app:v132}{{C.10}{30}{Version 1.3.2? -- released ??? ??, 202?}{subsection.1.C.10}{}} +\@writefile{toc}{\contentsline {section}{Appendix \numberline {B}{PARDISO}{} -- Parallel Sparse Direct and Multi-Recursive Iterative Linear Solvers}{27}{Appendix.1.B}\protected@file@percent } +\newlabel{app:pardiso}{{B}{27}{\pardiso {} -- Parallel Sparse Direct and Multi-Recursive Iterative Linear Solvers}{Appendix.1.B}{}} +\@writefile{brf}{\backcite{pardiso, pardiso2}{{27}{B}{Appendix.1.B}}} +\@writefile{toc}{\contentsline {section}{Appendix \numberline {C}Release History}{28}{Appendix.1.C}\protected@file@percent } +\newlabel{app:release_history}{{C}{28}{Release History}{Appendix.1.C}{}} +\@writefile{toc}{\contentsline {subsection}{\numberline {C.1}Version 1.0 -- released Feb 7, 2011}{28}{subsection.1.C.1}\protected@file@percent } +\newlabel{app:v10}{{C.1}{28}{Version 1.0 -- released Feb 7, 2011}{subsection.1.C.1}{}} +\@writefile{toc}{\contentsline {subsection}{\numberline {C.2}Version 1.0.1 -- released Apr 30, 2012}{28}{subsection.1.C.2}\protected@file@percent } +\newlabel{app:v101}{{C.2}{28}{Version 1.0.1 -- released Apr 30, 2012}{subsection.1.C.2}{}} +\@writefile{toc}{\contentsline {subsection}{\numberline {C.3}Version 1.0.2 -- released Nov 5, 2013}{28}{subsection.1.C.3}\protected@file@percent } +\newlabel{app:v102}{{C.3}{28}{Version 1.0.2 -- released Nov 5, 2013}{subsection.1.C.3}{}} +\@writefile{toc}{\contentsline {subsection}{\numberline {C.4}Version 1.1 -- released Dec 17, 2014}{29}{subsection.1.C.4}\protected@file@percent } +\newlabel{app:v11}{{C.4}{29}{Version 1.1 -- released Dec 17, 2014}{subsection.1.C.4}{}} +\@writefile{toc}{\contentsline {subsection}{\numberline {C.5}Version 1.2 -- released Mar 20, 2015}{29}{subsection.1.C.5}\protected@file@percent } +\newlabel{app:v12}{{C.5}{29}{Version 1.2 -- released Mar 20, 2015}{subsection.1.C.5}{}} +\@writefile{toc}{\contentsline {subsection}{\numberline {C.6}Version 1.2.1 -- released Jun 1, 2016}{30}{subsection.1.C.6}\protected@file@percent } +\newlabel{app:v121}{{C.6}{30}{Version 1.2.1 -- released Jun 1, 2016}{subsection.1.C.6}{}} +\@writefile{toc}{\contentsline {subsection}{\numberline {C.7}Version 1.2.2 -- released Dec 16, 2016}{30}{subsection.1.C.7}\protected@file@percent } +\newlabel{app:v122}{{C.7}{30}{Version 1.2.2 -- released Dec 16, 2016}{subsection.1.C.7}{}} +\@writefile{toc}{\contentsline {subsection}{\numberline {C.8}Version 1.3 -- released Oct 30, 2018}{31}{subsection.1.C.8}\protected@file@percent } +\newlabel{app:v13}{{C.8}{31}{Version 1.3 -- released Oct 30, 2018}{subsection.1.C.8}{}} +\@writefile{toc}{\contentsline {subsection}{\numberline {C.9}Version 1.3.1 -- released Jun 20, 2019}{32}{subsection.1.C.9}\protected@file@percent } +\newlabel{app:v131}{{C.9}{32}{Version 1.3.1 -- released Jun 20, 2019}{subsection.1.C.9}{}} +\@writefile{toc}{\contentsline {subsection}{\numberline {C.10}Version 1.4 -- released Oct 8, 2020}{32}{subsection.1.C.10}\protected@file@percent } +\newlabel{app:v14}{{C.10}{32}{Version 1.4 -- released Oct 8, 2020}{subsection.1.C.10}{}} \bibcite{tspopf}{1} \bibcite{wang2007a}{2} \bibcite{wang2007}{3} @@ -134,5 +145,5 @@ \bibcite{bsd}{8} \bibcite{gpl}{9} \bibcite{pardiso}{10} -\@writefile{toc}{\contentsline {section}{References}{31}{section*.29}\protected@file@percent } +\@writefile{toc}{\contentsline {section}{References}{34}{section*.30}\protected@file@percent } \bibcite{pardiso2}{11} diff --git a/docs/src/MP-Opt-Model-manual/MP-Opt-Model-manual.tex b/docs/src/MP-Opt-Model-manual/MP-Opt-Model-manual.tex index fa5272b..c0d0893 100644 --- a/docs/src/MP-Opt-Model-manual/MP-Opt-Model-manual.tex +++ b/docs/src/MP-Opt-Model-manual/MP-Opt-Model-manual.tex @@ -129,7 +129,7 @@ %\hyphenation{matpower_manual} -\newcommand{\mpver}[0]{7.0} +\newcommand{\mpver}[0]{7.1} %\newcommand{\matlab}[0]{{Matlab}} %\newcommand{\matlab}[0]{{\sc Matlab}\textsuperscript{\tiny \textregistered}} \newcommand{\matlab}[0]{{\sc Matlab}} @@ -140,21 +140,22 @@ \newcommand{\mptest}[0]{{MP-Test}} \newcommand{\mptesturl}[0]{https://github.com/MATPOWER/mptest} \newcommand{\mptestlink}[0]{\href{\mptesturl}{\mptest{}}} +\newcommand{\mptestver}[0]{7.1} \newcommand{\mips}[0]{{MIPS}} \newcommand{\mipsurl}[0]{https://github.com/MATPOWER/mips} \newcommand{\mipslink}[0]{\href{\mipsurl}{\mips{}}} \newcommand{\mipsname}[0]{{{\bf M}{\sc atpower} \textbf{I}nterior \textbf{P}oint \textbf{S}olver}} -\newcommand{\mipsver}[0]{1.3.1} +\newcommand{\mipsver}[0]{1.4} \newcommand{\mpom}[0]{\mbox{MP-Opt-Model}} \newcommand{\mpomurl}[0]{https://github.com/MATPOWER/mp-opt-model} \newcommand{\mpomlink}[0]{\href{\mpomurl}{\mpom{}}} \newcommand{\mpomname}[0]{\mpom{}} % \newcommand{\mpomname}[0]{{{\bf M}{\sc at}{\bf P}{\sc ower} \textbf{Opt}imization \textbf{Model}}} -\newcommand{\mpomver}[0]{3.0-dev} +\newcommand{\mpomver}[0]{3.0} \newcommand{\most}[0]{{MOST}} \newcommand{\mostname}[0]{{{\bf M}{\sc atpower} \textbf{O}ptimal \textbf{S}cheduling \textbf{T}ool}} \newcommand{\mosturl}[0]{https://github.com/MATPOWER/most} -\newcommand{\mostver}[0]{1.0.2} +\newcommand{\mostver}[0]{1.1} \newcommand{\syngrid}[0]{{SynGrid}} \newcommand{\syngridver}[0]{1.0.1} \newcommand{\syngridurl}[0]{https://github.com/MATPOWER/mx-syngrid} @@ -177,10 +178,11 @@ \newcommand{\gurobi}[0]{{Gurobi}} \newcommand{\mosek}[0]{{MOSEK}} \newcommand{\osqp}[0]{{OSQP}} +\newcommand{\osqplink}[0]{{\href{https://osqp.org}{\osqp}}} \newcommand{\ot}[0]{{Optimization Toolbox}} \newcommand{\pardiso}[0]{{PARDISO}} \newcommand{\sdppf}[0]{\texttt{SDP\_PF}} -\newcommand{\sdppfver}[0]{1.0.1} +\newcommand{\sdppfver}[0]{1.0.2} \newcommand{\sdpopf}[0]{SDPOPF} \newcommand{\code}[1]{{\relsize{-0.5}{\tt{{#1}}}}} % requires package relsize % Note: to get straight single quotes in \code you have to use one of the @@ -240,7 +242,7 @@ %\title{\hl{--- DRAFT ---}\\\hl{\em do not distribute}\\~\\{\huge \bfseries \mpomname{} User's Manual } \\ ~ \\ \LARGE Version \mpomver{}\\ \title{{\huge \bfseries \mpomname{} User's Manual } \\ ~ \\ \LARGE Version \mpomver{}} \author{Ray~D.~Zimmerman} -%\date{August 25, 2020} % comment this line to display the current date +\date{October 8, 2020} % comment this line to display the current date %\date{May 8, 2020\thanks{Second revision. First revision was April 29, 2020}} % comment this line to display the current date %%% BEGIN DOCUMENT @@ -325,12 +327,12 @@ \subsection{License and Terms of Use} \subsection{Citing \mpom{}} We request that publications derived from the use of \mpom{} explicitly acknowledge that fact by citing the \mpomname{} User's Manual~\cite{mpom_manual}. -The citation and DOI can be version-specific or general, as appropriate. For version 2.1, use: +The citation and DOI can be version-specific or general, as appropriate. For version 3.0, use: \begin{quote} \footnotesize -R.~D. Zimmerman. \mpomname{} User's Manual, Verision 2.1. 2020. [Online]. Available: \url{https://matpower.org/docs/MP-Opt-Model-manual-2.1.pdf}\\ -\doi{10.5281/zenodo.4001106} +R.~D. Zimmerman. \mpomname{} User's Manual, Verision 3.0. 2020. [Online]. Available: \url{https://matpower.org/docs/MP-Opt-Model-manual-3.0.pdf}\\ +\doi{10.5281/zenodo.4073361} \end{quote} For a version non-specific citation, use the following citation and DOI, with \emph{\textless{}YEAR\textgreater{}} replaced by the year of the most recent release: @@ -406,20 +408,20 @@ \subsection{Installation} %\\\hl{re-do before release (run on fastest machine available)} \begin{Code} >> test_mp_opt_model -t_nested_struct_copy....ok t_have_fcn..............ok +t_nested_struct_copy....ok t_nleqs_master..........ok (30 of 150 skipped) -t_qps_master............ok (100 of 396 skipped) +t_qps_master............ok (100 of 432 skipped) t_miqps_master..........ok (68 of 288 skipped) t_nlps_master...........ok t_opt_model.............ok t_om_solve_leqs.........ok -t_om_solve_nleqs........ok (36 of 170 skipped) -t_om_solve_qps..........ok (79 of 319 skipped) -t_om_solve_miqps........ok (12 of 72 skipped) +t_om_solve_nleqs........ok (36 of 194 skipped) +t_om_solve_qps..........ok (81 of 387 skipped) +t_om_solve_miqps........ok (14 of 118 skipped) t_om_solve_nlps.........ok -All tests successful (2713 passed, 325 skipped of 3038) -Elapsed time 3.29 seconds. +All tests successful (3032 passed, 329 skipped of 3361) +Elapsed time 3.11 seconds. \end{Code} \end{enumerate} @@ -1132,7 +1134,7 @@ \subsubsection{NLP Example 2} \end{Code} \begin{Code} >> nlps_master_ex2 -MATPOWER Interior Point Solver -- MIPS, Version 1.3.1, 20-Jun-2019 +MATPOWER Interior Point Solver -- MIPS, Version 1.4, 08-Oct-2020 (using built-in linear solver) it objective step size feascond gradcond compcond costcond ---- ------------ --------- ------------ ------------ ------------ ------------ @@ -3598,6 +3600,7 @@ \subsubsection*{Bugs Fixed} \subsubsection*{Incompatible Changes} \begin{itemize} +\item Modify order of default output arguments of \code{opt\_model/get\_idx()} (again), removing the one related to legacy costs. \item \mpom{} has renamed the following functions and modified the order of their input args so that the \mpom{} object appears first. Ideally, these would be defined as methods of the \code{opt\_model} class, but Octave 4.2 and earlier is not able to find them via a function handle (as used in the \code{solve()} method) if they are inherited by a sub-class. \begin{itemize} \item \code{opf\_consfcn()} $\rightarrow$ \code{nlp\_consfcn()} @@ -3651,7 +3654,7 @@ \subsubsection*{Other Changes} \item Skip evaluation of gradient if \code{eval\_nln\_constraint()} is called with a single output argument. \item Remove redundant MIPS tests from \code{test\_mp\_opt\_model.m}. \item Add tests for solving LP/QP, MILP/MIQP, NLP and NLEQ problems via \code{opt\_model/solve()}. -\item Add Table~\ref{tab:have_feature_tags} of valid \code{have\_fcn()} input tags to User's Manual. +\item Add Table~6.1 of valid \code{have\_fcn()} input tags to User's Manual. \end{itemize} @@ -3682,16 +3685,16 @@ \subsubsection*{Incompatible Changes} \clearpage -\subsection{Version 3.0 -- released ??? ?, 202?} +\subsection{Version 3.0 -- released Oct 8, 2020} \label{app:v30} The \href{https://matpower.org/docs/MP-Opt-Model-manual-3.0.pdf}{\mpom{} 3.0 User's Manual} is available online.\footnote{\url{https://matpower.org/docs/MP-Opt-Model-manual-3.0.pdf}} \subsubsection*{New Features} \begin{itemize} -\item Support for \osqp{} solver from \url{https://osqp.org} for LP and QP problems. +\item Support for \osqplink{} solver for LP and QP problems (\url{https://osqp.org}). \item Support for modifying parameters of an existing \mpom{} object. -\item Support for extracting specific named/indexed variables, costs, constraint values and shadow prices, etc. from a solved \mpom{} object. +\item Support for extracting specific named/indexed variables, costs, constraint values and shadow prices, etc. from a solved \mpom{} object. \item Results of the \code{solve()} method saved to the \code{soln} field of the \mpom{} object. \item Allow \code{v0}, \code{vl}, and \code{vu} inputs to \code{opt\_model/add\_var()} method, and \code{l} and \code{u} inputs to \code{opt\_model/add\_lin\_constraint()} to be scalars that get expanded automatically to the appropriate vector dimension. \item New functions: @@ -3700,10 +3703,10 @@ \subsubsection*{New Features} \item \code{opt\_model/get\_soln()} method extracts solved results for a given named set of variables, constraints or costs. \item \code{opt\_model/parse\_soln()} method returns a complete set of solution vector and shadow price values for a solved model. \item \code{opt\_model/eval\_lin\_constraint()} method computes the constraint values for the full set or an individual named subset of linear constraints. - \item \code{qps\_osqp()} provides standardized interface for using \osqp{} to solve LP/QP problems - \item \code{osqp\_options()} initializes options for \osqp{} solver - \item \code{osqpver()} returns/displays version information for \osqp{} - \item \dots plus 28 individual feature detection functions for \code{have\_feature()}, see Table~\ref{tab:have_feature_fcns} for details. + \item \code{qps\_osqp()} provides standardized interface for using \osqplink{} to solve LP/QP problems + \item \code{osqp\_options()} initializes options for \osqplink{} solver + \item \code{osqpver()} returns/displays version information for \osqplink{} + \item \dots plus 29 individual feature detection functions for \code{have\_feature()}, see Table~\ref{tab:have_feature_fcns} for details. \end{itemize} \end{itemize} @@ -3711,13 +3714,13 @@ \subsubsection*{Bugs Fixed} \begin{itemize} \item Starting point supplied to \code{solve()} via \code{opt.x0} is no longer ignored for nonlinear equations. \item Calling \code{params\_var()} method with empty \code{idx} no longer results in fatal error. -\item For \code{opt\_model}, fixed incorrect evaluation of constant term in vector valued quadratic costs with constant term supplied as a vector. +\item For \code{opt\_model}, incorrect evaluation of constant term has been fixed for vector valued quadratic costs with constant term supplied as a vector. \end{itemize} \subsubsection*{Other Changes} \begin{itemize} \item Simplified logic to determine whether a quadratic cost for an \mpom{} object is vector vs. scalar valued. If the quadratic coefficient is supplied as a matrix, the cost is scalar varied, otherwise it is vector valued. -\item Deprecate \code{have\_fcn()} and make it a simple wrapper around the new modular and extensible \code{have\_feature()}, which has now been moved to \mptestlink{}. +\item Deprecated \code{have\_fcn()} and made it a simple wrapper around the new modular and extensible \code{have\_feature()}, which has now been moved to \mptestlink{}.\footnote{\mptestlink{} is available at \url{\mptesturl}.} \end{itemize} @@ -3781,7 +3784,7 @@ \subsubsection*{Other Changes} \doi{10.1109/TPWRS.2007.901301} \bibitem{mips_manual} -R.~D. Zimmerman, H.~Wang. \mipsname{} (\mips{}) User's Manual. 2019. +R.~D. Zimmerman, H.~Wang. \mipsname{} (\mips{}) User's Manual. 2020. [Online]. Available: \url{https://matpower.org/docs/MIPS-manual.pdf}\\ \doi{10.5281/zenodo.3236506} diff --git a/lib/Contents.m b/lib/Contents.m index 871f128..6d60105 100644 --- a/lib/Contents.m +++ b/lib/Contents.m @@ -1,5 +1,5 @@ % MP-Opt-Model -% Version 2.1 25-Aug-2020 +% Version 3.0 08-Oct-2020 % % MP-Opt-Model is a package of MATLAB/Octave M-files for constructing % and solving mathematical optimization problems. It provides an diff --git a/lib/mpomver.m b/lib/mpomver.m index 6d08e48..3ed8d60 100644 --- a/lib/mpomver.m +++ b/lib/mpomver.m @@ -17,9 +17,9 @@ % See https://github.com/MATPOWER/mp-opt-model for more info. v = struct( 'Name', 'MP-Opt-Model', ... - 'Version', '3.0-dev', ... + 'Version', '3.0', ... 'Release', '', ... - 'Date', '23-Sep-2020' ); + 'Date', '08-Oct-2020' ); if nargout > 0 if nargin > 0 rv = v;