Rosetta Tutorial 10 翻译 | 主要为 Minimizer Tutorial 部分

该文档介绍了Rosetta软件中进行蛋白质结构能量最小化的基本方法,包括无约束最小化、使用约束文件限制特定原子移动以及通过MoveMap控制残基的扭转自由度。教程详细解释了如何设置参数、运行命令以及分析输出结果,以找到更低能量的蛋白质构象。
摘要由CSDN通过智能技术生成

该文档翻译自Rosetta官网的教程性文档 Rosetta Tutorials, Demos, and Protocol Captures,原文链接:https://www.rosettacommons.org/demos/latest/Home 。“😇”内的内容为译者添加。

10. Minimization: Finding Deeper Energy Wells

KEYWORDS: CORE_CONCEPTS GENERAL

Tutorial by Kristen Blacklock (kristin.blacklock@rutgers.edu). Edited by Vikram K. Mulligan (vmullig@uw.edu). Created 20 June 2016.

Updated 29 May 2017 by Vikram K. Mulligan (vmullig@uw.edu) to reflect changes to the default scorefunction.

10.1. ~ 10.2. Introduction & Goals

蛋白质绝非静态结构,而是在其构象空间中不断波动,并作为某种状态的系综而存在。蛋白质在其所有构象中的每一个快照都可以与一个能量(函数)相关联,其中一些构象具有高能量,一些具有低能量。在分子建模中,通常需要找到该能量函数的全局最小值(代表最低能量构象)。然而,这是一项非常困难的任务,因为需要采样的能量空间非常大,所以我们只能选择另一种方法:寻找局部最小值。

而最小化(Minimization)是在给定起始结构的构象和能量的情况下,寻找能量函数中最接近局部最小值的一种技术。Rosetta 有一个核心算法,叫做最小化器(minimizer),它解决了将一个结构优化到它最近的局部能量最小值的问题:通过使用某种梯度下降最小化方法,以找到能量函数中最近的局部最小值。最小化器可以使用许多不同的最小化算法,但本质上,所有最小化算法都选择一个矢量作为下降方向,沿着这个矢量前进,直到能量停止下降(线性搜索,line search),然后选择一个新的方向并重复。在本教程中,我们将使用lbfgs\_armijo\_nonmonotone算法,这是一个只需要调用一次的多步骤算法(而不是调用重复迭代来达到收敛)。

一般来说,最小化是确定的,不像依赖于蒙特卡罗搜索的方法。多次重复最小化通常没有什么用处;所产生的系综不太可能因此而变多。这也侧面说明了,最小化对于不同平台之间,甚至不同编译器之间的微小数值精度差异非常敏感。

许多 Rosetta 模块调用最小化器,但最简单的方法之一是使用可执行程序minimize。在本教程中,您将学习以三种不同的方式使用特定的最小化算法,首先允许结构中的所有残基在最小化期间移动,然后使用两种方法,只允许自由度(degrees of freedom,DOFs)的一部分发生变化。具体来说,我们将:

  • 学习通过命令行运行scoreminimize程序。
  • 创建并利用 约束文件constraints file)来阻止CA原子移动。
  • 创建并利用 movemap 来控制最小化过程中允许移动的自由度。
  • 比较和分析每种最小化类型的输出文件和结构。

10.3. How-To: Minimize

10.3.1. Analyzing the input structure

查看3HON.pdb结构。这一结构直接取自 RCSB PDB,Rosetta认为其包含的结构特征不是最优的(虽然与实验X射线数据相比可能无关紧要)。首先,让我们得到这个构象的初始分数,在命令行中输入:

cd <path_to_Rosetta>/main/demos/tutorials/minimization/

<path_to_Rosetta>/main/source/bin/score.default.linuxgccrelease -s 3hon.pdb

将会产生default.sc打分文件,内容如下(😇译者在这里给出的数据并非原教程数据(他竟然放了张图片…),因为使用的是3.13版本,所以可能在数值上略有出入😇):

