# Crate metaheuristics_nature

source · [−]## Expand description

A collection of nature-inspired meta-heuristic algorithms.

## Terminology

For unifying the terms, in this documentation,

- “Iteration” is called “generation”.
- “Function” that evaluates value is called “objective function”.
- “Return value” of the objective function is called “fitness”.

## Algorithm

There are two traits `Algorithm`

and `Setting`

.
The previous is used to design the optimization method,
and the latter is the setting interface.

`Solver`

is a simple interface for obtaining the solution, or analyzing the result.
This type allows you to use the pre-defined methods without importing any traits.

All provided methods are listed in the module `methods`

.

For making your owned method, please see `utility::prelude`

.

## Objective Function

For a quick demo with callable object, please see `Fx`

or `FxAdaptive`

.

You can define your question as an objective function through implementing `ObjFunc`

,
and then the upper bound, lower bound, and objective function `ObjFunc::fitness`

should be defined.

The final answer is `ObjFunc::result`

, which is calculated from the design parameters.

## Random Function

This crate use 64bit PRNG algorithm (`utility::Rng`

) to generate uniform random values,
before that, a random seed is required.
The seed is generated by `getrandom`

, please see its support platform.

## Features

`std`

: Default feature. Enable standard library function, such as timing and threading.`rayon`

: Enable parallel computation, let objective function running without ordered. Disable it for the platform that doesn’t supported threading, or if your objective function is not complicate enough. This feature require`std`

feature.`libm`

: If the standard library is not provided, some math functions might missing. This will disable some pre-implemented algorithms. However, there is a math library implemented in pure Rust, the name is same as`libm`

. This feature can re-enable (or replace) the math functions by using the`libm`

crate.

## Compatibility

If you are using this crate for providing objective function, other downstream crates of yours may have some problems with compatibility.

The most important thing is using a stable version, specifying the major version number.
Then re-export (`pub use`

) this crate for the downstream crates.

This crate does the same things on `ndarray`

and `rayon`

.

## Re-exports

`pub use self::methods::*;`

## Modules

Pre-implemented optimization methods.

The re-export of the crate `ndarray`

.

`rayon`

The re-export of the crate `rayon`

.

The utility API for advanced usage.

## Macros

A tool macro used to generate multiple builder functions (methods).

## Structs

A quick interface help to create objective function from a callable object.

A quick interface help to create adaptive objective function from a callable object.

A public API for using optimization methods.