sponge.core.Sponge

查看源文件
class sponge.core.Sponge(network: Union[Molecule, WithEnergyCell, RunOneStepCell], potential: PotentialCell = None, optimizer: Optimizer = None, metrics: dict = None, analysis: AnalysisCell = None, **kwargs)[源代码]

MindSPONGE 的核心引擎,用于模拟和分析。

这个 Cell 是分子系统( sponge.system.Molecule ),势能( sponge.potential.PotentialCell )和优化器( mindspore.nn.Optimizer )在 MindSPONGE 中的三个模块的顶级封装。

有三种方式来封装这些模块:

  1. 直接将 systempotentialoptimizer 封装到 sponge.core.Sponge 中。

  2. 先将 systempotentialsponge.core.WithEnergyCell 封装,然后将 sponge.core.WithEnergyCelloptimizer 一起封装到 sponge.core.Sponge 中。在这种情况下,可以通过调整 sponge.core.WithEnergyCell 来实现对势能的调整,例如设置 neighbour_listsponge.core.WithEnergyCell 中的 bias

  3. 先将 systempotentialsponge.core.WithEnergyCell 封装,然后将 sponge.core.WithEnergyCelloptimizer 一起封装到 sponge.core.RunOneStepCell 中,最后将 sponge.core.RunOneStepCell 传递到 sponge.core.Sponge 中。在这种情况下,可以通过调整 sponge.core.RunOneStepCell 来实现对力的调整,例如在 sponge.core.RunOneStepCell 中添加 sponge.core.WithForceCell

对于模拟:

通过执行成员函数 sponge.core.Sponge.run() 来进行模拟。

对于分析:

sponge.core.Sponge 还可以通过 metrics 来分析模拟系统。 metrics 应该是 sponge.metrics.Metricsponge.colvar.Colvar 的字典。可以通过执行成员函数 sponge.core.Sponge.analyse() 来计算 metrics 的值。

参数:
支持平台:

Ascend GPU

analyse(dataset: Dataset = None, callbacks: Union[Callback, List[Callback]] = None)[源代码]

分析API。

说明

要使用此API,必须在 sponge.core.Sponge 初始化时设置 metrics

参数:
  • dataset (Dataset) - 要分析的模拟数据集。默认值: None

  • callbacks (Union[mindspore.train.Callback, List[mindspore.train.Callback]]) - 训练期间应执行的回调对象列表。默认值: None

返回:

Dict,键是用户定义的度量名称,值是测试模式下模型的度量值。

样例:

>>> from mindsponge.colvar import Torsion
>>> from mindsponge.colvar import Torsion
>>> phi = Torsion([4, 6, 8, 14])
>>> psi = Torsion([6, 8, 14, 16])
>>> md = Sponge(system, potential, optimizer, metrics={'phi': phi, 'psi': psi})
>>> metrics = md.analyse()
>>> for k, v in metrics.items():
>>>     print(k, v)
phi [[3.1415927]]
psi [[3.1415927]]
calc_biases()[源代码]

计算模拟系统的各个偏置势项。

返回:

Tensor,shape为 \((B, V)\) 的Tensor。这里 \(B\) 是batch size, \(V\) 是偏置势项的数量。数据类型为float。偏置势项。

calc_energy()[源代码]

计算模拟系统的总势能(势能和偏置势)。

返回:

shape为 \((B, 1)\) 的Tensor。这里 \(B\) 是batch size。数据类型为float。总势能。

calc_energies()[源代码]

计算模拟系统的各个能量项。

返回:

List[Tensor], 包含各个能量项的Tensor列表。每个张量的形状为 \((B, U)\) ,这里 \(B\) 是batch size, \(U\) 是能量项的数量。数据类型为float。

calc_potential()[源代码]

计算并返回势能。

返回:

Tensor,shape为 \((B, 1)\) 的Tensor。总势能。这里 \(B\) 是batch size,即模拟中的步行者数量。数据类型为float。

change_optimizer(optimizer: Optimizer)[源代码]

更改优化器。

参数:
  • optimizer (mindsponge.optimizer.Optimizer) - 优化器。

change_potential(potential: PotentialCell)[源代码]

更改势能。

参数:
property energy_names

能量项的名称。

返回:

List[str]。能量项的名称。

get_bias()[源代码]

获取总偏置势能。

返回:

Tensor,shape为 \((B, 1)\) 的Tensor。这里 \(B\) 是batch size,即模拟中的步行者数量。数据类型为float。

get_biases()[源代码]

获取偏置势。

返回:

Tensor,shape为 \((B, V)\) 的Tensor。偏置势项。 这里 \(B\) 是batch size,即模拟中的步行者数量,\(V\) 是偏置势项的数量。数据类型为float。

get_energies()[源代码]

获取势能项。

返回:

Tensor,shape为 \((B, U)\) 的Tensor。势能项。这里 \(B\) 是batch size,即模拟中的步行者数量,\(U\) 是势能项的数量。数据类型为float。

property num_biases

偏置势项的数量 V。

返回:

int。偏置势项的数量。

property num_energies

能量项的数量。

返回:

int。能量项的数量。

recompile()[源代码]

重新编译模拟网络。

run(steps: int, callbacks: Union[Callback, List[Callback]] = None, dataset: Dataset = None, show_time: bool = True)[源代码]

运行模拟的接口函数。

参数:
  • steps (int) - 步骤数。

  • callbacks (Union[mindspore.train.Callback, List[mindspore.train.Callback]]) - 获取模拟系统信息的回调函数。默认值: None

  • dataset (Dataset) - 模拟过程中使用的数据集。默认值: None

  • show_time (bool) - 是否显示时间。默认值: True

样例:

>>> from sponge import Sponge
>>> from sponge.system import Molecule
>>> from sponge.potential.forcefield import ForceField
>>> from sponge.optimizer import Updater
>>> from sponge.callback import RunInfo
>>> system = Molecule(template='water.tip3p.yaml')
>>> potential = ForceField(system, parameters='SPCE')
>>> optimizer = Updater(system, controller=None, time_step=1e-3)
>>> md = Sponge(system, potential, optimizer)
>>> md.run(100, callbacks=[RunInfo(10)])
update_bias(step: int)[源代码]

更新偏置势。

参数:
  • step (int) - 步骤数。

update_modifier(step: int)[源代码]

更新力修饰器。

参数:
  • step (int) - 仿真step。

update_neighbour_list()[源代码]

更新邻居列表。

update_wrapper(step: int)[源代码]

更新能量包装器。

参数:
  • step (int) - 步骤数。