Künstliche Intelligenz

Quantencomputing: Ein Paradigmenwechsel für die Softwareentwicklung


Quantencomputing stellt einen grundlegenden Wandel in der Informationsverarbeitung dar. Es geht über die binäre Logik hinaus, die über Jahrzehnte hinweg das Rechnen mit Computern geprägt hat. Während klassische Rechner mit Bits arbeiten, die sich eindeutig im Zustand 0 oder 1 befinden, nutzen Quantencomputer die seltsamen Eigenschaften der Quantenmechanik. Sie verarbeiten Quantenbits (Qubits), die sich gleichzeitig in mehreren Zuständen befinden können.




Prof. Dr. Michael Stal arbeitet seit 1991 bei Siemens Technology. Seine Forschungsschwerpunkte umfassen Softwarearchitekturen für große komplexe Systeme (Verteilte Systeme, Cloud Computing, IIoT), Eingebettte Systeme, und Künstliche Intelligenz.

Er berät Geschäftsbereiche in Softwarearchitekturfragen und ist für die Architekturausbildung der Senior-Software-Architekten bei Siemens verantwortlich.

Wer als Softwareentwickler Quantencomputing verstehen möchte, muss nicht nur neue Programmierparadigmen begreifen, sondern auch die zugrunde liegende Physik erfassen, die diese Art der Berechnung überhaupt ermöglicht.

Die große Hoffnung beim Quantencomputing liegt in seiner Fähigkeit, bestimmte Problemklassen exponentiell schneller zu lösen als klassische Rechner. Dazu gehören etwa das Zerlegen großer Zahlen in ihre Primfaktoren, das Durchsuchen unsortierter Datenbanken und die Simulation quantenmechanischer Systeme selbst. Quantencomputing stellt allerdings keine bloß schnellere Version klassischer Computertechnik dar. Es erfordert ganz eigene Algorithmen und völlig andere Denkweisen beim Lösen von Problemen.

Ein von mir entwickelter Quanten-Simulator in Python ist auf GitHub verfügbar. Wer eigene Skripte oder Kommandos im Simulator ausprobieren möchte, kann dies dort tun.

In der klassischen Informatik erfolgt die Informationsspeicherung in Bits. Jedes Bit repräsentiert entweder 0 oder 1. Alle klassischen Operationen lassen sich als Manipulationen dieser Binärwerte durch logische Gatter wie AND, OR und NOT verstehen. Der Zustand eines klassischen Systems mit n Bits lässt sich beschreiben, indem der Wert jedes Bits festgelegt wird – insgesamt sind dafür n Informationen notwendig.

In der Quanteninformationstheorie gelten andere Prinzipien. Ein Qubit kann sich gleichzeitig in einer Überlagerung der Zustände 0 und 1 befinden. Diese Überlagerung lässt sich mathematisch als Linearkombination der beiden Basiszustände beschreiben. Ein System mit n Qubits kann sich in einer Überlagerung aller 2n möglichen klassischen Zustände befinden. Zur vollständigen Beschreibung eines solchen Zustands sind im Allgemeinen 2n komplexe Zahlen nötig.

Diese exponentielle Skalierung verleiht Quantenrechnern ihr Potenzial, bringt aber auch große Komplexität mit sich. Im Gegensatz zu klassischen Bits lassen sich Qubits nicht beliebig kopieren – das No-Cloning-Theorem schließt dies aus. Wird ein Qubit gemessen, geht seine Überlagerung verloren. Es springt dann in einen der beiden Basiszustände 0 oder 1.

Wer Quantencomputing verstehen will, muss sich mit quantenmechanischen Phänomenen befassen, für die es in der klassischen Welt keine Entsprechungen gibt.

Überlagerung bildet das Fundament der Quantenberechnung. Ein Qubit in Überlagerung befindet sich gleichzeitig in einer Kombination aus 0 und 1 – solange keine Messung erfolgt. Dieses Prinzip lässt sich anschaulich mit Schrödingers berühmtem Gedankenexperiment vergleichen, in dem eine Katze gleichzeitig lebendig und tot ist. Allerdings bleibt diese Analogie oberflächlich – denn im Quantenbereich lässt sich Überlagerung exakt kontrollieren und gezielt manipulieren.

Mathematisch sieht ein Qubit-Zustand so aus: |ψ⟩ = α|0⟩ + β|1⟩. Dabei sind α und β komplexe Zahlen, sogenannte Wahrscheinlichkeitsamplituden. Es gilt stets |α|² + |β|² = 1. Die Notation mit senkrechten Strichen und spitzen Klammern stammt aus der Dirac-Schreibweise, die in der Quantenmechanik üblich ist. Wird das Qubit gemessen, besteht mit Wahrscheinlichkeit |α|² ein Ergebnis 0 und mit Wahrscheinlichkeit |β|² ein Ergebnis 1.

