Rychlý start: Implementace kvantového generátoru náhodných čísel v jazyku Q#Quickstart: Implement a Quantum Random Number Generator in Q#

Jednoduchým příkladem kvantového algoritmu implementovaného v jazyku Q# je kvantový generátor náhodných čísel.A simple example of a quantum algorithm written in Q# is a quantum random number generator. Tento algoritmus využívá charakter kvantové mechaniky a vytváří náhodné číslo.This algorithm leverages the nature of quantum mechanics to produce a random number.

PožadavkyPrerequisites

Napište operaci Q#Write a Q# operation

Kód operace Q#Q# operation code

  1. Obsah souboru Operation.qs nahraďte následujícím kódem:Replace the contents of the Operation.qs file with the following code:

    namespace Quantum {
        open Microsoft.Quantum.Intrinsic;
    
        operation QuantumRandomNumberGenerator() : Result {
            using(q = Qubit())  { // Allocate a qubit.
                H(q);             // Put the qubit to superposition. It now has a 50% chance of being 0 or 1.
                let r = M(q);     // Measure the qubit value.
                Reset(q);
                return r;
            }
        }
    }
    

Jak je uvedeno v článku Co jsou kvantové výpočty?, qubit je jednotka kvantových informací, které můžou být v superpozici.As mentioned in our What is Quantum Computing? article, a qubit is a unit of quantum information that can be in superposition. Při změření může mít qubit jenom hodnotu 0 nebo 1.When measured, a qubit can only be either 0 or 1. Během zpracování však stav qubitu představuje pravděpodobnost přečtení hodnoty 0 anebo 1 při měření.However, during execution the state of the qubit represents the probability of reading either a 0 or a 1 with a measurement. Tento pravděpodobnostní stav se nazývá superpozice.This probabilistic state is known as superposition. Na základě této pravděpodobnosti můžeme generovat náhodná čísla.We can use this probability to generate random numbers.

V rámci operace v jazyku Q # zavádíme datový typ Qubit, který je pro jazyk Q# nativní.In our Q# operation, we introduce the Qubit datatype, native to Q#. Typ Qubit je možné přidělit jen pomocí příkazu using.We can only allocate a Qubit with a using statement. Qubit je po přidělení vždy ve stavu Zero.When it gets allocated a qubit is always in the Zero state.

Pomocí operace H můžeme Qubit převést do superpozice.Using the H operation, we are able to put our Qubit in superposition. Ke změření qubitu a přečtení jeho hodnoty použijte vnitřní operaci M.To measure a qubit and read its value, you use the M intrinsic operation.

Když Qubit převedeme do superpozice a změříme ho, bude výsledkem při každém vyvolání kódu jiná hodnota.By putting our Qubit in superposition and measuring it, our result will be a different value each time the code is invoked.

Když je pro Qubit zrušeno přidělení, musí pro něj být znovu nastaven stav Zero, jinak simulátor ohlásí běhovou chybu.When a Qubit is de-allocated it must be explicitly set back to the Zero state, otherwise the simulator will report a runtime error. Snadný způsob, jak toho dosáhnout, je vyvolat operaci Reset.An easy way to achieve this is invoking Reset.

Vizualizace kódu pomocí Blochovy kouleVisualizing the code with the Bloch sphere

Na Blochově kouli představuje severní pól klasickou hodnotu 0 a jižní pól představuje klasickou hodnotu 1.In the Bloch sphere the north pole represents the classical value 0 and the south pole represents the classical value 1. Každá superpozice může být reprezentována bodem na kouli (reprezentovaný šipkou).Any superposition can be represented by a point on the sphere (represented by an arrow). Čím blíž je konec šipky k pólu, tím vyšší je pravděpodobnost, že se qubit při změření převede na klasickou hodnotu přiřazenou k příslušnému pólu.When the closer the end of the arrow to a pole, the higher the probability the qubit collapses into the classical value assigned to that pole when measured. Příklad: Stav qubitu reprezentovaného červenou šipkou na obrázku níže má vyšší pravděpodobnost, že při změření bude mít hodnotu 0.For example, the qubit state represented by the red arrow below has a higher probability of giving the value 0 if we measure it.

Tuto reprezentaci můžeme použít k vizualizaci toho, co kód dělá:We can use this representation to visualize what the code is doing:

  • Nejdřív začneme s qubitem inicializovaným ve stavu 0 a pomocí funkce H vytvoříme superpozici, ve které jsou pravděpodobnosti hodnot 0 a 1 stejné.First we start with a qubit initalizated in the state 0 and apply H to create a superposition in which the probabilities for 0 and 1 are the same.
  • Pak qubit změříme a výstup uložíme:Then we measure the qubit and save the output:

Jelikož je výsledek měření zcela náhodný, získali jsme náhodný bit.Since the outcome of the measurement is completely random, we have obtained a random bit. Pokud chceme generovat celá čísla, můžeme tuto operaci volat vícekrát.We can call this operation several times to create integers. Pokud například budeme tuto operaci volat třikrát a získáme tři náhodné bity, můžeme generovat náhodná 3-bitová čísla (tedy náhodné číslo v rozsahu 0 až 7).For example, if we call the operation three times to obtain three random bits, we can build random 3-bit numbers (that is, a random number between 0 and 7).