SCORE:     score     fa_atr     fa_rep     fa_sol    fa_intra_rep    fa_intra_sol_xover4    lk_ball_wtd    fa_elec    pro_close    hbond_sr_bb    hbond_lr_bb    hbond_bb_sc    hbond_sc    dslf_fa13      omega     fa_dun    p_aa_pp    yhh_planarity        ref    rama_prepro    allatom_rms    gdtmm    gdtmm1_1    gdtmm2_2    gdtmm3_3    gdtmm4_3    gdtmm7_4    irms    maxsub    maxsub2.0    rms description
SCORE:   292.410   -259.925    169.436    143.593           0.834                 12.369         -4.366    -38.638       15.694         -3.538         -9.816         -1.268      -1.503        0.000      0.201    219.207     -5.243            0.000     19.622         35.751          0.000    1.000       1.000       1.000       1.000       1.000       1.000   0.000    55.000       55.000  0.000   3hon_0001

该文件的第一行是标题行,它告诉我们哪些列对应于哪些评分项。在这个文件的第二行,我们看到晶体构象的 Rosetta 总评分为 292.410 😇原教程为240.074😇,并且它有一个特别高的排斥性评分fa_rep,这意味着在这个结构中原子之间存在冲突,以及一个很高的 Dunbrack 统计评分fa_dun,这意味着这个结构中的很多 rotamers 都是低概率的😇上述两点与原教程是一致的😇。下面让我们试着用最小化器来解决这些问题。

10.3.2. Setting up the flags file

首次我们需要指定如何运行最小化器,打开minimizer_flags一探究竟:

-s 3hon.pdb
-run:min_type lbfgs_armijo_nonmonotone
-run:min_tolerance 0.001

第一个标签-s指示我们的输入结构;第二个标签-run:min_type指示所使用的最小化算法,在此我们使用 lbfgs_armijo_nonmonotone,但实际上 lbfgs_armijo_nonmonotone是默认算法,所以在此你也可以不写这一行;第三个标签-run:min_tolerance指定了最小化算法的收敛容忍度。Rosetta 对于函数最小化至少有两种容忍度,“常规”(因为没有更好的名称)容忍度和绝对容忍度。“常规”容忍度是被最小化函数值的相对值,例如 0.01 的容忍度意味着最小函数值可能在真实局部最小值的 1% 以内。绝对公差不考虑当前函数值,即 0.01 的绝对容差意味着最小函数值与真正的局部最小值相差最多 0.01 REU。最小化器默认使用“常规”容忍度;这里了解更多关于绝对容忍度的信息。一般来说,将“常规”容忍度设置为0.01是非常宽松的,因此建议指定小于 0.01 的公差设置。在本教程中我们将其设置为0.001。

10.3.3. Running the minimization command

使用minimizer_flags上述运行最小化器:

<path_to_Rosetta>/main/source/bin/minimize.default.linuxgccrelease @minimizer_flags

如果程序没报错且输出如下,那就说明最小化成功:

minimize: Score: 0  -65.9488
minimize: FinalScore: -65.9488
protocols.jd2.JobDistributor: 3hon_0001 reported success in 2 seconds
protocols.jd2.JobDistributor: no more batches to process...
protocols.jd2.JobDistributor: 1 jobs considered, 1 jobs attempted in 2 seconds

同时你将会有score.sc3hon_0001.pdb,下一步就是分析他们。

10.3.4. Analyzing the output

score.sc内容如下:

SEQUENCE: 
SCORE: total_score dslf_fa13    fa_atr    fa_dun   fa_elec fa_intra_rep fa_intra_sol_xover4              fa_rep              fa_sol hbond_bb_sc hbond_lr_bb    hbond_sc hbond_sr_bb lk_ball_wtd       omega     p_aa_pp pro_close rama_prepro         ref yhh_planarity description 
SCORE:     -65.949     0.000  -253.841    95.084   -49.087        0.719              13.274              31.521             131.536      -3.530     -17.509      -3.513      -8.083      -8.167       3.710     -15.377     0.279      -2.612      19.622         0.025 3hon_0001

