visual-studio-2015 - 在 Q# Quantum 开发工具包中出现错误 "Released qubits are not in zero state"

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

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

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

我收到以下错误:

Microsoft.Quantum.Simulation.Simulators.Exceptions.ReleasedQubitsAreNotInZeroState: 'Released qubits are not in zero state.'

我正在使用 Microsoft's tutorial ,并且其中没有提到使这样的程序工作所需的任何其他内容。

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

最佳答案

文档在后面的几节中有此信息,在 Working with Qubits 中.

Target machines expect that qubits are in the |0⟩ state immediately before deallocation, so that they can be reused and offered to other using blocks for allocation.

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

当量子位超出其using block 的范围时,将它们自动重置为零状态也很危险:如果它们与其他量子位纠缠在一起,测量它们以将它们重置可能会影响量子位的状态未发布的量子比特,从而改变了程序的结果——而开发者却没有注意到这一点。

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

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

关于visual-studio-2015 - 在 Q# Quantum 开发工具包中出现错误 "Released qubits are not in zero state",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51387285/

相关文章:

algorithm - 分解量子态

python - 如何在 Cirq 电路中采用经典输入

quantum-computing - 在真正的量子计算机上测试 Q# 代码?

git - VS2015在git客户端中支持ssh协议(protocol)

android - 生成错误 : Invalid resource directory name: "res renderers"

algorithm - 需要对量子模型的解释

c# - 在 C# 中使用作为参数传递的类型的方法

c# - 该名称...在当前上下文中不存在...我们如何切换上下文?

c# - 在 VS 2015 和 EF7 从模型生成 SQLite 数据库

arrays - 查找在 Q# 中传递给您的数组的长度