include
LBFGS
Param.h
Go to the documentation of this file.
1
// Copyright (C) 2016 Yixuan Qiu <yixuan.qiu@cos.name>
2
// Under MIT license
3
4
#ifndef PARAM_H
5
#define PARAM_H
6
7
#include <Eigen/Core>
8
#include <stdexcept>
// std::invalid_argument
9
10
11
namespace
LBFGSpp
{
12
13
19
25
enum
LINE_SEARCH_ALGORITHM
26
{
37
LBFGS_LINESEARCH_BACKTRACKING_ARMIJO
= 1,
38
43
LBFGS_LINESEARCH_BACKTRACKING
= 2,
44
53
LBFGS_LINESEARCH_BACKTRACKING_WOLFE
= 2,
54
63
LBFGS_LINESEARCH_BACKTRACKING_STRONG_WOLFE
= 3
64
};
65
66
70
template
<
typename
Scalar =
double
>
71
class
LBFGSParam
72
{
73
public
:
82
int
m
;
91
Scalar
epsilon
;
100
int
past
;
109
Scalar
delta
;
117
int
max_iterations
;
123
int
linesearch
;
129
int
max_linesearch
;
135
Scalar
min_step
;
141
Scalar
max_step
;
147
Scalar
ftol
;
155
Scalar
wolfe
;
156
157
public
:
162
LBFGSParam
()
163
{
164
m = 6;
165
epsilon = Scalar(1e-5);
166
past = 0;
167
delta = Scalar(0);
168
max_iterations = 0;
169
linesearch =
LBFGS_LINESEARCH_BACKTRACKING_ARMIJO
;
170
max_linesearch = 20;
171
min_step = Scalar(1e-20);
172
max_step = Scalar(1e+20);
173
ftol = Scalar(1e-4);
174
wolfe = Scalar(0.9);
175
}
176
182
inline
void
check_param
()
const
183
{
184
if
(m <= 0)
185
throw
std::invalid_argument(
"'m' must be positive"
);
186
if
(epsilon <= 0)
187
throw
std::invalid_argument(
"'epsilon' must be positive"
);
188
if
(past < 0)
189
throw
std::invalid_argument(
"'past' must be non-negative"
);
190
if
(delta < 0)
191
throw
std::invalid_argument(
"'delta' must be non-negative"
);
192
if
(max_iterations < 0)
193
throw
std::invalid_argument(
"'max_iterations' must be non-negative"
);
194
if
(linesearch <
LBFGS_LINESEARCH_BACKTRACKING_ARMIJO
||
195
linesearch >
LBFGS_LINESEARCH_BACKTRACKING_STRONG_WOLFE
)
196
throw
std::invalid_argument(
"unsupported line search algorithm"
);
197
if
(max_linesearch <= 0)
198
throw
std::invalid_argument(
"'max_linesearch' must be positive"
);
199
if
(min_step < 0)
200
throw
std::invalid_argument(
"'min_step' must be positive"
);
201
if
(max_step < min_step )
202
throw
std::invalid_argument(
"'max_step' must be greater than 'min_step'"
);
203
if
(ftol <= 0 || ftol >= 0.5)
204
throw
std::invalid_argument(
"'ftol' must satisfy 0 < ftol < 0.5"
);
205
if
(wolfe <= ftol || wolfe >= 1)
206
throw
std::invalid_argument(
"'wolfe' must satisfy ftol < wolfe < 1"
);
207
}
208
};
209
210
211
}
// namespace LBFGSpp
212
213
#endif // PARAM_H
LBFGSpp::LBFGSParam::check_param
void check_param() const
Definition:
Param.h:182
LBFGSpp::LBFGS_LINESEARCH_BACKTRACKING
Definition:
Param.h:43
LBFGSpp::LBFGS_LINESEARCH_BACKTRACKING_WOLFE
Definition:
Param.h:53
LBFGSpp::LBFGSParam::linesearch
int linesearch
Definition:
Param.h:123
LBFGSpp::LBFGSParam::min_step
Scalar min_step
Definition:
Param.h:135
LBFGSpp::LBFGS_LINESEARCH_BACKTRACKING_ARMIJO
Definition:
Param.h:37
LBFGSpp
Definition:
LBFGS.h:11
LBFGSpp::LBFGSParam::max_iterations
int max_iterations
Definition:
Param.h:117
LBFGSpp::LBFGSParam::past
int past
Definition:
Param.h:100
LBFGSpp::LBFGSParam::delta
Scalar delta
Definition:
Param.h:109
LBFGSpp::LBFGSParam::epsilon
Scalar epsilon
Definition:
Param.h:91
LBFGSpp::LBFGSParam
Definition:
Param.h:71
LBFGSpp::LBFGS_LINESEARCH_BACKTRACKING_STRONG_WOLFE
Definition:
Param.h:63
LBFGSpp::LINE_SEARCH_ALGORITHM
LINE_SEARCH_ALGORITHM
Definition:
Param.h:25
LBFGSpp::LBFGSParam::wolfe
Scalar wolfe
Definition:
Param.h:155
LBFGSpp::LBFGSParam::LBFGSParam
LBFGSParam()
Definition:
Param.h:162
LBFGSpp::LBFGSParam::ftol
Scalar ftol
Definition:
Param.h:147
LBFGSpp::LBFGSParam::m
int m
Definition:
Param.h:82
LBFGSpp::LBFGSParam::max_linesearch
int max_linesearch
Definition:
Param.h:129
LBFGSpp::LBFGSParam::max_step
Scalar max_step
Definition:
Param.h:141
co_scan
Author(s):
autogenerated on Mon Feb 28 2022 23:00:45