Shark machine learning library
Installation
Tutorials
Benchmarks
Documentation
Quick references
Class list
Global functions
include
shark
ObjectiveFunctions
Benchmarks
DTLZ2.h
Go to the documentation of this file.
1
//===========================================================================
2
/*!
3
*
4
*
5
* \brief Objective function DTLZ2
6
*
7
*
8
*
9
* \author T.Voss, T. Glasmachers, O.Krause
10
* \date 2010-2011
11
*
12
*
13
* \par Copyright 1995-2017 Shark Development Team
14
*
15
* <BR><HR>
16
* This file is part of Shark.
17
* <https://shark-ml.github.io/Shark/>
18
*
19
* Shark is free software: you can redistribute it and/or modify
20
* it under the terms of the GNU Lesser General Public License as published
21
* by the Free Software Foundation, either version 3 of the License, or
22
* (at your option) any later version.
23
*
24
* Shark is distributed in the hope that it will be useful,
25
* but WITHOUT ANY WARRANTY; without even the implied warranty of
26
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
27
* GNU Lesser General Public License for more details.
28
*
29
* You should have received a copy of the GNU Lesser General Public License
30
* along with Shark. If not, see <http://www.gnu.org/licenses/>.
31
*
32
*/
33
//===========================================================================
34
#ifndef SHARK_OBJECTIVEFUNCTIONS_BENCHMARK_DTLZ2_H
35
#define SHARK_OBJECTIVEFUNCTIONS_BENCHMARK_DTLZ2_H
36
37
#include <
shark/ObjectiveFunctions/AbstractObjectiveFunction.h
>
38
#include <
shark/ObjectiveFunctions/BoxConstraintHandler.h
>
39
40
namespace
shark
{
namespace
benchmarks{
41
/**
42
* \brief Implements the benchmark function DTLZ2.
43
*
44
* See: http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.18.7531&rep=rep1&type=pdf
45
* The benchmark function exposes the following features:
46
* - Scalable w.r.t. the searchspace and w.r.t. the objective space.
47
* - Highly multi-modal.
48
* \ingroup benchmarks
49
*/
50
struct
DTLZ2
:
public
MultiObjectiveFunction
51
{
52
DTLZ2
(std::size_t numVariables = 0) : m_objectives(2), m_handler(
SearchPointType
(numVariables,0),
SearchPointType
(numVariables,1) ){
53
announceConstraintHandler
(&m_handler);
54
}
55
56
/// \brief From INameable: return the class name.
57
std::string
name
()
const
58
{
return
"DTLZ2"
; }
59
60
std::size_t
numberOfObjectives
()
const
{
61
return
m_objectives;
62
}
63
bool
hasScalableObjectives
()
const
{
64
return
true
;
65
}
66
void
setNumberOfObjectives
( std::size_t
numberOfObjectives
){
67
m_objectives =
numberOfObjectives
;
68
}
69
70
std::size_t
numberOfVariables
()
const
{
71
return
m_handler.
dimensions
();
72
}
73
74
bool
hasScalableDimensionality
()
const
{
75
return
true
;
76
}
77
78
/// \brief Adjusts the number of variables if the function is scalable.
79
/// \param [in] numberOfVariables The new dimension.
80
void
setNumberOfVariables
( std::size_t
numberOfVariables
){
81
m_handler.
setBounds
(
82
SearchPointType
(
numberOfVariables
,0),
83
SearchPointType
(
numberOfVariables
,1)
84
);
85
}
86
87
ResultType
eval
(
const
SearchPointType
& x )
const
{
88
m_evaluationCounter
++;
89
90
RealVector value(
numberOfObjectives
() );
91
92
std::size_t k =
numberOfVariables
() -
numberOfObjectives
() + 1 ;
93
double
g = 0.0;
94
for
( std::size_t i =
numberOfVariables
() - k; i <
numberOfVariables
(); i++ )
95
g +=
sqr
( x( i ) - 0.5);
96
97
for
(std::size_t i = 0; i <
numberOfObjectives
(); i++) {
98
value[i] = 1.0+g;
99
for
( std::size_t j = 0; j <
numberOfObjectives
() - i -1; ++j)
100
value[i] *= std::cos(x( j ) * M_PI / 2.0);
101
102
if
(i > 0)
103
value[i] *= std::sin(x(
numberOfObjectives
() - i -1) * M_PI / 2.0);
104
}
105
106
return
value;
107
}
108
private
:
109
std::size_t m_objectives;
110
BoxConstraintHandler<SearchPointType>
m_handler;
111
};
112
113
}}
114
#endif