Ü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: ein Quantenprogramm zum Generieren wirklich zufälliger Zahlen.

Sie erstellen Ihren Quanten-Zufallszahlen-Generator in zwei Phasen. In dieser Einheit erstellen Sie die erste Phase, in der ein einzelnes Zufallsbit generiert wird.

Erstellen des Q#-Programms

  1. Öffnen Sie Visual Studio Code und wählen Sie Datei > Neue Textdatei aus, um eine neue Datei zu erstellen.
  2. Speichern Sie die Datei unter dem Namen Main.qs. Diese Datei enthält den Q#-Code für Ihr Programm.

Definieren des Main Vorgangs

Der Main-Vorgang ist der Einstiegspunkt Ihres Programms.

operation Main(): Result{

    // Your code goes here

}

Zuordnen eines Qubits

Beginnen Sie mit der Zuordnung eines Qubits mit dem Schlüsselwort use. In Q# beginnt jedes Qubit, das Sie zuordnen, standardmäßig im Zustand „$\ket{0}$“.

operation Main(): Result{

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

}

Setzen Sie das Qubit in Superposition.

Das Qubit befindet sich im Zustand „$\ket{0}$“. Die ist nicht sehr nützlich zum Generieren von Zufallszahlen. Sie müssen das Qubit in Superposition setzen. Dazu wenden Sie den Hadamard-Vorgang, H, auf das Qubit an. Der Hadamard-Vorgang ändert den Zustand des Qubits und setzt es in eine gleiche Superposition von „$\ket{0}$” und „$\ket{1}$”.

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

Da sich das Qubit in einer gleichen Superposition befindet, haben Sie beim Messen eine Wahrscheinlichkeit von 50 % 0 und eine Wahrscheinlichkeit von 50 % 1 zu erhalten.

operation Main(): Result{

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

Messen des Qubits

An diesem Punkt hat das Qubit q eine Wahrscheinlichkeit von 50 %, im Zustand |0〉 gemessen zu werden, und eine Wahrscheinlichkeit von 50 %, im Zustand |1〉 gemessen zu werden. Wenn Sie das Qubit messen, erhalten Sie also mit einer Wahrscheinlichkeit von 50 % ein zufälliges Bit, entweder 0 oder 1. Der Wert dieses Bits ist wirklich zufällig. Sie können das Ergebnis der Messung im Vorfeld nicht kennen.

Verwenden Sie zum Messen des Qubitwerts den M-Vorgang, und speichern Sie den Messwert in der Variable result.

operation Main(): Result{

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

Zurücksetzen des Qubits

In Q# muss sich jedes Qubit im Zustand „$\ket{0}$“ befinden, wenn sie freigegeben werden. Sie verwenden Reset(q) zum Zurücksetzen des Qubits auf den Nullzustand.

operation Main(): Result{

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

Zurückgeben des Messergebnisses

Schließlich geben Sie das Messergebnis mit dem Schlüsselwort return zurück. Dieses Ergebnis ist ein zufälliges Bit, entweder 0 oder 1, mit gleicher Wahrscheinlichkeit.

operation Main(): Result{

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

Endgültiges Programm

Ihre Main.qs-Datei sollte wie folgt aussehen. Das Programm weist ein Qubit zu, versetzt es in Superposition, misst das Qubit, setzt das Qubit zurück und gibt das Messergebnis zurück.

Hinweis

Das //-Symbol stellt optionale Kommentare dar, um jeden Schritt des Programms zu erläutern.


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

Ausführen des Programms

Um Ihr Programm auf dem integrierten Simulator auszuführen, klicken Sie über dem Vorgang Main auf Ausführen, oder drücken Sie STRG+F5. Die Ausgabe wird in der Debugkonsole im Terminal angezeigt.

Das Ergebnis ist entweder One oder Zero, was ein wirklich zufälliges Bit darstellt. Sie können das Programm erneut ausführen, um ein anderes Ergebnis anzuzeigen.

In der nächsten Einheit implementieren Sie die zweite Phase des Quanten-Zufallszahlen-Generators: Die Kombination mehrerer Zufallsbits, um eine größere Zahl zu bilden.