当前位置: 首页 > news >正文

Variational Quantum Eigensolver笔记

1.构建氢分子电子哈密顿量

from jax import numpy as np
import jax
jax.config.update("jax_platform_name", "cpu")
jax.config.update('jax_enable_x64', True)import pennylane as qmldataset = qml.data.load('qchem', molname="H2")[0]
H, qubits = dataset.hamiltonian, len(dataset.hamiltonian.wires)
print("Number of qubits = ", qubits)
print("The Hamiltonian is ", H)

作用

  • 使用JAX作为数值计算后端

  • 设置为CPU模式运行

  • 启用64位浮点数精度(量子化学计算需要高精度)

  • 使用PennyLane的量子化学数据集服务

  • 直接下载H₂分子的预计算数据

2.VQE算法实现

2.1定义量子设备

dev = qml.device("lightning.qubit", wires=qubits)
  • "lightning.qubit":PennyLane的高性能量子模拟器

  • wires=qubits:量子比特数量,这里 qubits=4

electrons = 2
hf = qm1.qchem.hf_state(electrons, qubits)
print(hf)
  1. Hartree-Fock 状态

    • 这是量子化学计算中的初始猜测状态

    • 表示电子在分子轨道上的最低能量排布

    • 在量子计算中,用比特状态来表示电子占据情况

  2. 状态表示

    • [1 1 0 0] 表示前两个轨道被占据,后两个轨道空置

    • 每个 1 表示该轨道有一个电子

    • 对于 2 电子系统,通常需要 4 个量子比特来表示

@qml.qnode(dev, interface="jax")
def circuit(param, wires):qml.BasisState(hf, wires=wires)qml.DoubleExcitation(param, wires=[0, 1, 2, 3])return qml.expval(H)
  1. 量子节点装饰器

    @qml.qnode(dev, interface="jax")
    • 将经典函数转换为可执行的量子电路

    • interface="jax" 启用自动微分,便于梯度优化

  2. 初始状态准备

    qml.BasisState(hf, wires=wires)
    • 使用之前生成的 Hartree-Fock 状态 [1, 1, 0, 0]

    • 将量子比特初始化为化学上有意义的起始状态

  3. 双激发操作

    qml.DoubleExcitation(param, wires=[0, 1, 2, 3])
    • 实现双电子激发:将两个电子从占据轨道激发到空轨道

    • param 是变分参数,在优化过程中调整

    • 作用在 4 个量子比特上,对应分子轨道

  4. 期望值测量

    pythonreturn qml.expval(H)
    • 返回分子哈密顿量 H 的期望值

    • 这个值就是 VQE 要最小化的能量

def cost_fn(param):return circuit(param, wires=range(qubits))
  1. 桥梁功能

    • 将量子电路包装成经典优化器可以处理的函数

    • 输入:变分参数 param

    • 输出:分子能量期望值

  2. 优化目标

    • 在 VQE 中,成本函数的值就是分子哈密顿量的期望值(能量)

    • 优化目标是最小化这个能量值,找到基态

import optaxmax_iterations = 100
conv_tol = 1e-06opt = optax.sgd(learning_rate=0.4)
  1. optax 库

    • Google 开发的高性能优化库

    • 专门为 JAX 生态系统设计

    • 提供各种优化算法

  2. 随机梯度下降 (SGD)

    opt = optax.sgd(learning_rate=0.4)
    • 使用基本的梯度下降优化器

    • 学习率 0.4 控制参数更新的步长

  3. 收敛标准

    • max_iterations = 100:最大迭代次数

    • conv_tol = 1e-06:收敛容差(10⁻⁶)

