# Amoeba Optimizer¶

## Synopsis¶

This will optimize a function using the AmoebaOptimizer class. This example demonstrates optimizing a simple paraboloid function.

## Results¶

Output:

```Position: [-5.003825599641884, 6.998563761340231]
Value: 5.00002
```

## Code¶

### C++¶

```#include "itkAmoebaOptimizer.h"
#include "ExampleCostFunction.h"

namespace
{
// Typedef the optimizer and cost function, for convenience
using OptimizerType = itk::AmoebaOptimizer;
using CostType = itk::ExampleCostFunction2;
} // namespace

int
main(int, char *[])
{

// Instantiate the optimizer
OptimizerType::Pointer optimizer = OptimizerType::New();

// Set properties pertinent to convergence
optimizer->SetMaximumNumberOfIterations(100);
optimizer->SetParametersConvergenceTolerance(0.01);
optimizer->SetFunctionConvergenceTolerance(0.01);

// Instantiate the cost function
// The cost function is a 2D paraboloid in the x-y plane
// with the equation f(x,y) = (x+5)^2+(y-7)^2 + 5
// and a global minimum at (x,y) = (-5, 7)
CostType::Pointer cost = CostType::New();

// Assign the cost function to the optimizer
optimizer->SetCostFunction(cost.GetPointer());

// Set the initial parameters of the cost function
OptimizerType::ParametersType initial(2);
initial[0] = 123;
initial[1] = -97.4;
optimizer->SetInitialPosition(initial);

// Begin the optimization!
optimizer->StartOptimization();

// Print out some information about the optimization
std::cout << "Position: " << optimizer->GetCurrentPosition() << std::endl;
std::cout << "Value: " << optimizer->GetValue() << std::endl;

// As expected, the position is near to (-5, 7) and the value to 5
// Position: [-5.003825599641884, 6.998563761340231]
// Value: 5.00002
return EXIT_SUCCESS;
}
```