Heute werden wir die Rede von James Wootton von IBM Quantum auf der FDG 2020-Konferenz analysieren. Wir werden über Quantencomputer sprechen - eine potenziell vielversprechende Technologie, für die es derzeit nur wenig Anwendung gibt. Und doch wurde einer von ihnen in der prozeduralen Generierung gefunden.
Lassen Sie uns genauer darüber sprechen, wie es auf Qubits implementiert wird, und geben Sie auch die Programmcodes an.
Beginnen wir damit, was Quantencomputer sind und wie nützlich sie sein können. Gehen wir nicht auf technische Details ein. Nur um zu erwähnen, dass Quantencomputer ein völlig anderes Rechenmodell sind als digitale und analoge Computer. Sie beschleunigen herkömmliche Software nicht nur mit Quanten. Stattdessen erfordern sie einen völlig anderen Ansatz für die Implementierung von Programmen sowie unterschiedliche Hardware, um sie auszuführen.
Eines Tages wird Quantencomputer in der Lage sein, bestimmte Aufgaben viel effizienter als digital oder analog auszuführen. Auf diese Weise können wir Probleme lösen, die derzeit nicht zu lösen sind. Nach jahrzehntelanger Forschung wurden viele Quantenalgorithmen identifiziert, die diese Vorteile in Bezug auf eine Reihe möglicher Anwendungen am effektivsten demonstrieren - auch im Bereich der prozeduralen Generierung. Dazu gehören Optimierungsprobleme, die Erfüllung von Einschränkungen, die Diagrammanalyse und andere.
Der Bau von Computern, die Quantencomputer ausführen können, ist an und für sich schon eine gewaltige Aufgabe und wird seit Jahren durchgeführt. Einer der wichtigen Parameter zur Beschreibung eines Quantengeräts ist die Anzahl der Qubits. Tatsächlich sind dies die gleichen Bits, die jedoch quantenweise implementiert sind - und daher mehr Zustände als die üblichen 0 und 1 haben. Im Kontext der Quantenphysik können wir die Bitwerte mit einem Paar orthogonaler Vektoren schreiben: | 0⟩ und | 1⟩. Bei Qubits wird die Beschreibung der Zustände durch komplexe Amplituden c 0 und c 1 ergänzt , die die Bedingung erfüllen: | c 0 | 2 + | c 1 | 2= 1, wodurch eine größere Anzahl von Zuständen des Qubits c 0 | 0⟩ + c 1 | 1⟩ erreicht wird.
Wir brauchen viele tausend Qubits, um Flaggschiff-Algorithmen auszuführen, die wir in den nächsten Jahren nicht mehr haben werden.
Derzeit verfügen wir nicht über viele tausend oder sogar tausend Qubits. Um ehrlich zu sein, haben wir nicht einmal hundert Qubits. Das größte Gerät, das uns derzeit zur Verfügung steht, hat 65 Qubits. Dies reicht zwar nicht aus, um die interessantesten und effizientesten Algorithmen auszuführen, die wir kennen, aber selbst diese Anzahl von Qubits kann Ergebnisse liefern, die von herkömmlichen Computern nicht erwartet werden. Dies wird durch die Komplexität der Emulation solcher Geräte belegt, für die Sie den weltweit größten Supercomputer mieten müssen.
Quantenhardware bietet uns zwar einzigartige Antworten, aber im Laufe der Jahrzehnte haben wir nicht gelernt, die richtigen Fragen zu stellen. Daher ist das Hauptziel unserer aktuellen Forschung, so schnell wie möglich herauszufinden, wie man mit diesen Maschinen etwas Nützliches macht.
Es gibt auch Geräte mit geringerer Leistung, die aus etwa 20 Qubits bestehen. Und Quantenprogramme mit bis zu 15 Qubits wurden von IBM sogar kostenlos zur Verfügung gestellt. Darüber hinaus haben sie eine Emulationssoftware entwickelt, die beim Entwurf und Testen von Quantenprogrammen hilft. Während das Emulieren von mehr als 50 Qubits eine entmutigende Rechenaufgabe ist, kann selbst Ihr Laptop problemlos etwa 20 Qubits emulieren.
Alle Faktoren zusammen machen 20 Qubits zu einem Meilenstein. Unabhängig davon, ob wir echte Quantenhardware oder deren Emulation verwenden, ist es nicht allzu schwierig, Quantensoftware dieser Stufe auszuführen.
Was bedeutet das alles für die prozedurale Generierung? Hängt davon ab, auf welche der drei Epochen Sie abzielen: die heutige, die bereit ist, nur Dutzende von Qubits bereitzustellen; für die nahe Zukunft, wenn Geräte Hunderte von Qubits haben werden; oder in die ferne Zukunft, wenn uns mehr als tausend Qubits zur Verfügung stehen.
Wenn wir heute darüber sprechen, kann Quantensoftware, die sich auf die Leistung von nur 20 Qubits konzentriert, immer noch nichts Einzigartiges tun. Die Tatsache, dass wir es auf einem Emulator ausführen können, bedeutet, dass Sie nicht einmal Quantenhardware benötigen. Aber können Quantenprogramme noch etwas Nützliches tun? Können wir ein 20-Qubit-Quantenprogramm schreiben, das dem realen Endbenutzer nützliche Ergebnisse liefert?
Wenn wir mit 20 Qubits wirklich nützliche Ergebnisse erzielen können, wird sich dieser Effekt nur mit der Zeit und mit mehr Rechenleistung vervielfachen. Die mittlere Ära wird die Ära der Erforschung immer komplexerer Methoden des Quantencomputers sein, einschließlich der effektiven Methode zur prozeduralen Generierung. Wir werden Werkzeuge entwickeln, an die wir wahrscheinlich nicht gedacht hätten, wenn wir nicht in Quanten gedacht hätten.
Aber lasst uns nicht weiterkommen. Der erste Schritt in Richtung einer Ära des wachsenden Nutzens besteht darin, zu beweisen, dass sogar 20-Qubit-Quantensoftware nützlich sein kann. Das werden wir tun.
Jetzt ist es Zeit, einige Details zu klären.
Prozedurale Generierung bedeutet, dass wir etwas generieren müssen. Aber was?
Die Geländegenerierung ist am offensichtlichsten, also fangen wir damit an.
Perlin-Rauschen ist ein allgegenwärtiges Werkzeug für die prozedurale Geländegenerierung. Es gibt jedoch eine andere, viel weniger komplizierte Methode zum Erstellen - die Verwendung einer Reihe von zufälligen Punkten mit anschließender Unschärfe. Die Umsetzung von so etwas schien uns ein erreichbareres Ziel für den ersten Schritt zu sein, daher werden wir es als Grundlage nehmen.
Beginnen wir mit der Entwicklung einer Methode zur Codierung von Höhenkarten in Form von Quantenschaltungen, die grundlegende Elemente der Quantensoftware sind. Sie haben eine gewisse Ähnlichkeit mit den Booleschen Schaltungsmodellen für digitales Rechnen. Qubits sind im Wesentlichen dieselben Bits, die sich bei der Durchführung von Berechnungen unterschiedlich ändern.
Wir werden mit Schwarzweißbildern arbeiten, bei denen die Helligkeit eines Pixels einen Wert von 0 bis 1 haben kann. Ebenso können sie mit Höhenkarten verwechselt werden. Sobald wir gelernt haben, wie diese Höhenkarten als Schaltpläne codiert werden, können wir sie verwalten. Die verwendete Codierung zielt darauf ab, so viele Punkte wie möglich auf so wenige Qubits wie möglich zu komprimieren. Diese Methode lässt nicht viel Flexibilität, um eine bequeme und flexible Steuerung bereitzustellen. Gleichzeitig führt fast jede Änderung der Schaltung zu Interferenzeffekten.
Wir verwenden hauptsächlich Operationen, die als Teilformen des NOT-Gatters angesehen werden können. Ändert den Wert NICHT von 0 auf 1 und umgekehrt für normale Bits. Mit Quantentoren können wir dieses Element parametrisieren, um eine Operation auszuführen, die die Hälfte von NOT oder Viertel oder einen anderen Bruchteil ausführen kann, der durch einen Satz von 2 n Amplituden von n Qubits dargestellt werden kann.
Die folgende Funktion konvertiert das Originalbild in eine Quantenschaltung:
def height2circuit(height):
#
L = max(max(height))+1
#
grid = make_grid(L)
#
n = 2*int(np.ceil(np.log(L)/np.log(2)))
#
state = [0]*(2**n)
#
H = 0
for bit string in grid:
(x,y) = grid[bit string]
if (x,y) in height:
h = height[x,y]
state[ int(bit string,2) ] = np.sqrt( h )
H += h
#
for j,amp in enumerate(state):
state[ j ] = amp/np.sqrt(H)
#
qc = QuantumCircuit(n,n)
qc.initialize(state,range(n))
# Qiskit
# qc.initialize( state, qc.qregs[0])
return qc
Dann müssen wir den umgekehrten Prozess durchführen - die Quantenschaltung in ein Bild umwandeln:
def circuit2height(qc):
#
n = qc.num_qubits
grid = make_grid(int(2**(n/2)))
#
ket = qi.Statevector(qc.data[0][0].params)
qc.data.pop(0)
#
ket = ket.evolve(qc)
#
p = ket.probabilities_dict()
#
max_h = max( p.values() )
#
height = {}
for bit string in p:
if bit string in grid:
height[grid[bit string]] = p[bit string]/max_h
return height
Wenn wir diese Operation auf alle Qubits anwenden, können wir sehen, wie sich die Höhenkarte mit zunehmendem Bruch ändert. Sie erhalten so etwas wie einen Unschärfeeffekt. Dann treten Interferenzeffekte auf, die ein Muster erzeugen, das mit einfacher Unschärfe nicht erreicht werden kann.
Im obigen Beispiel in (a) beginnen wir mit einem Paar scheinbar willkürlicher Punkte. Allmählich verschwimmen sie, woraufhin ihnen Interferenzeffekte überlagert werden. Dies führt zum Auftreten eines Musters - in unserem Fall wie ein Schachbrett auf (f). Dieses spezielle Ergebnis hat eine klare Verbindung zu den beiden Pixeln, mit denen wir begonnen haben. Wenn Sie andere Daten als Ausgangspunkt nehmen, ist das Ergebnis ebenfalls völlig anders.
Quantum Blur wurde für mehrere Game Jams entwickelt und getestet. Es wird hauptsächlich zum Generieren von Texturen und Levelkarten verwendet.
Nachdem wir diese Karten erstellt haben, verwenden wir sie für das Quantenanalogon von Perlins Hochfrequenzrauschen.
Jetzt erstellen wir das Hauptprofil - zum Beispiel Inseln - auf andere Weise - wie in © in unserem Beispiel. Dann brauchen wir einen ersten Satz von Pixeln wie in (a). Wir verwischen es quantitativ, um ein Muster wie (b) zu erzeugen. Danach wenden wir es auf das Hauptprofil an, um die endgültige Landschaft zu erstellen.
Hier sehen Sie ein 2D-Beispiel sowie das 3D-Rendering, das im IBM QiskitBlocks-Lernprogramm verwendet wurde. Details wie Informationen über die Grasart und die Platzierung von Bäumen beim 3D-Rendering wurden ebenfalls mithilfe von Quantenoperationen entwickelt.
Da es sich bei RGB-Bildern normalerweise um drei zusammen ausgerichtete Höhenkarten handelt, können wir diese Bilder auch bearbeiten. Auf diese Weise ist es einfach, einige seltsame Bilder mit Overlay zu erstellen. Schwieriger, aber effektiver - ein Bildpaar codieren und einen Teleportationseffekt zwischen ihnen erzeugen.
Die Quantenteleportation überträgt Informationen zwischen Qubits. Also nehmen wir zwei Qubit-Register der gleichen Größe und ändern einfach ihre Zustände. Verwenden Sie diese Operation, um eine Übergangsanimation zu erstellen.
Eine ähnliche Codierungsidee kann auch für andere Datenformen verwendet werden. Wootton versuchte es in der Musik zu verwenden:
und das Niveau von Mario:
Hier sind zwei weitere Beispiele, die uns wichtig sind. Eines davon ist ein Spielestudio, das diese Methode zur prozeduralen Generierung in einem zukünftigen Spiel verwendet. Das Projekt hat eine Science-Fiction-Umgebung und die Quantenmethode verleiht ihr einen echten Hauch von Wissenschaft.
Auch die Künstlerin Libby Heaney verwendete einige dieser Ideen als Ausgangspunkt für ihre Arbeit.
In beiden Fällen wird die Quantennatur der Berechnung hervorgehoben: Für den Benutzer ist es wichtig, dass die Ergebnisse aus der Quantendomäne des Algorithmusraums stammen und nicht nur aus der brillanten linearen Algebra.
Das hier beschriebene Verfahren ist für die Emulation besser geeignet als für echte Quantenhardware, dies wird sich jedoch bald ändern. Tatsächlich wurde eines der größten Quantengeräte bei IBM auch für die prozedurale Generierung verwendet, wenn auch auf ganz andere Weise.
In der Zwischenzeit können Sie den Quantenunschärfeeffekt selbst ausprobieren. Es ist in Python geschrieben , aber es gibt auch ein Plugin für Unity . Vielleicht sind sie für Sie nützlich.
Link zum vollständigen Artikel: hier .