首页
学习
活动
专区
圈层
工具
发布

Nature|DeepMind用深度学习改进化学中的密度泛函理论

在过去的30年里,密度泛函理论(density functional theory,DFT)已经成为预测化学、生物学和材料科学中各种系统特性的最广泛使用的电子结构方法。...特别是,对于涉及移动电荷和自旋的电荷密度,可以观察到明显的系统误差。...为了解决这个问题,研究人员(从药理学家到电池工程师,其工作都依赖于发现或开发新分子)几十年来一直依赖一套称为密度函数理论(DFT)的技术来预测分子的物理特性。...该理论并不试图对单个电子进行建模,而是旨在计算电子的负电荷在整个分子中的整体分布。Kirkpatrick说:"DFT着眼于平均电荷密度,所以它不知道单个电子是什么。...然后,物质的大多数性质可以很容易地从该密度中计算出来。"

2.5K21

基于第一性原理DFT密度泛函理论的计算项目盘点

其中,基于第一性原理的密度泛函理论(DFT)计算方法,因其准确性、可靠性和高效性而广受欢迎。...本文将介绍基于DFT的密度泛函理论的计算项目,包括电子结构计算、材料的几何结构优化、反应路径计算以及材料的光学和磁学性质等方面的研究。...电子结构计算基于DFT的电子结构计算可以计算出材料的电子密度、能带结构和密度态密度等信息。这些信息对于材料的性质研究和设计具有重要意义。...总结基于DFT的密度泛函理论是一种强大的计算方法,可以在材料科学领域中用于多个研究项目。...其中,电子结构计算、几何结构优化、反应路径计算以及材料的光学和磁学性质等方面的研究是基于DFT的密度泛函理论的核心应用。

