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

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

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

Запустите разреженный симулятор

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

Среда разработки Как вызвать разреженный симулятор
В программе Q# или OpenQASM в VS Code Запустите файл Q# или OpenQASM
В программе Python, использующей пакет qdk qsharp.run
или
openqasm.run
или
qiskit.QSharpBackend
В ячейке блокнота %%qsharp Вызовите операцию запуска программы, например,
Main()

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

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

Добавьте Pauli шум с помощью VS Code параметров

Чтобы задать глобальный Pauli шум для Q# программ, VS Codeнастройте Q#> параметр "Имитация:Pauli шум пользователя" для QDK расширения.

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

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

Например, настроенная программа на ГГц без шума показывает, что гистограмма для следующей программы дает результат $\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% бит-флип шум, гистограмма неотличима от чистого шума.

Снимок экрана QDKVS Code, который показывает результаты гистограммы для программы с уровнями шума от переворота бит в 1% и 25%.

Добавить Pauli шум к отдельным Q# программам

Используйте функцию ConfigurePauliNoise , чтобы задать или изменить модель шума для отдельных Q# программ. Функция ConfigurePauliNoise позволяет контролировать время и место возникновения шума в программах Q# .

Замечание

При настройке шума в VS Code параметрах шум применяется ко всем Q# программам. Однако функция ConfigurePauliNoise переопределяет параметры шума VS Code в вызывающей программе.

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

operation GHzSample(n: Int) : Result[] {
    use qs = Qubit[n];

     // 5% bit-flip noise applies to all operations
    ConfigurePauliNoise(0.05, 0.0, 0.0);

    H(qs[0]);
    ApplyCNOTChain(qs);
    let results = MeasureEachZ(qs);
    ResetAll(qs);
    return results;
}

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

Кроме того, можно добавить шум только к операции измерения.

operation GHzSample(n: Int) : Result[] {
    use qs = Qubit[n];
    H(qs[0]);
    ApplyCNOTChain(qs);

    // Noise applies to only the measurement operation
    ConfigurePauliNoise(0.05, 0.0, 0.0);

    let results = MeasureEachZ(qs);
    ResetAll(qs);
    return results;
}

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

Чтобы изменить или очистить конфигурации шума в разных точках в программе, вызовите ConfigurePauliNoise несколько раз. Например, можно задать 5% шума бит-флип на врата Адамара, а затем не добавлять шум для остальной программы.

operation GHzSample(n: Int) : Result[] {
    use qs = Qubit[n];

    // Noise applies to the H operation
    ConfigurePauliNoise(0.05, 0.0, 0.0);
    
    H(qs[0]);

     // Clear the noise settings
    ConfigurePauliNoise(0.0, 0.0, 0.0);
    
    ApplyCNOTChain(qs);
    let results = MeasureEachZ(qs);
    ResetAll(qs);
    return results;
}

Другие Q# функции шума

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

Функция Description Example
ConfigurePauliNoise Настраивает Pauli шум для запуска симулятора. Параметры представляют вероятности шума на воротах X, Y и Z.Pauli Конфигурация шума применяется ко всем последующим шлюзам, измерениям и кубитам в программе Q# . Переопределяет VS Code параметры шума расширения. Последующие вызовы для ConfigurePauliNoise переопределяют шумы, заданные предыдущими вызовами. ConfigurePauliNoise(0.1, 0.0, 0.5)
или
ConfigurePauliNoise(BitFlipNoise(0.1))
BitFlipNoise Настраивает только шум шлюза X с указанной вероятностью. 10% шум, вызванный изменением бита:
ConfigurePauliNoise(BitFlipNoise(0.1)) $\equiv$ ConfigurePauliNoise(0.1, 0.0, 0.0)
PhaseFlipNoise Настраивает только шум шлюза Z с указанной вероятностью. 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]);
...