【问题标题】:Getting error "Released qubits are not in zero state" in Q# Quantum Dev kit在 Q# Quantum Dev kit 中出现错误“已发布的 qubits 未处于零状态”
【发布时间】:2018-12-25 12:06:01
【问题描述】:

在运行以下简单的量子程序以将 Hadamard 门应用于单个量子位时:

operation ApplyHadamard():()
{
    body
    {
        using (qubits  = Qubit[1])
        {
            H(qubits[0]);
        }
    }
}

我收到以下错误:

Microsoft.Quantum.Simulation.Simulators.Exceptions.ReleasedQubitsAreNotInZeroState: “已释放的量子位不处于零状态。”

我正在使用Microsoft's tutorial,其中没有提及使此类程序正常工作所需的任何其他内容。

我很感激 Q# 仍处于发布模式,但如果有人为此找到解决方案,那就太好了。

【问题讨论】:

    标签: visual-studio-2015 quantum-computing q#


    【解决方案1】:

    文档在几节后在Working with Qubits 中提供了此信息。

    目标机器期望量子比特立即处于 |0⟩ 状态 在释放之前,以便它们可以重复使用并提供给其他人 using 分配块。

    考虑在量子计算机上运行程序:量子比特的数量非常有限,并且您希望在程序的其他部分重复使用释放的量子比特。如果到那时它们还没有处于零状态,它们可能仍然与尚未释放的量子比特纠缠在一起,因此您对它们执行的操作可能会影响程序其他部分的状态。

    当量子位超出using 块的范围时自动将其重置为零状态也是危险的:如果它们与其他量子位纠缠在一起,测量它们以重置它们可能会影响未释放的量子位的状态,因此更改程序的结果 - 开发人员不会注意到这一点。

    要求量子比特在发布前应处于零状态,旨在提醒开发人员仔细检查所有必要信息是否已从量子比特中正确提取,并且它们不再与未发布的量子比特纠缠在一起.

    请注意,在释放量子位之前使用ResetResetAll 并不是硬性要求。例如,在 Deutsch-Jozsa 算法中,算法的最后一步是测量除最后一个之外的所有量子位。这意味着对于这些量子位中的每一个,您已经知道它们的状态是 |0⟩ 或 |1⟩,并且您可以对处于 |1⟩ 状态的量子位应用 X 门以将它们转换为 |0⟩ 而无需调用 @987654326 @再次测量它们。已知最后一个量子位处于 |-⟩ 状态,您可以通过应用 H 和 X 门将其转换为 |0⟩。

    【讨论】:

      【解决方案2】:

      我找到了这个here的解决方案。

      原来我需要释放量子位调用Reset(qubits[0])

      根据documentation Reset() 执行以下操作:

      给定一个量子比特,对其进行测量并确保它处于|0⟩ 状态,以便安全释放

      显然,在量子操作完成之前,操作中使用的所有量子位都需要处于|0> 状态。

      【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-04-03
      • 1970-01-01
      • 2018-05-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多