对比能量最小化与晶体结构得分:

SCORE:	total_score	dslf_fa13	fa_atr	fa_dun	fa_elec	fa_intra_rep	fa_intra_sol_xover4	fa_rep	fa_sol	hbond_bb_sc	hbond_lr_bb	hbond_sc   hbond_sr_bb	lk_ball_wtd	omega	p_aa_pp	pro_close	rama_prepro	 ref	  yhh_planarity	description
SCORE:	-65.949	    0	       -253.841	95.084	-49.087	0.719	        13.274	            31.521	131.536	  -3.53	    -17.509	    -3.513	    -8.083	   -8.167	    3.71	-15.377	 0.279	     -2.612	    19.622	    0.025	    3hon_0001
SCORE:	292.41	    0	       -259.925	219.207	-38.638	0.834	        12.369	            169.436	143.593	  -1.268	-9.816	    -1.503	    -3.538	   -4.366	    0.201	-5.243	 15.694	     35.751	    19.622	    0	        3hon

可以发现总能量、fa_dunfa_rep有了明显下降。请注意,你所获得的精确数值可能与上面所列出的略有不同(+/- 0.5能量单位),这是因为平台与平台之间微小的数值精度差异可能会在轨迹上累积,从而在最终输出中产生明显(但仍然很小)的差异。这里可能还会有一些额外的评分项,因为评分函数可能比本教程时的版本更新。但重要的是,大多数评分项的值已经下降了!

使用Pymol打开并对比3hon.pdb3hon_0001.pdb,可以发现:

 Executive: RMSD =    0.654 (44 to 44 atoms)

在这里插入图片描述

同时,loop区域的最后9个残基与原来的构象相比有了很大的变化,大多数残基的 rotamers 已经不再是它们原来的构象了😇绿色为晶体结构,蓝色为最小化结构,stick 的展示方式略😇。有时在起始构象中允许如此大的移动可能是不可取的。为此,我们可以使用带有约束的最小化来最小化我们的输入结构,其中某些原子的运动将被分数函数惩罚。

10.4. How-To: Minimization with Constraints

现在,我们将在3HON C末端尾部 9 个残基的主链重原子上应用调和坐标约束(coordinate constraints, csts)。你可以把这些约束想象成“松紧带”或“橡皮筋”,它们在最小化轨迹中轻轻地把每个主骨架重原子拉回原来的位置。实际上,约束是在整体能量函数中添加的一个额外的、人工的势能(一系列惩罚偏离输入坐标的谐波势能)。

10.4.1. Setting up the flags file and constraints file

我们需要在标志文件中添加额外的选项,以便让 Rosetta 读取保持原子位置的约束信息。此外,我们需要告诉 Rosetta 在它正在使用的能量函数中添加额外的约束势。为此,我们在权重文件中为约束评分项设置非零权重,见minwithcsts_flags

-s 3hon.pdb
-run:min_type lbfgs_armijo_nonmonotone
-run:min_toleranace 0.001
-constraints:cst_file cstfile
-score:weights ref2015_cst
-out:suffix _minwithcsts

前三个标签已经讲解过;第四个标签constraints:cst_file指明所使用约束文件的名称;第五个标签score:weights指定能量函数使用哪一组权重,在本教程中,我们指定了ref2015_cst权重文件,这是 Rosetta 数据库中预定义的权重文件,它添加了chainbreakcoordinate_constraintatom_pair_constraintangle_constraintdihedral_constraintres_type_constraint,其余与ref2015相同,每一个都是 1.0 权重;第六个标签-out:suffix设置后缀。

10.4.2. Running the minimization command

运行:

