计算优化方法入门介绍

  • strict warning: Non-static method view::load() should not be called statically in /home/vasp/wwwroot/drupal-6.33/sites/all/modules/views/views.module on line 906.
  • strict warning: Declaration of views_handler_argument::init() should be compatible with views_handler::init(&$view, $options) in /home/vasp/wwwroot/drupal-6.33/sites/all/modules/views/handlers/views_handler_argument.inc on line 744.
  • strict warning: Declaration of views_plugin_row::options_validate() should be compatible with views_plugin::options_validate(&$form, &$form_state) in /home/vasp/wwwroot/drupal-6.33/sites/all/modules/views/plugins/views_plugin_row.inc on line 134.
  • strict warning: Declaration of views_plugin_row::options_submit() should be compatible with views_plugin::options_submit(&$form, &$form_state) in /home/vasp/wwwroot/drupal-6.33/sites/all/modules/views/plugins/views_plugin_row.inc on line 134.

在所有涉及计算化学的书籍中,这方面的知识介绍的不多,我希望能够抛砖引玉,利用我的所学和掌握的一些资料,能对大家有所启发。在叙述中我会紧紧结合我们量化的实际来讲。

优化
英文optimization,从本质上来讲,是数学问题,为了严谨起见,我们也要先从数学定义说起,只是我的数学描述是根据我的理解来的,相当粗略,有些符号还打不出来,请原谅:(

定义:
如果有一个函数,它是变量x或者一个变量集{x1, x2, ... xn}(这个我们也可以称为矢量,或者向量X)的函数,我们可以把它写为f(x)或者f(X),通过改变变量,来找到函数的最大值或者最小值
注意:
1。这里对函数没有明确的限制(比如品优,连续之类的)
2。这里的函数f必须是many to one function,而不能是one to many function。也就是说同样的x必须给出同样的f值。
3。最小化f(x)相当于最大化-f(x),对于X是矢量的情况,也是一样

对我们量化来说,这个f值通常就是能量,而变量基本上不会是单一的,而是会有一系列的变量,对于能量优化(单点计算)而言,这一系列的变量就是LCAO的MO轨道的系数值
对于几何优化,就是一系列的键长,键角之类的。对于一般的程序几何优化,那就是转化为一系列的体系的坐标,guassian默认几何优化是用冗余内坐标。
我们也经常碰到“势能面”这个概念,它就是能量关于坐标的函数。这里的坐标是广义的。
量化中的优化就是找极值点,平衡构型搜索是找势能面极小点,而过渡态的则是找势能面的鞍点。

什么是全局优化?什么是局域优化?

我们讲最小化,从数学上来说,就是
在其定义域内,我们能找到这样的x*
使得f(x)>f(x*)
这就是全局优化(最小化),最大化可以同样定义。
局域优化,就是
在一个小的范围内,即x属于[-d,d],d是个实数,一般这个数都比较小
能找到这样的x*
使得f(x)>f(x*)

我们在文献中常常看到全局最小,局部最大之类,那就是local minima,global maxima
请看下图:

势能曲线势能曲线

在化学反应研究中经常会提到过渡态,中间体,在这里就很容易联系起来了。

量化中的优化也根据此分为两大类:

局部优化就是

原始构型并不处于势能面的极小点上,通过搜索让构型到达邻近的极小点

全局优化就是找到能量最低的构型。

局 部优化的方法通常有爬坡法、最速下降法和牛顿法,其中爬坡法适用于任何情况,最速下降法要求势能面的一阶导数不变号,牛顿法则要求二阶导数也不变号,在后 面的帖子中会陆续介绍。收敛速度最快的算法适应的条件最苛刻。在guassian中采用一种称为Berny搜索的算法,实际上是对这三种算法的综合运用(这句话出处:

http://210.34.15.126/cgi-bin/topic.cgi?forum=1&topic=2036&show=0)。

在guassian中,SCF计算的最陡下降法是scf=qc,opt中计算的最陡下降法是steep,而newton就是用牛顿法。berny计算优化可以参看gusssian手册。

退火算法和遗传算法是最常用的全局构型搜索,它们都检测附近的多个构型,以获得最低的一个(这句话的出处

http://210.34.15.126/cgi-bin/topic.cgi?forum=1&topic=2036&show=0)。

由于运算程序不可能直接获得整个势能面,所以理论上不可能确保找到能量最低的构型。

要确保最低构型,唯一的办法就是做势能面扫描,但是如果变量很多的话,这个扫描就只能停留在理论上了。

一般的量化程序用的都是局部优化方法,所以从理论上没有办法保证你优化得到的就是能量极值。

另外提及一下论坛相关的讨论:

http://210.34.15.126/cgi-bin/topic.cgi?forum=3&topic=6103&show=0