你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

Quantum 开发工具包 (QDK) 稀疏模拟器

稀疏模拟器是利用量子态向量的稀疏表示形式的模拟器,而不是全态模拟器。 此功能允许稀疏模拟器最大程度地减少表示量子态所使用的内存占用情况,从而允许对大量量子比特进行模拟。 对于表示在计算基中处于稀疏状态的量子态,也就是说在计算基中大多数振幅系数为零的量子态,稀疏模拟器非常有用。 因此,稀疏模拟器使用户能够探索比使用全态模拟器所能表示的更大的应用,这将在成倍增加的零振幅上消耗内存和时间。

有关稀疏模拟器的详细信息,请参阅 Jaques 和 Häner (arXiv:2105.01533)

调用并运行稀疏模拟器

稀疏模拟器是通过 SparseSimulator 类公开的。 有关详细信息,请参阅运行 Q# 程序的方法

从 C# 调用模拟器

创建 SparseSimulator 类的实例,然后将其与任何参数一起传递给量子操作的 Run 方法。

    using (var sim = new SparseSimulator())
    {
        var res = RunMyOperation.Run(sim).Result;
        ///...
    }

由于 SparseSimulator 类实现 IDisposable 接口,因此一旦不再需要模拟器的实例,就必须调用 Dispose 方法。 自动实现该调用的最佳方法是将模拟器声明和操作包装在 using 语句中,该语句会自动调用 Dispose 方法。

有关在 C# 中使用稀疏模拟器的示例,请参阅整数分解示例

模拟器选项

稀疏模拟器的行为可通过 C# 构造函数的以下参数进行调整:

  • throwOnReleasingQubitsNotInZeroState:如果量子比特在发布之前没有返回到 zero 状态,模拟器可能会通过引发异常来发出警告。 根据 Q# 规范要求,必须在发布之前重置或测量量子比特,若未执行此操作,可能会导致计算错误! 默认值为 true
  • randomNumberGeneratorSeed:通过播种模拟器来获取确定性行为,如上所述。
  • disableBorrowing:如果你不想将借用的量子比特用于此模拟,可以通过将此参数设置为 true 来禁用此功能。 借用的量子比特将替换为常规的干净量子比特。 默认值为 false
  • numQubits:稀疏模拟器将使用的量子比特数。 默认情况下,此数字设置为 64,其硬限制为 1024。

下面的代码显示了可能的参数配置。

    var sim = new SparseSimulator(
        throwOnReleasingQubitsNotInZeroState: false,
        randomNumberGeneratorSeed: 42,
        disableBorrowing: true,
        numQubits: 73
    )

从 Python 调用模拟器

Q# Python 库中的 simulate_sparse() 方法与导入的 Q# 操作一起使用:

qubit_result = RunMyOperation.simulate_sparse()

从命令行调用模拟器

可使用 --simulator(或 -s 快捷方式)参数指定所需的目标计算机。

dotnet run -s SparseSimulator

从 Jupyter Notebook 调用模拟器

使用 IQ# magic 命令 %simulate_sparse 运行 Q# 操作。

%simulate_sparse RunMyOperation

有关 Jupyter Notebook 中稀疏模拟器使用情况的示例,请参阅LargeSimulation 示例

设定模拟器种子

默认情况下,稀疏模拟器使用随机数生成器来模拟量子随机性。 出于测试目的,具有确定性的结果有时会很有用。 在 C# 程序中,可以通过 randomNumberGeneratorSeed 参数为 SparseSimulator 构造函数中的随机数生成器提供种子来实现此确定性。

    using (var sim = new SparseSimulator(randomNumberGeneratorSeed: 42))
    {
        var res = RunMyTestOperation.Run(sim).Result;
        ///...
    }

请参阅