<path_to_Rosetta>/main/source/bin/minimize.default.linuxgccrelease @minwithcsts_flags

此时,注意 log 中输出的core.scoring.constraints行,这说明我们的约束成功施加上了:

core.scoring.constraints.util: Constraint choice: cstfile
core.scoring.constraints.ConstraintsIO: read constraints from cstfile
core.scoring.constraints.ConstraintsIO: Read in 39 constraints
···
minimize: Score: 0  -44.3008
minimize: FinalScore: -44.3008
protocols.jd2.JobDistributor: 3hon_minwithcsts_0001 reported success in 2 seconds
protocols.jd2.JobDistributor: no more batches to process...
protocols.jd2.JobDistributor: 1 jobs considered, 1 jobs attempted in 2 seconds

运行成功会得到score_minwithcsts.sc3hon_minwithcsts_0001.pdb,下面来分析。

10.4.3. Analyzing the output

score_minwithcsts.sc内容如下:

SEQUENCE: 
SCORE: total_score angle_constraint atom_pair_constraint chainbreak coordinate_constraint dihedral_constraint dslf_fa13    fa_atr    fa_dun   fa_elec fa_intra_rep fa_intra_sol_xover4              fa_rep              fa_sol hbond_bb_sc hbond_lr_bb    hbond_sc hbond_sr_bb lk_ball_wtd metalbinding_constraint                   omega                 p_aa_pp pro_close rama_prepro         ref res_type_constraint yhh_planarity description 
SCORE:     -44.301            0.000                0.000      0.000                 1.485               0.000     0.000  -252.596   103.538   -52.550        0.700              12.855              31.165             137.396      -4.217     -16.796      -6.144      -7.241      -7.208                   0.000                   5.180                 -13.616     1.013       3.093      19.622               0.000         0.021 3hon_minwithcsts_0001
SCORE:	total_score	dslf_fa13	fa_atr	fa_dun	fa_elec	fa_intra_rep	fa_intra_sol_xover4	fa_rep	fa_sol	hbond_bb_sc	hbond_lr_bb	hbond_sc   hbond_sr_bb	lk_ball_wtd	omega	p_aa_pp	pro_close	rama_prepro	 ref	  yhh_planarity	description
SCORE:	-44.301	    0	       -252.596	103.538	-52.55	0.7	            12.855	            31.165	137.396	  -4.217	-16.796	    -6.144	    -7.241	   -7.208	    5.18	-13.616	 1.013	     3.093	    19.622	    0.021	    3hon_minwithcsts_0001
SCORE:	-65.949	    0	       -253.841	95.084	-49.087	0.719	        13.274	            31.521	131.536	  -3.53	    -17.509	    -3.513	    -8.083	   -8.167	    3.71	-15.377	 0.279	     -2.612	    19.622	    0.025	    3hon_0001
SCORE:	292.41	    0	       -259.925	219.207	-38.638	0.834	        12.369	            169.436	143.593	  -1.268	-9.816	    -1.503	    -3.538	   -4.366	    0.201	-5.243	 15.694	     35.751	    19.622	    0	        3hon

同样,大多数来自约束最小化结构的分数都低于晶体结构的分数,还要注意新增加的约束最小化结构的能量项列表中的坐标约束项。比较最小化结构和约束最小化结构,我们看到总能量的增加主要是由fa_atrfa_dun项的差异引起的。这有两个原因。首先,我们看到坐标约束项本身给分数增加了一个小的正值,因为主链重原子已经从它们的起始坐标稍微移动了;第二,因为这次的结构没有被允许移动太远,小的冲突和缺陷不能完全解决,导致分数比以前略高;所以在保持结构接近晶体结构和深入挖掘到最近的局部能量最小值之间有一个权衡。现在让我们来看看用csts最小化的结构,看看它与我们之前的结构有什么不同:
在这里插入图片描述
在这里插入图片描述

