Newopt : A Modular Optimisation Package
Introduction
Newopt is a set of general purpose optimisation routines. The
design of the package is based on the idea that most popular
optimisation algorithms can be broken into discreet steps
(e.g. step calculation, hessian update, function evaluation
etc.). If these steps are implemented as commands within an
interpreted language it is possible to use this language to describe a
number of geometry optimisation algorithms in terms of the same set of
component steps. Once the algorithms are coded in this way,
modifications to the algorithms (and new algorithms) can be generated
and tested without recompilation.
Internally, the package is based on an object oriented structure,
an optimiser object is generated by optimiser command,
which allocates memory for all the matrices and vectors needed for the
optimisation. Methods associated with this object can then be invoked
to build up the geometry optimisation algorithm.
In addition to this low-level programming approach, a high level
driver command (newopt) is provided which manages
the optimiser object, allowing selection of one of a set of standard
"black box" optimisation algorithms.
The target function to be minimised is provided as a set of Tcl
procedures. In this way, the user is able to write Tcl wrappers to
allow newopt to optimise any continuous function. A
number of target functions are provided for molecular geometry
optimisation, the most useful are zopt for Z-matrix
(and mixed cartesian/zmatrix) optimisation and copt
for pure cartesian optimisation.
The newopt command performs any type of optimisation or
transition state search as a black box procedure taking the following
general arguments.
Command line arguments
Argument |
Argument type |
Mandatory |
Default |
To specify |
function= |
name of the function |
yes |
none |
type of problem to be
optimised |
method= |
name of optimisation method |
no |
bfgs |
a standard algorithm for solving an optimisation problem |
list_option= |
Output keyword
|
no |
medium |
Level of output |
maxstep= |
integer |
no |
200 |
the maximum number of points to be allowed |
toler= |
real |
no |
n/a |
convergence criterion for the trial
step length; sets other convergence criteria as well |
toler_rmsstep= |
real |
no |
0.0002 |
convergence criterion for the rms step length |
toler_maxstep= |
real |
no |
0.001 |
convergence criterion for the step length |
toler_rmsgrad= |
real |
no |
0.0002 |
convergence criterion for the rms gradient |
toler_maxgrad= |
real |
no |
0.001 |
convergence criterion for the gradient |
toler_energy= |
real |
no |
1.0e-10 |
forced convergence criterion for the energy |
list_variables= |
Boolean
|
no |
no |
printflag for variables information during optimisation |
step= |
real |
no |
0.3 |
maximum trial step length |
punchfile= |
filename |
no |
- |
name of a punchfile for output |
input_hessian= |
matrix |
no |
- |
initial internal coordinate hessian |
hessian_update= |
keyword |
no |
powell |
hessian update algorithm, see below |
final_hessian= |
Matrix tag
|
no |
- |
final internal coordinate hessian |
restart= |
Boolean
|
no |
- |
restart of previous optimisation run |
hard_fail= |
Boolean
|
no |
- |
return failure code to Tcl |
commands= |
Tcl list |
no |
- |
Tcl commands to be executed (only with
method=custom) |
var_list= |
Tcl list of numbers |
no |
- |
list of variables to be operated on in conjunction with selected hessian updates |
eig_list= |
Tcl list of numbers |
no |
- |
list of variables to be operated on in conjunction with searches along hessian eigenmodes |
del= |
real |
no |
- |
displacement for finite-differencing |
Some of these arguments may only
required with certain algorithms. If not required, they need not be
specified. If they are omitted, default options and values will be put
into operation.
function=
The function argument specifies the type of function which
the newopt command is to work on. It may require additional
arguments which must be passed through to the appropriate codes using
the colon (:) notation, as discussed in the ChemShell Basics section.
E.g. for a standard pseudo-Newton
geometry optimisation in internal coordinates using GAMESS-UK with a
dzp basis set (for further details of GAMESS-UK options see the
Quantum interfaces section
newopt function=zopt : {zmatrix=z theory=gamess: \
{basis=dzp listing=gamess.out} }
Optimisation Methods
The method argument specifies a standard algorithm, to be used
as a black box, for solving an optimisation problem. Depending on the
algorithm this may be a minimisation or a transition state (TS)
search. Currently valid options are:
Method |
To do what |
descent |
steepest-descent minimization. The actual step size is determined through the Shanno
line-search algorithm. |
bfgs |
pseudo-Newton minimisation with BFGS update of the inverse
hessian. The actual step size is determined through the Shanno
line-search algorithm. Further arguments |
bfgs2 |
pseudo-Newton minimisation with BFGS update of the inverse
hessian. The actual step size is determined through a function-only
line-search algorithm. Further arguments |
conmin |
conjugate gradient minimisation. The actual step size
is determined through the Shanno line-search algorithm, with at least
two trial point evaluations along the line. A conjugate gradient
restart step is performed every ndim steps, with ndim the
dimension of the optimisation problem. A restart step is also
performed under certain conditions of line-search failure. |
mineig |
line-search minimisation along selected hessian
eigenmodes. The mode-indices to be minimised along are input through the eig_list
argument. |
scaneig |
potential energy scan along selected hessian
eigenmodes with fixed step-lengths. The mode-indices to be scanned are input through the eig_list=
argument. The step-length is input through the step= argument. The
scan is stopped if the energy goes up if follow_mode=0 |
baker |
Baker's (partial) rational function optimisation (P)RFO
algorithm, with the Powell update of the hessian. The actual step
size is bounded by step. For a TS search, the follow_mode
argument must be specified as non-zero. Mode-following is achieved
through finding maximum overlap of the hessian eigenvectors with the
mode to be followed. The mode to be followed may be kept fixed to the
starting mode or updated each step to be the actual step
direction. This is controlled through the update_mode
argument (see below). The argument input_hessian argument is required with
this algorithm. Further arguments |
diis |
direct inversion in the iterative subspace
algorithm. Further arguments |
custom |
user-defined search. The search is performed through the
Tcl-commands supplied in the commands= argument. See the
newopt programming guide
for information on custom programming. |
The default of the method argument is bfgs.
The verbose argument may be used to set the level of output
during an optimisation. Switching it on causes the eigenvectors
of the hessian and the step-vector to be printed, amongst
others. Valid options are boolean equivalents; the
default value is off.
The list_variables argument specifies the printing of the
current variables at each search-step. The default value is yes.
The maxstep argument specifies the maximum number of actual search
steps in a search. Note that only the result of a line search counts
as a step. The default value is 200.
The toler argument specifies the convergence criteria on the
maximum step component. From it, the three other convergence criteria
are derived as shown in the table below. If toler is left unspecified,
the default values given in the same table are set if they are not
specified separately.
Convergence tester |
Convergence criterion |
|
From toler |
default |
maximum step component |
toler |
0.001 |
rms of the step vector |
toler * 2/3 |
0.0002 |
maximum gradient component |
toler * 1/4 |
0.001 |
rms of the gradient |
toler * 1/6 |
0.0002 |
The toler_rmsstep, toler_maxstep,
toler_rmsgrad, and toler_maxgrad arguments specify
the convergence criteria for the rms-value of the step, maximum value
of the step, rms-value of the gradient, and maximum value of the
gradient, respectively. If any of these are specified, they override
the values set by the toler argument, or the default values
tabulated above.
All methods except bfgs, baker and diis are converged on all four
criteria listed above.
The toler_energy argument specifies the convergence
criterion on the energy. If in two consecutive steps the energy change
is less than this criterion, convergence is forced, even if the
criteria on gradient and step are not met. This option is currently
valid only with method=bfgs, baker and
diis. The default value is 1.e-10.
The bfgs and Baker algorithms are tested for convergence in
the following manner: the toler_maxgrad criterion must always be
satisfied and either
the toler_maxstep or toler_energy criteria.
The step argument specifies the maximum allowed step length in
the Baker algorithm. The default value is 0.3. It is also used to
restrict step-lengths in other algorithms or set the step-length in the
scanning along hessian eigenmodes.
The punchfile argument specifies the output of information on
the structures during the optimisation to a punchfile. The output may
be used to check the progress of an optimisation. The default is not to write to a punchfile.
The input_hessian argument specifies the name of the starting
hessian, which may be calculated beforehand through the hessian
command. It is required with the method=baker option.
The hessian_update argument specifies the method by which the
hessian is updated. Currently valid options are listed in the table
below.
Update options |
To do what |
powell |
Powell update of the hessian |
bfgs |
BFGS update of the hessian |
mursar |
Murtagh-Sargent update of the hessian |
hybrid |
hybrid ( i.e. weighted) combination of Powell and
Murtagh-Sargent update |
fde |
finite differencing of selected hessian eigenmodes. The
eigenmodes are specified through the var_list argument (default
"1 2 3") |
fde2 |
two-point finite differencing of selected hessian
eigenmodes. See also fde. |
none |
hessian is not updated |
This option is active only with method=mineig, scaneig,
baker and diis. The default value is
powell. With all other method= arguments, the
hessian, if used, is updated with the BFGS scheme.
The final_hessian argument specifies the name of the
final hessian, i.e. the hessian at the end of the
optimisation. This argument is active with method=bfgs,
bfgs2, and baker options.
The restart argument causes the optimisation to start from saved
files (ending _restart), containing information about the point at which the previous
run left off. Geometrical, function, gradient and hessian information
is taken off those files. Options are boolean equivalents. The
default is no.
The hard_fail argument routes any Tcl-error message to output
for diagnostics. The default is yes.
The commands argument provides the Tcl-commands to be executed
with method=custom. The default is an empty string.
The var_list argument is a string listing the variables or
modes to be operated on by the eigenmode finite-difference hessian
update (hessian_update=fde) or recomputation options (see
below). The default is "1 2 3".
The eig_list argument is a string listing the variables
or modes to be search along with method=mineig and
scaneig. The default is undefined.
The del argument specifies the displacement in
finite-differencing steps, be it for hessian or gradient. The default
is 0.001.
Target Functions
The target function for the optimiser is specified using the function=
argument.
- zopt Molecular geometry optimisation in Z-matrix and
mixed cartesian coordinates
- copt Molecular geometry optimisation in
cartesian
coordinates
- Custom target functions It is possible to
optimise any function that can be evaluated by a ChemShell command, provided the
correct interface is adopted.
|