量子轨迹模拟器
微软量子计算机轨迹模拟器在没有实际模拟量子计算机状态的情况下执行量子程序。 由于这个原因,轨迹模拟器可以执行使用数千个量子位的量子程序。 它有两个主要用途:
- 调试作为量子程序一部分的经典代码。
- 估算在量子计算机上运行量子程序的给定实例所需的资源。
当必须执行测量时,跟踪模拟器依赖用户提供的附加信息。 有关详情,请参见章节提供测量结果的可能性 。
提供测量结果的可能性
量子算法中出现两种测量。 第一种在用户通常知道结果的可能性的情况下起辅助作用。 在这种情况下,用户可以从Microsoft.Quantum.Primitive
命名空间编写AssertProb
来表示这些知识。 以下示例说明了这一点:
operation Teleportation (source : Qubit, target : Qubit) : () {
body {
using (ancillaRegister = Qubit[1]) {
let ancilla = ancillaRegister[0];
H(ancilla);
CNOT(ancilla, target);
CNOT(source, ancilla);
H(source);
AssertProb([PauliZ], [source], Zero, 0.5, "Outcomes must be equally likely", 1e-5);
AssertProb([PauliZ], [ancilla], Zero, 0.5, "Outcomes must be equally likely", 1e-5);
if (M(source) == One) { Z(target); X(source); }
if (M(ancilla) == One) { X(target); X(ancilla); }
}
}
}
当跟踪模拟器执行AssertProb
,它将记录测量source
PauliZ
和PauliZ
应该以概率0.5给出Zero
的结果。 当模拟器稍后执行M
,它会查找结果概率的记录值, M
将以0.5的概率返回0或One
。 当在模拟器上执行相同的代码以跟踪量子状态时,这样的模拟器将检查AssertProb
中提供的概率是否正确。
使用Quantum Computer Trace Simulator运行您的程序
量子计算机轨迹模拟器可能被看作是另一个目标机器。 使用它的C#驱动程序与任何其他量子模拟器非常相似:
using Microsoft.Quantum.Simulation.Core; using Microsoft.Quantum.Simulation.Simulators; using Microsoft.Quantum.Simulation.Simulators.QCTraceSimulators; namespace Quantum.MyProgram { class Driver { static void Main(string[] args) { QCTraceSimulator sim = new QCTraceSimulator(); var res = MyQuantumProgram.Run().Result; System.Console.WriteLine("Press any key to continue..."); System.Console.ReadKey(); } } }
请注意,如果至少有一个测量未使用AssertProb
或ForceMeasure
进行注释,则模拟器将从Microsoft.Quantum.Simulation.QCTraceSimulatorRuntime
命名空间中引发UnconstraintMeasurementException
。 有关更多详细信息,请参阅UnconstraintMeasurementException上的API文档。
除了运行量子程序外,跟踪模拟器还有五个组件用于检测程序中的错误并执行量子程序资源估计:
通过在QCTraceSimulatorConfiguration
设置适当的标志,可以启用每个组件。 在相应的参考文件中提供了关于使用这些组件的更多细节。 有关具体详细信息,请参阅QCTraceSimulatorConfiguration上的API文档。
也可以看看
量子计算机轨迹模拟器 C#参考