Introduction
SwarmOps is a source-code library for doing numerical optimization
in the C# programming language. The C# version of SwarmOps is mainly
aimed at application developers who need to optimize some mathematical
problem in their programs, but wish to avoid the hassle of having to
do a whole lot of research first to find out which optimizers work well.
Included in SwarmOps are implementations of Differential Evolution,
Particle Swarm Optimization, Pattern Search, Local Unimodal Sampling,
and Gradient Descent. A number of common benchmark problems are also
provided, including: Sphere, Griewank, Ackley, Rosenbrock, and so on.
SwarmOps is very well suited for finding the behavioural
(or control) parameters that makes an optimizer perform its best. This
is done by employing another overlaid optimizer, which is known here
as Meta-Optimization (or Meta-Optimisation) and is also known in the
literature as Meta-Evolution, Super-Optimization, Parameter Calibration,
Parameter Tuning, etc. The success of SwarmOps in doing meta-optimization
is mainly due to three things:
-
SwarmOps uses the same interface for an optimization problem
and an optimization method, meaning that an optimization method is
also considered an optimization problem. This modular approach allows
for meta-optimization, meta-meta-optimization, and so on.
-
SwarmOps employs a simple time-saving technique called Pre-Emptive
Fitness Evaluation which makes meta-optimization more tractable to execute.
-
SwarmOps features a simple optimization method that works well as the
overlaid meta-optimizer, because it is usually able to find the best
behavioural parameters for an optimization method using only a fairly
small number of iterations.
Parallelism
SwarmOps provides optimizers that can execute in parallel on multi-core
CPUs, as well as parallel execution of meta-optimization.
License
The SwarmOps source-code is published under the
GNU Lesser General Public License,
which essentially means that you may distribute commercial programs
that link with the SwarmOps library, as well as make alterations
to the SwarmOps library itself. There are certain terms to be met
though, please see the
license
for details.