Shark machine learning library
Installation
Tutorials
Benchmarks
Documentation
Quick references
Class list
Global functions
include
shark
ObjectiveFunctions
Benchmarks
DTLZ3.h
Go to the documentation of this file.
1
//===========================================================================
2
/*!
3
*
4
*
5
* \brief Objective function DTLZ3.
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_DTLZ3_H
35
#define SHARK_OBJECTIVEFUNCTIONS_BENCHMARK_DTLZ3_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 DTLZ3.
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
* \ingroup benchmarks
48
*/
49
struct
DTLZ3
:
public
MultiObjectiveFunction
50
{
51
DTLZ3
(std::size_t numVariables = 0) : m_objectives(2), m_handler(
SearchPointType
(numVariables,0),
SearchPointType
(numVariables,1) ){
52
announceConstraintHandler
(&m_handler);
53
}
54
55
/// \brief From INameable: return the class name.
56
std::string
name
()
const
57
{
return
"DTLZ3"
; }
58
59
std::size_t
numberOfObjectives
()
const
{
60
return
m_objectives;
61
}
62
bool
hasScalableObjectives
()
const
{
63
return
true
;
64
}
65
void
setNumberOfObjectives
( std::size_t
numberOfObjectives
){
66
m_objectives =
numberOfObjectives
;
67
}
68
69
std::size_t
numberOfVariables
()
const
{
70
return
m_handler.
dimensions
();
71
}
72
73
bool
hasScalableDimensionality
()
const
{
74
return
true
;
75
}
76
77
/// \brief Adjusts the number of variables if the function is scalable.
78
/// \param [in] numberOfVariables The new dimension.
79
void
setNumberOfVariables
( std::size_t
numberOfVariables
){
80
m_handler.
setBounds
(
81
SearchPointType
(
numberOfVariables
,0),
82
SearchPointType
(
numberOfVariables
,1)
83
);
84
}
85
86
ResultType
eval
(
const
SearchPointType
& x )
const
{
87
m_evaluationCounter
++;
88
89
ResultType
value(
numberOfObjectives
() );
90
91
std::size_t k =
numberOfVariables
() -
numberOfObjectives
()+1;
92
double
g = (double)k;
93
for
( std::size_t i =
numberOfVariables
() - k; i <
numberOfVariables
(); i++ )
94
g +=
sqr
( x( i ) - 0.5 ) - std::cos( 20.0 * M_PI * ( x( i ) - 0.5) );
95
g *= 100;
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