Verschränkung ist ein weiteres, rein quantenmechanisches Phänomen. Dabei treten zwei oder mehr Qubits in einen Zustand, der sich nicht mehr als Produkt einzelner Zustände beschreiben lässt. Einstein sprach in diesem Zusammenhang von „spukhafter Fernwirkung“. Doch obwohl dabei sofortige Korrelationen über große Entfernungen möglich sind, bleibt eine Kommunikation mit Überlichtgeschwindigkeit ausgeschlossen. Verschränkung bildet die Grundlage vieler Quantenalgorithmen und ist essenziell für Quanten-Fehlerkorrektur.

Sobald zwei Qubits verschränkt sind, entscheidet die Messung eines Qubits gleichzeitig über den Zustand seines Partners – unabhängig von der Entfernung. Diese Korrelation übertrifft alle klassischen Möglichkeiten und eröffnet Wege zu Berechnungen, die klassisch nicht durchführbar erscheinen.

Interferenz im Quantenbereich macht es möglich, korrekte Ergebnisse zu verstärken und falsche auszublenden. Dafür müssen Quantenalgorithmen so konstruiert sein, dass sich die Amplituden der falschen Ergebnisse gegenseitig auslöschen, während die der richtigen sich addieren. Diese Interferenz ist der zentrale Mechanismus hinter Algorithmen wie Grovers Suche.

Messung im Quantenbereich unterscheidet sich grundlegend von klassischer Beobachtung. Eine Messung bringt das System in einen der möglichen Basiszustände und zerstört alle Überlagerungen und Verschränkungen. Diese irreversible Eigenschaft zwingt dazu, Quantenalgorithmen so zu gestalten, dass sie relevante Informationen gewinnen, bevor das System kollabiert.

Die Quantenberechnung folgt meist dem Schaltbildmodell (circuit model). Quanten-Gatter manipulieren Qubits analog zu klassischen Logikgattern bei Bits. Allerdings müssen Quanten-Gatter reversibel sein – sie sind unitär, das heißt, sie erhalten die Gesamtwahrscheinlichkeit und lassen sich wieder rückgängig machen.

Die grundlegendsten Gatter für Einzelqubits heißen Pauli-X, -Y und -Z. Sie rotieren den Zustand eines Qubits um verschiedene Achsen auf der sogenannten Bloch-Kugel, einer geometrischen Darstellung von Qubit-Zuständen. Das X-Gatter entspricht einem klassischen NOT-Gatter – es tauscht |0⟩ gegen |1⟩ aus. Das Hadamard-Gatter (H) erzeugt Überlagerung. Es wandelt |0⟩ in (|0⟩ + |1⟩)/√2 und |1⟩ in (|0⟩ − |1⟩)/√2.

Zwei-Qubit-Gatter ermöglichen Verschränkung. Das wichtigste Beispiel ist das CNOT-Gatter (Controlled NOT). Es kehrt den Zustand eines Ziel-Qubits nur dann um, wenn das Steuer-Qubit im Zustand |1⟩ vorliegt. In Kombination mit Einzelqubit-Gattern lassen sich damit alle denkbaren Quantenalgorithmen zusammensetzen.

Im Gegensatz zu klassischen Schaltungen können Quanten-Schaltungen keine klassischen Schleifen enthalten. Der zeitliche Ablauf in Quantenprozessen bleibt unitär. Stattdessen nutzen viele Quantenalgorithmen Quantenparallelität – Überlagerung erlaubt das gleichzeitige Verfolgen vieler Lösungspfade.

Ein erstes Beispiel demonstriert Überlagerung und Messung mithilfe von Qiskit, einer Bibliothek von IBM, die auch das Ausführen auf echter Quantum-Computing-Hardware unterstützt:


from qiskit import QuantumCircuit, QuantumRegister, ClassicalRegister

from qiskit import execute, Aer

from qiskit.visualization import plot_histogram


qreg = QuantumRegister(1, 'q')

creg = ClassicalRegister(1, 'c')


circuit = QuantumCircuit(qreg, creg)

circuit.h(qreg[0])


circuit.measure(qreg[0], creg[0])


backend = Aer.get_backend('qasm_simulator')

job = execute(circuit, backend, shots=1000)

result = job.result()

counts = result.get_counts(circuit)

