# cobyla - a pure Rust implementation
[](https://github.com/relf/cobyla/actions?query=workflow%3Atests)
[](https://crates.io/crates/cobyla)
[](https://docs.rs/cobyla)
COBYLA is an algorithm for minimizing a function of many variables. The method is derivatives-free (only the function values are needed)
and take into account constraints on the variables. The algorithm is described in:
> M.J.D. Powell, "A direct search optimization method that models the objective and constraint functions by linear interpolation," in
> Advances in Optimization and Numerical Analysis Mathematics and Its Applications, vol. 275 (eds. Susana Gomez and Jean-Pierre Hennart),
> Kluwer Academic Publishers, pp. 51-67 (1994).
The algorithm comes as a function `minimize`: the Rust code was generated from the C code of the [NLopt](https://github.com/stevengj/nlopt) project (version 2.7.1)
* and optionally as an [argmin](https://github.com/argmin-rs/argmin) solver, CobylaSolver: the Rust code was generated from the C code from [here](https://github.com/emmt/Algorithms/tree/master/cobyla)
An initial transpilation was done with [c2rust](https://github.com/immunant/c2rust) then the code was manually edited to make it work. The callback mechanismn is inspired from the Rust binding of NLopt, namely [rust-nlopt](https://github.com/adwhit/rust-nlopt)
## Example
```bash
cargo run --example paraboloid
```
## Related projects
* [rust-nlopt](https://github.com/adwhit/rust-nlopt): the Rust binding of the [NLopt project](https://nlopt.readthedocs.io)
* [slsqp](https://github.com/relf/slsqp): a pure Rust implementation of the SLSQP algorithm.
* [cobyla-argmin](https://github.com/relf/cobyla-argmin): COBYLA as an argmin solver
## License
The project is released under MIT License.