\(\newcommand{\W}[1]{ \; #1 \; }\) \(\newcommand{\R}[1]{ {\rm #1} }\) \(\newcommand{\B}[1]{ {\bf #1} }\) \(\newcommand{\D}[2]{ \frac{\partial #1}{\partial #2} }\) \(\newcommand{\DD}[3]{ \frac{\partial^2 #1}{\partial #2 \partial #3} }\) \(\newcommand{\Dpow}[2]{ \frac{\partial^{#1}}{\partial {#2}^{#1}} }\) \(\newcommand{\dpow}[2]{ \frac{ {\rm d}^{#1}}{{\rm d}\, {#2}^{#1}} }\)
min_nso_quad¶
View page sourceNon-Smooth Optimization Using Abs-normal Quadratic Approximations¶
Syntax¶
min_nso_quad
(Prototype¶
template <class DblVector, class SizeVector>
bool min_nso_quad(
size_t level ,
ADFun<double>& f ,
ADFun<double>& g ,
ADFun<double>& a ,
const DblVector& epsilon ,
SizeVector maxitr ,
double b_in ,
const DblVector& x_in ,
DblVector& x_out )
Source¶
This following is a link to the source code for this example: min_nso_quad.hpp .
Purpose¶
Given a current that abs-normal representation g , a , for a function \(f(x)\), this routine minimizes \(f(x)\).
DblVector¶
is a SimpleVector class with elements of type double
.
SizeVector¶
is a SimpleVector class with elements of type size_t
.
level¶
This value is less that or equal 5.
If level == 0 ,
no tracing of the optimization is printed.
If level >= 1 ,
a trace of each iteration of min_nso_quad
is printed.
If level >= 2 ,
a trace of each iteration of the abs_min_quad
sub-problem is printed.
If level >= 3 ,
a trace of the qp_box sub-problem is printed.
If level >= 4 ,
a trace of the qp_interior sub-problem is printed.
f¶
This is the original function for the abs-normal form; see f .
n¶
We use n to denote the dimension of the domain for f ; i.e.,
f . Domain
() .
m¶
We use m to denote the dimension of the range for f ; i.e.,
f . Range
() .
This must be equal to one.
s¶
We use s to denote the number absolute terms in f .
g¶
This is the function g in the abs-normal representation of f .
a¶
This is the function a in the abs-normal representation of f .
epsilon¶
This is a vector with size 2. The value epsilon [0] is convergence criteria in terms of the infinity norm of the difference of x_out between iterations. The value epsilon [1] is convergence criteria in terms of the derivative of \(f(x)\). This derivative is actually the average of the directional derivative in the direction of the sub-problem minimizer.
maxitr¶
This is a vector with size 3.
The value maxitr [0] is the maximum number of
min_nso_quad
iterations to try before giving up on convergence.
The value maxitr [1] is the maximum number of iterations in the
abs_min_quad
sub-problem.
The value maxitr [2] is the maximum number of iterations in
the qp_interior sub-problems.
b_in¶
This the initial bound on the trust region size. To be specific, if \(b\) is the current trust region size, at each iteration affine approximation is minimized with respect to \(\Delta x\) and subject to
for j = 0 , …, n -1
.
It must hold that b_in > epsilon [0] .
x_in¶
This vector x_out has size n .
It is the starting point for the optimization procedure; i.e.,
the min_nso_quad
iterations.
x_out¶
This vector x_out has size n . The input value of its elements does not matter. Upon return, it is the approximate minimizer of the abs-normal approximation for \(f(x)\) over the trust region is \(x = \hat{x} + \Delta x\).
Example¶
The file min_nso_quad.cpp contains an example and test of
min_nso_quad
.