Поделиться через


Разреженный квантовый симулятор

Разреженный симулятор — это локальный симулятор по умолчанию для сред разработки Azure Quantum и использует разреженное представление векторов квантовых состояний. Эта функция позволяет разреженным симуляторам свести к минимуму занимаемую память, используемую для представления квантовых состояний, что дает возможность для симуляций с большим числом кубитов. Разреженный симулятор эффективен для представления квантовых состояний, которые разрежены на вычислительном базисе, то есть квантовые состояния, для которых большая часть коэффициентов амплитуды равна нулю в вычислительном базисе. Таким образом, разреженный симулятор позволяет пользователям изучать более крупные приложения, чем те, которые могут быть представлены с использованием симулятора полного состояния, который будет расходовать и память, и время на экспоненциально большое количество нулевых амплитуд.

Дополнительные сведения о разреженных симуляторах см. в статье авторов Jaques и Häner (arXiv:2105.01533).

Вызов разреженного симулятора

Разреженный симулятор — это симулятор, используемый по умолчанию локально, в Visual Studio Code (VS Code) с установленным расширением Microsoft Quantum Development Kit (QDK).

Сценарий Способ
В программе Q# в VS Code Выбор файла запуска Q#
В ячейке записной книжки Python result=qsharp.eval("Program_Entry_Operation()")
or
result=qsharp.run("Program_Entry_Operation()", shots=##)
В ячейке записной книжки %%qsharp Program_Entry_Operation()

Добавление шума Паули в разреженный симулятор

Разреженный симулятор поддерживает добавление шума Паули в имитацию. Эта функция позволяет имитировать влияние шума на квантовые операции и измерения. Модель шума указана с помощью словаря вероятностей шума Паули, где ключи являются операторами XПаули, Yи , а Zтакже значениями являются вероятности применения соответствующего оператора Pauli. Модель шума может использоваться в Q# программах, программах Python или настроена в параметрах VS Code.

Добавление шума Паули с помощью параметров VS Code

Шум Поли можно настроить глобально в Visual Studio Code, настроив Q#> параметр пользователя Simulation:Pauli Noise .

Снимок экрана: параметры для Q# шумного симулятора.

Параметры применяются к результатам гистограммы для всех Q# программ, выполняемых в VS Code, а также ко всем шлюзам, измерениям и кубитам, на которые ссылается программа. Параметры идентичны использованию ConfigurePauliNoise() функции.

Выполнение гистограммы для следующей программы на выборке в ГГц без учёта шума покажет $\ket{00000}$ примерно в половине случаев и $\ket{11111}$ в другой половине.

import Std.Diagnostics.*;
import Std.Measurement.*;

operation Main() : Result []{
    let num = 5;
    return GHzSample(num);
}
operation GHzSample(n: Int) : Result[] {
    use qs = Qubit[n];
    H(qs[0]);
    ApplyCNOTChain(qs);
    let results = MeasureEachZ(qs);
    ResetAll(qs);
    return results;
}

Снимок экрана, показывающий результаты без шума.

Тем не менее, добавление 1% битового флип-шума показывает, что состояние начинает диффундировать, и при 25% шуме состояние становится неразличимым от шума.

Снимок экрана, показывающий результаты с шумом 1% и шумом 25%.

Добавление шума Паули в Q# программы

Функцию ConfigurePauliNoise() можно использовать для установки или изменения модели шума для отдельных Q# программ. С помощью ConfigurePauliNoise()можно детально контролировать, где шум применяется в программах Q# .

Замечание

Если вы настроите шум в параметрах VS Code, то шум применяется ко всем Q# программам. Если вы настраиваете шум в программе Q# с помощью ConfigurePauliNoise, то этот шум переопределяет параметры шума VS Code во время выполнения этой программы.

Например, в предыдущей программе можно добавить шум сразу после выделения кубита:

...
operation GHzSample(n: Int) : Result[] {
    use qs = Qubit[n];
    ConfigurePauliNoise(0.05, 0.0, 0.0); // 5% bit-flip noise applies to all operations
    H(qs[0]);
...

Снимок экрана, показывающий результаты с шумом, добавленным после выделения кубита.

или непосредственно перед операцией измерения.

    ...
    use qs = Qubit[n];
    H(qs[0]);

    ApplyCNOTChain(qs);
    ConfigurePauliNoise(0.05, 0.0, 0.0); // noise applies only to measurement operation 
    let results = MeasureEachZ(qs);
    ...

Снимок экрана, показывающий результаты с шумом, добавленным непосредственно перед измерением.

Можно также использовать ConfigurePauliNoise() для сброса или очистки конфигураций шума. В этом примере параметры шума задаются после выделения кубита, а затем очищаются сразу после операции Hadamard, чтобы шум применялся только к H(); операции.

...
operation GHzSample(n: Int) : Result[] {
    use qs = Qubit[n];
    ConfigurePauliNoise(0.05, 0.0, 0.0); // noise applies to H() operation
    H(qs[0]);
    ConfigurePauliNoise(0.0, 0.0, 0.0); // clear noise settings
...

Следующие функции доступны в библиотеке Std.Diagnostics для настройки шума в Q# программах:

Функция Description Example
ConfigurePauliNoise() Настраивает шум Паули для запуска симулятора с параметрами, представляющими вероятности шлюзов X, Y и Z. Конфигурация шума применяется ко всем последующим шлюзам, измерениям и кубитам в программе Q# . Обходит любые настройки шума в VS Code и их можно сбросить с помощью последующих ConfigurePauliNoise() вызовов. ConfigurePauliNoise(0.1, 0.0, 0.5)
or
ConfigurePauliNoise(BitFlipNoise(0.1))
BitFlipNoise() Настраивает шум для шлюза X только с указанной вероятностью. Конфигурация шума применяется ко всем последующим шлюзам, измерениям и кубитам в программе Q# . 10% шум, вызванный изменением бита:
ConfigurePauliNoise(BitFlipNoise(0.1)) $\equiv$ ConfigurePauliNoise(0.1, 0.0, 0.0)
PhaseFlipNoise() Настраивает шум для шлюза Z только с указанной вероятностью. Конфигурация шума применяется ко всем последующим шлюзам, измерениям и кубитам в программе Q# . 10% шум фазового переворота.
ConfigurePauliNoise(PhaseFlipNoise(0.1)) $\equiv$ ConfigurePauliNoise(0.0, 0.0, 0.1)
DepolarizingNoise() Настраивает шум для ворот X, Y или Z с равными вероятностями. 6% деполяризующий шум.
ConfigurePauliNoise(DepolarizingNoise(0.06)) $\equiv$ ConfigurePauliNoise(0.2, 0.2, 0.2)
NoNoise() Настраивает модель шума для отсутствия шума. ConfigurePauliNoise(NoNoise()) $\equiv$ ConfigurePauliNoise(0.0, 0.0, 0.0)
ApplyIdleNoise Применяет сконфигурированный шум к одному кубиту во время моделирования. ...
use q = Qubit[2];
ConfigurePauliNoise(0.1, 0.0, 0.0);
ApplyIdleNoise(q[0]);
...

Добавление шума Паули в программы Python или Jupyter Notebook

Конфигурация шума Pauli доступна с пакетом qdk.qsharp Python и возможностями гистограммы с пакетом qdk.widgets . Шум добавляется в качестве параметра в qsharp.run метод.

  • qsharp.BitFlipNoise
  • qsharp.PhaseFlipNoise
  • qsharp.DepolarizingNoise

В следующем примере показан эффект 10% деполяризационного шума на измерение состояния Белла.

from qdk import qsharp
from qdk import widgets
%%qsharp

operation BellPair() : Result[] {
    use q = Qubit[2];
    H(q[0]);
    CNOT(q[0], q[1]);
    MResetEachZ(q)
}
results = qsharp.run("BellPair()", 20, noise=qsharp.DepolarizingNoise(0.1))
results

Произвольный шум Паули можно добавить в модель шума, указав вероятности каждого оператора Паули. Давайте используем предыдущую примерную программу GHz:

%%qsharp

operation GHzSample() : Result[] {
    use q = Qubit[5];
    H(q[0]);
    ApplyCNOTChain(q);
    MResetEachZ(q)
}

Этот запуск программы применяет шум с 20% вероятности (бит-флип в половине случаев и фазовый флип в половине случаев).

result = qsharp.run("GHzSample()", 20, noise=(0.1, 0.0, 0.1))
display(widgets.Histogram(result))

и этот запуск применяет шум Паули-Y с вероятностью 10%.

result = qsharp.run("GHzSample()", 20, noise=(0.0, 0.1, 0.0))
display(widgets.Histogram(result))