Ćwiczenie— część 1 — tworzenie kwantowego generatora bitów losowych

Ukończone

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#

  1. Otwórz program Visual Studio Code i wybierz pozycję Plik > nowy plik tekstowy, aby utworzyć nowy plik.
  2. 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 Hkubitu. 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 , Zeroktó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.