Hey Jason:
The line search fails. If I use Armijo I get
TaoLineSearch Object:
type: armijo
maxf=30, ftol=1e-10, gtol=0.0001
Armijo linesearch : alpha=1 beta=0.5 sigma=0.0001 memsize=1
maximum function evaluations=30
tolerances: ftol=0.0001, rtol=1e-10, gtol=0.9
total number of function evaluations=1
total number of gradient evaluations=1
total number of function/gradient evaluations=0
Termination reason: 0
The parameters seem to be the default ones also suggested by Nocedal and
Wright. So I did not change anything. The termination reason is equivalent to
TAOLINESEARCH_CONTINUE_ITERATING. I am not checking the reason directly. I
guess it starts reducing the step size after that. I can see that my objective
function get’s evaluated (as expected); however, the objective values increase
(from what I see when monitoring the evaluations of my objective). This leads
to a failure in the line search and made (still makes) me believe there is a
bug on my side (which I have not found yet). However, if I use a unit step it
converges (relative change of the gradient e.g. to 1E-9; see bottom of this
email). If I use More & Thuente, same thing. No reduction in step size
necessary.
If you suggest that I should do some further testing on simpler problems, I’m
happy to do so. After looking at the code, I just felt like there obviously is
something wrong in the line-search implementation.
Thanks for your help.
/Andreas
Here’s the output after the first iteration (where the Armijo line search
fails):
TaoLineSearch Object:
type: armijo
maxf=30, ftol=1e-10, gtol=0.0001
Armijo linesearch : alpha=1 beta=0.5 sigma=0.0001 memsize=1
maximum function evaluations=30
tolerances: ftol=0.0001, rtol=1e-10, gtol=0.9
total number of function evaluations=1
total number of gradient evaluations=1
total number of function/gradient evaluations=0
Termination reason: 0
TaoLineSearch Object:
type: armijo
maxf=30, ftol=1e-10, gtol=0.0001
Armijo linesearch : alpha=1 beta=0.5 sigma=0.0001 memsize=1
maximum function evaluations=30
tolerances: ftol=0.0001, rtol=1e-10, gtol=0.9
total number of function evaluations=30
total number of gradient evaluations=0
total number of function/gradient evaluations=0
Termination reason: 4
With final output (end of optimization):
Tao Object: 1 MPI processes
type: nls
Newton steps: 1
BFGS steps: 0
Scaled gradient steps: 0
Gradient steps: 1
nls ksp atol: 0
nls ksp rtol: 1
nls ksp ctol: 0
nls ksp negc: 0
nls ksp dtol: 0
nls ksp iter: 0
nls ksp othr: 0
TaoLineSearch Object: 1 MPI processes
type: armijo
KSP Object: 1 MPI processes
type: cg
total KSP iterations: 21
convergence tolerances: fatol=0, frtol=0
convergence tolerances: gatol=0, steptol=0, gttol=0.0001
Residual in Function/Gradient:=0.038741
Objective value=0.639121
total number of iterations=0, (max: 50)
total number of function evaluations=31, max: 10000
total number of gradient evaluations=1, max: 10000
total number of function/gradient evaluations=1, (max: 10000)
total number of Hessian evaluations=1
Solver terminated: -6 Line Search Failure
This is without line-search (unit step size):
Tao Object: 1 MPI processes
type: nls
Newton steps: 3
BFGS steps: 0
Scaled gradient steps: 0
Gradient steps: 0
nls ksp atol: 0
nls ksp rtol: 3
nls ksp ctol: 0
nls ksp negc: 0
nls ksp dtol: 0
nls ksp iter: 0
nls ksp othr: 0
TaoLineSearch Object: 1 MPI processes
type: unit
KSP Object: 1 MPI processes
type: cg
total KSP iterations: 71
convergence tolerances: fatol=0, frtol=0
convergence tolerances: gatol=0, steptol=0, gttol=0.0001
Residual in Function/Gradient:=1.91135e-11
Objective value=0.160914
total number of iterations=3, (max: 50)
total number of function/gradient evaluations=4, (max: 10000)
total number of Hessian evaluations=3
Solution converged: ||g(X)||/||g(X0)|| <= gttol
> On Jun 11, 2015, at 12:44 PM, Jason Sarich <[email protected]
> <mailto:[email protected]>> wrote:
>
> Hi Andreas,
>
> Yes it looks like a bug that the reason is never set, but the line should
> still terminate. Is the problem you are having with the line search itself,
> or is it failing because you are checking this ls->reason directly?
>
> Jason Sarich
>
>
> On Thu, Jun 11, 2015 at 9:53 AM, Andreas Mang <[email protected]
> <mailto:[email protected]>> wrote:
> Hi guys:
>
> I have a problem with the TAO Armijo line search (petsc-3.5.4). My algorithm
> works if I use the More & Thuente line search (default). I have numerically
> checked the gradient of my objective. It’s correct. I am happy to write a
> small snippet of code and do an easy test if you guys disagree, but from what
> I’ve seen in the line search code it seems obvious to me that there is a bug.
> Am I missing something or are you not setting
>
> ls->reason
>
> to
>
> TAOLINESEARCH_SUCCESS
>
> if the Armijo condition is fulfilled (TaoLineSearchApply_Armijo in armijo.c;
> line 118 - 302)?!
>
> It seems to me that ls->reason is and will remain to be set to
>
> TAOLINESEARCH_CONTINUE_ITERATING
>
> if everything works (i.e. I don’t hit one of the exceptions). Does this make
> sense? If not I’ll invest the time and put together a simple test case and,
> if that works, continue to check my code.
>
> /Andreas
>
>
>