Übung, Teil 1: Erstellen eines Quanten-Zufallsbitgenerators
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
- Öffnen Sie Visual Studio Code und wählen Sie Datei > Neue Textdatei aus, um eine neue Datei zu erstellen.
- 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.