suite_biobj_ext.c File Reference

Implementation of the extended biobjective bbob-biobj-ext suite containing 92 functions and 6 dimensions. More...

#include "coco.h"
#include "mo_utilities.c"
#include "suite_bbob.c"

Data Structures

struct  suite_biobj_ext_t
 The bbob-biobj-ext suite data type. More...
 

Functions

static coco_suite_tcoco_suite_allocate (const char *suite_name, const size_t number_of_functions, const size_t number_of_dimensions, const size_t *dimensions, const char *default_instances)
 
static void suite_biobj_ext_free (void *stuff)
 Frees the memory of the given bi-objective suite. More...
 
static size_t suite_biobj_ext_get_new_instance (coco_suite_t *suite, const size_t instance, const size_t instance1, const size_t num_bbob_functions, const size_t *bbob_functions)
 Computes the instance number of the second problem/objective so that the resulting bi-objective problem has more than a single optimal solution. More...
 
static coco_suite_tsuite_biobj_ext_initialize (void)
 Sets the dimensions and default instances for the bbob-biobj-ext suite. More...
 
static const char * suite_biobj_ext_get_instances_by_year (const int year)
 Sets the instances associated with years for the bbob-biobj-ext suite. More...
 
static coco_problem_tsuite_biobj_ext_get_problem (coco_suite_t *suite, const size_t function_idx, const size_t dimension_idx, const size_t instance_idx)
 Returns the problem from the bbob-biobj-ext suite that corresponds to the given parameters. More...
 
static int check_consistency_of_instances (const size_t dimension, size_t function1, size_t instance1, size_t function2, size_t instance2)
 Performs a few checks and returns whether the two problem instances given should break the search for new instances in suite_biobj_ext_get_new_instance(...). More...
 

Variables

static const size_t suite_biobj_ext_instances [][3]
 The array of triples biobj_instance - problem1_instance - problem2_instance connecting bi-objective suite instances to the instances of the bbob suite. More...
 

Detailed Description

Implementation of the extended biobjective bbob-biobj-ext suite containing 92 functions and 6 dimensions.

The bbob-biobj-ext suite is created by combining two single-objective problems from the bbob suite. The first 55 functions are the same as in the original bbob-biobj test suite to which 37 functions are added. Those additional functions are constructed by combining all not yet contained in-group combinations (i,j) of single-objective bbob functions i and j such that i<j (i.e. in particular not all combinations (i,i) are included in this bbob-biobj-ext suite), with the exception of the Weierstrass function (f16) for which the optimum is not unique and thus a nadir point is difficult to compute, see http://numbbo.github.io/coco-doc/bbob-biobj/functions/ for details.

Note
Because some bi-objective problems constructed from two single-objective ones have a single optimal value, some care must be taken when selecting the instances. The already verified instances are stored in suite_biobj_ext_instances. If a new instance of the problem is called, a check ensures that the two underlying single-objective instances create a true bi-objective problem. However, these new instances need to be manually added to suite_biobj_ext_instances, otherwise they will be computed each time the suite constructor is invoked with these instances.
This file is based on the original suite_bbob_biobj.c and extends it by 37 functions in 6 dimensions.

Function Documentation

static int check_consistency_of_instances ( const size_t  dimension,
size_t  function1,
size_t  instance1,
size_t  function2,
size_t  instance2 
)
static

Performs a few checks and returns whether the two problem instances given should break the search for new instances in suite_biobj_ext_get_new_instance(...).

static coco_suite_t* coco_suite_allocate ( const char *  suite_name,
const size_t  number_of_functions,
const size_t  number_of_dimensions,
const size_t *  dimensions,
const char *  default_instances 
)
static
static void suite_biobj_ext_free ( void *  stuff)
static

Frees the memory of the given bi-objective suite.

Note
Copied from suite_bbob_biobj.c.
static const char* suite_biobj_ext_get_instances_by_year ( const int  year)
static

Sets the instances associated with years for the bbob-biobj-ext suite.

static size_t suite_biobj_ext_get_new_instance ( coco_suite_t suite,
const size_t  instance,
const size_t  instance1,
const size_t  num_bbob_functions,
const size_t *  bbob_functions 
)
static

Computes the instance number of the second problem/objective so that the resulting bi-objective problem has more than a single optimal solution.

Starts by setting instance2 = instance1 + 1 and increases this number until an appropriate instance has been found (or until a maximum number of tries has been reached, in which case it throws a coco_error). An appropriate instance is the one for which the resulting bi-objective problem (in any considered dimension) has the ideal and nadir points apart enough in the objective space and the extreme optimal points apart enough in the decision space. When the instance has been found, it is output through coco_warning, so that the user can see it and eventually manually add it to suite_biobj_ext_instances.

Note
Copied from suite_bbob_biobj.c.
static coco_problem_t* suite_biobj_ext_get_problem ( coco_suite_t suite,
const size_t  function_idx,
const size_t  dimension_idx,
const size_t  instance_idx 
)
static

Returns the problem from the bbob-biobj-ext suite that corresponds to the given parameters.

Creates the bi-objective problem by constructing it from two single-objective problems from the bbob suite. If the invoked instance number is not in suite_biobj_ext_instances, the function uses the following formula to construct a new appropriate instance:

problem1_instance = 2 * biobj_instance + 1

problem2_instance = problem1_instance + 1

If needed, problem2_instance is increased (see also the explanation of suite_biobj_ext_get_new_instance).

Parameters
suiteThe COCO suite.
function_idxIndex of the function (starting from 0).
dimension_idxIndex of the dimension (starting from 0).
instance_idxIndex of the instance (starting from 0).
Returns
The problem that corresponds to the given parameters.
Note
Copied from suite_bbob_biobj.c and extended.
static coco_suite_t* suite_biobj_ext_initialize ( void  )
static

Sets the dimensions and default instances for the bbob-biobj-ext suite.

Variable Documentation

const size_t suite_biobj_ext_instances[][3]
static
Initial value:
= {
{ 1, 2, 4 },
{ 2, 3, 5 },
{ 3, 7, 8 },
{ 4, 9, 10 },
{ 5, 11, 12 },
{ 6, 13, 14 },
{ 7, 15, 16 },
{ 8, 17, 18 },
{ 9, 19, 21 },
{ 10, 21, 22 },
{ 11, 23, 24 },
{ 12, 25, 26 },
{ 13, 27, 28 },
{ 14, 29, 30 },
{ 15, 31, 34 }
}

The array of triples biobj_instance - problem1_instance - problem2_instance connecting bi-objective suite instances to the instances of the bbob suite.

It should be updated with new instances when they are chosen.