Quantum Development Kit (QDK) simulador de estado completo

Nota:

Los ejemplos de este tema usan Microsoft Quantum Development Kit (QDK clásico) y aún no son compatibles con la versión preliminar de Azure Quantum Development Kit (QDK moderno). Para obtener más información sobre el QDK moderno, consulte la wiki de GitHub de QSharp.

El QDK proporciona un simulador de estado completo que simula una máquina cuántica en el equipo local. Puede usar el simulador de estado completo para ejecutar y depurar algoritmos cuánticos escritos en Q#, utilizando hasta 30 cúbits. La funcionalidad del simulador de estado completo es similar al simulador cuántico usado en la plataforma LIQ$Ui|\rangle$ de Microsoft Research.

Invocación y ejecución del simulador de estado completo

El simulador de estado completo se expone con la clase QuantumSimulator. Para más información, consulte Formas de ejecutar un programa de Q#.

Invocación del simulador desde C#

Cree una instancia de la clase QuantumSimulator y pásela al método Run de una operación cuántica, junto con los parámetros adicionales.

    using (var sim = new QuantumSimulator())
    {
        var res = myOperation.Run(sim).Result;
        ///...
    }

Dado que la clase QuantumSimulator implementa la interfaz IDisposable, debe llamar al método Dispose una vez que ya no necesite la instancia del simulador. La mejor manera de hacerlo es encapsular la declaración y las operaciones del simulador dentro de una instrucción using , que llama automáticamente al Dispose método .

Invocación del simulador desde Python

Use el método simulate() de la biblioteca de Python de Q# con la operación de Q# importada:

qubit_result = myOperation.simulate()

Invocación del simulador desde la línea de comandos

Al ejecutar un Q# programa desde la línea de comandos, el simulador de estado completo es el equipo predeterminado target . Opcionalmente, puede usar el parámetro --simulator (o -s shortcut) para especificar la máquina deseada target . Los dos comandos siguientes ejecutan un programa mediante el simulador de estado completo.

dotnet run
dotnet run -s QuantumSimulator

Invocación del simulador desde Jupyter Notebooks

Use el comando magic %simulate de IQ# para ejecutar la operación de Q#.

%simulate myOperation

Inicialización del simulador

De forma predeterminada, el simulador de estado completo usa un generador de números aleatorios para simular la aleatoriedad cuántica. Con fines de prueba, a veces resulta útil tener resultados deterministas. En un programa de C#, puede hacerlo proporcionando un valor de inicialización al generador de números aleatorios en el constructor QuantumSimulator con el parámetro randomNumberGeneratorSeed.

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

Opciones del simulador

El comportamiento del simulador de estado completo se puede ajustar al constructor de C# a través de los parámetros siguientes:

Parámetro Descripción
throwOnReleasingQubitsNotInZeroState El simulador puede advertirle si los cúbits no se han devuelto al zero estado antes de liberarse iniciando una excepción. El valor predeterminado es true.
randomNumberGeneratorSeed Obtenga un comportamiento determinista mediante la propagación del simulador.
disableBorrowing Si no desea usar cúbits prestados para esta simulación, puede deshabilitar esta característica estableciendo este parámetro trueen . En su lugar, los cúbits prestados se reemplazarán por cúbits limpios normales. El valor predeterminado es false.

Nota:

Restablecer o medir cúbits antes de que la especificación requiera la Q# versión; no hacerlo puede provocar errores computacionales.

El código siguiente muestra una posible configuración de los parámetros.

    var sim = new QuantumSimulator (
        throwOnReleasingQubitsNotInZeroState: false,
        randomNumberGeneratorSeed: 42,
        disableBorrowing: true
    )

Configuración de subprocesos

El simulador de estado completo usa OpenMP para paralelizar el álgebra lineal requerida. De forma predeterminada, OpenMP usa todos los subprocesos de hardware disponibles, lo que significa que los programas con pequeños números de cúbits a menudo se ejecutan lentamente porque la coordinación necesaria enana el trabajo real. Puede corregirlo estableciendo la variable de entorno OMP_NUM_THREADS en un número pequeño. Como regla general, configure un subproceso para hasta cuatro cúbits y, a continuación, un subproceso adicional por cúbit. Es posible que tenga que ajustar la variable en función del algoritmo.

Consulte también