# 将电路参数θ初始化为0,这意味着我们从Hartree-Fock状态开始
theta = np.array(0.)# 存储成本函数值(能量)的历史记录
energy = [cost_fn(theta)]# 存储电路参数值的历史记录
angle = [theta]# 初始化优化器状态
opt_state = opt.init(theta)# 开始优化循环,最多迭代max_iterations次
for n in range(max_iterations):# 计算成本函数关于参数θ的梯度gradient = jax.grad(cost_fn)(theta)# 使用优化器计算参数更新量和新的优化器状态updates, opt_state = opt.update(gradient, opt_state)# 应用参数更新theta = optax.apply_updates(theta, updates)# 记录更新后的参数值和对应的能量值angle.append(theta)energy.append(cost_fn(theta))# 计算当前能量与前一次能量的绝对差值,用于收敛判断conv = np.abs(energy[-1] - energy[-2])# 每2次迭代打印一次当前能量值if n % 2 == 0:print(f"Step = {n}, Energy = {energy[-1]:.8f} Ha")# 检查是否达到收敛容差,如果收敛则提前退出循环if conv <= conv_tol:break# 输出最终的基态能量结果
print("\n" f"Final value of the ground-state energy = {energy[-1]:.8f} Ha")# 输出最优的电路参数值
print("\n" f"Optimal value of the circuit parameter = {angle[-1]:.4f}")
# 导入绘图库
import matplotlib.pyplot as plt# 创建图形对象并设置图形大小
fig = plt.figure()
fig.set_figheight(5)
fig.set_figwidth(12)# 经典计算得到的全组态相互作用(FCI)能量,作为基准参考值
E_fci = -1.136189454088# 在左侧创建第一个子图(能量随优化步数的变化)
ax1 = fig.add_subplot(121)
# 绘制能量变化曲线:绿色圆点,虚线连接
ax1.plot(range(n + 2), energy, "go", ls="dashed")
# 绘制FCI能量参考线:红色水平线
ax1.plot(range(n + 2), np.full(n + 2, E_fci), color="red")
# 设置坐标轴标签
ax1.set_xlabel("Optimization step", fontsize=13)
ax1.set_ylabel("Energy (Hartree)", fontsize=13)
# 添加文本标注:Hartree-Fock能量和FCI能量
ax1.text(0.5, -1.1176, r"$E_\mathrm{HF}$", fontsize=15)
ax1.text(0, -1.1357, r"$E_\mathrm{FCI}$", fontsize=15)
# 设置坐标轴刻度字体大小
plt.xticks(fontsize=12)
plt.yticks(fontsize=12)# 在右侧创建第二个子图(门参数θ随优化步数的变化)
ax2 = fig.add_subplot(122)
# 绘制参数变化曲线:绿色圆点,虚线连接
ax2.plot(range(n + 2), angle, "go", ls="dashed")
# 设置坐标轴标签
ax2.set_xlabel("Optimization step", fontsize=13)
ax2.set_ylabel("Gate parameter $\theta$ (rad)", fontsize=13)
# 设置坐标轴刻度字体大小
plt.xticks(fontsize=12)
plt.yticks(fontsize=12)# 调整子图间距和底部边距
plt.subplots_adjust(wspace=0.3, bottom=0.2)# 显示图形
plt.show()
"""
VQE 算法应用总结在这个案例中,VQE 算法经过 13 次迭代后收敛。
最优电路参数 θ* = 0.208 定义了分子的量子态:|Ψ(θ*)⟩ = 0.994 |1100⟩ - 0.104 |0011⟩这个态正是 H₂ 分子在最小基组近似下的精确基态。## 结论在本教程中,我们实现了 VQE 算法来寻找氢分子的基态。我们使用了一个简单的电路来制备超越 Hartree-Fock 近似的分子量子态。
通过最小化定义为分子哈密顿量在试探态中期望值的成本函数,我们获得了基态能量。VQE 算法还可以用于模拟其他化学现象:1. 化学反应模拟- 教程:在量子计算机上模拟化学反应- 用途:探索分子的势能面来模拟化学反应2. 特定希尔伯特空间扇区中的低激发态探测- 教程:不同自旋扇区中的 VQE- 用途:研究分子在特定对称性下的激发态3. 分子几何结构优化- 教程:分子几何结构的优化- 用途:寻找分子的平衡几何构型这些扩展应用展示了 VQE 算法在量子计算化学中的广泛适用性。
"""

Kaggle Notebook Editor

http://www.dtcms.com/a/450061.html

相关文章:

  • 操作系统应用开发(二十四)RustDesk 404错误—东方仙盟筑基期
  • 网站菜单样式关于网站策划的文章
  • 做网站多久才会有收益网站打开显示站点目录
  • python异常
  • STM32CubeMonitor使用记录
  • 网站这么做海城seo网站排名优化推广
  • 做网站后的收获宁波seo软件免费课程
  • 网站设计精美案例常见软件开发模型有哪些
  • dedecms 网站还原数据之后 乱码网站开发用什么编程
  • 美发店会员管理软件培训
  • 建设部网站不支持360深圳市南山区住房和建设局网站官网
  • 电子签名法律实务全解析:从合规基础到风险防控的实战指南
  • 1元购网站建设广西壮族自治区市场监督管理局官网
  • 陕西省交通建设集团公司门户网站wordpress站内统计插件
  • PyTorch梯度裁剪与避免Loss为NaN的完整指南
  • 【UE5】新建Editor Standalone Window插件,之前(或当前)创建插件的按钮消失(被顶掉/占用)的问题
  • h5做的网站如何连接数据库wordpress上传图片错误媒体库错误
  • 预约记录关联查询接口说明
  • 免得做网站云浮新增病例详情
  • <从零基础到精通JavaScript>1.1 JavaScript 运行环境
  • 青浦专业网站建设企业网站最下面的那栏叫啥
  • 每日一个C语言知识:C 数据类型
  • 实验二十 GaussDB逻辑备份恢复实验
  • 中英文网站制作wordpress表
  • 开源 网站开发框架seo是一种利用搜索引擎
  • 怎样建设网站空间网站开发中英文版如何写
  • 网站设计怎么收费注册安全工程师条件
  • 5. 逆矩阵
  • 济源专业网站建设(制作网站)网络技术学习网站
  • Redis过期策略与内存淘汰机制解析