Multi-objective benchmark problems#

namespace problems

Implementations of some benchmark functions that can be used to test the genetic algorithms. There are some benchmark problems implemented for every encoding type, and the real-encoded problems can also be used for the binary-encoded GAs.

All of the problems are implemented for maximization.

class Kursawe#

#include <problems/multi_objective.hpp>
class Kursawe : public gapp::problems::BenchmarkFunction<RealGene>#

Implementation of the Kursawe function for any number of variables, modified for maximization. It has 2 objectives, and the pareto front is made up of multiple disconnected segments.

Evaluated on the hypercube \( x_i \in [-5.0,\ 5.0] \).

The approximate extreme points in the objective-space are:

\[ \textrm{ ideal-point: } ( 10(n_{vars} - 1),\ 3.85(n_{vars} - 1) + 4) \]
\[ \textrm{ nadir-point: } (7.25(n_{vars} - 1),\ 0.0 ) \]

This benchmark function can be used for both the real- and binary-encoded GAs.

See also

Kursawe, F. “A variant of evolution strategies for vector optimization.” International conference on parallel problem solving from nature (1991): 193-197

Public Functions

explicit Kursawe(size_t num_vars = 3, size_t bits_per_var = 32)#

Create a Kursawe function.

Parameters:
  • num_vars – The number of variables. Must be at least 2.

  • bits_per_var – The number of bits representing a variable when used with the binary-encoded GA.

class ZDT1#

#include <problems/multi_objective.hpp>
class ZDT1 : public gapp::problems::BenchmarkFunction<RealGene>#

Implementation of the ZDT1 function for any number of variables, modified for maximization. This 2-objective benchmark function has a continuous, convex pareto front in the objective-space.

Evaluated on the hypercube \( x_i \in [0.0,\ 1.0] \).

The optimal solutions are \( x_1 \in [0.0,\ 1.0] \), and \( x_{rest} = 0.0 \).

The extreme points in the objective-space are:

\[ \textrm{ ideal-point: } ( 0.0,\ 0.0) \]
\[ \textrm{ nadir-point: } (-1.0, -1.0) \]

This benchmark function can be used for both the real- and binary-encoded GAs.

See also

Zitzler, E., Deb, K., and Thiele, L. “Comparison of multiobjective evolutionary algorithms: Empirical results.” Evolutionary computation 8, no. 2 (2000): 173-195.

Public Functions

explicit ZDT1(size_t num_vars = 30, size_t bits_per_var = 32)#

Create a ZDT1 function.

Parameters:
  • num_vars – The number of variables. Must be at least 2.

  • bits_per_var – The number of bits representing a variable when used with the binary-encoded GA.

class ZDT2#

#include <problems/multi_objective.hpp>
class ZDT2 : public gapp::problems::BenchmarkFunction<RealGene>#

Implementation of the ZDT2 function for any number of variables, modified for maximization. This 2-objective benchmark function has a continuous, non-convex pareto front in the objective-space.

Evaluated on the hypercube \( x_i \in [0.0,\ 1.0] \).

The optimal solutions are \( x_1 \in [0.0,\ 1.0] \), and \( x_{rest} = 0.0 \).

The extreme points in the objective-space are:

\[ \textrm{ ideal-point: } ( 0.0,\ 0.0) \]
\[ \textrm{ nadir-point: } (-1.0, -1.0) \]

This benchmark function can be used for both the real- and binary-encoded GAs.

See also

Zitzler, E., Deb, K., and Thiele, L. “Comparison of multiobjective evolutionary algorithms: Empirical results.” Evolutionary computation 8, no. 2 (2000): 173-195.

Public Functions

explicit ZDT2(size_t num_vars = 30, size_t bits_per_var = 32)#

Create a ZDT2 function.

Parameters:
  • num_vars – The number of variables. Must be at least 2.

  • bits_per_var – The number of bits representing a variable when used with the binary-encoded GA.

class ZDT3#

#include <problems/multi_objective.hpp>
class ZDT3 : public gapp::problems::BenchmarkFunction<RealGene>#

Implementation of the ZDT3 function for any number of variables, modified for maximization. This 2-objective benchmark function has a discontinuous pareto front made up of 5 disconnected segments in the objective-space.

Evaluated on the hypercube \( x_i \in [0.0,\ 1.0] \).

The optimal solutions are \( x_1 \in [0.0,\ 0.083] \cup [0.182,\ 0.258] \cup [0.409,\ 0.454] \cup [0.618\, 0.653] \cup [0.823,\ 0.852] \), and \( x_{rest} = 0.0 \).