可见9个羧基端CA原子的位置几乎没有移动,😇其余骨架部分由轻微移动,但部分残基的 rotamer 被优化了;绿色为晶体结构,蓝色为最小化结构,黄色为约束最小化结构;下图由上图绕X轴旋转 180° 得😇。

10.5. How-To: Minimization with a MoveMap

在某些情况下,用户可能希望在最小化期间防止某些残基的内部几何形状移动,而不是原子的 XYZ 坐标。为了不允许主链 phi/psi 角和/或侧链 chi 角的移动,我们可以为最小化器提供一个 MoveMap,指定允许改变这些自由度中的哪些。

10.5.1. Some Concepts

10.5.1.1 MoveMap

movemap 是 Rosetta 最小化中的一个重要概念。它允许用户控制在最小化过程中哪些自由度可以改变,哪些自由度是固定的。例如,你可能不希望在建模中移动高度保守的侧链,或者希望在设计应用程序中保留某些相互作用。调用 Rosetta 最小化器的某些 protocols 接受用户定义的 movemap 文件。

在最小化器的使用中,movemap 允许用户指定主链骨架扭转角(phi和psi,在α-氨基酸残基的情况下)和/或侧链扭转角(chi)是否允许在能量函数最小化期间移动。此外,如果输入结构有多个链,movemap 还可以指定是否允许不同链之间的相对移动。注意:即使一个残基的主链和侧链的扭转运动在 movemap 中被关闭,它相对于其他残基的相对位置仍然可能根据折叠树(foldtree)上游的残基的运动而改变。

10.5.1.2 FoldTree

折叠树(foldtree)是与最小化相关的另一个重要概念。虽然折叠树的操作将在另一篇教程中更详细地介绍,但我们将在这里简要概述这个概念。当最小化时,自由度会改变,这可能会对结构产生模糊的后果。例如,如果我将残基5的扭转值从-60改为-50,可能会有几种情况:残基1到4可以保持不变,从5开始的所有残基都可以移动;残基1到4可以移动,5保持固定;残基5中的原子可以移动,但蛋白质中其余的原子保持不变,这意味着蛋白质的键合几何形状将严重扭曲;或者是上述三者的组合。折叠树建立了一个姿态中残基之间的层次关系,从而定义了自由度变化的影响。每个残基都有一个唯一的父残基(除了那个根残基, root residue),每个残基可以有一个或多个子残基(循环依赖是禁止的,例如,如果残基3是残基4的父残基,残基4就不能是残基3的父残基)。残基自由度的变化可以传播到残基的所有子残基,但不影响父残基。虽然典型姿态中的大多数残基是通过键连接联系在一起的,但两个残基可以通过一个贯穿空间的刚体变换(😇rigid body transform,有关刚体变换可以参考这篇专栏,这句话的意思是如果两个结构之间没有约束,他们可以发生刚性的相对运动而联系在一起,不过这教程说的真抽象😇称为跳跃,jump)联系在一起。如果存在两个单独的链(没有键连接它们),就需要至少有一个跳跃,将第一个链中的残基与第二个链中的残基联系起来 😇所以哪怕对于单独一条链你也可以自己设置跳跃的位置,从而允许/禁止跳跃所分割的两段结构的相对运动😇。

如上所述,调用最小化器时,特别是使用 MoveMap 时,应该注意折叠树。默认的 foldtree 以链A的残基1作为根,残基2是1的子残基,残基3是2的子残基,以此类推,并且跳转到任何其他链的第一个残基。任何可移动自由度都会影响折叠树中它下游的每个残基,即使该残基的自由度是由 MoveMap 固定的。例如,让我们考虑一个使用默认折叠树的20残基的姿态的情况,使用 MoveMap 阻止从8到20的残基的骨架重原子的移动;能量最小化将改变残基1到7的主自由度,使残基8到20在过程中在空间中摆动(尽管在这种情况下,残基8到20不能彼此相对移动)。

