Övning – Skapa en slumpgenerator för kvantbitar

Slutförd

Klassiska datorer producerar inte slumpmässiga tal, utan snarare pseudorandomnummer . En pseudorandomnummergenerator genererar en deterministisk sekvens med tal baserat på ett initialt värde (kallas för ett frö). För att ge tal som är mer slumpmässiga utgörs seed oftast av den aktuella tiden från CPU-klockan.

Kvantdatorer kan å andra sidan generera verkligt slumpmässiga tal. Det beror på att mätningen av en kvantbit i superposition är en probabilistisk process. Resultatet av mätningen är slumpmässigt och det finns inget sätt att förutsäga resultatet. Detta är den grundläggande principen för kvant slumptalsgeneratorer.

Definiera QRNG-problemet

Du börjar med att ta en kvantbit i ett bastillstånd, till exempel noll. Det första steget i QRNG är att använda en H åtgärd för att placera kvantbiten i en lika stor superposition. Mätningen av det här tillståndet resulterar i en nolla eller en med 50 % sannolikhet för varje utfall. Värdet för den här biten är verkligen slumpmässigt, det finns inget sätt att veta vad du kommer att få efter mätningen. Men hur kan du använda det här beteendet för att generera större slumpmässiga tal?

Anta att du upprepar processen fyra gånger och genererar den här sekvensen med binära siffror:

$${0, 1, 1, 0}$$

Om du sammanfogar, eller kombinerar, dessa bitar till en bitsträng kan du skapa ett större tal. I det här exemplet motsvarar bitsekvensen ${0110}$ talet sex i decimalsystemet.

$${0110_{\ binary} \equiv 6_{\ decimal}}$$

Om du upprepar den här processen många gånger kan du kombinera flera bitar för att bilda ett stort tal.

Du skapar kvantgeneratorn för slumptal i två faser. I den här lektionen skapar du den första fasen, som är att generera en enda slumpmässig bit.

Det gör du på följande sätt:

  1. Allokera en qubit.
  2. Använd åtgärden H för att placera en qubit i superposition.
  3. Mät kvantbiten för att få en slumpmässig bit.
  4. Återställ kvantbiten till nolltillståndet.

Skapa ett Q#-program

  1. Öppna Visual Studio Code och välj Fil > Ny textfil för att skapa en ny fil.

  2. Spara filen som RandomNumberGenerator.qs. Den här filen innehåller Q#-koden för ditt program.

  3. Kopiera följande kod till RandomNumberGenerator.qs filen.

    namespace QuantumRandomNumberGenerator {
    
        @EntryPoint()
        operation GenerateRandomBit() : Result {
            // Allocate a qubit.
            use q = Qubit();
    
            // Set the qubit into superposition of 0 and 1 using the Hadamard 
            H(q);
    
            // At this point the qubit `q` has 50% chance of being measured in the
            // |0〉 state and 50% chance of being measured in the |1〉 state.
            // Measure the qubit value using the `M` operation, and store the
            // measurement value in the `result` variable.
            let result = M(q);
    
            // Reset qubit to the |0〉 state.
            // Qubits must be in the |0〉 state by the time they are released.
            Reset(q);
    
            // Return the result of the measurement.
            return result;
        }
    }
    

Dricks

QDK innehåller en uppsättning inbyggda Q#-exempel som du kan använda för att lära dig mer om Q# och kvantberäkning. Om du vill visa exemplen öppnar du en ny Q#-fil och skriver sampleoch väljer sedan det exempel som du vill visa i listan med alternativ. Du hittar Q#-koden i den här lektionen under "Slumpmässigt bitexempel".

Utforska Q#-koden

  1. Hovra över åtgärden H för att se en kort sammanfattning av definitionen.
  2. Placera markören framför H åtgärden, högerklicka och välj Gå till definition. Då öppnas en skrivskyddad vy över standardbibliotekskoden för funktionen.

Kör programmet lokalt

  1. Öppna en ny terminal genom att välja Terminal > Ny terminal.
  2. Om du vill testa att köra programmet lokalt i den inbyggda simulatorn klickar du på Kör från listan med kommandon nedan @EntryPoint()eller trycker på Ctrl+F5. Dina utdata visas i felsökningskonsolen.
  3. Kör programmet igen för att se ett annat resultat.

I nästa lektion implementerar du den andra fasen i kvantgeneratorn för slumptal: kombinera flera slumpmässiga bitar för att bilda ett större tal.