print(counts)


Dieses Beispiel illustriert das Prinzip der Überlagerung. Nach Anwendung des Hadamard-Gatters befindet sich das Qubit in einem Gleichgewichtszustand zwischen |0⟩ und |1⟩. Die Messung bei 1000 Wiederholungen ergibt statistisch etwa gleich viele Ergebnisse für 0 und 1.

Ein zweites Beispiel zeigt die Erzeugung einer Bell-Verschränkung:


qreg = QuantumRegister(2, 'q')

creg = ClassicalRegister(2, 'c')

circuit = QuantumCircuit(qreg, creg)

circuit.h(qreg[0])

circuit.cx(qreg[0], qreg[1])

circuit.measure(qreg, creg)

job = execute(circuit, backend, shots=1000)

result = job.result()

counts = result.get_counts(circuit)

print(counts)


Nach der Anwendung des Hadamard-Gatters auf das erste Qubit und der CNOT-Verknüpfung entsteht der verschränkte Zustand (|00⟩ + |11⟩)/√2. Die Messung zeigt dann ausschließlich ‘00’ und ‘11’ – nie ‘01’ oder ‘10’.

Grovers Suchalgorithmus dient als drittes Beispiel für quantenmechanische Beschleunigung. Eine vollständige Implementierung mit Erklärungen folgt im weiteren Verlauf des Artikels.

Fehlerkorrektur in Quantencomputern ist besonders anspruchsvoll, da Quanteninformation äußerst empfindlich auf Störungen reagiert. Dekohärenz, also der Verlust quantenmechanischer Eigenschaften durch Umgebungseinflüsse, verändert Qubit-Zustände. Eine einfache Kopie zur Absicherung lässt sich durch das No-Cloning-Theorem ausschließen.

Die Fehlerkorrektur gelingt durch das Einbetten logischer Qubits in mehrere physikalische Qubits. So lassen sich Fehler erkennen und beheben, ohne die eigentliche Information zu zerstören. Ein einfaches Beispiel ist der Bit-Flip-Code mit drei Qubits: |0⟩ |000⟩, |1⟩ |111⟩.

Für skalierbare Fehlerkorrektur gilt der sogenannte Surface Code als vielversprechend. Dabei befinden sich die Qubits in einem zweidimensionalen Gitter. Zusätzliche Hilfsqubits dienen zur Fehlererkennung, ohne die eigentlichen Qubits zu beeinträchtigen. Der Surface Code toleriert eine hohe Fehlerrate – solange sie unter etwa 1 % bleibt.

Allerdings entsteht dabei ein erheblicher Overhead. Für einen einzigen fehlergeschützten logischen Qubit sind hunderte bis tausende physikalische Qubits erforderlich. Diese Tatsache stellt eines der größten Hindernisse für den praktischen Einsatz von Quantencomputern dar.

Verschiedene Technologielinien konkurrieren derzeit bei der Umsetzung von Quantenhardware. Supraleitende Qubits – etwa bei IBM und Google – arbeiten bei extrem tiefen Temperaturen (ca. 10 Millikelvin) und ermöglichen sehr schnelle Gatteroperationen, sind aber nur kurz kohärent.

Ionenfallen – zum Beispiel bei IonQ oder Honeywell – verwenden elektrisch eingefangene Ionen als Qubits. Diese Systeme zeigen längere Kohärenzzeiten und höhere Genauigkeit, arbeiten jedoch langsamer. Ihre Architektur erlaubt direkte Verbindungen zwischen beliebigen Qubits.

Photonenbasierte Quantencomputer nutzen Lichtteilchen als Qubits und funktionieren bei Raumtemperatur. Allerdings sind Zweiqubit-Gatter in dieser Technologie schwieriger umzusetzen. Noch bleibt ihre Skalierung hinter anderen Ansätzen zurück.

Aus Softwareperspektive existieren mehrere Frameworks. Qiskit (IBM) bietet eine umfassende Python-Bibliothek zum Erstellen und Ausführen von Quanten-Schaltkreisen. Cirq (Google) zielt auf Googles eigene Hardware. Microsofts Q# stellt eine speziell für Quantenprogrammierung entworfene Sprache dar.

Alle Frameworks verwenden typischerweise das Schaltbildmodell (Circuit). Dort definieren Entwickler explizit die Abfolge von Quanten-Gattern. Höhere Programmiersprachen für Quantencomputer befinden sich in der Forschung, um Quantenprogrammierung künftig zugänglicher zu machen.



Source link

Leave a Reply

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Beliebt

Die mobile Version verlassen