public class BOBYQAOptimizer extends MultivariateOptimizer
PowellOptimizer
significantly. Stochastic algorithms like
CMAESOptimizer
succeed more often than BOBYQA, but are more
expensive. BOBYQA could also be considered as a replacement of any
derivative-based optimizer when the derivatives are approximated by
finite differences.Modifier and Type | Class and Description |
---|---|
private static class |
BOBYQAOptimizer.PathIsExploredException
Marker for code paths that are not explored with the current unit tests.
|
Modifier and Type | Field and Description |
---|---|
private ArrayRealVector |
alternativeNewPoint
|
private Array2DRowRealMatrix |
bMatrix
Last n columns of matrix H (where n is the dimension
of the problem).
|
private double[] |
boundDifference
Differences between the upper and lower bounds.
|
private ArrayRealVector |
currentBest
Current best values for the variables to be optimized.
|
static double |
DEFAULT_INITIAL_RADIUS
Default value for
initialTrustRegionRadius : 10.0 . |
static double |
DEFAULT_STOPPING_RADIUS
Default value for
stoppingTrustRegionRadius : 1.0E-8 . |
private ArrayRealVector |
fAtInterpolationPoints
Values of the objective function at the interpolation points.
|
private ArrayRealVector |
gradientAtTrustRegionCenter
Gradient of the quadratic model at
originShift +
trustRegionCenterOffset . |
private static double |
HALF |
private double |
initialTrustRegionRadius
initialTrustRegionRadius XXX
|
private Array2DRowRealMatrix |
interpolationPoints
Coordinates of the interpolation points relative to
originShift . |
private boolean |
isMinimize
Goal type (minimize or maximize).
|
private ArrayRealVector |
lagrangeValuesAtNewPoint
Values of the Lagrange functions at a new point.
|
private ArrayRealVector |
lowerDifference
Differences
BaseMultivariateOptimizer.getLowerBound() - originShift . |
static int |
MINIMUM_PROBLEM_DIMENSION
Minimum dimension of the problem: 2
|
private static double |
MINUS_ONE |
private ArrayRealVector |
modelSecondDerivativesParameters
Parameters of the implicit second derivatives of the quadratic model.
|
private ArrayRealVector |
modelSecondDerivativesValues
Explicit second derivatives of the quadratic model.
|
private ArrayRealVector |
newPoint
|
private int |
numberOfInterpolationPoints
numberOfInterpolationPoints XXX
|
private static double |
ONE |
private static double |
ONE_OVER_A_THOUSAND |
private static double |
ONE_OVER_EIGHT |
private static double |
ONE_OVER_FOUR |
private static double |
ONE_OVER_TEN |
private ArrayRealVector |
originShift
Shift of origin that should reduce the contributions from rounding
errors to values of the model and Lagrange functions.
|
private static double |
SIXTEEN |
private double |
stoppingTrustRegionRadius
stoppingTrustRegionRadius XXX
|
private static double |
TEN |
private ArrayRealVector |
trialStepPoint
|
private int |
trustRegionCenterInterpolationPointIndex
Index of the interpolation point at the trust region center.
|
private ArrayRealVector |
trustRegionCenterOffset
Displacement from
originShift of the trust region center. |
private static double |
TWO |
private static double |
TWO_HUNDRED_FIFTY |
private ArrayRealVector |
upperDifference
Differences
BaseMultivariateOptimizer.getUpperBound() - originShift
All the components of every trustRegionCenterOffset are going
to satisfy the boundstrustRegionCenterOffset i ≤
upperBound i,with appropriate equalities when trustRegionCenterOffset is
on a constraint boundary. |
private static double |
ZERO |
private Array2DRowRealMatrix |
zMatrix
Factorization of the leading npt square submatrix of H, this
factorization being Z ZT, which provides both the correct
rank and positive semi-definiteness.
|
evaluations, iterations
Constructor and Description |
---|
BOBYQAOptimizer(int numberOfInterpolationPoints) |
BOBYQAOptimizer(int numberOfInterpolationPoints,
double initialTrustRegionRadius,
double stoppingTrustRegionRadius) |
Modifier and Type | Method and Description |
---|---|
private double[] |
altmov(int knew,
double adelt)
The arguments N, NPT, XPT, XOPT, BMAT, ZMAT, NDIM, SL and SU all have
the same meanings as the corresponding arguments of BOBYQB.
|
private double |
bobyqa(double[] lowerBound,
double[] upperBound)
This subroutine seeks the least value of a function of many variables,
by applying a trust region method that forms quadratic models by
interpolation.
|
private double |
bobyqb(double[] lowerBound,
double[] upperBound)
The arguments N, NPT, X, XL, XU, RHOBEG, RHOEND, IPRINT and MAXFUN
are identical to the corresponding arguments in SUBROUTINE BOBYQA.
|
private static java.lang.String |
caller(int n) |
protected PointValuePair |
doOptimize()
Performs the bulk of the optimization algorithm.
|
private void |
prelim(double[] lowerBound,
double[] upperBound)
SUBROUTINE PRELIM sets the elements of XBASE, XPT, FVAL, GOPT, HQ, PQ,
BMAT and ZMAT for the first iteration, and it maintains the values of
NF and KOPT.
|
private static void |
printMethod() |
private static void |
printState(int s) |
private void |
setup(double[] lowerBound,
double[] upperBound)
Performs validity checks.
|
private double[] |
trsbox(double delta,
ArrayRealVector gnew,
ArrayRealVector xbdi,
ArrayRealVector s,
ArrayRealVector hs,
ArrayRealVector hred)
A version of the truncated conjugate gradient is applied.
|
private void |
update(double beta,
double denom,
int knew)
The arrays BMAT and ZMAT are updated, as required by the new position
of the interpolation point that has the index KNEW.
|
computeObjectiveValue, getGoalType, optimize, parseOptimizationData
getLowerBound, getStartPoint, getUpperBound
getConvergenceChecker, getEvaluations, getIterations, getMaxEvaluations, getMaxIterations, incrementEvaluationCount, incrementIterationCount, optimize
public static final int MINIMUM_PROBLEM_DIMENSION
public static final double DEFAULT_INITIAL_RADIUS
initialTrustRegionRadius
: 10.0 .public static final double DEFAULT_STOPPING_RADIUS
stoppingTrustRegionRadius
: 1.0E-8 .private static final double ZERO
private static final double ONE
private static final double TWO
private static final double TEN
private static final double SIXTEEN
private static final double TWO_HUNDRED_FIFTY
private static final double MINUS_ONE
private static final double HALF
private static final double ONE_OVER_FOUR
private static final double ONE_OVER_EIGHT
private static final double ONE_OVER_TEN
private static final double ONE_OVER_A_THOUSAND
private final int numberOfInterpolationPoints
private double initialTrustRegionRadius
private final double stoppingTrustRegionRadius
private boolean isMinimize
private ArrayRealVector currentBest
private double[] boundDifference
private int trustRegionCenterInterpolationPointIndex
private Array2DRowRealMatrix bMatrix
private Array2DRowRealMatrix zMatrix
private Array2DRowRealMatrix interpolationPoints
originShift
.
XXX "xpt" in the original code.private ArrayRealVector originShift
private ArrayRealVector fAtInterpolationPoints
private ArrayRealVector trustRegionCenterOffset
originShift
of the trust region center.
XXX "xopt" in the original code.private ArrayRealVector gradientAtTrustRegionCenter
originShift
+
trustRegionCenterOffset
.
XXX "gopt" in the original code.private ArrayRealVector lowerDifference
BaseMultivariateOptimizer.getLowerBound()
- originShift
.
All the components of every trustRegionCenterOffset
are going
to satisfy the boundslowerBound
i ≤
trustRegionCenterOffset
i,trustRegionCenterOffset
is
on a constraint boundary.
XXX "sl" in the original code.private ArrayRealVector upperDifference
BaseMultivariateOptimizer.getUpperBound()
- originShift
All the components of every trustRegionCenterOffset
are going
to satisfy the boundstrustRegionCenterOffset
i ≤
upperBound
i,trustRegionCenterOffset
is
on a constraint boundary.
XXX "su" in the original code.private ArrayRealVector modelSecondDerivativesParameters
private ArrayRealVector newPoint
trsbox
or altmov
.
Usually originShift
+ newPoint
is the vector of
variables for the next evaluation of the objective function.
It also satisfies the constraints indicated in lowerDifference
and upperDifference
.
XXX "xnew" in the original code.private ArrayRealVector alternativeNewPoint
newPoint
, chosen by
altmov
.
It may replace newPoint
in order to increase the denominator
in the updating procedure
.
XXX "xalt" in the original code.private ArrayRealVector trialStepPoint
trustRegionCenterOffset
which is usually
newPoint
- trustRegionCenterOffset
.
XXX "d__" in the original code.private ArrayRealVector lagrangeValuesAtNewPoint
private ArrayRealVector modelSecondDerivativesValues
public BOBYQAOptimizer(int numberOfInterpolationPoints)
numberOfInterpolationPoints
- Number of interpolation conditions.
For a problem of dimension n
, its value must be in the interval
[n+2, (n+1)(n+2)/2]
.
Choices that exceed 2n+1
are not recommended.public BOBYQAOptimizer(int numberOfInterpolationPoints, double initialTrustRegionRadius, double stoppingTrustRegionRadius)
numberOfInterpolationPoints
- Number of interpolation conditions.
For a problem of dimension n
, its value must be in the interval
[n+2, (n+1)(n+2)/2]
.
Choices that exceed 2n+1
are not recommended.initialTrustRegionRadius
- Initial trust region radius.stoppingTrustRegionRadius
- Stopping trust region radius.protected PointValuePair doOptimize()
doOptimize
in class BaseOptimizer<PointValuePair>
private double bobyqa(double[] lowerBound, double[] upperBound)
lowerBound
- Lower bounds.upperBound
- Upper bounds.private double bobyqb(double[] lowerBound, double[] upperBound)
lowerBound
- Lower bounds.upperBound
- Upper bounds.private double[] altmov(int knew, double adelt)
knew
- adelt
- private void prelim(double[] lowerBound, double[] upperBound)
lowerBound
- Lower bounds.upperBound
- Upper bounds.private double[] trsbox(double delta, ArrayRealVector gnew, ArrayRealVector xbdi, ArrayRealVector s, ArrayRealVector hs, ArrayRealVector hred)
delta
- gnew
- xbdi
- s
- hs
- hred
- private void update(double beta, double denom, int knew)
beta
- denom
- knew
- private void setup(double[] lowerBound, double[] upperBound)
lowerBound
- Lower bounds (constraints) of the objective variables.upperBound
- Upperer bounds (constraints) of the objective variables.private static java.lang.String caller(int n)
private static void printState(int s)
private static void printMethod()
Copyright (c) 2003-2016 Apache Software Foundation