sponge.optimizer.UpdaterMD
- class sponge.optimizer.UpdaterMD(system: Molecule, time_step: float = 1e-3, velocity: Union[Tensor, ndarray, List[float]] = None, temperature: float = None, pressure: float = None, integrator: Union[Integrator str] = 'leap_frog', thermostat: Union[Thermostat, str] = 'berendsen', barostat: Union[Barostat, str] = 'berendsen', constraint: Union[Constraint, List[Constraint], str] = None, controller: Union[Controller, List[Controller], str] = None, weight_decay: float = 0.0, loss_scale: float = 1.0, **kwargs)[源代码]
用于分子动力学(MD)仿真的更新器,是
sponge.optimizer.Updater
的子类。UpdaterMD 使用四种不同的
sponge.control.Controller
来控制仿真过程中的不同变量。 integrator 用于更新原子坐标和速度, thermostat 用于温度耦合, barostat 用于压力耦合, constraint 用于键约束。- 参数:
system (
sponge.system.Molecule
) - 仿真系统。time_step (float, 可选) - 时间步长。默认值:
1e-3
。velocity (Union[Tensor, ndarray, List[float]], 可选) - 原子速度数组。数组的shape为 \((A, D)\) 或 \((B, A, D)\) 。这里的 \(B\) 是batch size, \(A\) 是原子数量, \(D\) 是仿真系统的空间维度,通常为3。数据类型为float。默认值:
None
。temperature (float, 可选) - 耦合的参考温度。仅当 thermostat 设置为 str 类型时有效。默认值:
None
。pressure (float, 可选) - 温度耦合的参考压力。仅当 barostat 设置为 str 类型时有效。默认值:
None
。integrator (Union[sponge.control.Integrator, str], 可选) - 用于MD仿真的积分器。可以是 sponge.control.Integrator 对象或积分器名称的 str。默认值:
'leap_frog'
。thermostat (Union[sponge.control.Thermostat, str], 可选) - 用于温度耦合的恒温器。可以是 sponge.control.Thermostat 对象或恒温器名称的 str。默认值:
'berendsen'
。barostat (Union[sponge.control.Barostat, str], 可选) - 用于压力耦合的恒压器。可以是 sponge.control.Barostat 对象或恒压器名称的 str。默认值:
'berendsen'
。constraint (Union[sponge.control.Constraint, List[sponge.control.Constraint], str], 可选) - 键约束的约束控制器。可以是 sponge.control.Constraint 对象或约束控制器名称的 str。默认值:
None
。controller (Union[
sponge.control.Controller
, List[sponge.control.Controller
], str], 可选) - 其他控制器。它将在四个特定控制器(integrator, thermostat, barostat 和 constraint)之后工作。默认值:None
。weight_decay (float, 可选) - 权重衰减的值。默认值:
0.0
。loss_scale (float, 可选) - 损失缩放的值。默认值:
1.0
。
- 输入:
energy (Tensor) - shape为 \((B, 1)\) 。这里的 \(B\) 是batch size,即仿真中的walker的数量。数据类型为float。仿真系统的总势能。
force (Tensor) - shape为 \((B, A, D)\) 。这里的 \(A\) 是原子数量, \(D\) 是仿真系统的空间维度,通常为3。数据类型为float。仿真系统每个原子的力。
virial (Tensor, 可选) - shape为 \((B, D, D)\) 。数据类型为float。仿真系统的应力张量。默认值:
None
。
- 输出:
success (bool) - 是否成功完成当前优化步骤并进入下一步。
- 支持平台:
Ascend
GPU
样例:
>>> from sponge import UpdaterMD, Molecule >>> from mindspore import Tensor >>> system = Molecule(template='water.tip3p.yaml') >>> velocity = Tensor([[0.1008,0.,0.],[-0.8,0.,0.],[-0.8,0.,0.]]) >>> opt = UpdaterMD(system=system, ... time_step=1e-3, ... velocity=velocity, ... integrator='leap_frog', ... temperature=None, ... thermostat=None) >>> # In actual usage, the energy and force are calculated by the >>> # potential cell or the neural network model >>> print(opt.coordinate.value()) >>> # [[[ 0. 0. 0. ] >>> # [ 0.07907964 0.06120793 0. ] >>> # [-0.07907964 0.06120793 0. ]]] >>> force = Tensor([[0.,0.,0.],[0.,0.,0.],[0.,0.,0.]]) >>> opt(energy=Tensor([0.0]), force=force) >>> print(opt.coordinate.value()) >>> # [[[ 0.0001008 0. 0. ] >>> # [ 0.07827964 0.06120793 0. ] >>> # [-0.07987964 0.06120793 0. ]]]
- property ref_press
恒压器的参考压力。
- 返回:
float, 恒压器的参考压力。
- property ref_temp
恒温器的参考温度。
- 返回:
float, 恒温器的参考温度。
- set_barostat(barostat: Barostat, pressure: float = None)[源代码]
设置恒压器。
- 参数:
barostat (Barostat) - 压力联轴的恒压器。
pressure (float, optional) - 恒压器的参考压力值。默认值:
None
。
- set_constraint(constraint: Union[Constraint, List[Constraint]])[源代码]
设置约束算法。
- 参数:
constraint (ConstrUnion[Constraint, List[Constraint]]aint) - 约束。
- set_temperature(temperature: float)[源代码]
设置恒温器的参考温度。
- 参数:
temperature (float) - 恒温器的参考温度。
- 返回:
如果self.thermostat是
None
,返回None
;否则返回thermostat设置后的参考温度的Tensor。
- set_thermostat(thermostat: Thermostat, temperature: float = None)[源代码]
设置恒温器。
- 参数:
thermostat (Thermostat) - 用于温度耦合的恒温器。
temperature (float, optional) - 恒温器的参考温度。默认值:
None
。