首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

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

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

1.5K21

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

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

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

编程(16)-状态-Functional State

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

860100

编程(0)-什么是编程

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

1.3K80

编程(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.4K70

编程(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.2K70

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

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

1.5K80

编程(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

63560

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

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

65570

编程(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编程原理。编程的精髓就是把一个程序分解成许多纯代码组件,然后通过各种搭配组合来实现程序整体功能。

989100

编程(30)-IO:Free Monad-Monad生产线

这种以数据结构代替函数调用来解决问题的方式又为编程提供了更广阔的发展空间。     我们知道,任何涉及IO的运算都会面临堆栈溢出问题。这是因为IO通常针对无法预计的数据量以及重复循环操作。...对于一个编程人员来讲:通过这个context object 可以进行一系列的操作。包括IO操作,也就是说可以进行一些含有副作用(side effect)的操作。...transfer函数就不是一个编程人员该使用的函数了。...也许我们应该从编程角度来尝试设计这个函数:用编程提倡的不可蜕变(immutability)方式来设计,也就是向函数调用方返回一些东西。...主要目的是解决算法中不可避免的堆栈溢出问题。如果我们用Free Monad来解决IO问题的话,堆栈溢出问题也是无法避免的。我们应该考虑在Free Monad里使用Trampoline类型。

1K70
领券