10.5.1.3 The MoveMap File Format

movemap 文件中的每一行都标识一个跳跃、残基或残基范围,后面跟着允许的自由度:

RESIDUE <#> <BB/CHI/BBCHI/NO>         # 单个残基 <#> 的单个限制选项
RESIDUE <#1> <#2> <BB/CHI/BBCHI/NO>   # 一系列残基 <#1> ~ <#2> 的单个限制选项
JUMP <#> <YES/NO>                     # 单个跳跃 <#> 的单个限制选项

例如:

RESIDUE 35 BB        # 允许残基 35 的骨架扭转角运动
RESIDUE 32 48 BBCHI  # 允许残基 32 ~ 48 的骨架及侧链扭转角运动
JUMP * YES           # 允许所有由任意 jump 分割的两结构之间的刚性运动,*代表任意

如果一个残基出现不止一次,最后一次出现在文件中的标识决定了它的自由度(即 movemap 的行是不可交换的,不像用于控制打包器的TaskOperations——参见打包教程)。例如,上面指定的 movemap 中残基 35 出现在了第一及第二行中,最终其自由度为允许残基骨架及侧链扭转角运动,即第二行。

需要注意的是:如果在 movemap 中没有指定残基或跳跃,它将恢复到默认行为,这个默认行为是特定于 protocol 的。在许多但不是所有的情况下,默认行为是允许所有扭转自由度(BB, CHI)和所有刚体自由度(跳跃)移动的。当有疑问时,最好明确用户请求的行为。

10.5.2. Setting up the flagsfile and movemap file

对于下一个最小化演示,我们需要在 flags 文件中添加一个选项来告诉 Rosetta 读取 movemap 文件。新标志文件minwithmm_flags的内容如下:

-s 3hon.pdb
-run:min_type lbfgs_armijo_nonmonotone
-run:min_toleranace 0.001
-movemap movemapfile
-out:suffix _minwithmm

新标签-movemap指定所使用的 movemap 文件,其内容如下 😇请读者自行理解😇:

RESIDUE * BBCHI
RESIDUE 47 55 NO

10.5.3. Running the minimization command

运行:

<path_to_Rosetta>/main/source/bin/minimize.default.linuxgccrelease @minwithmm_flags

出现:

minimize: Initializing movemap from file movemapfile
···
minimize: Score: 0  -6.55532
minimize: FinalScore: -6.55532
protocols.jd2.JobDistributor: 3hon_minwithmm_0001 reported success in 2 seconds
protocols.jd2.JobDistributor: no more batches to process...
protocols.jd2.JobDistributor: 1 jobs considered, 1 jobs attempted in 2 seconds

10.5.4. Analyzing the output

首先分析打分文件:

SCORE:	total_score	dslf_fa13	fa_atr	fa_dun	fa_elec	fa_intra_rep	fa_intra_sol_xover4	fa_rep	fa_sol	hbond_bb_sc	hbond_lr_bb	hbond_sc   hbond_sr_bb	lk_ball_wtd	omega	p_aa_pp	pro_close	rama_prepro	 ref	  yhh_planarity	description
SCORE:	-6.555	    0	       -246.327	124.744	-45.004	0.735	        13.304	            31.952	126.09	  -4.161	-16.462	    -3.044	    -6.751	   -8.12	    4.612	-13.914	 12.2	     3.929	    19.622	    0.039	    3hon_minwithmm_0001
SCORE:	-44.301	    0	       -252.596	103.538	-52.55	0.7	            12.855	            31.165	137.396	  -4.217	-16.796	    -6.144	    -7.241	   -7.208	    5.18	-13.616	 1.013	     3.093	    19.622	    0.021	    3hon_minwithcsts_0001
SCORE:	-65.949	    0	       -253.841	95.084	-49.087	0.719	        13.274	            31.521	131.536	  -3.53	    -17.509	    -3.513	    -8.083	   -8.167	    3.71	-15.377	 0.279	     -2.612	    19.622	    0.025	    3hon_0001
SCORE:	292.41	    0	       -259.925	219.207	-38.638	0.834	        12.369	            169.436	143.593	  -1.268	-9.816	    -1.503	    -3.538	   -4.366	    0.201	-5.243	 15.694	     35.751	    19.622	    0	        3hon

