码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • MindSponge分子动力学模拟——自定义控制器(2024.05)


    合集 - MindSponge教程(10)
    1.MindSponge分子动力学模拟——软件架构(2023.08)2023-08-282.MindSponge分子动力学模拟——安装与使用(2023.08)2023-08-173.MindSponge分子动力学模拟——定义一个分子系统(2023.08)2023-08-304.MindSponge分子动力学模拟——计算单点能(2023.08)2023-08-315.MindSponge分子动力学模拟——使用迭代器进行系统演化(2023.09)2023-09-046.MindSponge分子动力学模拟——Constraint约束(2023.09)2023-09-067.MindSponge分子动力学模拟——定义Collective Variables(2024.02)02-198.MindSponge分子动力学模拟——使用MDAnalysis工具进行后分析(2024.02)02-299.MindSponge分子动力学模拟——自建力场(2024.03)03-22
    10.MindSponge分子动力学模拟——自定义控制器(2024.05)05-15
    收起

    技术背景

    分子动力学模拟中的控制器(Controller)可以被用于修改模拟过程中的原子坐标和原子速度等参量,从而达到控制系统特定参量的目的。例如控温器可以用于实现NVT系综,控压器可用于实现NPT系综。而在MindSponge分子动力学模拟框架下,控温控压都可以基于控制器Controller来实现。关于更多的MindSponge分子动力学模拟框架的信息,如安装和基本使用等,可以阅读MindSponge专栏里面的文章。

    自定义Controller

    Controller位于control路径下,除了已经定义好的一些控温控压算法之外,用户还可以直接继承Controller来实现自己需要的系统控制算法。例如最简单的,这里我们定义一个缩放原子速度的控制器:

    class MyController(Controller):
        def construct(self, 
                      coordinate: Tensor,
                      velocity: Tensor,
                      **kwargs):
            return super().construct(coordinate, velocity/2, **kwargs)
    

    它的功能是保持原子当前位置不变,但是速度减半,简单表述就是:

    vcontrol=v2

    完整的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

  • 相关阅读:
    微信小程序自定义组件及投票管理与个人中心界面搭建
    顺丰函证通API集成,无代码开发连接CRM和电商平台
    9.4 链表删除指定节点(静态创建链表)
    P6607 [Code+#7] 蚂蚁 题解
    redis的原理和源码-源码阅读指南
    华为存储培训
    vue父组件如何向子组件传递数据?
    NineData:高效、安全、可靠的DB2数据管理平台
    哈工大李治军老师操作系统笔记【14】:进程同步与信号量(Learning OS Concepts By Coding Them !)
    对象混入的实现方式
  • 原文地址:https://www.cnblogs.com/dechinphy/p/18096072/controller
  • 最新文章
  • 沪漂五周年了:我越来越迷茫了
    Agentic Skill Routing 实战:别再把所有 Skill 塞进 AI Agent 上下文
    MySQL-Seconds_behind_master的精度误差
    [MAF预定义ChatClient中间件-03]CachingChatClient——利用缓存省钱省时间
    AI的至暗历史:从万众期待到被政府撤资,AI的两次死亡徘徊
    Agent OS :五种驯服不确定性的范式
    PortSwigger SQL注入LAB11
    数据库即时编译JIT
    [Begin]AI Learn Data Day 0
    深度学习进阶(二十七)现代 LLM 的核心架构设计其二:SwiGLU
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
小工具 小游戏
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1

京公网安备 11010502049817号