Quantencomputer-Simulator
Schreibe einen kleinen Quantenschaltkreis in JavaScript, simuliere ihn direkt im Browser und sieh Schaltkreisdiagramm, Wahrscheinlichkeiten und Zustandsvektor. Oder beschreibe eine Berechnung auf hoher Ebene (z. B. eine Addition) und sieh, wie daraus automatisch ein echter reversibler Quantenschaltkreis wird.
Rauschmodell (Noise Model)
Echte Quantencomputer rechnen nicht perfekt: Qubits sind extrem empfindlich und verlieren durch jede ungewollte Wechselwirkung mit ihrer Umgebung – Wärme, elektromagnetische Felder, benachbarte Qubits – einen Teil ihrer Information (Dekohärenz). Auch Gatter-Operationen treffen nie exakt, und selbst das Ablesen am Ende kann danebengehen. Dieser Simulator rechnet standardmäßig ideal; hier kannst du typische Fehlermodelle zuschalten und ihre Wirkung direkt in den Ergebnissen beobachten.
Beschreibe eine Berechnung mit quantum.add, quantum.subtract, quantum.multiply, quantum.divide oder quantum.random. Strg+Enter startet die Simulation. Ausführliche Dokumentation über die Schaltfläche „Dokumentation“.
Dieser Code wurde automatisch aus dem Programm-Code oben erzeugt und direkt simuliert. Du kannst ihn hier manuell bearbeiten und erneut ausführen.
Der generierte Circuit wurde manuell verändert. Die Registergruppierung im Diagramm ist deshalb ausgeblendet; ein erneuter Lauf des Programm-Codes oben überschreibt diese Änderungen wieder.
Maximal 4000 Zeichen. Verfügbare QuantumCircuit-Methoden: x, y, z, h, s, sdg, t, tdg, rx, ry, rz, cnot, cz, ccnot (Alias: toffoli), swap, measureAll, run. Strg+Enter startet die Simulation.
Circuit-Diagramm
Die Schritt-Ansicht zeigt Wahrscheinlichkeiten und Zustandsvektor exakt nach dem gewählten Gatter. Die Shot-Ergebnisse unten gelten immer für den vollständigen Schaltkreis.
OpenQASM 2.0
OpenQASM 2.0 ist das verbreitete Austauschformat für Quanten-Schaltkreise und wird u. a. von Qiskit gelesen. Achtung Bit-Reihenfolge: Dieser Simulator liest q0 als höchstwertiges (linkes) Bit, Qiskit dagegen q[0] als niedrigstwertiges – gemessene Bitketten erscheinen dort deshalb gespiegelt.
Wahrscheinlichkeiten
Die exakt aus dem Zustandsvektor berechnete Chance, jede mögliche Bitkette zu messen. Leserichtung: q0 ist das linke (höchstwertige) Bit.
Bloch-Kugeln
Der Zustand jedes einzelnen Qubits als Pfeil in der Bloch-Kugel: Nordpol = |0⟩, Südpol = |1⟩, Äquator = gleichgewichtete Superposition. Ist der Pfeil deutlich kürzer als der Kugelradius, hat das Qubit keinen eigenen reinen Zustand – es ist mit anderen Qubits verschränkt. Ein kurzer Pfeil kann auch von Rauschen kommen: Bei aktivem Rauschmodell verliert das Qubit an Kohärenz und der Pfeil schrumpft nach innen. Verrauschte Kugeln sind hier eine Näherung – der Bloch-Vektor wird über die Rausch-Trajektorien gemittelt. Mit der Schritt-Ansicht oben wandern die Pfeile Gatter für Gatter mit (nur ohne Rauschen).
Shot-Ergebnisse
So oft trat jede Bitkette bei den simulierten Messungen tatsächlich auf. Bei mehreren möglichen Ergebnissen streuen die Zahlen zufällig um die exakten Wahrscheinlichkeiten.
Zustandsvektor
Die komplexen Amplituden hinter den Wahrscheinlichkeiten: Das Betragsquadrat einer Amplitude (Real² + Imaginär²) ergibt die Wahrscheinlichkeit ihres Zustands.
| Zustand | Realteil | Imaginärteil |
|---|
Grundlagen: Wie funktioniert das?
Vom Programm zum physikalischen Qubit
Ein echter Quantencomputer besteht nicht nur aus einem Chip. Klassische Steuerelektronik übersetzt den Schaltkreis in präzise Impulse. Im gezeigten Beispiel formen Kühl-, Rückpump-, Qubit- und Ausleselaser diese Signale auf einer Optikbank und führen sie in eine abgeschirmte Vakuumkammer. Dort verändern und messen sie den Zustand des Qubits; das Messergebnis fließt anschließend zurück an den klassischen Computer.
Qubit & Basiszustände
Ein klassisches Bit ist entweder 0 oder 1. Ein Qubit kann zusätzlich in einer Überlagerung (Superposition) dieser beiden Basiszustände |0⟩ und |1⟩existieren. Bei mehreren Qubits werden alle Basiszustände als Bitstring notiert, z. B. |10⟩ für 2 Qubits – dabei ist q0 in diesem Simulator immer das höchstwertige (linke) Bit.
Superposition
Ein Qubit in Superposition trägt gleichzeitig Anteile mehrerer Basiszustände. Diese Anteile werden als komplexe Amplituden beschrieben; das Betragsquadrat einer Amplitude ergibt die Wahrscheinlichkeit, den zugehörigen Zustand bei einer Messung zu erhalten.
Die Bloch-Kugel
Der Zustand eines einzelnen Qubits lässt sich als Pfeil in einer Kugel veranschaulichen: Der Nordpol steht für |0⟩, der Südpol für |1⟩, alle Punkte auf dem Äquator sind gleichgewichtete Superpositionen – die Phase bestimmt, in welche Richtung entlang des Äquators der Pfeil zeigt. Die Rotations-Gatter rx, ryund rz drehen den Pfeil um die jeweilige Achse, Phasengatter wie S und T drehen ihn um die Z-Achse. Bei verschränkten Qubits schrumpft der Pfeil in Richtung Kugelmittelpunkt: Das einzelne Qubit hat dann keinen eigenen reinen Zustand mehr – so lässt sich Verschränkung buchstäblich sehen.
Messung & Shots
measureAll() misst alle Qubits gleichzeitig und beendet den Schaltkreis. Da eine einzelne Messung nur ein zufälliges Ergebnis liefert, wird der Schaltkreis bei run({ shots })gedanklich "shots"-mal wiederholt gemessen, damit sich die Wahrscheinlichkeitsverteilung als Histogramm zeigt. Die exakten Wahrscheinlichkeiten werden zusätzlich direkt aus dem Zustandsvektor berechnet, unabhängig vom Zufall der Shots.
Hadamard-Gate
Das Hadamard-Gate h(q) versetzt ein Qubit aus einem eindeutigen Zustand (|0⟩ oder |1⟩) in eine gleichgewichtete Superposition aus |0⟩ und |1⟩ – bei Messung also ca. 50 % / 50 %.
Phasengatter: S und T
Die Gatter s(q) und t(q) ändern keine Messwahrscheinlichkeiten eines einzelnen Qubits, sondern drehen nur die Phase der |1⟩ -Amplitude – S um 90°, T um 45°. Wirkung zeigen sie erst im Zusammenspiel mit Superposition: Zwischen zwei Hadamard-Gates entscheidet die Phase darüber, wie sich Amplituden überlagern oder auslöschen (Interferenz). Die Dagger-Varianten sdg(q) und tdg(q) drehen exakt entgegengesetzt und machen S bzw. T rückgängig. Es gilt: zwei T ergeben ein S, zwei S ergeben ein Z.
CNOT & bedingte Verschränkung
Das CNOT-Gate cnot(control, target) kippt das Target-Qubit genau dann, wenn das Control-Qubit den Zustand |1⟩hat. Befindet sich das Control-Qubit vorher in Superposition, kann dadurch Verschränkung entstehen – die beiden Qubits lassen sich dann nicht mehr unabhängig voneinander beschreiben, wie im Bell-State-Beispiel. Liegt das Control-Qubit dagegen in einem eindeutigen Basiszustand vor, bewirkt CNOT nur eine bedingte Bitumkehr ohne Verschränkung. Nicht jedes CNOT erzeugt also automatisch Verschränkung.
CZ: das symmetrische Verwandte des CNOT
Das CZ-Gate cz(a, b) kehrt das Vorzeichen der Amplitude genau dann um, wenn beide Qubits |1⟩sind. Anders als beim CNOT gibt es kein Control- und kein Target-Qubit – das Gatter wirkt auf beide Qubits identisch, weshalb es im Diagramm als zwei verbundene Punkte gezeichnet wird. CZ und CNOT lassen sich ineinander umwandeln: Ein CNOT ist ein CZ, dessen Target-Qubit vorher und nachher durch ein Hadamard-Gate geschickt wird. CZ ist ein zentraler Baustein vieler Algorithmen, etwa der Grover-Suche.
GHZ-Zustand: Verschränkung im Trio
Der GHZ-Zustand (nach Greenberger, Horne und Zeilinger) erweitert das Bell-State-Prinzip auf drei Qubits: Ein Hadamard-Gate plus zwei CNOTs verschränken alle drei so, dass die Messung nur noch |000⟩ oder |111⟩ liefert – niemals gemischte Bitketten. Kein Qubit hat mehr einen eigenen Zustand; die Information steckt ausschließlich in der gemeinsamen Korrelation.
Deutsch-Algorithmus: der kleinste Quantenvorteil
Der Deutsch-Algorithmus beantwortet mit einer einzigen Auswertung eines unbekannten Orakels eine Frage, für die ein klassischer Computer zwei Auswertungen braucht: Ist die Funktion konstant oder balanciert? Der Trick ist, die Eingabe in Superposition durch das Orakel zu schicken – die Antwort steht danach dank Interferenz eindeutig im Eingabe-Qubit. Das Prinzip dahinter (Phase-Kickback) ist der Kern fast aller Quantenalgorithmen.
Grover-Suche: Amplituden verstärken
Die Grover-Suche findet einen markierten Eintrag in einer unsortierten Menge mit deutlich weniger Anfragen als klassisch nötig. Ein Orakel markiert den gesuchten Zustand mit einem Phasenflip (hier per CZ-Gate), anschließend verstärkt der Diffusions-Operator die markierte Amplitude auf Kosten aller anderen. Bei 2 Qubits genügt eine einzige Iteration, um den Treffer mit 100 % Wahrscheinlichkeit zu messen.
Reversible Addition: von quantum.add() zum Schaltkreis
Der Programm-Code-Editor oben übersetzt quantum.add({ a, b }) in einen Schaltkreis aus X-, CNOT- und CCNOT-Gattern (Toffoli), der klassische Addition rein reversibel nachbildet: Jedes Gatter lässt sich exakt rückgängig machen, weil keine Information verworfen wird. Ein CCNOT-Gate (ccnot(c1, c2, target)) kippt das Target-Qubit nur, wenn beide Control-Qubits |1⟩ sind – das reicht als Baustein aus, um jede klassische Schaltung reversibel nachzubauen, auch einen Volladdierer mit Übertrag. Die Eingaben A und B werden dafür zunächst per X-Gattern als eindeutige Basiszustände (keine Superposition) initialisiert. Weil der gesamte Schaltkreis dadurch nur eindeutige Zustände durchläuft statt Überlagerungen, liefert die Messung am Ende mit 100 % Wahrscheinlichkeit genau ein Ergebnis – die klassisch korrekte Summe. Das ist der Grund, warum quantum.add() trotz Quanten-Simulation ein deterministisches Ergebnis liefert, statt mehrere mögliche Zustände mit Wahrscheinlichkeiten unter 100 %.
Subtraktion: die Addition rückwärts
Weil jedes Gatter eines Quanten-Schaltkreises exakt umkehrbar ist, lässt sich der komplette Addier-Schaltkreis rückwärts ausführen – und aus der Addition wird eine Subtraktion: quantum.subtract({ a, b }) nutzt exakt die Gatter des Addierers in umgekehrter Reihenfolge und rechnet damit a − b. Das ist keine Spielerei, sondern das Grundprinzip reversibler Berechnung: Kein Rechenschritt vernichtet Information, jeder lässt sich rückgängig machen. In dieser Version ist a ≥ b vorausgesetzt, damit kein negatives Ergebnis entsteht.
Multiplikation: quantum.multiply()
Multiplikation entsteht hier aus genau denselben reversiblen Bausteinen wie die Addition: Nach der Schulmethode wird der Faktor a – passend zu den gesetzten Bits des Faktors b – mehrfach verschoben aufaddiert. Jede Teiladdition ist derselbe reversible Ripple-Carry-Addierer; der Übertrag läuft jeweils ins nächste Produktbit. Weil das Ergebnisregister mit dem Produkt mitwächst, sind die Faktoren auf 3 Bit (0–7) begrenzt – nur so passen Faktor, Produkt und Übertrags-Qubit gemeinsam in die 10 Qubits dieses Simulators.
Division: quantum.divide()
Auch Division nutzt nur reversible Bausteine: quantum.divide({ a, b }) rechnet eine Langdivision aus verschobenen, reversiblen Subtraktionen des Divisors vom Rest-Register; das Ergebnis ist der Quotient und der Rest (a = quotient · b + remainder). Weil Dividend, Divisor, Quotient und ein Borrow-Qubit gemeinsam in die 10 Qubits passen müssen, ist Division die am strengsten begrenzte Operation: Es muss bits(a) + bits(b) + bits(a÷b) + 1 ≤ 10 gelten, und der Divisor b muss ≥ 1 sein (keine Division durch 0). Passt eine Eingabe nicht ins Budget, meldet der Editor das statt zu rechnen.
Echter Zufall: quantum.random()
Klassische Computer können keinen echten Zufall erzeugen – ihre „Zufallszahlen“ stammen aus deterministischen Algorithmen (Pseudozufall). Ein Quantencomputer schon: quantum.random({ bits }) versetzt jedes Bit per Hadamard-Gate in eine 50/50-Superposition, und erst die Messung entscheidet – fundamental unvorhersagbar –, welcher Wert herauskommt. Auf echter Quantenhardware ist das physikalisch echter Zufall; dieser Simulator ahmt ihn mit dem Pseudozufall deines Browsers nach.
Simulator vs. echte Quantenhardware
Dieser Simulator berechnet den Zustand exakt mit klassischer Gleitkomma-Arithmetik im Browser – das funktioniert nur, weil hier ausschließlich sehr kleine Schaltkreise mit bis zu 10 Qubits betrachtet werden. Echte Quantencomputer nutzen physikalische Qubits, sind fehleranfällig (Dekohärenz, Rauschen) und ihr Vorteil zeigt sich erst bei sehr viel größeren, praktisch nicht mehr klassisch simulierbaren Schaltkreisen. Dieses Tool ist ein Lernwerkzeug, kein echter Quantenprozessor.