You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
* remove prfit!, place NLopt support in submodule
* Placing NLopt support into a submodule will make it easier to move NLopt to an extension and promote PRIMA to the default backend.
* Unfortunately, the profiling code still has been explicit assumptions around NLopt.
* refactor profiling to be optimizer independent
* update imports
* docs
* fix figure rendering
---------
Co-authored-by: Douglas Bates <dmbates@gmail.com>
Copy file name to clipboardExpand all lines: NEWS.md
+5-3Lines changed: 5 additions & 3 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -1,9 +1,11 @@
1
1
MixedModels v5.0.0 Release Notes
2
2
==============================
3
-
- Optimization is now performed _without constraints_. In a post-fitting step, the the Cholesky factor is canonicalized to have non-negative diagonal elements. [#840]
4
-
- The default optimizer has changed to NLopt's implementation of NEWUOA where possible. NLopt's implementation fails on 1-dimensional problems, so in the case A single, scalar random effect, BOBYQA is used instead. In the future, the default optimizer backend will likely change to PRIMA and NLopt support will be moved to an extension. Blocking this change in backend is an issue with PRIMA.jl when running in VSCode's built-in REPL on Linux. [#840]
3
+
- Optimization is now performed _without constraints_. In a post-fitting step, the Cholesky factor is canonicalized to have non-negative diagonal elements. [#840]
4
+
- The default optimizer has changed to NLopt's implementation of NEWUOA where possible. NLopt's implementation fails on 1-dimensional problems, so in the case of a single, scalar random effect, BOBYQA is used instead. In the future, the default optimizer backend will likely change to PRIMA and NLopt support will be moved to an extension. Blocking this change in backend is an issue with PRIMA.jl when running in VSCode's built-in REPL on Linux. [#840]
5
5
-[BREAKING] Support for constrained optimization has been completely removed, i.e. the field `lowerbd` has been removed from `OptSummary`.
6
-
6
+
- Internal code around the default optimizer has been restructured. In particular, the NLopt backend has been moved to a submodule, which will make it easier to move it to an extension if we promote another backend to the default. [#853]
7
+
- Internal code around optimization in profiling has been restructuring so that fitting done during calls to `profile` respect the `backend` and `optimizer` settings. [#853]
8
+
- The `prfit!` convenience function has been removed. [#853]
Copy file name to clipboardExpand all lines: docs/src/optimization.md
+22-5Lines changed: 22 additions & 5 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -222,16 +222,35 @@ Typically, the (1,1) block is the largest block in `A` and `L` and it has a spec
222
222
`UniformBlockDiagonal`
223
223
providing a compact representation and fast matrix multiplication or solutions of linear systems of equations.
224
224
225
-
###Modifying the optimization process
225
+
## Modifying the optimization process
226
226
227
-
The `OptSummary` object contains both input and output fields for the optimizer.
227
+
The [`OptSummary`](@ref) object contains both input and output fields for the optimizer.
228
228
To modify the optimization process the input fields can be changed after constructing the model but before fitting it.
229
+
In addition to various tolerances, which we will not discuss further here, users can specify the choice of `backend` (i.e., the non-linear optimization library used) and `optimizer` (i.e., the implementation of an algorithm provided by the backend).
230
+
231
+
The current default backend is [NLopt](https://github.com/JuliaOpt/NLopt.jl), which is a direct dependency of MixedModels.jl.
232
+
A [PRIMA](https://github.com/libprima/PRIMA.jl/) backend is also provided as a package extension and thus only
233
+
available when the PRIMA package is loaded.
234
+
The list of currently loaded backends is available as [`MixedModels.OPTIMIZATION_BACKENDS`](@ref).
235
+
For each individual backend, the list of available optimizers can be inspected with the function [`MixedModels.optimizers`](@ref).
236
+
```@example Main
237
+
MixedModels.optimizers(:nlopt)
238
+
```
239
+
Similarly, the list of applicable optimization parameters can be inspected with the function [`MixedModels.opt_params`](@ref).
240
+
```@example Main
241
+
MixedModels.opt_params(:nlopt)
242
+
```
243
+
244
+
!!! note "Optimizer defaults subject to change"
245
+
The choice of default backend and optimizer is subject to change without being considered a breaking change.
246
+
If you want to guarantee a particular backend and optimizer, then you should
247
+
explicitly load the associated backend's package (e.g. NLopt or PRIMA) and manually set the `optimizer` and `backend` fields.
229
248
230
249
Suppose, for example, that the user wishes to try a [Nelder-Mead](https://en.wikipedia.org/wiki/Nelder%E2%80%93Mead_method) optimization method instead of the default [`BOBYQA`](https://en.wikipedia.org/wiki/BOBYQA) (Bounded Optimization BY Quadratic Approximation) method.
Run time can be constrained with `maxfeval` and `maxtime`.
254
273
255
-
See the documentation for the [`NLopt`](https://github.com/JuliaOpt/NLopt.jl) package for details about the various settings.
256
-
257
274
### Convergence to singular covariance matrices
258
275
259
276
To ensure identifiability of $\Sigma_\theta=\sigma^2\Lambda_\theta \Lambda_\theta$, the elements of $\theta$ corresponding to diagonal elements of $\Lambda_\theta$ are constrained to be non-negative.
0 commit comments