Übung, Teil 1: Erstellen eines Quanten-Zufallsbitgenerators

Abgeschlossen

In der vorherigen Lektion haben Sie die grundlegenden Bausteine eines Q#-Programms kennengelernt. Jetzt können Sie Ihr erstes Quantenprogramm schreiben. In dieser Einheit schreiben Sie ein Quantenprogramm, das ein wirklich zufälliges Bit generiert.

Sie erstellen Ihren Quanten-Zufallszahlengenerator in zwei Schritten. Diese Einheit ist der erste Schritt, der ein einzelnes zufälliges Bit generiert. Um ein zufälliges Bit zu generieren, weisen Sie einen Qubit im $\ket{0}$-Zustand zu, setzen dieses Qubit in einen Superpositionszustand und messen dann den Qubit, um einen zufälligen Bitwert von 0 oder 1 zu erzeugen.

Erstellen der Q#-Programmdatei

  1. Öffnen Sie Visual Studio Code.
  2. Öffnen Sie das Menü "Datei ", und wählen Sie dann " Neue Textdatei " aus, um eine neue Datei zu erstellen.
  3. Speichern Sie die Datei unter dem Namen Main.qs.

Schreiben Sie ihren Q#-Code für den zufälligen Bitgenerator in der Main.qs Datei.

Definieren des Main Vorgangs

Der Main-Vorgang ist der Einstiegspunkt Ihres Programms. Kopieren Sie den folgenden Code in Ihre Main.qs Datei:

operation Main(): Result{

    // Your code goes here

}

Zuordnen eines Qubits

Ordnen Sie zunächst ein Qubit mit der use Anweisung zu. In Q# beginnt standardmäßig jeder Qubit, den Sie mit use zuweisen, im Zustand "$\ket{0}$". Um ein einzelnes Qubit zuzuweisen, kopieren Sie den folgenden Code in Ihr Programm:

operation Main(): Result{

    // Allocate a qubit
    use q = Qubit();
}

Setzen des Qubits in einen Superpositionszustand

An diesem Punkt können Sie kein zufälliges Bit aus dem Qubit generieren, da sich das Qubit im Zustand $\ket{0}$ befindet. Wenn Sie den Zustand dieses Qubits messen, gibt die Messung jedes Mal einen Bitwert von 0 zurück.

Um ein zufälliges Bit aus der Qubit-Messung zu generieren, müssen Sie zuerst das Qubit in eine Superposition des Zustands $\ket{0}$ und den $\ket{1}$-Zustand setzen. Um den Qubit in einen Superpositionszustand zu versetzen, wenden Sie einen Hadamard-Vorgang auf das Qubit an. Der Hadamard-Vorgang wandelt den Qubit vom Zustand "$\ket{0}$" in eine gleiche Überposition der Zustände "$\ket{0}$" und "$\ket{1}$" um.

$$ H \ket{0} = \frac{1}{\sqrt{2}} (\ket{0} + \ket{1}) $$

Um einen Hadamard-Vorgang auf Ihren Qubit in Q# anzuwenden, verwenden Sie den H Vorgang:

operation Main(): Result{

    use q = Qubit();
    H(q);
}

Hinweis

Wenn Sie einen Quantenvorgang auf ein Qubit in Q# anwenden, gibt der Vorgang keinen Wert zurück. Stattdessen wirken sich Vorgänge auf den Zustand des Qubits aus.

Messen des Qubits

Da sich das Qubit jetzt in einem gleichen Superpositionszustand befindet, haben Sie beim Messen des Qubits eine 50% Chance, dass die Messung eine 0 und eine 50% Chance zurückgibt, dass die Messung eine 1 zurückgibt.

Verwenden Sie die M Operation, um den Qubitwert in Q# zu messen, und speichern Sie den Messwert in der result Variablen.

operation Main(): Result{

    use q = Qubit();
    H(q);
    let result = M(q);
}

Qubit zurücksetzen

In Q# muss sich ein Qubit im Zustand $\ket{0}$ befinden, bevor Sie das Qubit freigeben können. Verwenden Sie den Reset Vorgang, um den Qubit auf den Status "$\ket{0}$" zurückzusetzen.

operation Main(): Result{

    use q = Qubit();
    H(q);
    let result = M(q);
    Reset(q);
}

Zurückgeben des Messergebnisses

Geben Sie schließlich das Messergebnis mit der return Anweisung zurück. Dieses Ergebnis ist ein zufälliges Bit, entweder 0 oder 1 mit gleicher Wahrscheinlichkeit. Kopieren Sie den Code in die Main.qs Datei.

operation Main(): Result{

    use q = Qubit();
    H(q);
    let result = M(q);
    Reset(q);
    return result;
}

Führen Sie Ihr Zufallsbitgeneratorprogramm aus

Sie haben ein Q#-Programm erstellt Main.qs , das einen Qubit zuordnet, den Qubit in einen gleichen Superpositionszustand versetzt, den Qubit misst, den Qubit zurücksetzt und dann das Messergebnis zurückgibt. Hier ist eine Zusammenfassung Ihres Q#-Codes:

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;
}

Hinweis

Das // Symbol stellt optionale Kommentare dar, die jeden Schritt des Programms erläutern. Kommentare werden vom Compiler ignoriert.

Wenn Sie Ihr Programm im integrierten Simulator ausführen möchten, wählen Sie das Codeobjektiv "Ausführen" über dem Main Vorgang aus, oder drücken Sie STRG+F5. Die Ausgabe wird auf der Debugkonsole im Terminal angezeigt.

Das Ergebnis ist entweder Zero oder One, jeweils mit einer Chance von 50%. Der Messwert dieses Bits auf einem Quantencomputer ist wirklich zufällig. Führen Sie das Programm mehrmals aus, um selbst zu sehen, wie sich das Ergebnis ändert.

In der nächsten Einheit kombinieren Sie mehrere zufällige Bits, um den zweiten Teil ihres Quanten-Zufallszahlengenerators zu implementieren.