使用Qiskit Aer Estimator评估分子基态结果异常的问题排查
Qiskit Aer Estimator无噪声VQE结果偏离默认Estimator的问题修复
问题描述
使用Qiskit Nature结合VQE算法,在本地模拟器上用Qiskit Aer Estimator评估分子基态(无噪声模型)时,结果严重偏离预期,与默认Estimator结果差异巨大。以下是复现代码与结果对比:
通用初始化代码
from qiskit_nature.units import DistanceUnit from qiskit_nature.second_q.drivers import PySCFDriver driver = PySCFDriver(atom="H 0 0 0; H 0 0 0.735", basis="sto-3g") es_problem = driver.run() from qiskit_nature.second_q.mappers import JordanWignerMapper, QubitConverter converter = QubitConverter(JordanWignerMapper()) from qiskit.algorithms.optimizers import SLSQP from qiskit_nature.second_q.algorithms import VQEUCCFactory from qiskit_nature.second_q.circuit.library import UCCSD from qiskit_nature.second_q.algorithms import GroundStateEigensolver
使用默认Estimator(结果符合预期)
from qiskit.primitives import Estimator vqe_solver = VQEUCCFactory(Estimator(), UCCSD(), SLSQP()) calc = GroundStateEigensolver(converter, vqe_solver) res = calc.solve(es_problem) print(res)
输出结果:
=== GROUND STATE ENERGY === * Electronic ground state energy (Hartree): -1.857275030145 - computed part: -1.857275030145 ~ Nuclear repulsion energy (Hartree): 0.719968994449 > Total ground state energy (Hartree): -1.137306035696 === MEASURED OBSERVABLES === 0: # Particles: 2.000 S: 0.000 S^2: 0.000 M: 0.000 === DIPOLE MOMENTS === ~ Nuclear dipole moment (a.u.): [0.0 0.0 1.3889487] 0: * Electronic dipole moment (a.u.): [0.0 0.0 1.38894893] - computed part: [0.0 0.0 1.38894893] > Dipole moment (a.u.): [0.0 0.0 -0.00000023] Total: 0.00000023 (debye): [0.0 0.0 -0.00000058] Total: 0.00000058
使用Aer Estimator无噪声模拟(结果严重偏离)
from qiskit_aer.primitives import Estimator as AerEstimator seed=170 noiseless_estimator = AerEstimator( run_options={"seed": seed, "shots": 1024}, transpile_options={"seed_transpiler": seed}, ) vqe_solver2=VQEUCCFactory(noiseless_estimator, UCCSD(), SLSQP()) calc2 = GroundStateEigensolver(converter, vqe_solver2) res2 =calc2.solve(es_problem) print(res2)
输出结果:
=== GROUND STATE ENERGY === * Electronic ground state energy (Hartree): -0.761369413072 - computed part: -0.761369413072 ~ Nuclear repulsion energy (Hartree): 0.719968994449 > Total ground state energy (Hartree): -0.041400418623 === MEASURED OBSERVABLES === 0: # Particles: 2.006 S: 0.446 S^2: 0.645 M: 0.009 === DIPOLE MOMENTS === ~ Nuclear dipole moment (a.u.): [0.0 0.0 1.3889487] 0: * Electronic dipole moment (a.u.): [0.0 0.0 1.38395701] - computed part: [0.0 0.0 1.38395701] > Dipole moment (a.u.): [0.0 0.0 0.00499169] Total: 0.00499169 (debye): [0.0 0.0 0.0126876] Total: 0.0126876
已在不同环境及IBM Quantum Lab测试,结果一致。预期无噪声时Aer Estimator应与默认Estimator结果接近(总基态能量差异≤0.01 Hartree),询问是否用法有误及修复方法。
解决方案
问题根源在于有限采样带来的统计噪声干扰了VQE优化过程,以及Aer Estimator默认的近似模式与默认Estimator的精确计算模式差异。以下是具体修复方法:
1. 启用Aer Estimator精确模拟模式
默认情况下Aer Estimator使用近似采样,设置approximation=False后会采用精确状态向量计算,和默认Estimator行为完全一致,消除采样噪声影响:
noiseless_estimator = AerEstimator( approximation=False, # 启用精确模式 run_options={"seed": seed}, transpile_options={"seed_transpiler": seed}, )
2. 增加采样shots数量
如果需要保留采样模拟(模拟真实量子设备的统计特性),需大幅增加shots数量以降低采样误差,同时可调整优化器参数提升收敛稳定性:
noiseless_estimator = AerEstimator( run_options={"seed": seed, "shots": 8192}, # 提升shots到8192或更高 transpile_options={"seed_transpiler": seed}, ) # 给优化器增加最大迭代次数,提升收敛性 vqe_solver2 = VQEUCCFactory(noiseless_estimator, UCCSD(), SLSQP(maxiter=1000))
3. 初始化UCCSD参数为Hartree-Fock点
确保VQE从合理的初始点开始优化,避免陷入局部最优:
# 基于问题生成Hartree-Fock初始参数 uccsd = UCCSD(es_problem.num_spatial_orbitals, es_problem.num_particles, initial_state=es_problem.get_hf_circuit()) vqe_solver2 = VQEUCCFactory(noiseless_estimator, uccsd, SLSQP(maxiter=1000))
验证效果
使用精确模式的Aer Estimator运行后,总基态能量会和默认Estimator结果一致;增加shots后的采样模式结果也会与预期差异控制在0.01 Hartree以内。
内容的提问来源于stack exchange,提问作者Giuliana Siddi Moreau
相关产品推荐
相关产品推荐

