globalsearch-rs: Rust implementation of the OQNLP (OptQuest/NLP) algorithm with the core ideas from "Scatter Search and Local NLP Solvers: A Multistart Framework for Global Optimization" by Ugray et al. (2007). Combines scatter search metaheuristics with local minimization for global optimization of nonlinear problems.
Similar to MATLAB's GlobalSearch [2], using argmin, rayon and ndarray.
Features
-
π― Multistart heuristic framework for global optimization
-
π¦ Local optimization using the argmin crate [3]
-
π Parallel execution of initial stage using Rayon
Installation
Using as a dependency
Add this to your Cargo.toml:
[]
= "0.2.0"
Or use cargo add globalsearch in your project directory.
Building from source
-
Install Rust toolchain using rustup.
-
Clone repository:
-
Build the project:
Usage
-
Define a problem by implementing the
Problemtrait.use ; use Problem; use EvaluationError; ;Where the
Problemtrait is defined as:Depending on your choice of local solver, you might need to implement the
gradientandhessianmethods. Learn more about the local solver configuration in the argmin docs or theLocalSolverType.π΄ Note: Variable bounds are only used in the scatter search phase of the algorithm. The local solver is unconstrained (See argmin issue #137) and therefor can return solutions out of bounds.
-
Set OQNLP parameters
use ; use SteepestDescentBuilder; let params: OQNLPParams = OQNLPParams ;Where
OQNLPParamsis defined as:And
LocalSolverTypeis defined as:You can also modify the local solver configuration for each type of local solver. See
builders.rsfor more details. -
Run the optimizer
use ; use
Project Structure
src/
βββ lib.rs # Module declarations
βββ oqnlp.rs # Core OQNLP algorithm implementation
βββ scatter_search.rs # Scatter search component
βββ local_solver/
β βββ builders.rs # Local solver configuration builders
β βββ runner.rs # Local solver runner
βββ filters.rs # Merit and distance filtering logic
βββ problem.rs # Problem trait
βββ types.rs # Data structures and parameters
Dependencies
License
Distributed under the MIT License. See LICENSE.txt for more information.
References
[1] Zsolt Ugray, Leon Lasdon, John Plummer, Fred Glover, James Kelly, Rafael MartΓ, (2007) Scatter Search and Local NLP Solvers: A Multistart Framework for Global Optimization. INFORMS Journal on Computing 19(3):328-340. http://dx.doi.org/10.1287/ijoc.1060.0175
[2] GlobalSearch. The MathWorks, Inc. Available at: https://www.mathworks.com/help/gads/globalsearch.html (Accessed: 27 January 2025)
[3] Kroboth, S. argmin{}. Available at: https://argmin-rs.org/ (Accessed: 25 January 2025)