- Code and debug the remaining routines required for a complete trust
region method for unconstrained optimization, using finite difference gradients
and Hessians. Algorithm D6.1.1 (the main driver for unconstrained optimization)
should serve as the guide for the routines you need and for the driver
program. You may use either the dogleg or hookstep. That is, you will need
to implement either
HOOKDRIVER / HOOKSTEP / TRUSTREGUP
or
DOGDRIVER / DOGSTEP / TRUSTREGUP
as well as the stopping routines UMSTOP and UMSTOP0, and the appropriate
driver program. You do not need to implement scaling (equivalently, you
may assume typx(i) = S_x (i)= 1 for each i,
and typf = 1).
- Verify that your program runs correctly on each of the five test functions
in the appendix. For problems 1-3, use n= 2, 4, and 6 respectively
(as well as larger values if you like.) You should run each of these problems
from initial points x_0, 10(x_0), 100(x_0), where
x_0 is the point given in the appendix. For stopping tolerances,
use gradtol = (macheps)^(1/3), steptol = (macheps)^(2/3),
itnlimit = 200. For each problem, print the termination code, final
value of x, function value at that point, and the number of iterations
taken. Also tabulate and print the total number of function evaluations
taken, not counting those used for finite difference derivatives. Finally,
for each problem accumulate and print out (or write by hand): the number
of iterations that take the Newton step; the number of iterations where
the trust region is decreased within the iteration (and how many times
it was decreased in each case); and the number of iterations where the
trust region is increased within the iteration (and how many times it was
increased in each case).