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
Copy file name to clipboardExpand all lines: NEWS.md
+7-3Lines changed: 7 additions & 3 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -1,9 +1,13 @@
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`. [#849]
6
-
6
+
-[BREAKING] A fitlog is always kept -- the deprecated keyword argument `thin` has been removed as has the `fitlog` keyword argument. [#850]
7
+
- The fitlog is now stored as Tables.jl-compatible column table. [#850]
8
+
- 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]
9
+
- Internal code around optimization in profiling has been restructuring so that fitting done during calls to `profile` respect the `backend` and `optimizer` settings. [#853]
10
+
- The `prfit!` convenience function has been removed. [#853]
Copy file name to clipboardExpand all lines: docs/src/optimization.md
+22-7Lines changed: 22 additions & 7 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -190,10 +190,8 @@ DisplayAs.Text(ans) # hide
190
190
```
191
191
192
192
More detailed information about the intermediate steps of the nonlinear optimizer can be obtained the `fitlog` field.
193
-
By default, `fitlog` is not populated, but passing the keyword argument `fitlog=true` to `fit!` and `refit!` will result in it being populated with the values obtained at each step of optimization:
194
193
195
194
```@example Main
196
-
refit!(fm2; fitlog=true)
197
195
first(fm2.optsum.fitlog, 5)
198
196
DisplayAs.Text(ans) # hide
199
197
```
@@ -222,16 +220,35 @@ Typically, the (1,1) block is the largest block in `A` and `L` and it has a spec
222
220
`UniformBlockDiagonal`
223
221
providing a compact representation and fast matrix multiplication or solutions of linear systems of equations.
224
222
225
-
###Modifying the optimization process
223
+
## Modifying the optimization process
226
224
227
-
The `OptSummary` object contains both input and output fields for the optimizer.
225
+
The [`OptSummary`](@ref) object contains both input and output fields for the optimizer.
228
226
To modify the optimization process the input fields can be changed after constructing the model but before fitting it.
227
+
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).
228
+
229
+
The current default backend is [NLopt](https://github.com/JuliaOpt/NLopt.jl), which is a direct dependency of MixedModels.jl.
230
+
A [PRIMA](https://github.com/libprima/PRIMA.jl/) backend is also provided as a package extension and thus only
231
+
available when the PRIMA package is loaded.
232
+
The list of currently loaded backends is available as [`MixedModels.OPTIMIZATION_BACKENDS`](@ref).
233
+
For each individual backend, the list of available optimizers can be inspected with the function [`MixedModels.optimizers`](@ref).
234
+
```@example Main
235
+
MixedModels.optimizers(:nlopt)
236
+
```
237
+
Similarly, the list of applicable optimization parameters can be inspected with the function [`MixedModels.opt_params`](@ref).
238
+
```@example Main
239
+
MixedModels.opt_params(:nlopt)
240
+
```
241
+
242
+
!!! note "Optimizer defaults subject to change"
243
+
The choice of default backend and optimizer is subject to change without being considered a breaking change.
244
+
If you want to guarantee a particular backend and optimizer, then you should
245
+
explicitly load the associated backend's package (e.g. NLopt or PRIMA) and manually set the `optimizer` and `backend` fields.
229
246
230
247
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
271
255
-
See the documentation for the [`NLopt`](https://github.com/JuliaOpt/NLopt.jl) package for details about the various settings.
256
-
257
272
### Convergence to singular covariance matrices
258
273
259
274
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