====== Minimization of functions ====== The minimization of general functions of one or more variables can be carried out using the command: ''MINIMIZE'', //func, x$_1$//[, //x$_2$, x$_3$, …//] where //func// represents a function of up to 50 variables //x$_1$, x$_2$, …//. Two different optimization methods can be selected as described below which do or do not use numerical derivative information. The optimization method, as well as finer control over //func//, can be chosen using the ''METHOD'' directive ''METHOD'', //key// [, //key1=value, key2=value, …//] [minimize:method] where //key// defines the optimization method. Valid options for //key// are: * **''BFGS''** Broyden-Fletcher-Goldfarb-Shanno conjugate gradient method, which uses numerical gradients (default) * **''SIMPLEX''** Downhill simplex method, which uses only function evaluations Options to these methods, //key1, key2, …//, are: * **''VARSCALE''=//vscale//** Optimization in space of scaled variables.\\ //vscale=0// no scaling (not recommended)\\ //vscale=1// optimization in the space of ln($x$)\\ //vscale=2// optimization in space of initial value scaling, e.g., $x_1/x_{1i}$ (default) * **''THRESH''=//thresh//** Required accuracy of either the gradient (BFGS) or parameters (SIMPLEX). The default is $1 \cdot 10^{-4}$ for BFGS and $1 \cdot 10^{-2}$ for SIMPLEX. Note that previously this pertained to the function value in the Simplex case. * **''VSTEP''=//epsd//** Step size for numerical gradients (BFGS) or initial SIMPLEX vertices * **''PROC''=//procname//** Specifies the procedure to be executed in each optimization step. This defines a complete function evaluation (if needed, numerical gradients will be evaluated using this procedure as well) * **''STARTCMD''=//command//** Specifies a start command. In each optimization step all input beginning with //command// to the current ''MINIMIZE'' is processed. Miscellaneous directives (separated by semicolons or linebreaks) * **''MAXIT'',//maxit//** maximum number of optimization cycles. The default is 30 for BFGS and 100 for SIMPLEX. ===== Examples ===== ==== Geometry optimization ==== ***, Simple geometry optimization basis=vdz geometry={ O H 1 r H 1 r 2 theta} r=1.8 theta=104 hf mp2 {minimize,energy,r,theta} --- ==== Basis function optimizations ==== ***, Optimization of 2 d functions geometry={Ne} dexp=[2.0,1.0] basis={ sp,Ne,vdz;c; d,Ne,dexp(1),dexp(2) } hf mp2 eval=energy minimize,eval,dexp(1),dexp(2) --- ***, Optimization of 2 d functions geometry={Ne} dexp=[2.0,1.0] {minimize,eval,dexp(1),dexp(2) method,bfgs,varscale=1,thresh=1e-5,proc=optd} proc optd basis={ sp,Ne,vdz;c; d,Ne,dexp(1),dexp(2) } hf mp2 eval=energy endproc ***, MP2 optimization of core-valence cc-pCVDZ functions geometry={Ne} sexp=20. pexp=30. {minimize,ecv,sexp,pexp method,bfgs,varscale=1,thresh=1e-5,proc=myopt} proc myopt basis={ spd,Ne,vdz;c; s,Ne,sexp p,Ne,pexp } hf {mp2;core,1} eval=energy {mp2;core,0} eall=energy ecv=eall-eval endproc ==== Intersection points ==== ***, Try to find intersection seam of singlet-triplet CH2 as function of angle basis=vdz geometry={ C H 1 r H 1 r 2 theta} r=1.6 angles=[70,75,80,85,90] do i=1,#angles theta=angles(i) {minimize,ediff,r method,bfgs,thresh=1e-5,proc=findit} ropt(i)=r eseam(i)=etriplet converge(i)=ediff enddo table,angles,ropt,eseam,converge digit,0,3,5,6 proc findit {hf;wf,8,2,2} etriplet=energy {hf;wf,8,1,0} esinglet=energy ediff=(etriplet-esinglet)**2 endproc ---