运行Qiskit VQE算法出现TwoLocal相关AttributeError问题咨询
错误含义
该报错由Qiskit版本迭代带来的API不兼容导致:Qiskit 0.45及后续版本移除了TwoLocal类的set_max_evals_grouped方法,而你当前调用的VQE接口版本仍会默认尝试调用该方法实现分组评估逻辑,因此触发属性不存在的报错。除此之外你的代码还存在VQE初始化参数错误的问题。
修复方法
- 修正VQE初始化逻辑:你已经提前实例化了SLSQP优化器对象
classical_optimizer,初始化VQE时需要传入该实例而非SLSQP类本身;同时注意新版VQE的参数顺序,哈密顿量不需要在初始化时传入,而是在执行计算时传入。 - 适配版本不需要降级依赖,按下方修正后的代码调整即可解决问题。
修正后完整代码
from qiskit_nature.drivers import PySCFDriver, UnitsType from qiskit_nature.problems.second_quantization.electronic import ElectronicStructureProblem from qiskit_nature.mappers.second_quantization import JordanWignerMapper from qiskit_nature.converters.second_quantization import QubitConverter from qiskit import BasicAer from qiskit.utils import QuantumInstance from qiskit.algorithms.optimizers import SLSQP from qiskit.circuit.library import TwoLocal from qiskit.algorithms import VQE driver = PySCFDriver(atom='Li .0 .0 .0; H .0 .0 1.5049', unit=UnitsType.ANGSTROM, charge=0, spin=0, basis='sto3g') # 创建二次量子化算符 es_problem = ElectronicStructureProblem(driver) seconded_quantised_operator = es_problem.second_q_ops() print(seconded_quantised_operator) # 转换为量子比特算符 qubit_transformation = QubitConverter(JordanWignerMapper()) qubit_operator = qubit_transformation.convert(seconded_quantised_operator[0]) print(qubit_operator) # 设置模拟器 backend = BasicAer.get_backend('statevector_simulator') quantum_instance = QuantumInstance(backend=backend) # VQE算法配置 groundstate_energies = [] classical_optimizer = SLSQP(maxiter = 1000) ansatz = TwoLocal(rotation_blocks='ry', entanglement_blocks='cz') # 可选兼容逻辑:如果修改后仍报相同错误,取消注释下一行即可 # ansatz.set_max_evals_grouped = lambda _: None # 修正VQE初始化逻辑 vqe = VQE(ansatz=ansatz, optimizer=classical_optimizer, quantum_instance=quantum_instance) # 执行计算获取基态能量 result = vqe.compute_minimum_eigenvalue(qubit_operator) print("基态能量计算结果:", result.eigenvalue.real)
内容的提问来源于stack exchange,提问作者shaun fuller
相关产品推荐
相关产品推荐

