- VisualStudio2022插件的安装及使用-编程手把手系列文章
- pprof-在现网场景怎么用
- C#实现的下拉多选框,下拉多选树,多级节点
- 【学习笔记】基础数据结构:猫树
分子动力学模拟中的控制器(Controller)可以被用于修改模拟过程中的原子坐标和原子速度等参量,从而达到控制系统特定参量的目的。例如控温器可以用于实现NVT系综,控压器可用于实现NPT系综。而在MindSponge分子动力学模拟框架下,控温控压都可以基于控制器Controller来实现。关于更多的MindSponge分子动力学模拟框架的信息,如安装和基本使用等,可以阅读MindSponge专栏里面的文章.
Controller位于control路径下,除了已经定义好的一些控温控压算法之外,用户还可以直接继承Controller来实现自己需要的系统控制算法。例如最简单的,这里我们定义一个缩放原子速度的控制器:
class MyController(Controller):
def construct(self,
coordinate: Tensor,
velocity: Tensor,
**kwargs):
return super().construct(coordinate, velocity/2, **kwargs)
它的功能是保持原子当前位置不变,但是速度减半,简单表述就是:
完整的MindSponge用例如下所示:
from mindspore import context, Tensor
# 选择MindSpore图模式,0号GPU硬件
context.set_context(mode=context.GRAPH_MODE, device_target='GPU', device_id=0)
from sponge import set_global_units, Sponge, Molecule, WithEnergyCell, UpdaterMD, ForceField
from sponge.function import VelocityGenerator
from sponge.callback import RunInfo
from sponge.control import Controller
# 自定义控制器
class MyController(Controller):
def construct(self,
coordinate: Tensor,
velocity: Tensor,
**kwargs):
return super().construct(coordinate, velocity/2, **kwargs)
# 设置全局分子动力学模拟单位
set_global_units('nm', 'kj/mol')
# 根据内置模板生成水分子系统
system = Molecule(template='water.spce.yaml')
# 将分子沿X轴方向复制一份,现在体系有2个水分子
system.reduplicate([0.3, 0, 0])
# 基于前面的分子系统,再复制一份,然后合并到system里面,此时一共是4个水分子
new_sys = system.copy([0, 0, -0.3])
system.append(new_sys)
# 选择SPCE力场
potential = ForceField(system, parameters='SPCE')
# 类似于深度学习中的WithLossCell,绑定了分子系统和力场的信息
withenergy = WithEnergyCell(system, potential)
# 配置MD参数
temp = 300
vgen = VelocityGenerator(temp)
velocity = vgen(system.shape, system.atom_mass)
# 构建迭代器,并且传入我们自定义的控制器
updater = UpdaterMD(
system=system,
time_step=1e-3,
velocity=velocity,
integrator='velocity_verlet',
temperature=300,
controller=MyController(system),
)
# 绑定系统、力场和迭代器三者的内容
mini = Sponge(withenergy, optimizer=updater)
# 使用回调函数,每一步都会打印输出能量、温度等信息
run_info = RunInfo(1)
mini.run(5, callbacks=[run_info])
因为每次控制器被调用都会使得速度减半,而且按照执行的顺序,控制器在常规的控温之后,因此运行过程中体系的温度无法达到我们预期的300K:
[MindSPONGE] Started simulation at 2024-05-15 16:07:54
[MindSPONGE] Step: 1, E_pot: 110.0423, E_kin: 11.559962, E_tot: 121.60226, Temperature: 84.26327
[MindSPONGE] Step: 2, E_pot: 111.15905, E_kin: 11.305634, E_tot: 122.46468, Temperature: 82.40941
[MindSPONGE] Step: 3, E_pot: 121.5491, E_kin: 8.962629, E_tot: 130.51173, Temperature: 65.330696
[MindSPONGE] Step: 4, E_pot: 126.55731, E_kin: 7.8556476, E_tot: 134.41296, Temperature: 57.26165
[MindSPONGE] Step: 5, E_pot: 118.11452, E_kin: 9.807281, E_tot: 127.9218, Temperature: 71.48756
[MindSPONGE] Finished simulation at 2024-05-15 16:07:57
[MindSPONGE] Simulation time: 3.06 seconds.
--------------------------------------------------------------------------------
如果去掉这个降低速度的控制器,那么体系的温度和动能一下子就上去了,并且在稳定之后,温度会逐渐收敛在300K附近:
[MindSPONGE] Started simulation at 2024-05-15 16:09:10
[MindSPONGE] Step: 1, E_pot: 110.0423, E_kin: 64.28456, E_tot: 174.32686, Temperature: 468.5852
[MindSPONGE] Step: 2, E_pot: 116.11336, E_kin: 58.616272, E_tot: 174.72963, Temperature: 427.26773
[MindSPONGE] Step: 3, E_pot: 120.5004, E_kin: 54.469967, E_tot: 174.97037, Temperature: 397.04434
[MindSPONGE] Step: 4, E_pot: 119.11376, E_kin: 55.627754, E_tot: 174.74152, Temperature: 405.48373
[MindSPONGE] Step: 5, E_pot: 114.84599, E_kin: 59.536713, E_tot: 174.3827, Temperature: 433.97702
[MindSPONGE] Finished simulation at 2024-05-15 16:09:12
[MindSPONGE] Simulation time: 2.84 seconds.
--------------------------------------------------------------------------------
本文介绍了在MindSponge分子动力学模拟框架先实现自定义Controller控制器的方法,通过调控体系中的原子坐标和原子速度等,来控制系综的参量。MindSponge分子模拟框架基于MindSpore深度学习框架开发而成,对于开发者尤其是深度学习开发者来说,非常的友好.
本文首发链接为:https://www.cnblogs.com/dechinphy/p/controller.html 。
作者ID:DechinPhy 。
更多原著文章:https://www.cnblogs.com/dechinphy/ 。
请博主喝咖啡:https://www.cnblogs.com/dechinphy/gallery/image/379634.html 。
最后此篇关于MindSponge分子动力学模拟——自定义控制器(2024.05)的文章就讲到这里了,如果你想了解更多关于MindSponge分子动力学模拟——自定义控制器(2024.05)的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
好的,所以我编辑了以下... 只需将以下内容放入我的 custom.css #rt-utility .rt-block {CODE HERE} 但是当我尝试改变... 与 #rt-sideslid
在表格 View 中,我有一个自定义单元格(在界面生成器中高度为 500)。在该单元格中,我有一个 Collection View ,我按 (10,10,10,10) 固定到边缘。但是在 tablev
对于我的无能,我很抱歉,但总的来说,我对 Cocoa、Swift 和面向对象编程还很陌生。我的主要来源是《Cocoa Programming for OS X》(第 5 版),以及 Apple 的充满
我正在使用 meta-tegra 为我的 NVIDIA Jetson Nano 构建自定义图像。我需要 PyTorch,但没有它的配方。我在设备上构建了 PyTorch,并将其打包到设备上的轮子中。现
在 jquery 中使用 $.POST 和 $.GET 时,有没有办法将自定义变量添加到 URL 并发送它们?我尝试了以下方法: $.ajax({type:"POST", url:"file.php?
Traefik 已经默认实现了很多中间件,可以满足大部分我们日常的需求,但是在实际工作中,用户仍然还是有自定义中间件的需求,为解决这个问题,官方推出了一个 Traefik Pilot[1] 的功
我想让我的 CustomTextInputLayout 将 Widget.MaterialComponents.TextInputLayout.OutlinedBox 作为默认样式,无需在 XML 中
我在 ~/.emacs 中有以下自定义函数: (defun xi-rgrep (term) (grep-compute-defaults) (interactive "sSearch Te
我有下表: 考虑到每个月的权重,我的目标是在 5 个月内分散 10,000 个单位。与 10,000 相邻的行是我最好的尝试(我在这上面花了几个小时)。黄色是我所追求的。 我试图用来计算的逻辑如下:计
我的表单中有一个字段,它是文件类型。当用户点击保存图标时,我想自然地将文件上传到服务器并将文件名保存在数据库中。我尝试通过回显文件名来测试它,但它似乎不起作用。另外,如何将文件名添加到数据库中?是在模
我有一个 python 脚本来发送电子邮件,它工作得很好,但问题是当我检查我的电子邮件收件箱时。 我希望该用户名是自定义用户名,而不是整个电子邮件地址。 最佳答案 发件人地址应该使用的格式是: You
我想减小 ggcorrplot 中标记的大小,并减少文本和绘图之间的空间。 library(ggcorrplot) data(mtcars) corr <- round(cor(mtcars), 1)
GTK+ noob 问题在这里: 是否可以自定义 GtkFileChooserButton 或 GtkFileChooserDialog 以删除“位置”部分(左侧)和顶部的“位置”输入框? 我实际上要
我正在尝试在主页上使用 ajax 在 magento 中使用 ajax 显示流行的产品列表,我可以为 5 或“N”个产品执行此操作,但我想要的是将分页工具栏与结果集一起添加. 这是我添加的以显示流行产
我正在尝试使用 PasswordResetForm 内置函数。 由于我想要自定义表单字段,因此我编写了自己的表单: class FpasswordForm(PasswordResetForm):
据我了解,新的 Angular 7 提供了拖放功能。我搜索了有关 DnD 的 Tree 组件,但没有找到与树相关的内容。 我在 Stackblitz 上找到的一个工作示例.对比drag'ndrop功能
我必须开发一个自定义选项卡控件并决定使用 WPF/XAML 创建它,因为我无论如何都打算学习它。完成后应该是这样的: 到目前为止,我取得了很好的进展,但还有两个问题: 只有第一个/最后一个标签项应该有
我要定制xtable用于导出到 LaTeX。我知道有些问题是关于 xtable在这里,但我找不到我要找的具体东西。 以下是我的表的外观示例: my.table <- data.frame(Specif
用ejs在这里显示日期 它给我结果 Tue Feb 02 2016 16:02:24 GMT+0530 (IST) 但是我需要表现为 19th January, 2016 如何在ejs中执行此操作?
我想问在 JavaFX 中使用自定义对象制作 ListView 的最佳方法,我想要一个每个项目如下所示的列表: 我搜了一下,发现大部分人都是用细胞工厂的方法来做的。有没有其他办法?例如使用客户 fxm
我是一名优秀的程序员,十分优秀!