QDK全态模拟器有没有办法返回量子态的波函数或测量概率?专门针对 C# 主机应用程序?
我想从 C# 中量子算法的输出分布中进行采样。目前,我正在重新调用模拟器并对每个样本执行破坏性测量,但是这个过程非常慢。
谢谢你的提问!根据您想要执行的操作的详细信息,Q# 中提供了一些不同的选项来帮助您。首先也是最重要的,DumpMachine和DumpRegister可调用指令指示模拟器将整个机器或特定寄存器的量子状态转储到主机程序。在不支持的目标机器DumpMachine上DumpRegister的目标计算机上,可以安全地忽略这些调用,因为它们对 Q# 程序本身的执行没有影响。
默认情况下,这些诊断转储的状态要么在命令行编写 Q# 独立程序时打印到控制台,要么在 Q# Notebooks 中显示为表格。您可以在http://aka.ms/try-qsharp上在线尝试“转储状态和操作”示例,以了解有关其工作原理的更多详细信息。
\n\n虽然默认打印到控制台或笔记本,但您还可以QuantumSimulator使用 C# 主机捕获目标计算机的状态。虽然目前还没有很好地记录(对此感到抱歉),但您可以看到该类的一些示例,这些示例QuantumSimulator.StateDumper用于捕获IQ#DumpMachine和Q# 标准库中DumpRegister产生的量子态。如果您对某个用例感兴趣,那么这可能是对qsharp-runtime repo的一个很好的功能请求。
另一方面,如果您希望从Q# 程序内的输出分布中进行采样,而不必重复模拟破坏性测量,那么这就更微妙了。在硬件上无法在不进行测量的情况下获得测量概率,因此没有允许这样做的 Q# 内在函数,但 Q# 标准库中的某些操作可以使用模拟器中存储的信息来运行得更快。特别是,该EstimateFrequencyA操作可用于有效地估计Zero从给定测量和状态准备过程中获得结果的频率:
let freq = EstimateFrequencyA(\n ApplyToFirstQubitCA(H, _), // Prepare |+\xe2\x9f\xa9 on the first qubit.\n Measure([PauliZ], _), // Measure a single qubit in the -basis.\n 1, // Use a single qubit.\n 1000000 // Measure 1M times.\n);\n// freq should now be close to 0.5.\nRun Code Online (Sandbox Code Playgroud)\n\n这是有效的,因为在不允许直接查看量子态的目标上,您总是可以通过对许多破坏性测量运行循环来获得相同的答案,正如您在原始问题中指出的那样。唯一的区别是什么EstimateFrequencyA在支持“作弊”的模拟器上执行的操作与在不支持“作弊”的目标上运行时执行的操作
| 归档时间: |
|
| 查看次数: |
146 次 |
| 最近记录: |