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

如何在Qiskit中为Grover算法添加「坏态」预言机?

Grover算法中「坏态」预言机的实现指导

核心思路

要降低特定状态的出现概率,我们需要让这些「坏态」在Grover迭代中获得与「好态」相反的相位翻转,这样扩散算子会放大好态概率的同时,压低坏态的概率:

  • 好态预言机:利用辅助位的|->态,匹配好态时触发相位翻转π。
  • 坏态预言机:临时将辅助位转为|+>态,匹配坏态时触发相位翻转-π(与好态相位变化相反),之后恢复辅助位状态。

坏态预言机实现示例

单个坏态标记

以下是标记十进制512(二进制0b1000000000)的预言机代码:

def oracle_bad_512(qc):
    n = 10
    # 将辅助位从|->临时转为|+>,使mcx触发时目标态相位翻转-π
    qc.z(n)
    # 构造坏态512的匹配逻辑:该态qubit9为1,其余为0,翻转0-8位使所有数据qubit为1
    qc.x(list(range(9)))
    qc.mcx(list(range(n)), n)
    qc.x(list(range(9)))  # 恢复数据qubit状态
    # 将辅助位恢复为|->态
    qc.z(n)
    return qc

多个坏态标记

如果需要同时标记多个坏态(比如512和256),可在同一个预言机中叠加匹配逻辑:

def oracle_bad_multiple(qc):
    n = 10
    qc.z(n)
    # 标记坏态512
    qc.x(list(range(9)))
    qc.mcx(list(range(n)), n)
    qc.x(list(range(9)))
    # 标记坏态256(二进制0b0100000000,qubit8为1,其余为0)
    qc.x(list(range(8)) + [9])
    qc.mcx(list(range(n)), n)
    qc.x(list(range(8)) + [9])
    qc.z(n)
    return qc

整合到现有代码

修改main函数的迭代逻辑,在好态预言机之后添加坏态预言机:

def main():
    n = 10  # 数据qubit数量
    qc = QuantumCircuit(n + 1, n)
    qc.x(n)
    qc.h(range(n + 1))
    k = 2  # 好态数量
    # 可根据坏态数量微调迭代次数,先保持原有逻辑,再根据运行结果调整
    r = int(np.pi * np.sqrt(2**n/k) / 4)
    for _ in range(r):
        # 应用好态预言机
        qc = oracle127(qc)
        qc = oracle896(qc)
        # 应用坏态预言机
        qc = oracle_bad_512(qc)  # 或 oracle_bad_multiple(qc)
        # 扩散操作
        qc.h(range(n))
        qc.x(range(n))
        qc.h(n - 1)
        qc.mcx([i for i in range(n-1)], n - 1)
        qc.h(n - 1)
        qc.x(range(n))
        qc.h(range(n))
    qc.measure(range(n), range(n))

    backend = AerSimulator()
    compiled_circuit = transpile(qc, backend)
    job = backend.run(compiled_circuit, shots=1000)
    counts = job.result().get_counts()
    print(counts)

原理说明

  • 辅助位初始为|->态(x(n)+h(n)),好态预言机触发时,好态相位翻转π。
  • 坏态预言机通过z(n)将辅助位转为|+>态,此时触发mcx会让坏态相位翻转-π,与好态相位变化相反。
  • 扩散算子会根据相位调整概率:相位为π的好态概率被放大,相位为-π的坏态概率被压低,其余态概率变化介于两者之间。

内容的提问来源于stack exchange,提问作者Jihyun

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 17:30:00