Skip to content
Alexander Kriuchkov edited this page Feb 24, 2017 · 6 revisions

Wiki

How use?

Consider a simple example. We have a target function - Rastrigin function:

Rastrigin function.

We want to find minimum of function with constraints:

Optimization problem.

We know that function has global minimum equal 0 in point (0,0). We trying to find approximate solution.

At first, we define target function and constraints.

Func<double[], double> func = (x) => 20 + (x[0] * x[0] - 10 * Math.Cos(2 * Math.PI * x[0])) +
               (x[1] * x[1] - 10 * Math.Cos(2 * Math.PI * x[1]));

double[] constr1 = { -5.12, -5.12 };
double[] constr2 = { 5.12, 5.12 };

Each pair (constr1[i], constr2[i]) determine bounds for coordinate.

At second, we define instances of methods.

IOptimizer[] opts = {
          new BBBCOptimizer(),
          new FireworksOptimizer(),
          new GEMOptimizer()
};

Remarks. Methods use random number generator and if you have own implementation, then can use overloaded constructors. Main requirement is implement corresponding interface.

Now, we define parameters for methods.

// Distance between points need for Fireworks method.
// It is squared Euclidean distance.
Func<PointND, PointND, double> distance = (a, b) => (a[0] - b[0]) * (a[0] - b[0]) + (a[1] - b[1]) * (a[1] - b[1]);

object[] parameters =  {
      new BBBCParams(20, 100, 0.4, 0.5),
      new FireWorksParams(20, 50, distance, 20),
      new GEMParams(1, 20, 50, 2 * Math.Sqrt(2), 100)
};

Remarks. Recommendation by choosing parameters is no.You can test methods with different combinations parameters and choose optimum.

At finally, we search solution optimization problem.

string[] names =
 {
    "BBBC",
    "Fireworks",
    "GEM"
};

// The definition for general parameters: target function, constraints.
GeneralParams param = new GeneralParams(func, constr1, constr2);

for (int i = 0; i < opts.Length; i++)
{
   opts[i].InitializeParameters(parameters[i]);
   opts[i].Optimize(param);

   Console.WriteLine($"Method: {names[i]}.");
   Console.WriteLine(opts[i].Solution);
   Console.WriteLine();
}
Clone this wiki locally