Ćwiczenie— część 1 — tworzenie kwantowego generatora bitów losowych
W poprzedniej lekcji przedstawiono podstawowe bloki konstrukcyjne programu języka Q#. Teraz możesz napisać swój pierwszy program kwantowy: program kwantowy do generowania prawdziwie losowych liczb.
Możesz utworzyć kwantowy generator liczb losowych w dwóch fazach. W tej lekcji utworzysz pierwszą fazę, która polega na wygenerowaniu pojedynczego losowego bitu.
Tworzenie programu w języku Q#
- Otwórz program Visual Studio Code i wybierz pozycję Plik > nowy plik tekstowy, aby utworzyć nowy plik.
- Zapisz plik jako
Main.qs
. Ten plik będzie zawierać kod języka Q# dla programu.
Definiowanie Main
operacji
Operacja Main
jest punktem wejścia programu.
operation Main(): Result{
// Your code goes here
}
Przydzielanie kubitu
Zacznij od przydzielenia jednego kubitu za pomocą słowa kluczowego use
. W języku Q#każdy kubit przydzielany jest domyślnie uruchamiany w stanie $\ket{0}$.
operation Main(): Result{
// Allocate a qubit
use q = Qubit();
}
Umieść kubit w superpozycji
Kubit jest w stanie $\ket{0}$, który nie jest bardzo przydatny do generowania liczb losowych. Należy umieścić kubit w superpozycji. W tym celu zastosujesz operację Hadamard do H
kubitu. Operacja Hadamard zmienia stan kubitu i umieszcza go w równej superpozycji $\ket{0}$ i $\ket{1}$.
$$ H \ket{0} = \frac{1}{\sqrt{2}} (\ket + \ket{0}{1}) $$
Ponieważ kubit znajduje się w równej superpozycji, podczas jej mierzenia masz 50% szans na uzyskanie 0 i 50% szans na uzyskanie 1.
operation Main(): Result{
use q = Qubit();
H(q);
}
Mierzenie kubitu
W tym momencie kubit q
ma 50% szans na pomiar w stanie |0} i 50% prawdopodobieństwa pomiaru w stanie |1. W związku z tym w przypadku mierzenia kubitu otrzymasz losowy bit (0 lub 1) z równym 50% prawdopodobieństwem. Wartość tego bitu jest naprawdę losowa, nie ma możliwości wcześniejszego poznania wyniku pomiaru.
Aby zmierzyć wartość kubitu, użyj M
operacji i zapisz wartość miary w zmiennej result
.
operation Main(): Result{
use q = Qubit();
H(q);
let result = M(q);
}
Resetowanie kubitu
W języku Q# każdy kubit musi być w stanie $\ket{0}$ o czas ich wydania. Służy Reset(q)
do resetowania kubitu do stanu zera.
operation Main(): Result{
use q = Qubit();
H(q);
let result = M(q);
Reset(q);
}
Zwraca wynik pomiaru
Na koniec zwracasz wynik pomiaru za pomocą słowa kluczowego return
. Ten wynik jest losowym bitem ( 0 lub 1) z równym prawdopodobieństwem.
operation Main(): Result{
use q = Qubit();
H(q);
let result = M(q);
Reset(q);
return result;
}
Końcowy program
Plik Main.qs
powinien wyglądać następująco. Program przydziela kubit, umieszcza go w superpozycji, mierzy kubit, resetuje kubit i zwraca wynik pomiaru.
Uwaga
Symbol //
reprezentuje opcjonalne komentarze, aby wyjaśnić każdy krok programu.
operation Main() : Result {
// Allocate a qubit.
use q = Qubit();
// Set the qubit into superposition of 0 and 1 using the Hadamard
H(q);
// Measure the qubit and store the result.
let result = M(q);
// Reset qubit to the |0〉 state.
Reset(q);
// Return the result of the measurement.
return result;
}
Uruchamianie programu
Aby uruchomić program w wbudowanym symulatorze, kliknij przycisk Uruchom powyżej operacji lub naciśnij Ctrl+F5.Main
Dane wyjściowe są wyświetlane w konsoli debugowania w terminalu.
Wynik jest albo One
, Zero
który reprezentuje naprawdę losowy bit. Możesz ponownie uruchomić program, aby zobaczyć inny wynik.
W następnej lekcji zaimplementujesz drugą fazę kwantowego generatora liczb losowych: łącząc wiele losowych bitów w celu utworzenia większej liczby.