96210
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    泛函编程(17)-泛函状态-State In Action

    对OOP编程人员来说,泛函状态State是一种全新的数据类型。我们在上节做了些介绍,在这节我们讨论一下State类型的应用:用一个具体的例子来示范如何使用State类型。..._)) => machine.copy(locked = true, candies = nCandy - 1) 8 } 9 } 这个transition函数采用了泛函状态维护风格...对比起来,下面的例子就可以说是真正的泛函编程风格了。同样针对以上的贩售机模拟逻辑要求,我们将用典型的泛函风格来编程。...在以上这个例子里我们采用了泛函编程风格:用类型匹配方式进行了函数组合,虽然说代码可能简单了,但清洁可能就说不上了。...需要用类型匹配(type line-up)来分析理解,也就是要再熟悉多点泛函编程思考模式。

    98280

    泛函编程(16)-泛函状态-Functional State

    初接触泛函状态觉着很不习惯。...主要是在使用State数据类型时很难理解其中的原理,特别是泛函状态变迁机制(state transition mechanism):怎么状态就起了变化,实在难以跟踪。...RNG简单描述了泛函方式的状态变迁及支持状态变迁所需要的数据结构和操作函数款式。    ...再次聚焦一下我们设计State类型的目标:State类型不但可以使我们像设计其它类型一样封装一个较低阶类型元素并且提供一套状态变迁机制,而且状态变迁机制是泛函式的,自然隐性的。...泛函状态是一种隐形自动的变迁,那么如果我们需要打乱既定流程,手动设定或者临时读取状态时该怎么办呢?

    1.2K100

    神经网络替代密度泛函理论!清华研究组发布通用材料模型 DeepH,实现超精准预测

    编辑:李姝 清华大学研究人员利用原创的深度学习密度泛函理论哈密顿量 (DeepH) 方法,发展出 DeepH 通用材料模型,并展示了一种构建「材料大模型」的可行方案,这一突破性进展为创新材料发现提供了新机遇...过去,业界广泛使用密度泛函理论 (DFT) 来研究材料电子结构和性质,其实质是将电子密度作为分子(原子)基态中所有信息的载体,而不是单个电子的波函数,从而将多电子体系转化为单电子问题进行求解,既简化了计算过程...这正是深度学习密度泛函理论哈密顿量 (DeepH) 方法的核心。...接下来,该研究利用 AiiDA(自动化交互式基础设施和数据库)的框架开发了一个高通量的工作流程来进行密度泛函理论计算,并用它来构建材料数据库。...DFT 计算和 DeepH 预测的结果比较 为了评估 DeepH 通用材料模型预测材料性质的准确性,该研究在计算示例时,分别使用了基于密度泛函理论 (DFT) 计算和 DeepH 预测的 DFT 哈密顿量

    1.1K11

    泛函编程(0)-什么是泛函编程

    什么是泛函编程(Functional Programming)?泛函编程就是用函数编写程序。这个回答太抽象,等于没说。...再说清楚一点:泛函编程就想砌积木一样把函数当成积木块,把函数的输出输入作为积木的楔子和楔孔,把一个函数的输出当作另一个函数的输入组合成一个更大的函数。整个砌积木的过程就是泛函编程。...那么,可不可以说指令编程就对应变量赋值,泛函编程相当于函数组合呢?实际上“函数组合”这个词是泛函编程的灵魂,英文是Functional Composition。这么说是不是又清楚了一点了?...要知道泛函编程是一个全新的编程范畴。     如果泛函编程就是组合函数,那这可是一种全新的编程方式。如何实现函数的组合呢?...泛函编程是以数学理论(⋋-culculus)为基础的,程序函数的组合是通过数学函数组合定律来实现的。嗯,的确是一套全新的概念,那就让我们从头学起吧。

    1.5K80

    泛函编程(32)-泛函IO:IO Monad

    由于泛函编程非常重视函数组合(function composition),任何带有副作用(side effect)的函数都无法实现函数组合,所以必须把包含外界影响(effectful)副作用不纯代码...IO Monad就是泛函编程处理副作用代码的一种手段。...现在,有了这个IO类型,我们可以放心地用函数组合的泛函编程方式围绕着这个IO类型来编写IO程序,因为我们知道通过这个IO类型我们把副作用的产生推延到IO程序之外的IO解译器里,而IO编程与解译器是两个各自独立的程序...泛函模式的IO编程就是把IO功能表达和IO副作用产生分开设计:IO功能描述使用基于IO Monad的Monadic编程语言,充分利用函数组合进行。...在泛函编程模式里变量是用类型参数代表的: 1 trait IO[+A] { self => 2 def run: A 3 def map[B](f: A => B): IO[B] = 4

    2.8K70

    泛函编程(27)-泛函编程模式-Monad Transformer

    同样,泛函数据类型Foldable,Monoid,Functor,Applicative,Traversable,Monad也是我们将来进入实际泛函编程的必需。...通过for-comprehension可以实现泛函风格的“行令编程模式(imperative programming)。...泛函编程与传统的行令编程在模式上最大的分别就是在泛函编程中没有变量声明(variable declaration),变量是包嵌在一个结构里的(MyData(data)),得申明这个结构(trait MyData...所以泛函编程的命令执行都是在一些结构内部进行的。Monad组件库中的组件主要支持这种结构内部运算风格。...无法使用行令编程模式肯定对泛函编程过程造成诸多不便,但Monad使for-comprehension成为可能,而在for-comprehension内可以实现行令编程,所以泛函编程被称为Monadic

    1.5K70

    泛函编程(1)-泛函编程是如何实现的

    泛函编程就是把函数组合起来形成一个完整的程序。可想而知,函数组合的过程可以是曲折的,形成的程序可以是复杂的。那么泛函编程又是如何保证一个复杂的函数组合程序是正确无误的呢?...实际上这也是泛函编程的重点所在,我看还是要解释清楚才行。     泛函程序是由纯函数组成。所谓纯函数(Pure Function)是指这个函数的结果完全或只依赖它的输入。...因为泛函程序是由纯函数组成,纯函数是”可等量替换的“,具备行为不可变化特性,所以能保证泛函程序的正确性。    ...泛函编程要求尽量使用”不可改变的“(Immutable)数据结构来保证程序的纯洁性。泛函编程就好像是使用”不可改变的“数据结构过程的挣扎,起码对我来说是这样的。...不经过中间变量直接返回结果;这就是泛函编程的一个风格特征。

    2K80

    泛函编程(34)-泛函变量:处理状态转变-ST Monad

    泛函编程的核心模式就是函数组合(compositionality)。实现函数组合的必要条件之一就是参与组合的各方程序都必须是纯代码的(pure code)。...所以在泛函编程模式中好像是禁止任何状态变化的(state mutation)。...但实际上泛函编程并没有任何明文禁止一个函数内部使用状态转变,所以:如果一个函数f(x)的输入参数x是RT等量可替换的,那么函数f还是个纯函数(pure function)。  ...泛函编程采用的是一种处理变量状态变化的编程语言。在前面我们已经讨论过State Monad,它可以对状态进行读写。...我们也可以建一个基于Array的泛函变量数据类型: 1 class STArray[S,A] (implicit manifest: Manifest[A]) { 2 protected val

    92060

    泛函编程(18)-泛函库设计-并行运算组件库

    在泛函编程范畴内也不例外。...但在泛函工具库里的函数则更重视函数的组合能力(functional composition);因而泛函的工具库一般称为组件库(combinator library),库内函数则被称之为组件(combinator...泛函组件库设计一般针对特别的功能需求或课题:首先尝试用一些数据类型来表述课题需求,然后围绕这些特制的数据类型设计一系列函数针对课题各个最基本需求范畴提供解决方法。...我们在这节讨论中从一个并行运算组件库的设计过程来介绍泛函组件库设计模式。     我们设计这个并行运算组件库的目的:可以把一个普通运算放到另外一个独立的线程(thread)中去运行。...我们在这节介绍了一个简单的泛函并行组件库设计,可以把一个运算放到主线程之外的另一个新的线程中计算。但是抽取运算结果却还是会锁定线程(blocking)。

    87470

    泛函编程(35)-泛函Stream IO:IO处理过程-IO Process

    如何实现泛函模式的Stream IO处理则是泛函编程不可或缺的技术。...很明显,起码IO处理过程是由非纯代码组成的,无法实现函数组合,既是无法实现泛函编程的通过重复使用组件灵活组合功能的特点了。...可以相像,我们在泛函Stream IO编程中将会通过许多细小组件的各式组合来实现多样性的IO计算功能。...val lgt40k3 = lines.take(40000).map(_.head).indexOfSlice("abracadabra".toList) 10 } 以上代码充分显示了我们所追求的泛函编程模式...我们现在可以先分析一下泛函Stream IO编程原理。泛函编程的精髓就是把一个程序分解成许多纯代码组件,然后通过各种搭配组合来实现程序整体功能。

    1.2K100
    领券