Skip to content

AmoebaOptimization

Barry Stahl edited this page Feb 21, 2020 · 1 revision

Amoeba Optimization

This library contains all of the entities and functionality needed to optimize a model using the Amoeba Optimization method. Optimization is the process of finding the inputs that produce the minimum or maximum value of a function. This process may be computationally intense and have an extreme number of possible answers. As a result, the brute-force method of trying all options is usually not feasible.

The Amoeba.Common Project

The project called Amoeba.Common within the Visual Studio Solution holds all of the entities and functionality needed to optimize models of varying complexities using the technique described in this MSDN Magazine Article. The methodology simulates the movement of an Amoeba as it moves in the direction of a more nutrient-rich environment (attempting to maximize the value of its nutrition function).

The following are the key modules in this code project:

  • Entities\Organism.cs - Represents the amoeba. There is only 1 organism used for each model and the amoeba may be of any size as specified by the SimulationConfiguration. Each organism contains multiple possible Solutions. The functionality for how the amoeba moves relative to the value of its solutions, as well as the top-level looping constructs needed to optimize a model are contained within this entity.

  • Entities\Solution.cs - Represents a possible solution to the optimization problem and the value that these inputs produce from the model.

  • Entities\SimulationConfiguration.cs - Holds the various values needed to configure the Amoeba and the simulation. Items of particular interest include:

    • Dimensions - The number of input values in the problem.
    • AmoebaSize - The number of points in the Amoeba. This value is independent of the number of Dimensions of the problem but may be very impactful in the accuracy of the solutions found.
    • MaxEpocs - The number of iterations to process in each simulation.
Clone this wiki locally