Gomez - A pure Rust framework and implementation of (derivative-free) methods for solving nonlinear (bound-constrained) systems of equations

Overview

Gomez

A pure Rust framework and implementation of (derivative-free) methods for solving nonlinear (bound-constrained) systems of equations.

Warning: The code and API are still quite rough. Expect changes.

This library provides a variety of solvers of nonlinear equation systems with n equations and n unknowns written entirely in Rust. Bound constraints for variables are supported first-class, which is useful for engineering applications. All solvers implement the same interface which is designed to give full control over the process and allows to combine different components to achieve the desired solution. The implemented methods are historically-proven numerical methods or global optimization algorithms.

The convergence of the numerical methods is tested on several problems and the implementation is benchmarked against with GSL library.

Algorithms

  • Trust region -- Recommended method to be used as a default and it will just work in most of the cases.
  • Cuckoo search -- A global optimization algorithm useful for initial guesses search in combination with a numerical solver.
  • Nelder-Mead -- Not generally recommended, but may be useful for low-dimensionality problems with ill-defined Jacobian matrix.

Roadmap

Listed not in order of priority.

  • Steffensen's method for 1D systems.
  • Homotopy continuation method to compare the performance with Trust region method.
  • Conjugate gradient method
  • Experimentation with various global optimization techniques for initial guesses search
    • Evolutionary/nature-inspired algorithms
    • Bayesian optimization
  • Focus on initial guesses search and tools in general
  • High-level drivers encapsulating the low-level API for users that do not need the fine-grained control.

License

Licensed under MIT.

There are gsl-wrapper and gsl-sys crates which are licensed under the GPLv3 identically as GSL itself. This code is part of the repository, but is not part of the Gomez library. Its purpose is solely for comparison in Gomez benchmarks.

You might also like...
A naive native 128-bit cityhash v102 implementation

Naive CityHash naive-cityhash is a naive native 128-bit cityhash v102 implementation for clickhouse*. Contact Chojan Shang - @PsiACE - psiace@outlook.

A naive (read: slow) implementation of Word2Vec. Uses BLAS behind the scenes for speed.

SloWord2Vec This is a naive implementation of Word2Vec implemented in Rust. The goal is to learn the basic principles and formulas behind Word2Vec. BT

A "Navie" Implementation of the Wavefront Algorithm For Sequence Alignment with Gap-Affine Scoring

A "Naive" Implementation of the Wavefront Algorithm for Sequence Alignment with Gap-Affine Scoring This repository contains some simple code that I wr

Simple, robust, BitTorrent's Mainline DHT implementation

Mainline Simple, robust, BitTorrent's Mainline DHT implementation. This library is focused on being the best and simplest Rust client for Mainline, es

A Markdown to HTML compiler and Syntax Highlighter, built using Rust's pulldown-cmark and tree-sitter-highlight crates.

A blazingly fast( possibly the fastest) markdown to html parser and syntax highlighter built using Rust's pulldown-cmark and tree-sitter-highlight crate natively for Node's Foreign Function Interface.

Checks all your documentation for spelling and grammar mistakes with hunspell and a nlprule based checker for grammar

cargo-spellcheck Check your spelling with hunspell and/or nlprule. Use Cases Run cargo spellcheck --fix or cargo spellcheck fix to fix all your docume

A simple and fast linear algebra library for games and graphics

glam A simple and fast 3D math library for games and graphics. Development status glam is in beta stage. Base functionality has been implemented and t

An efficient and powerful Rust library for word wrapping text.

Textwrap Textwrap is a library for wrapping and indenting text. It is most often used by command-line programs to format dynamic output nicely so it l

Rust edit distance routines accelerated using SIMD. Supports fast Hamming, Levenshtein, restricted Damerau-Levenshtein, etc. distance calculations and string search.

triple_accel Rust edit distance routines accelerated using SIMD. Supports fast Hamming, Levenshtein, restricted Damerau-Levenshtein, etc. distance cal

Comments
  • Add Function and Optimizer traits for general optimization

    Add Function and Optimizer traits for general optimization

    Although the primary goal of Gomez - solving non-linear systems of equations - remains still the same, I believe that providing means for general numerical optimization may benefit someone for the features that Gomez has: first-class support for bounds, simple, low-level, iterative API and various utilities. Moreover, two out of three algorithms implemented so far are optimization algorithms, not solvers anyway.

    As solving equations is the primary goal, the information about general optimization is rather omitted from the documentation and that is on purpose.

    opened by pnevyk 0
  • Rename `System::apply_mut` to `System::apply`

    Rename `System::apply_mut` to `System::apply`

    The convention in Rust is to use _mut suffix for methods that can modify self (e.g., by returning mutable reference to itself or its field). There is not a "non-mut" alternative for applying a system in Gomez now, so using just apply for the method name seems fine.

    opened by pnevyk 0
Owner
Datamole
Datamole
A Japanese Morphological Analyzer written in pure Rust

Yoin - A Japanese Morphological Analyzer yoin is a Japanese morphological analyze engine written in pure Rust. mecab-ipadic is embedded in yoin. :) $

Agata Naomichi 21 Apr 30, 2022
pure rust implemention of word2vec

Word2Vec-rs Word2Vec-rs is a fast implemention of word2vec's skip-gram algorithm. A simple benchmark on a 200M english corpus: 4 threads: tool words p

fang li 46 Oct 24, 2022
Multithreaded, non-blocking Linux server framework in Rust

hydrogen Documentation hydrogen is a non-blocking socket server framework built atop epoll. It takes care of the tedious connection and I/O marshaling

Nathan Sizemore 358 Oct 31, 2022
Blazingly fast framework for in-process microservices on top of Tower ecosystem

norpc = not remote procedure call Motivation Developing an async application is often a very difficult task but building an async application as a set

Akira Hayakawa 15 Dec 12, 2022
Multilingual implementation of RAKE algorithm for Rust

RAKE.rs The library provides a multilingual implementation of Rapid Automatic Keyword Extraction (RAKE) algorithm for Rust. How to Use Append rake to

Navid 26 Dec 16, 2022
Snips NLU rust implementation

Snips NLU Rust Installation Add it to your Cargo.toml: [dependencies] snips-nlu-lib = { git = "https://github.com/snipsco/snips-nlu-rs", branch = "mas

Snips 327 Dec 26, 2022
A fast implementation of Aho-Corasick in Rust.

aho-corasick A library for finding occurrences of many patterns at once with SIMD acceleration in some cases. This library provides multiple pattern s

Andrew Gallant 662 Dec 31, 2022
🦀 A Rust implementation of a RoBERTa classification model for the SNLI dataset

RustBERTa-SNLI A Rust implementation of a RoBERTa classification model for the SNLI dataset, with support for fine-tuning, predicting, and serving. Th

AI2 11 Oct 17, 2022
A rust implementation of some popular snowball stemming algorithms

Rust Stemmers This crate implements some stemmer algorithms found in the snowball project which are compiled to rust using the rust-backend of the sno

CurrySoftware GmbH 84 Dec 15, 2022
Implementation of sentence embeddings with BERT in Rust, using the Burn library.

Sentence Transformers in Burn This library provides an implementation of the Sentence Transformers framework for computing text representations as vec

Tyler Vergho 4 Sep 4, 2023