尧图建网站 尧图建网站 YAOTU WEB BUILD 免费咨询
ARTICLE DETAIL

资讯详情

深耕网站建设与建站编程的一线实战洞察。

NetKet 实战:海森堡模型基态求解完整教程(附可运行代码)

NetKet 实战:海森堡模型基态求解完整教程(附可运行代码) NetKet 实战海森堡模型基态求解完整教程附可运行代码【免费下载链接】netketMachine learning algorithms for many-body quantum systems项目地址: https://gitcode.com/gh_mirrors/ne/netketNetKet 是一个专门面向多体量子系统的机器学习算法库它的核心功能之一就是高效求解海森堡模型等量子自旋模型的基态能量与波函数。本文是一份零基础友好的 NetKet 基态求解入门教程将带你从安装环境开始一步步用神经网络变分蒙特卡洛VMC方法算出一维海森堡反铁磁链的基态能量全程附可直接运行的代码照着敲就能出结果。为什么用 NetKet 求解海森堡模型基态传统上求解海森堡模型基态依赖精确对角化ED或量子蒙特卡洛QMC但系统尺寸一大希尔伯特空间就呈指数膨胀经典方法很快力不从心。NetKet 走的是另一条路用神经网络表示波函数再通过变分蒙特卡洛把参数优化到基态。它把深度学习和量子多体物理无缝衔接几十行代码就能处理上百个自旋的体系是研究量子磁性、纠缠和相变问题的利器。官方提供的海森堡模型完整示例在 Examples/Heisenberg1d/heisenberg1d.py配套的图文教程见 docs/tutorials/gs-heisenberg.ipynb建议边看本文边对照源码。第一步NetKet 安装方法与环境准备在动手之前先确保 Python 环境就绪。NetKet 底层基于 JAX安装只需一行命令pip install netket建议用 CPU 跑本文的小规模算例40 个自旋以内 CPU 反而更快如果想用 GPU安装带 CUDA 支持的 JAX 即可。想从源码了解最新特性可以 clone 仓库 https://gitcode.com/gh_mirrors/ne/netket 到本地研究。安装完成后在 Python 中验证import netket as nk print(nk.__version__)第二步构建海森堡模型三件套晶格、希尔伯特空间、哈密顿量求解任何模型前都要先定义三个基本对象这也是 NetKet 的核心设计理念。① 定义晶格用Chain构造一个含 20 个格点、带周期性边界条件的一维链L 20 g nk.graph.Chain(lengthL, pbcTrue)② 定义希尔伯特空间海森堡模型由自旋 1/2 自由度构成。由于基态落在零总磁化total_sz0扇区内直接在希尔伯特空间上施加约束可以大幅加速计算hi nk.hilbert.Spin(s1/2, Ng.n_nodes, total_sz0)③ 构造哈密顿量一行代码搞定反铁磁海森堡相互作用。Heisenberg算符的完整实现位于 netket/operator/_heisenberg.py它支持自定义耦合强度 J 和 Marshall 符号规则sign_rule双分晶格上默认自动开启ha nk.operator.Heisenberg(hilberthi, graphg)第三步选择神经网络波函数RBM 对称自旋机NetKet 内置多种神经网络 ansatz。对于一维平移不变的体系最经典的选择是带对称性的受限玻尔兹曼机RBMSymm它通过参数共享天然满足平移对称性参数量远小于普通 RBM收敛更快更稳ma nk.models.RBMSymm( symmetriesg.translation_group(), alpha4, use_visible_biasFalse, use_hidden_biasTrue, param_dtypefloat, )如果想尝试更现代的架构也可以换成群等变卷积网络GCNN见 Examples/HeisenbergJ1J2/heisenbergJ1J2.py 中的用法。第四步配置采样器与优化器有了波函数还需要一套马尔可夫链采样方案和优化算法# Metropolis 交换采样在链上交换相邻自旋 sa nk.sampler.MetropolisExchange(hi, graphg, n_chains16) # 随机梯度下降 op nk.optimizer.Sgd(learning_rate0.01)然后把它们组装成变分态Variational State——这是 NetKet 中最核心的抽象负责采样、计算期望值和梯度vs nk.vqs.MCState(sa, ma, n_samples1008, n_discard_per_chain10)第五步运行 VMC_SR 驱动一键求解基态NetKet 的驱动Driver负责整个优化循环。推荐使用VMC_SR即变分蒙特卡洛 随机重构Stochastic Reconfiguration等价于自然梯度下降它的实现位于 netket/_src/driver/vmc_sr.py相比普通VMC收敛更稳健非常适合海森堡模型这类强关联体系gs nk.driver.VMC_SR(ha, op, variational_statevs, diag_shift0.1) print(f# variational parameters: {gs.state.n_parameters}) gs.run(n_iter300, outheisenberg_gs)运行后会自动生成日志文件heisenberg_gs.log里面记录了每一轮迭代的能量、方差等观测值。优化几百步后能量就会收敛到与精确对角化结果一致的基态能量误差通常能控制在 1% 以内。这就是 NetKet 基态求解的标准流程建格点 → 建希尔伯特空间 → 建哈密顿量 → 选网络 → 配采样器 → 交给 VMC_SR。进阶玩法J1-J2 模型、激发态与能量对比掌握基础流程后可以快速扩展到更有挑战性的问题参考 heisenbergJ1J2.pyJ1-J2 模型nk.operator.Heisenberg(hilberthi, graphlattice, J[1.0, 0.5])支持按晶格颜色设置不同耦合强度一条链、近邻和次近邻两种耦合即可模拟阻挫磁性。激发态求解通过给GCNN指定不可约表示特征标characters和宇称parity把网络投影到特定对称性扇区再复用基态参数作为初值就能算出第一个激发态这在研究能隙和磁性序时非常有用。结果后处理日志用json.load读取最后几十步的能量取平均再除以格点数即可与文献值对比。总结NetKet 海森堡模型求解的关键要点回顾整篇教程NetKet 求解海森堡模型基态有四个关键点值得记住约束先行在希尔伯特空间中施加total_sz0等守恒量约束能显著加速收敛对称性为王RBMSymm和GCNN这类对称性感知的网络参数量更少、精度更高SR 不可少VMC_SR的随机重构预处理让优化稳定不震荡是强关联体系的默认选择官方示例是最好的老师多翻 Examples/Heisenberg1d/heisenberg1d.py 和 Examples/HeisenbergJ1J2/heisenbergJ1J2.py改参数、跑对比很快就能上手自己的研究课题。从今天起你也能用几十行 Python 代码用神经网络征服海森堡模型甚至更复杂的量子多体问题。动手跑一跑吧【免费下载链接】netketMachine learning algorithms for many-body quantum systems项目地址: https://gitcode.com/gh_mirrors/ne/netket创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表