Shark machine learning library
About Shark
News!
Contribute
Credits and copyright
Downloads
Getting Started
Installation
Using the docs
Documentation
Tutorials
Quick references
Class list
Global functions
FAQ
Showroom
include
shark
Algorithms
DirectSearch
ElitistCMA.h
Go to the documentation of this file.
1
//===========================================================================
2
/*!
3
*
4
*
5
* \brief Implements the most recent version of the elitist CMA-ES.
6
*
7
* The algorithm is based on
8
*
9
* C. Igel, T. Suttorp, and N. Hansen. A Computational Efficient
10
* Covariance Matrix Update and a (1+1)-CMA for Evolution
11
* Strategies. In Proceedings of the Genetic and Evolutionary
12
* Computation Conference (GECCO 2006), pp. 453-460, ACM Press, 2006
13
*
14
* D. V. Arnold and N. Hansen: Active covariance matrix adaptation for
15
* the (1+1)-CMA-ES. In Proceedings of the Genetic and Evolutionary
16
* Computation Conference (GECCO 2010): pp 385-392, ACM Press 2010
17
*
18
*
19
* \author O. Krause T.Voss
20
* \date 2014
21
*
22
*
23
* \par Copyright 1995-2017 Shark Development Team
24
*
25
* <BR><HR>
26
* This file is part of Shark.
27
* <http://shark-ml.org/>
28
*
29
* Shark is free software: you can redistribute it and/or modify
30
* it under the terms of the GNU Lesser General Public License as published
31
* by the Free Software Foundation, either version 3 of the License, or
32
* (at your option) any later version.
33
*
34
* Shark is distributed in the hope that it will be useful,
35
* but WITHOUT ANY WARRANTY; without even the implied warranty of
36
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
37
* GNU Lesser General Public License for more details.
38
*
39
* You should have received a copy of the GNU Lesser General Public License
40
* along with Shark. If not, see <http://www.gnu.org/licenses/>.
41
*
42
*/
43
//===========================================================================
44
45
46
#ifndef SHARK_ALGORITHMS_DIRECTSEARCH_ELITIST_CMA_H
47
#define SHARK_ALGORITHMS_DIRECTSEARCH_ELITIST_CMA_H
48
49
#include <
shark/Core/DLLSupport.h
>
50
#include <
shark/Algorithms/AbstractSingleObjectiveOptimizer.h
>
51
#include <
shark/Algorithms/DirectSearch/CMA/CMAIndividual.h
>
52
#include <
shark/Algorithms/DirectSearch/Operators/Evaluation/PenalizingEvaluator.h
>
53
54
namespace
shark
{
55
56
/**
57
* \brief Implements the elitist CMA-ES.
58
*
59
* The algorithm is based on
60
*
61
* C. Igel, T. Suttorp, and N. Hansen. A Computational Efficient
62
* Covariance Matrix Update and a (1+1)-CMA for Evolution
63
* Strategies. In Proceedings of the Genetic and Evolutionary
64
* Computation Conference (GECCO 2006), pp. 453-460, ACM Press, 2006
65
*
66
* D. V. Arnold and N. Hansen: Active covariance matrix adaptation for
67
* the (1+1)-CMA-ES. In Proceedings of the Genetic and Evolutionary
68
*/
69
class
ElitistCMA
:
public
AbstractSingleObjectiveOptimizer
<RealVector >{
70
public
:
71
72
SHARK_EXPORT_SYMBOL
ElitistCMA
(random::rng_type& rng =
random::globalRng
);
73
74
/// \brief From INameable: return the class name.
75
std::string
name
()
const
76
{
return
"ElitistCMA"
; }
77
78
SHARK_EXPORT_SYMBOL
void
read
(
InArchive
& archive );
79
80
SHARK_EXPORT_SYMBOL
void
write
(
OutArchive
& archive )
const
;
81
82
using
AbstractSingleObjectiveOptimizer<RealVector >::init
;
83
84
/// \brief Initializes the algorithm for the supplied objective function.
85
SHARK_EXPORT_SYMBOL
void
init
(
ObjectiveFunctionType
const
&
function
,
SearchPointType
const
& p);
86
87
///\brief Executes one iteration of the algorithm.
88
SHARK_EXPORT_SYMBOL
void
step
(
ObjectiveFunctionType
const
&
function
);
89
90
/// \brief Returns true when the active update is used (default true).
91
bool
activeUpdate
()
const
{
92
return
m_activeUpdate;
93
}
94
/// \brief Setter function to enable active update. Returns true when the active update is used (default true).
95
bool
&
activeUpdate
(){
96
return
m_activeUpdate;
97
}
98
99
/// \brief Returns the penalty factor for an individual that is outside the feasible area.
100
///
101
/// The value is multiplied with the distance to the nearest feasible point.
102
double
constrainedPenaltyFactor
()
const
{
103
return
m_evaluator.
m_penaltyFactor
;
104
}
105
106
/// \brief Returns a reference to the penalty factor for an individual that is outside the feasible area.
107
///
108
/// The value is multiplied with the distance to the nearest feasible point.
109
double
&
constrainedPenaltyFactor
(){
110
return
m_evaluator.
m_penaltyFactor
;
111
}
112
113
/// \brief Returns the current step length
114
double
sigma
()
const
{
115
return
m_individual.
chromosome
().
m_stepSize
;
116
}
117
118
/// \brief Returns the current step length
119
double
&
sigma
(){
120
return
m_individual.
chromosome
().
m_stepSize
;
121
}
122
123
private
:
124
CMAIndividual<double>
m_individual;
///< Individual holding strategy parameter. usd as parent and offspring
125
PenalizingEvaluator
m_evaluator;
///< evaluates the fitness of the individual and handles constraints
126
std::vector<double> m_ancestralFitness;
///< stores the last k fitness values (by default 5).
127
bool
m_activeUpdate;
///< Should bad individuals be actively purged from the strategy?
128
129
random::rng_type* mpe_rng;
///< the internal random number generator
130
};
131
}
132
133
#endif