Qiskit Chemistry迁移至Qiskit Nature:Hamiltonian与TransformationType替代咨询
Qiskit Chemistry迁移至Qiskit Nature的VQE代码修改方案
核心迁移对应关系
qiskit.chemistry.core.Hamiltonian:无需直接导入,通过Qiskit Nature的问题类自动生成哈密顿量qiskit.chemistry.core.TransformationType:替换为qiskit_nature.units.DistanceUnitqiskit.chemistry.drivers.PySCFDriver:替换为qiskit_nature.second_q.drivers.PySCFDriverqiskit.aqua模块(VQE、SLSQP等):迁移至qiskit.algorithms及子模块
修改后的完整代码
import numpy as np from qiskit import Aer from qiskit.algorithms import VQE from qiskit.algorithms.optimizers import SLSQP from qiskit.circuit.library import TwoLocal from qiskit_nature.second_q.drivers import PySCFDriver from qiskit_nature.units import DistanceUnit from qiskit_nature.second_q.problems import ElectronicStructureProblem from qiskit_nature.second_q.mappers import ParityMapper, QubitConverter # Set the number of qubits and optimization parameters depth = 3 # Set up the molecule and driver molecule = 'H .0 .0 -{0}; H .0 .0 {0}' distance = 0.74 # 替换原TransformationType.ANGSTROM为DistanceUnit.ANGSTROM driver = PySCFDriver( atom=molecule.format(distance/2), unit=DistanceUnit.ANGSTROM, charge=0, spin=0, basis='sto3g' ) # 生成电子结构问题,替代原qmolecule.get_molecular_hamiltonian() problem = ElectronicStructureProblem(driver) # 转换为量子比特哈密顿量 converter = QubitConverter(ParityMapper(), two_qubit_reduction=True) hamiltonian = problem.second_q_ops()['ElectronicEnergy'] qubit_hamiltonian = converter.convert(hamiltonian) n_qubits = qubit_hamiltonian.num_qubits # Define the ansatz circuit ansatz = TwoLocal(n_qubits, ['ry', 'rz'], 'cz', reps=depth) # Define the optimizer optimizer = SLSQP(maxiter=1000) # Define the VQE algorithm(移除原QuantumInstance,直接用backend) backend = Aer.get_backend('statevector_simulator') vqe = VQE(ansatz, optimizer, quantum_instance=backend) # Run the VQE algorithm result = vqe.compute_minimum_eigenvalue(qubit_hamiltonian) # 获取并打印基态能量 electronic_result = problem.interpret(result) print('Ground state energy: ', electronic_result.total_energies[0].real)
关键修改说明
- 驱动与问题定义:用
ElectronicStructureProblem封装驱动,替代原qmolecule的哈密顿量生成逻辑 - 哈密顿量转换:通过
QubitConverter将第二量子化哈密顿量转为量子比特哈密顿量,支持Parity映射及两比特约简(对应原Chemistry的默认行为) - 模块迁移:
qiskit.aqua下的VQE、SLSQP等已迁移至qiskit.algorithms,无需再导入aqua_globals或QuantumInstance(直接传入backend即可) - 结果解析:用
problem.interpret()解析VQE结果,获取包含核排斥能的总能量(原代码默认包含该能量,迁移后需显式解析)
内容的提问来源于stack exchange,提问作者Kenson Wesley
相关产品推荐
相关产品推荐

