Simulador de seguimiento cuántico de Microsoft Quantum Development Kit (QDK)

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.

La clase QCTraceSimulator de QDK ejecuta un programa cuántico sin simular realmente el estado de un equipo cuántico. Por esta razón, el simulador de seguimiento cuántico puede ejecutar programas cuánticos que usan miles de cúbits. Esto tiene dos propósitos principales:

  • Depurar código clásico que forma parte de un programa cuántico.
  • Calcular los recursos necesarios para ejecutar una determinada instancia de un programa cuántico en un equipo cuántico.

Invocación del simulador de seguimiento cuántico

Puede usar el simulador de seguimiento cuántico para ejecutar cualquier operación de Q#.

Al igual que con otras target máquinas, primero se crea una instancia de la QCTraceSimulator clase y, a continuación, se pasa como primer parámetro del método de Run una operación.

Tenga en cuenta que, a diferencia de la clase QuantumSimulator, la clase QCTraceSimulator no implementa la interfaz IDisposable y, por lo tanto, no es necesario encerrarla dentro de una instrucción using.

using Microsoft.Quantum.Simulation.Core;
using Microsoft.Quantum.Simulation.Simulators;
using Microsoft.Quantum.Simulation.Simulators.QCTraceSimulators;

namespace Quantum.MyProgram
{
    class Driver
    {
        static void Main(string[] args)
        {
            QCTraceSimulator sim = new QCTraceSimulator();
            var res = MyQuantumProgram.Run(sim).Result;
            System.Console.WriteLine("Press any key to continue...");
            System.Console.ReadKey();
        }
    }
}

Probabilidad de los resultados de una medición

Como el simulador de seguimiento cuántico no simula el estado cuántico real, no puede calcular la probabilidad de los resultados de una medición dentro de una operación.

Por consiguiente, si una operación incluye mediciones, debe proporcionar explícitamente estas probabilidades con la operación AssertMeasurementProbability operation del espacio de nombres Microsoft.Quantum.Diagnostics namespace. Esto se ilustra en el ejemplo siguiente:

operation TeleportQubit(source : Qubit, target : Qubit) : Unit {
    use qubit = Qubit();
    H(qubit);
    CNOT(qubit, target);
    CNOT(source, qubit);
    H(source);

    AssertMeasurementProbability([PauliZ], [source], Zero, 0.5, "Outcomes must be equally likely", 1e-5);
    AssertMeasurementProbability([PauliZ], [q], Zero, 0.5, "Outcomes must be equally likely", 1e-5);

    if M(source) == One { Z(target); X(source); }
    if M(q) == One { X(target); X(q); }
}

Si el simulador de seguimiento cuántico se encuentra con AssertMeasurementProbability, registrará que la medición de PauliZ en source y q dará un resultado de Zero, con una probabilidad de 0,5. Más adelante, cuando ejecuta la operación M, busca los valores registrados de las probabilidades de resultado y M devuelve Zero o One, con una probabilidad de 0,5. Si se ejecuta el mismo código en un simulador que realiza un seguimiento del estado cuántico, ese simulador comprueba que las probabilidades que se proporcionan en AssertMeasurementProbability sean correctas.

Tenga en cuenta que si hay al menos una operación de medición que no se haya anotado mediante AssertMeasurementProbability, el simulador activará UnconstrainedMeasurementException.

Herramientas del simulador de seguimiento cuántico

El QDK incluye cinco herramientas que se pueden usar con el simulador de seguimiento cuántico para detectar errores en los programas y calcular los recursos de los programas cuánticos:

Herramienta Descripción
Comprobador de entradas únicas Comprueba posibles conflictos con los cúbits compartidos
Comprobador de uso de cúbits invalidado Comprueba si el programa aplica una operación a un cúbit que ya se ha liberado.
Contador de operaciones primitivas Cuenta el número de primitivas utilizadas por cada operación invocada en un programa cuántico.
Contador de profundidad Recopila recuentos que representan el límite inferior de la profundidad de cada operación invocada en un programa cuántico.
Contador de ancho Cuenta el número de cúbits asignados y prestados por cada operación en un programa cuántico.

Para habilitar cada una de estas herramientas, hay que establecer las marcas correspondientes en QCTraceSimulatorConfiguration y, a continuación, pasar la configuración a la declaración de QCTraceSimulator. Para más información sobre el uso de cada una de estas herramientas, consulte los vínculos de la lista anterior. Para más información sobre la configuración de QCTraceSimulator, consulte QCTraceSimulatorConfiguration.

Métodos de QCTraceSimulator

QCTraceSimulator tiene varios métodos integrados para recuperar los valores de las métricas de las que se realiza un seguimiento durante una operación cuántica. Se pueden encontrar ejemplos de los métodos QCTraceSimulator.GetMetric y QCTraceSimulator.ToCSV en los artículos Contador de operaciones primitivas, Contador de profundidad y Contador de ancho. Para más información sobre todos los métodos disponibles, consulte QCTraceSimulator en la referencia de la API de Q#.

Consulte también