【问题标题】:How to return measurement probabilities from the QDK Full-state simulator?如何从 QDK 全态模拟器返回测量概率?
【发布时间】:2020-09-14 19:33:35
【问题描述】:

QDK 全态模拟器有没有办法返回波函数或量子态的测量概率?专门针对 C# 宿主应用程序?

我想从 C# 中量子算法的输出分布中采样。目前我正在重新调用模拟器并对每个样本进行破坏性测量,但是这个过程非常缓慢。

【问题讨论】:

  • 我认为 EstimateFreqency 的功能与您正在寻找的类似,但我对它的熟悉程度不足以提供完整的答案。查看github.com/microsoft/QuantumLibraries/blob/… 的实现源或其在库中的使用可能会为您提供一些信息

标签: q#


【解决方案1】:

感谢您的提问!根据您想要执行的操作的详细信息,Q# 中有几个不同的选项可以帮助您。首先,DumpMachineDumpRegister 可调用对象指示模拟器将整个机器或特定寄存器的量子状态转储到主机程序。在不支持 DumpMachineDumpRegister 的目标计算机上,可以安全地忽略这些调用,因为它们对 Q# 程序本身的执行没有影响。

默认情况下,这些诊断转储的状态要么在命令行编写 Q# 独立程序时打印到控制台,要么在 Q# Notebooks 中显示为表格。您可以在http://aka.ms/try-qsharp 在线试用“转储状态和操作”示例,以更详细地了解其工作原理。

虽然打印输出到控制台或笔记本是默认设置,但您也可以使用 C# 主机捕获QuantumSimulator 目标机器的状态。虽然目前没有很好地记录(对此感到抱歉),但您可以在IQ#Q# standard libraries 中看到QuantumSimulator.StateDumper 类用于捕获DumpMachineDumpRegister 产生的量子态的一些示例。如果您对这些方面感兴趣的用例,这可能是对qsharp-runtime repo 的一个很好的功能请求。

另一方面,如果您希望从in Q# 程序的输出分布中进行采样,而无需重复模拟破坏性测量,那就更微妙了。在硬件上无法在不测量的情况下获得测量概率,因此没有 Q# 内在函数允许这样做,但 Q# 标准库中的某些操作可以使用存储在模拟器中的信息来显着加快运行速度。特别是,EstimateFrequencyA operation 可用于有效估计从给定测量和状态准备过程中获得Zero 结果的频率:

let freq = EstimateFrequencyA(
    ApplyToFirstQubitCA(H, _), // Prepare |+⟩ on the first qubit.
    Measure([PauliZ], _),      // Measure a single qubit in the ?-basis.
    1,                         // Use a single qubit.
    1000000                    // Measure 1M times.
);
// freq should now be close to 0.5.

这是有效的,因为在不允许直接查看量子态的目标上,您始终可以通过在许多破坏性测量上运行循环来获得相同的答案,正如您在原始问题中指出的那样。 EstimateFrequencyA 在支持“作弊”的模拟器上所做的与在不支持“作弊”的目标上运行时所做的唯一区别是性能。

【讨论】:

    猜你喜欢
    • 2014-05-02
    • 1970-01-01
    • 2017-12-29
    • 2017-11-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多