Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Разреженный симулятор — это локальный симулятор по умолчанию для сред разработки 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# программ, выполняемых в 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% шуме состояние становится неразличимым от шума.
Добавление шума Паули в 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.BitFlipNoiseqsharp.PhaseFlipNoiseqsharp.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))