You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

修改Qiskit噪声模型中cx门错误参数时触发NoiseError的解决方法咨询

修改Qiskit噪声模型中cx门错误参数时触发NoiseError的解决方法咨询

嗨,这个问题我之前也踩过坑!核心原因是你直接操作了NoiseModel的私有内部属性_local_quantum_errors,而CX这类双量子门的错误校验逻辑比单量子门更严格,直接替换内部存储的错误对象时,NoiseModel的校验机制会无法识别新错误对应的指令。

为什么单量子门没问题,CX门不行?

单量子门的错误结构相对简单,直接替换私有字典里的对象时,内部校验没有触发严格检查;但CX门属于双量子门,其错误模型关联的指令信息在直接用from_dict重建时可能丢失了关键上下文,导致NoiseModel无法识别这个错误对应的是CX门指令。

正确的解决方法:使用公开API修改噪声模型

Qiskit的NoiseModel提供了公开的add_quantum_error方法,专门用于添加或替换门的错误,它会自动处理指令校验和关联逻辑,避免触发错误。下面是完整的示例代码:

from qiskit.providers.fake_provider import FakeManila
from qiskit.providers.aer.noise import NoiseModel, QuantumError

# 初始化原始噪声模型
manila_backend = FakeManila()
nm_1 = NoiseModel.from_backend(manila_backend)

# 获取目标CX门的原始错误
target_qubits = (3, 4)
original_error = nm_1._local_quantum_errors['cx'][target_qubits]
error_dict = original_error.to_dict()

# --- 这里修改你的错误概率 ---
# 比如将所有错误概率缩小为原来的10%
for instr_entry in error_dict['instructions']:
    instr_entry['probability'] *= 0.1

# 重建QuantumError对象
new_error = QuantumError.from_dict(error_dict)

# 用公开API替换噪声模型中的CX门错误
nm_1.add_quantum_error(new_error, 'cx', qubits=target_qubits, replace=True)

关键注意事项:

  • 永远优先使用Qiskit的公开API(而非以下划线开头的私有属性),私有属性是内部实现细节,版本更新时可能会变动,导致代码失效。
  • add_quantum_error方法的replace=True参数会直接覆盖原有门的错误,正好满足你替换的需求。
  • 如果需要批量修改所有CX门的错误,可以遍历nm_1._local_quantum_errors['cx']的所有qubit键,逐个用上述方法替换。

备注:内容来源于stack exchange,提问作者QuantumCoder

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.14 13:57:57