mir-optim 2.0.0-alpha21
Optimisation Framework
To use this package, run the following command in your project's root directory:
Manual usage
Put the following dependency into your project's dependences section:
mir-optim
Dlang Nonlinear Optimisers with external C API.
Konwn bugs
- Random wrong results when
taskPool
is passed.
Algorithms
- Modified Levenberg-Marquardt Algorithm (Nonlinear Least Squares).
See also online documentation.
Features
- Idiomatic BetterC library. See
examples/least_squares.cpp
for compilation details. - C/C++ header
- Multithread C++ examples
- Tiny BetterC library size, <38KB
- Based on LAPACK
- Fast compilaiton speed. There are two (for
float
anddouble
) precompiled algorithm instatiations. Generic API is a thin wrappers around them. - Four APIs for any purpose:
- Extern C/C++ API
- Powerfull high level generic D API
- Nothrow middle level generic D API
- Low level nongeneric D API
Required system libraries
See wiki: Link with CBLAS & LAPACK.
Examples
Least Squares. Analytical Jacobian.
unittest
{
import mir.optim.least_squares;
import mir.ndslice.allocation: slice;
import mir.ndslice.slice: sliced;
import mir.blas: nrm2;
auto lm = LeastSquaresLM!double(2, 2);
lm.x[] = [100, 100]; // initial X
// argmin_x f_0(x)^^2 + f_1(x)^^2
lm.optimize!(
(x, y) // f(x)
{
y[0] = x[0];
y[1] = 2 - x[1];
},
(x, J) // J(x)
{
J[0, 0] = 1;
J[0, 1] = 0;
J[1, 0] = 0;
J[1, 1] = -1;
},
);
assert(nrm2((lm.x - [0, 2].sliced).slice) < 1e-8);
}
Least Squares. Multithreaded Jacobian approximation.
Jacobian finite difference approximation computed in multiple threads.
unittest
{
import mir.optim.least_squares;
import mir.ndslice.allocation: slice;
import mir.ndslice.slice: sliced;
import mir.blas: nrm2;
import std.parallelism: taskPool;
auto lm = LeastSquaresLM!double(2, 2);
lm.x[] = [-1.2, 1];
lm.optimize!(
(x, y) // Rosenbrock function
{
y[0] = 10 * (x[1] - x[0]^^2);
y[1] = 1 - x[0];
},
)(taskPool);
assert(nrm2((lm.x - [1, 1].sliced).slice) < 1e-8);
}
Our sponsors
<img src="https://raw.githubusercontent.com/libmir/mir-algorithm/master/images/symmetry.png" height="80" /> <img src="https://raw.githubusercontent.com/libmir/mir-algorithm/master/images/kaleidic.jpeg" height="80" />
- 2.0.0-alpha21 released 4 years ago
- libmir/mir-optim
- BSL-1.0
- Copyright © 2018, Kaleidic Associates and Symmetry Investments
- Authors:
- Dependencies:
- mir-lapack, mir-algorithm
- Versions:
-
2.0.5 2023-Mar-14 2.0.4 2023-Mar-13 2.0.3 2023-Mar-13 2.0.2 2023-Mar-11 2.0.1 2021-May-13 - Download Stats:
-
-
1 downloads today
-
1 downloads this week
-
4 downloads this month
-
19150 downloads total
-
- Score:
- 1.8
- Short URL:
- mir-optim.dub.pm