The extreme points in the objective-space are:

\[ \textrm{ ideal-point: } ( 0.00,\ 0.8) \]
\[ \textrm{ nadir-point: } (-0.85, -1.0) \]

This benchmark function can be used for both the real- and binary-encoded GAs.

See also

Zitzler, E., Deb, K., and Thiele, L. “Comparison of multiobjective evolutionary algorithms: Empirical results.” Evolutionary computation 8, no. 2 (2000): 173-195.

Public Functions

explicit ZDT3(size_t num_vars = 30, size_t bits_per_var = 32)#

Create a ZDT3 function.

Parameters:
  • num_vars – The number of variables. Must be at least 2.

  • bits_per_var – The number of bits representing a variable when used with the binary-encoded GA.

class ZDT4#

#include <problems/multi_objective.hpp>
class ZDT4 : public gapp::problems::BenchmarkFunction<RealGene>#

Implementation of the ZDT4 function for any number of variables, modified for maximization. This 2-objective benchmark function is the most difficult problem of the ZDT suite. It has a large number of local pareto fronts in the objective space, which makes it easy for the GAs to get stuck along one of these local fronts.

Evaluated on \( x_1 \in [0.0,\ 1.0] \), and \( x_{rest} \in [-5.0,\ 5.0] \).

The optimal solutions are \( x_1 \in [0.0,\ 1.0] \), and \( x_{rest} = 0.0 \).

The extreme points in the objective-space are:

\[ \textrm{ ideal-point: } ( 0.0,\ 0.0) \]
\[ \textrm{ nadir-point: } (-1.0, -1.0) \]

This benchmark function can be used for both the real- and binary-encoded GAs.

See also

Zitzler, E., Deb, K., and Thiele, L. “Comparison of multiobjective evolutionary algorithms: Empirical results.” Evolutionary computation 8, no. 2 (2000): 173-195.

Public Functions

explicit ZDT4(size_t num_vars = 10, size_t bits_per_var = 32)#

Create a ZDT4 function.

Parameters:
  • num_vars – The number of variables. Must be at least 2.

  • bits_per_var – The number of bits representing a variable when used with the binary-encoded GA.

class ZDT5#

#include <problems/multi_objective.hpp>
class ZDT5 : public gapp::problems::BenchmarkFunction<BinaryGene>#

Implementation of the ZDT5 function for any number of variables, modified for maximization. In this 2-objective benchmark function, the variables are binary strings, not real numbers like they are in the rest of the functions of the ZDT suite.

The optimal solutions are \( x_1 = anything \), and \( x_{rest} = ones \).

The extreme points in the objective-space are:

\[ \textrm{ ideal-point: } ( -1.0, -\frac{(n_{vars} - 1)}{31}) \]
\[ \textrm{ nadir-point: } (-31.0, -n_{vars} + 1 ) \]

This benchmark function can only be used with the binary-encoded GA, unlike the rest of the benchmark functions in the ZDT suite.

See also

Zitzler, E., Deb, K., and Thiele, L. “Comparison of multiobjective evolutionary algorithms: Empirical results.” Evolutionary computation 8, no. 2 (2000): 173-195.

Public Functions

explicit ZDT5(size_t num_vars = 11)#

Create a ZDT5 function.

Parameters:

num_vars – The number of variables. Must be at least 2.

class ZDT6#

#include <problems/multi_objective.hpp>
class ZDT6 : public gapp::problems::BenchmarkFunction<RealGene>#

Implementation of the ZDT6 function for any number of variables, modified for maximization. This 2-objective benchmark function has a non-convex pareto front in the objective space, along which the solutions are distributed non-uniformly.

Evaluated on the hypercube \( x_i \in [0.0, 1.0] \).

The optimal solutions are \( x_1 \in [0.0, 1.0] \), and \( x_{rest} = 0.0 \).

The extreme points in the objective-space are:

\[ \textrm{ ideal-point: } ( 0.0,\ 0.0 ) \]
\[ \textrm{ nadir-point: } (-1.0, -0.92) \]

This benchmark function can be used for both the real- and binary-encoded GAs.

See also

Zitzler, E., Deb, K., and Thiele, L. “Comparison of multiobjective evolutionary algorithms: Empirical results.” Evolutionary computation 8, no. 2 (2000): 173-195.

Public Functions

explicit ZDT6(size_t num_vars = 10, size_t bits_per_var = 32)#

Create a ZDT6 function.

Parameters:
  • num_vars – The number of variables. Must be at least 2.

  • bits_per_var – The number of bits representing a variable when used with the binary-encoded GA.