odesign
odesign is an optimal design of experiments library written in pure rust.
There are at least these following use cases:
- Fast calculation of optimal designs of arbitrary linear models with custom design bounds and optimalities.
- Research in area of optimal designs; e.g. I am working on a new optimal design feature selection algorithm, a mixture of SFFS, D-, C- and Measurements-Costs-Optimality, allowing to perform model feature selection and measurements alternating.
Get started
Please have a look at the book on odesign.rs for a high level introduction and theoretical background and at the docs on docs.rs/odesign for the implementation details.
Roadmap
- Optimalities:
- D-Optimality
- C-Optimality
- Custom Optimality
- A-Optimality
- Costs Optimality
- Design Bounds:
- Cubic Bounds
- Custom Bounds
- Documentation:
- documentation of the optimal design solver backed by "adaptive grid semidefinite programming for finding optimal designs" (doi: 10.1007/s11222-017-9741-y)
- Research:
- New optimal design feature selection algorithm, a mixture of SFFS, D-, C- and Measurements-Costs-Optimality, allowing to perform model feature selection and measurements alternating
Basic Example
Run the example:
In short, this is a basic example of an optimal design of the simple polynomial 1 + x within design bounds [-1, +1] and 101 equally distributed grid points as an init design.
use ;
use DualNum;
use ;
use Arc;
// f(x): 1 + x
// Output
// ---------- Design ----------
// Weight Support Vector
// 0.5000 [ -1.0000 ]
// 0.5000 [ +1.0000 ]
// -------- Statistics --------
// Optimality measure: 1.000000
// No. support vectors: 2
// Iterations: 1
// ----------------------------
Advanced Example
Run the example:
As a more complex example please take a look at this 3 dimensional polynomial example with monoms lower than a degree of 3 within a design space of [-1, -1, -1] x [+1, +1, +1] and an initial design grid of 11 x 11 x 11 points.
use ;
use DualNum;
use ;
use Arc;
// f(x, y, z): 1 + x + y + z
// + x * y + x * z + y * y
// + x ^ 2 + y ^ 2 + z ^ 2
// Output
// -------------- Design ---------------
// Weight Support Vector
// 0.0689 [ -1.0000, -1.0000, -1.0000 ]
// 0.0251 [ -1.0000, -1.0000, +0.0000 ]
// 0.0689 [ -1.0000, -1.0000, +1.0000 ]
// 0.0251 [ -1.0000, +0.0000, -1.0000 ]
// 0.0205 [ -1.0000, +0.0000, +0.0000 ]
// 0.0251 [ -1.0000, +0.0000, +1.0000 ]
// 0.0689 [ -1.0000, +1.0000, -1.0000 ]
// 0.0251 [ -1.0000, +1.0000, +0.0000 ]
// 0.0689 [ -1.0000, +1.0000, +1.0000 ]
// 0.0251 [ +0.0000, -1.0000, -1.0000 ]
// 0.0205 [ +0.0000, -1.0000, +0.0000 ]
// 0.0251 [ +0.0000, -1.0000, +1.0000 ]
// 0.0205 [ +0.0000, +0.0000, -1.0000 ]
// 0.0245 [ +0.0000, +0.0000, +0.0000 ]
// 0.0205 [ +0.0000, +0.0000, +1.0000 ]
// 0.0251 [ +0.0000, +1.0000, -1.0000 ]
// 0.0205 [ +0.0000, +1.0000, +0.0000 ]
// 0.0251 [ +0.0000, +1.0000, +1.0000 ]
// 0.0689 [ +1.0000, -1.0000, -1.0000 ]
// 0.0251 [ +1.0000, -1.0000, +0.0000 ]
// 0.0689 [ +1.0000, -1.0000, +1.0000 ]
// 0.0251 [ +1.0000, +0.0000, -1.0000 ]
// 0.0205 [ +1.0000, +0.0000, +0.0000 ]
// 0.0251 [ +1.0000, +0.0000, +1.0000 ]
// 0.0689 [ +1.0000, +1.0000, -1.0000 ]
// 0.0251 [ +1.0000, +1.0000, +0.0000 ]
// 0.0689 [ +1.0000, +1.0000, +1.0000 ]
// ------------ Statistics -------------
// Optimality measure: 0.474478
// No. support vectors: 27
// Iterations: 2
// -------------------------------------
Community
Mailing lists
- odesign-announce: Low-volume mailing list for announcements
- odesign-discuss: Mailing list for end-user discussion and questions
- odesign-devel: Mailing list for development discussion and patches. For help sending patches to this list, please consult git-send-email.io.
Tickets
The tracker on todo.sr.ht/~maunke/odesign is for confirmed bugs and confirmed feature requests only.
Before creating a ticket, search for existing (possibly already fixed) issues, on the docs or in the mailing list archives: odesign-discuss, odesign-devel.
If you cannot find anything describing your issue or if you have a question, ask on one of the the mailing lists first. You will be asked to file a ticket if appropriate.