可以发现,带 movemap 的最小化结构的总得分仍然低于晶体结构,但其能量高于其他两个,这主要是由于pro_close项(与脯氨酸环闭合相关的能量)和fa_dun项的差异。接下来是结构分析:将带 movemap 的最小化结构与晶体结构对比后(😇蓝色为晶体结构,玫红色为带 movemap 的最小化结构😇),可以看出 9 个C末端残基发生了移动。然而,当我们只对 9 个C末端残基进行比对时,很明显,最小化器并没有改变他们的主链或侧链角度。

# whole structure
Executive: RMSD =    2.251 (55 to 55 atoms)
# nine C-terminal residues
Executive: RMSD =    0.000 (9 to 9 atoms)

在这里插入图片描述

在这里插入图片描述

10.6. More detailed algorithm overview (for advanced users)

😇该部分为机翻,尚未检查😇

新手和普通用户可能会跳过本教程的这一部分;它的目的是让高级用户更深入地了解工具的工作方式,希望这将帮助他们更有效地使用工具。如前所述,最小化器通过变异体在梯度下降最小化中工作。Rosetta中的所有能量项不仅定义了一种根据系统自由度的当前值计算能量值的方法,而且还定义了一种根据自由度的当前值计算空间自由度导数的方法。最小化器使用这些导数函数来计算总体梯度向量,∇E。这是一个偏导向量:∇E = dE/dx1, dE/dx2,…, dE/dxN,其中x1…xN是可移动的自由度,计算自由度的当前值。该矢量在构象空间中指向“上坡”方向,其负值指向“下坡”方向。然后,最小化器向“下坡”方向“行进”(这意味着它将-ε∇E添加到当前的自由度矢量中,其中ε是某个任意小的标量值),只有当能量停止减少并开始增加时,才会停止这种“线搜索”。在这一点上,它重新计算∇E(现在它将指向一个稍微不同的方向)并重复搜索。这将继续,直到梯度足够平坦(即足够小的量级),如最小阈值所定义的。

这里有一个稍微复杂的地方。上面描述的方法是在使用“linmin_iterated”风格时发生的。不幸的是,这是相对低效的:如果同时使用一阶和二阶导数信息来选择线搜索方向,最小化可以更快地收敛。正确而准确地做到这一点(牛顿法)意味着计算和反求Hessian矩阵,它是给定N个移动自由度的偏二阶导数的NxN矩阵。由于计算、反求和更新这个大矩阵会大大减慢最小化器的速度,所以折衷的方法是使用最后几个计算得到的梯度值“∇E”来估计Hessian矩阵的逆矩阵。为了达到这一目的,已经提出了许多准牛顿方法,包括Davidon-Fletcher-Powell (DFP)方法和Broyden-Fletcher-Goldfarb-Shanno (BFGS)方法。Rosetta具有后一种方法的两种特点:标准BFGS方法(不准确地命名为“dfpmin”)和低内存、性能更好的变体(称为“lbfgs”)。它们的变化也存在,它们使用不同的停止条件,并以微妙的不同方式进行线路搜索。Rosetta中当前的默认样式是“lbfgs_armijo_nonmonotone”,基准测试已经显示为大蛋白质产生最佳性能。

非常小的系统(例如小肽)可能表现出更好的“dfpmin_armijo_nonmonotone”行为。使用较慢但更准确的“linmin_iterated”风格也可以避免使用逆Hessian近似的某些罕见的工件(在调试行为怪异的protocol时,这是一件好事)。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值