Hallo Habr! Ich präsentiere Ihnen die Übersetzung des Artikels "Überblick und Vergleich von Quanten-Software-Plattformen auf Gate-Ebene" von Ryan LaRose.
Quantencomputer stehen für die Verwendung in der Cloud-Infrastruktur zur Verfügung. Gleichzeitig kann der jüngste Boom bei Quantensoftwareplattformen für diejenigen, die sich für eine Verwendung entscheiden, überwältigend sein. Dieser Artikel bietet ein aktuelles Bild der sich schnell entwickelnden Landschaft des Quantencomputers, indem vier Softwareplattformen - Forest (pyQuil), QISKit, ProjectQ und Quantum Development Kit - verglichen werden, mit denen Forscher reale und simulierte Quantengeräte verwenden können. Diese Analyse umfasst die Anforderungen und die Installation, die Syntax der Sprache am Beispiel von Programmen, die Unterstützung auf Bibliotheksebene und die Möglichkeiten eines Quantensimulators für jede Plattform. Für Plattformen, die Quantencomputer unterstützen, vergleichen wir Hardware, Quantenassemblersprachen und Quantencompiler. Abschließend werden wir die Funktionen der einzelnen Funktionen betrachten und kurz andere Softwarepakete für das Quantencomputing erwähnen.
Inhalt
I. Einleitung
II. Softwareplattformen
A. pyQuil
B. QISKit
C. ProjectQ
D. Quatum Development Kit
III. Vergleich
A. Bibliotheksunterstützung
B. Quantenhardware
C. Quantencompiler
D. Simulatorleistung
E. Merkmale
IV. Diskussion und Schlussfolgerungen
Referenzliste
Anhang A. Andere Softwareplattformen
Anhang B. Testen der Simulatorleistung
Anhang C. Beispielprogramm: Teleportationsschema
I. Einleitung
Quantenprogrammiersprachen wurden vor mindestens zwei Jahrzehnten in Betracht gezogen [1-3], waren jedoch größtenteils theoretisch und ohne vorhandene Ausrüstung. Quantencomputer sind mittlerweile Realität, und es gibt Quantenprogrammiersprachen, mit denen jeder, der Zugang zum Internet hat, sie nutzen kann. Eine ganze Reihe von Forschern aus Industrie und Wissenschaft haben kleine Quantengeräte entwickelt, die an einem Schaltungsmodell des Quantencomputers arbeiten. Diese Computer sind klein, laut und nicht so leistungsfähig wie moderne klassische Computer. Aber sie entstehen, wachsen stetig und lassen die unvorstellbar große Rechenleistung der Zukunft für die Aufgaben Chemie [4, 5], maschinelles Lernen [6, 7], Optimierung [8], Finanzsektor [9] und mehr [10] ahnen. Diese Geräte sind ein Prüfstand für die Schulung der nächsten Generation von Quantensoftware-Ingenieuren zur Lösung der derzeit bestehenden klassisch komplexen Aufgaben der Computertechnologie. In der Tat wurde Cloud Quantum Computing bereits verwendet, um die Deuteronbindungsenergie [11] und Testroutinen in Algorithmen für maschinelles Lernen [12, 13] zu berechnen.
In jüngster Zeit hat die Quantencomputersoftware für eine Vielzahl klassischer Computersprachen rasant zugenommen. Eine Liste von Open-Source-Projekten mit mehr als fünfzig ist in [14] verfügbar, und eine Liste von Quantencomputersimulationen ist in [15] verfügbar. Diese große Anzahl von Programmen, die das Wachstum auf diesem Gebiet positiv widerspiegeln, erschwert es Studenten und Forschern, zu entscheiden, welches Softwarepaket verwendet werden soll, um nicht in der Dokumentation verloren zu gehen oder sich über das erforderliche Anfangswissen schockieren zu lassen.
Dieser Artikel soll einen kurzen Überblick und einen Vergleich der wichtigsten Softwareplattformen für das allgemeine Quantencomputing auf Gate-Ebene bieten. Vier wurden aus einer langen Liste ausgewählt: drei, die dem Benutzer die Möglichkeit geben, sich mit realen Quantengeräten zu verbinden - pyQuil von Rigetti [16], QISKit von IBM [17] und ProjectQ von der ETH Zürich [18, 19] und eines mit ähnlicher Funktionalität, aber ohne die derzeitige Möglichkeit, eine Verbindung zu einem Quantencomputer herzustellen - Quantum Development Kit von Microsoft [20]. Für die Wahl dieser Plattformen ist die Möglichkeit geworden, eine Verbindung zu einem echten Quantengerät herzustellen. Aus diesem Grund und der Kürze halber werden einige seriöse Programme bewusst weggelassen. Einige von ihnen sind in Anhang A aufgeführt.
Derzeit besteht das Hauptziel darin, ein Landschaftsbild des Quantencomputers zu präsentieren, das durch diese vier Plattformen verursacht wird. In Abschnitt II werden wir uns nacheinander mit jeder Plattform befassen und Anforderungen und Installation, Dokumentation und Tutorials, Sprachsyntax und Quantenausrüstung erörtern. Abschnitt III bietet einen detaillierten Vergleich der Plattformen. Es umfasst: Unterstützung von Quantenalgorithmen in III A auf Bibliotheksebene, Unterstützung von Quantenhardware in III B , Compiler von Quantenschaltungen in III C und Quantencomputersimulatoren III D. In Abschnitt IV werden einige subjektive Kommentare zu jeder Plattform erörtert. Anhang A enthält Informationen zu anderen Quantensoftware, Anhang B enthält detaillierte Informationen zum Testen von Quantenschaltungssimulatoren, und Anhang C enthält den Code für Quantenteleportationsschemata in jeder der vier Sprachen zum direkten Vergleich.
Die Abbildung 1 zeigt verschiedene Quantencomputer und Software, die zum Verbinden mit Geräten verwendet werden. Derzeit können Sie auf vier Softwareplattformen eine Verbindung zu vier verschiedenen Quantencomputern herstellen - einer von Rigetti, einem 8-Qubit-Quantencomputer, den Sie mit pyQuil verbinden können [41]; und drei von IBM mit den höchsten verfügbaren 16 Qubits, die mit QISKit oder ProjectQ verbunden werden können. Darüber hinaus bietet IBM einen vierten 20-Qubit-Quantencomputer an. Dieses Gerät steht jedoch nur Mitgliedern des IBM Q Network zur Verfügung [42]: einer Gruppe von Unternehmen, Universitäten und nationalen Labors, die an Quantencomputern interessiert sind und in diese investieren. Abbildung 1 zeigt auch die Quantencomputer von Unternehmen wie Google, IBM und Intel, die angekündigt wurden, aber derzeit für reguläre Benutzer nicht verfügbar sind.

Abbildung 1. Ein schematisches Diagramm, das zeigt, wie ein Personal Computer auf Gate-Ebene mit dem verwendeten Quantencomputer verbunden wird. Ausgehend von einem PC (unten in der Mitte) zeigen die grünen Knoten Software an, die auf dem PC des Benutzers installiert werden kann. Graue Knoten zeigen an, dass Simulatoren lokal ausgeführt werden (dh auf dem Computer eines Benutzers). Die gestrichelten Linien zeigen die API / Cloud-Verbindungen zu Unternehmensressourcen in gelben „Clouds“. Die Quantensimulatoren und die verwendeten Quantencomputer, die von diesen Cloud-Ressourcen bereitgestellt werden, sind in Blau bzw. Gold dargestellt. Rote Rahmen zeigen die Anforderungen für die ausgewählte Methode. Um beispielsweise eine Verbindung zu Rigetti Forest herzustellen und den Agave 8-Qubit-Quantencomputer zu verwenden, müssen Sie pyQuil (verfügbar unter MacOS, Windows und Linux) herunterladen und installieren, sich auf der Rigetti-Website registrieren, um einen API-Schlüssel zu erhalten, und dann online Zugriff auf das Gerät anfordern Form. Anmerkungen: (i) Die virtuelle Quantenmaschine Rigetti erfordert eine Erhöhung der Rechte für mehr als 30 Qubits. (Ii) Lokale Simulatoren hängen vom Computer des Benutzers ab, daher sind die angegebenen Zahlen ungefähr und (iii) die Quantencomputer, die angekündigt wurden, aber welche Derzeit für reguläre Benutzer nicht verfügbar.Die Technologie der Quantenausrüstung ändert sich rasant. Es ist sehr wahrscheinlich, dass bis Ende des Jahres neue Computer erscheinen, und in zwei oder drei Jahren ist diese Liste möglicherweise vollständig veraltet. Was jedoch bleibt, ist die Software, die verwendet wird, um eine Verbindung zu dieser Technologie herzustellen. Es wäre sehr einfach, neue Quantencomputer zu verwenden und nur wenige Codezeilen zu ändern, ohne die Syntax zu ändern, die zum Erzeugen oder Ausführen der Quantenschaltung verwendet wird. In QISKit müssen Sie beispielsweise nur den Namen des Backend-Geräts ändern, wenn Sie das Schema ausführen:
execute(quantum_circuit, backend="name", ...)
Listing 1. Die Zeichenfolge „name“ gibt ein Backend-Gerät an, mit dem Quantenprogramme mit QISKit ausgeführt werden können. Wenn zukünftige Quantencomputer veröffentlicht werden, ist das Ausführen auf neuer Hardware so einfach wie das Ändern des Namens.
Obwohl sich die Software mit der Veröffentlichung der neuen Version [43] ebenfalls ändert, handelt es sich zum größten Teil um relativ geringfügige syntaktische Änderungen, die die Funktionalität der Software nicht wesentlich verändern.
In diesem Abschnitt werden wir uns die vier Plattformen ansehen und Anforderungen und Installation, Dokumentation und Handbücher, Sprachsyntax, Quantensprache, Quantenausrüstung und Simulatorfunktionen erörtern. Diese Rezension soll die Sprache nicht vollständig vermitteln, vermittelt dem Leser jedoch ein Verständnis für jede Plattform, bevor er in eine (oder mehrere) der ausgewählten Plattformen eintaucht. Die aktuelle Analyse enthält ausreichend Informationen, um Algorithmen auf Quantencomputern auszuführen. Trotzdem wird der Leser, wenn er eine bestimmte Plattform ausgewählt hat, zur vollständigen Information an eine spezielle Dokumentation gesendet. Für jedes Softwarepaket wurden Links zu Dokumentationen und Lernquellen hinzugefügt. Es wird auch angenommen, dass es Grundkenntnisse des Quantencomputers gibt, für die es inzwischen viele gute Referenzen gibt [21, 22].
Alle in diesem Dokument enthaltenen Codefragmente und Programme wurden getestet und auf einem Dell XPS 13 Developer Edition-Laptop unter Linux Ubuntu 16.04 LTS ausgeführt, dessen vollständige Spezifikationen in [23] aufgeführt sind. Obwohl alle Softwarepakete in allen drei Hauptbetriebssystemen funktionieren, ist es für den Autor viel einfacher, die Software auf der Plattform zu installieren und zu verwenden, auf der sie entwickelt wurde. Unter Linux Ubuntu gab es bei der Installation dieser Softwarepakete keine Schwierigkeiten oder ungewöhnlichen Fehlermeldungen.
| pyQuil | QISKit | Projectq | QDK |
---|
Institution | Rigetti | Ibm | Et zurich | Microsoft |
Erste Veröffentlichung | v0.0.2 am 15. Januar 2017 | 0.1 am 7. März 2017 | v0.1.0 am 3. Januar 2017 | 0.1.1712.901 am 4. Januar 2018 (Vorabversion) |
Aktuelle Version | v1.9.0 am 6. Juni 2018 | 0,5,4 am 11. Juni 2018 | v0.3.6 am 6. Februar 2018 | 0.2.1802.2202 am 26. Februar 2018 (Vorabversion) |
Open Source | ✅ | ✅ | ✅ | ✅ |
Lizenz | Apache 2.0 | Apache 2.0 | Apache 2.0 | MIT |
Homepage | Zuhause | Zuhause | Zuhause | Zuhause |
Github | Git | Git | Git | Git |
Dokumentation | Docs , Tutorials ( Grove ) | Dokumente , Lernhefte , Hardware | Dokumente , Beispielprogramme , Papier | Docs |
Betriebssystem | Mac, Windows, Linux | Mac, Windows, Linux | Mac, Windows, Linux | Mac, Windows, Linux |
Anforderungen | Python 3, Anaconda (empfohlen) | Python 3.5+, Jupyter Notebooks (für Tutorials), Anaconda 3 (empfohlen) | Python 2 oder 3 | Visual Studio Code (dringend empfohlen) |
Klassische Sprache | Python | Python | Python | Q # |
Quantensprache | Quil | Openqasm | keine / hybrid | Q # |
Quantenhardware | 8 Qubits | IBMQX2 (5 Qubits), IBMQX4 (5 Qubits), IBMQX5 (16 Qubits), QS1_1 (20 Qubits) | Keine dedizierte Hardware, kann eine Verbindung zu IBM Backends herstellen | keine |
Simulator | ∼20 Qubits lokal, 26 Qubits mit den meisten API-Schlüsseln für QVM, 30+ mit privatem Zugriff | 25 Qubits lokal, 30 durch Cloud | 28 Qubits vor Ort | 30 Qubits lokal, 40 über die Azure-Cloud |
Eigenschaften | Generieren Sie Quil-Code, Beispielalgorithmen in Grove, topologiespezifischen Compiler, Rauschfunktionen im Simulator, Community-Slack-Kanal | Generieren Sie QASM-Code, topologiespezifischen Compiler, Community-Slack-Kanal, Schaltungsschublade und ACQUA-Bibliothek | Zeichnen Sie Schaltkreise, stellen Sie eine Verbindung zu IBM Backends und mehreren Bibliotheks-Plug-Ins her | Eingebaute Algorithmen, Beispielalgorithmen |
pyQuilA. pyQuil
pyQuil ist eine Open-Source-Python-Bibliothek, die von Rigetti entwickelt wurde, um Quantenprogramme zu erstellen, zu analysieren und auszuführen. Es basiert auf der Quil-Sprache - einer offenen Sprache von Quantenanweisungen (oder einfach einer Quantensprache ), die speziell für die vielversprechendsten Quantencomputer entwickelt wurde und auf einem gemeinsamen klassischen / Quantenspeichermodell basiert [24] (dies bedeutet, dass sowohl Qubits als auch klassische Bits). pyQuil ist eine der in Forest entwickelten Kernbibliotheken, die die Schlüsselplattform für alle Rigetti-Software darstellt. Forest enthält auch Grove und Reference QVM, die später beschrieben werden.
a. Anforderungen und Installation
Für die Installation und Verwendung von pyQuil sind Python 2- oder 3-Versionen erforderlich, obwohl Python 3 dringend empfohlen wird, da zukünftige Entwicklungsfunktionen nur Python 3 unterstützen. Darüber hinaus wird die Python Anaconda-Distribution für verschiedene Python-Modulabhängigkeiten empfohlen, obwohl dies nicht erforderlich ist.
Der einfachste Weg, pyQuil zu installieren, ist die Verwendung des Python-Paketmanager-Befehls. Geben Sie an der Linux Ubuntu-Eingabeaufforderung ein
pip install pyquil
für eine erfolgreiche Softwareinstallation. Wenn Anaconda installiert ist, kann pyQuil alternativ durch Eingabe installiert werden
conda install −c rigetti pyquil
in der Kommandozeile. Eine andere Alternative besteht darin, den Quellcode aus dem Git-Repository herunterzuladen und die Software zu installieren. Geben Sie dazu folgende Befehle ein:
git clone https://github.com/rigetticomputing/pyquil cd pyquil pip install −e
Diese letzte Methode wird allen Benutzern empfohlen, die zu pyQuil beitragen können. Weitere Informationen finden Sie im GitHub-Einzahlungshandbuch.
b. Dokumentation und Tutorials
pyQuil verfügt über eine hervorragende Dokumentation im Internet mit einer Einführung in Quantencomputer, Installationsanweisungen, Basisprogrammen und Gate-Operationen, einem Simulator, der als Quantenvirtuelle Maschine (QVM) bezeichnet wird, einem realen Quantencomputer und einer Quil-Sprache mit einem Compiler. Wenn Sie den pyQuil-Quellcode von GitHub herunterladen, erhalten Sie auch einen Ordner mit Beispielen in Jupyter-Notizbüchern, regulären Python-Beispielen und einem Programm $ inline $ \ textef {run_quil.py} $ inline $ , die in Quil geschriebene Textdokumente mit einer virtuellen Quantenmaschine ausführen können. Erwähnen Sie abschließend Grove , eine Reihe von Quantenalgorithmen, die mit pyQuil und der Rigetti Forest-Umgebung erstellt wurden.
c. Syntax
Die pyQuil-Syntax ist sehr einfach und praktisch. Das Hauptelement zum Aufzeichnen von Quantenschaltungen ist das Programm und kann aus importiert werden textefpyquil.quil . Gate-Operationen finden Sie in textefpyquil.gates . Modul textefapi ermöglicht es Ihnen, Quantenschaltungen in einer virtuellen Maschine auszuführen. Eine der schönen Eigenschaften von pyQuil ist, dass Qubit-Register und klassische Register nicht a priori definiert werden müssen und dynamisch im Speicher zugeordnet werden können. Qubits im Qubit-Register werden durch Indizes (0, 1, 2, ...) und ähnlich für Bits im klassischen Register bezeichnet. Somit kann die Zufallsgeneratorschaltung wie folgt geschrieben werden:
Listing 2. PyQuil-Code für einen Zufallszahlengenerator.
Die ersten drei Zeilen importieren das Minimum, das erforderlich ist, um ein Quantenschema / -programm zu deklarieren (Zeile 2), Gate-Operationen an Qubits durchzuführen (Zeile 3) [44] und das Schema auszuführen (Zeile 4). In Zeile 6 wird ein Quantenprogramm erstellt, und in Zeile 7-8 wird eine Liste von Anweisungen an dieses gesendet: Zuerst auf das Hadamard-Gate einwirken H über dem Qubit bei Index 0 messen wir dasselbe Qubit in ein klassisches Bit unter Index 0. Zeile 10 stellt eine Verbindung mit QVM her, und bei 11 wird das Ergebnis unserer Schaltung gestartet und angezeigt. Dieses Programm druckt die Standardausgabe von pyQuil als Liste von Ganzzahllisten: in unserem Fall - textef[[[0]] oder textef[[[1]] . Im Allgemeinen entspricht die Anzahl der Elemente in einer externen Liste der Anzahl der durchgeführten Tests. Ganzzahlen in internen Listen sind die endgültigen Dimensionen im klassischen Register. Da wir nur einen Test durchgeführt haben (dies ist als Argument in angegeben textefapi.QVMConnection.run (standardmäßig auf Eins eingestellt), erhalten wir nur eine interne Liste. Da wir im klassischen Register nur ein Bit hatten, erhalten wir nur eine ganze Zahl.
d. Quantensprache
Quil ist eine Sprache der Quantenbefehle oder einfach eine Quantensprache, die Befehle an einen Quantencomputer überträgt. Dies ähnelt dem Assembler auf klassischen Computern. Der Kern der Quil-Syntax ist textefGATE−Index wo textefGATE ist ein Quantentor, das für indizierte Qubits gilt textefindex (0, 1, 2, ...). pyQuil hat eine Funktion zum Generieren von Quil-Code aus einem bestimmten Programm. Zum Beispiel könnten wir in dem oben erwähnten Quantenzufallszahlengenerator die Zeile hinzufügen:
print(qprog)
am Ende, um den Quil-Diagrammcode zu erhalten, der unten gezeigt wird:
H 0 MEASURE 0 [0]
Listing 3. Quil-Code für einen Zufallszahlengenerator.
Wenn jemand anfängt, Quil zu verstehen, schreiben Sie möglicherweise Quantenschaltungen in einen Texteditor in Quil und führen Sie die Schaltung dann mit dem Programm auf QVM aus $ inline $ \ textef {run_quil.py} $ inline $ . Sie können auch ändern $ inline $ \ textef {run_quil.py} $ inline $ um die Schaltung auf QPU zu betreiben. Beachten Sie, dass der pyQuil-Compiler (in der Dokumentation auch als Quil-Compiler bezeichnet) die angegebene Schaltung in Quil-Code konvertiert, den ein echter Quantencomputer verstehen kann. Wir werden dies in Abschnitt III C genauer diskutieren.
f. Quantenhardware
Rigetti verfügt über einen Quantenprozessor, der von denjenigen verwendet werden kann, die Zugriff anfordern. Um den Zugriff anzufordern, müssen Sie die Rigetti- Website besuchen und den vollständigen Namen, die E-Mail-Adresse, den Namen der Organisation sowie eine Beschreibung des Grunds für den Zugriff auf die QPU angeben. Sobald dies erledigt ist, wird ein Unternehmensvertreter Sie per E-Mail kontaktieren, um einen Zeitpunkt festzulegen, zu dem der Benutzer Zugriff auf die QPU erhält. Der Vorteil dieses Planungsprozesses im Gegensatz zum QISKit-Warteschlangensystem, das später erläutert wird, besteht darin, dass viele Aufgaben in einem verteilten Zeitintervall mit deterministischen Ausführungszeiten ausgeführt werden können, was für Variations- und Hybridalgorithmen von entscheidender Bedeutung ist. Diese Arten von Algorithmen senden Daten zwischen klassischen und Quantencomputern hin und her - die Notwendigkeit, in der Schlange zu stehen, verlängert diesen Prozess erheblich. Der Nachteil (möglicherweise) ist, dass Aufgaben zu keinem Zeitpunkt ausgeführt werden können, wenn die QPU verfügbar ist und eine bestimmte Zeit angegeben und vereinbart werden muss.
Nach den Erfahrungen des Autors sind die Mitarbeiter bereit zu helfen, und der Prozess ist normalerweise erfolgreich. Das eigentliche Gerät, dessen Topologie in Abbildung 2 dargestellt ist, besteht aus 8 Qubits mit der Konnektivität zum nächsten Nachbarn. Wir werden uns diesen Computer in Abschnitt III B genauer ansehen.
g. Simulator
Quantum Virtual Machine (QVM) ist das Hauptdienstprogramm zur Ausführung von Quantenschaltungen. Dieses Programm, das für die Ausführung auf einem klassischen Prozessor geschrieben wurde, empfängt Quil-Code und simuliert die Entwicklung eines Prozesses auf einem realen Quantencomputer. Um eine Verbindung zu QVM herzustellen, müssen Sie unter https://www.rigetti.com/forest kostenlos einen API-Schlüssel mit einem Namen und einer E-Mail-Adresse registrieren. Anschließend erhalten Sie eine E-Mail mit dem API-Schlüssel und der Benutzer-ID, die beim Start konfiguriert werden müssen:
pyquil−config−setup
in der Kommandozeile (natürlich nach der Installation von pyQuil). Anschließend werden Sie aufgefordert, die Schlüssel aus der E-Mail einzugeben.
Gemäß der Dokumentation bieten die meisten API-Schlüssel Zugriff auf QVMs mit bis zu 30 Qubits, und Sie können den Zugriff auf weitere Qubits anfordern. Der API-Schlüssel des Autors ermöglicht den Zugriff auf 26 Qubits (es wurden keine Aktualisierungen angefordert).
Darüber hinaus enthält die Gesamtstrukturbibliothek einen in Python und Open Source geschriebenen lokalen Simulator, der als Referenz-QVM bezeichnet wird . Es ist nicht so produktiv wie QVM, aber Benutzer können Schaltkreise mit einer Anzahl von Qubits ausführen, die durch die Speichermenge auf lokalen Computern begrenzt ist. In der Regel können Schaltkreise mit weniger als 20 Qubits mit einer Vielzahl von Geräten betrieben werden. Referenz-QVM muss separat installiert werden, was möglich ist textefpip ::
pip install referenceqvm
Um Referenz-QVM anstelle von QVM zu verwenden, importieren Sie einfach textefapi von textefreferenceqvm anstelle von pyQuil:
import referenceapi.api as api

Abbildung 2. Schematische Darstellung der Topologie (Konnektivität) einer 8-Qubit-Agave-QPU Rigetti. Qubits sind mit ganzen Zahlen 0, 1, ..., 7 markiert, und die Linien, die die Qubits verbinden, zeigen an, dass zwei Qubit-Operationen zwischen diesen Qubits ausgeführt werden können. Zum Beispiel können wir Controlled- ausführen. Z. über Qubits 0 und 1, aber nicht zwischen 0 und 2. Um letzteres zu erreichen, konvertiert der Quil-Compiler Controlled- Z. (0, 2) in der Operation, die die QPU ausführen kann. Dieses Diagramm stammt aus der pyQuil-Dokumentation.QISKitB. QISKit
Das Quantum Information Software Kit (QISKit) ist ein Open Source Software Development Kit (SDK) für die Arbeit mit der Quantensprache OpenQASM und Quantenprozessoren in der IBM Q-Plattform. Es ist für Python, JavaScript und Swift verfügbar, wird hier jedoch nur erläutert Python-Version.
a. Anforderungen und Installation
QISKit ist unter MacOS, Windows und Linux verfügbar. Für die Installation von QISKit ist Python 3.5+ erforderlich. Weitere nützliche, aber nicht erforderliche Komponenten sind Jupyter Notebooks für Tutorials und die Python Anaconda 3-Distribution, die alle erforderlichen Abhängigkeiten enthält.
Der einfachste Weg, QISKit zu installieren, ist die Verwendung des Pip-Paket-Managers für Python. Geben Sie an der Eingabeaufforderung zur Installation der Software Folgendes ein:
pip install qiskit
Bitte beachten Sie das textefpip verarbeitet automatisch alle Abhängigkeiten und installiert immer die neueste Version. Benutzer, die möglicherweise an einem Beitrag zu QISKit interessiert sind, können den Quellcode installieren, indem sie an einer Eingabeaufforderung Folgendes eingeben. Es wird davon ausgegangen, dass git installiert ist:
git clone https://github.com/QISKit/qiskit−core cd qiskit−core python −m pip install −e
Informationen zu Einzahlungen finden Sie in der Online-Dokumentation des Einzahlungsleitfadens auf GitHub.
b. Dokumentations- und Schulungsmaterialien
Die QISKit-Dokumentation finden Sie im Internet unter https://qiskit.org/documentation/ . Es enthält Installations- und Konfigurationsanweisungen, Beispielprogramme und die Verbindung zu realen Quantengeräten, die Projektorganisation, eine QISKit-Überprüfung und Entwicklerdokumentation. Grundlegende Informationen zum Quantencomputing finden Sie auch für Benutzer, die neu auf dem Gebiet sind. Eine sehr gute Ressource ist ein Link zum SDK, über das Benutzer Informationen zur Quellcodedokumentation finden.
QISKit enthält auch eine große Anzahl von Tutorials in einem separaten GitHub-Repository (ähnlich wie pyQuil und Grove). Dazu gehören verschränkte Zustände; Standardalgorithmen wie Deutsch Jozh, Grovers Algorithmus, Phasenschätzung und Quanten-Fourier-Transformation; auch komplexere Algorithmen, wie das Lösen eines Quantenvariationseigenwertproblems und das Anwenden auf Fermion-Hamiltonianer; und sogar einige lustige Spiele, wie die Quanten "Seeschlacht". Darüber hinaus enthält die ACQUA-Bibliothek (Algorithms and Circuits for QUantum Applications) multidisziplinäre Algorithmen für Chemie und künstliche Intelligenz mit zahlreichen Beispielen.
Es gibt auch eine sehr detaillierte Dokumentation für jedes der vier Quanten-Backends, die Informationen zu Konnektivität, Kohärenzzeit und Gate-Nutzungszeit enthält. Erwähnen Sie abschließend die IBM Q Experience- Website und die Benutzerhandbücher. Die Website enthält eine grafische Oberfläche für eine Quantenschaltung, in der Benutzer Gates auf eine Schaltung ziehen können, was zum Erkunden von Quantenschaltungen nützlich ist. Die Benutzerhandbücher enthalten weitere Anweisungen zum Quantencomputing und zur QISKit-Sprache.
c. Syntax
Die QISKit-Syntax kann im folgenden Beispielprogramm angezeigt werden. Im Gegensatz zu pyQuil müssen Sie hier explizit zwischen Quanten- und klassischen Registern unterscheiden. Unten finden Sie ein Programm für das Zufallszahlenschema von QISKit:
Listing 4. QISKit-Code für einen Zufallszahlengenerator.
Zeile 2 importiert Werkzeuge zum Erstellen von Quanten- und klassischen Registern, eine Quantenschaltung und Funktionen zum Ausführen dieser Schaltung. Dann erstellen wir ein Quantenregister mit einem Qubit (Zeile 4), ein klassisches Register mit einem Bit (Zeile 5) und eine Quantenschaltung mit diesen beiden Registern (Zeile 6). Nachdem die Schaltung erstellt wurde, geben wir Anweisungen: In Zeile 8 wenden wir das Hadamard-Gatter auf das Null-Qubit in unserem Quantenregister an (das das einzige Qubit im Quantenregister ist). In Zeile 9 messen wir dieses Qubit in ein klassisches Bit, das in unserem klassischen Register (das das einzige im klassischen Register ist) mit Null indiziert ist [45]. Nachdem die Quantenschaltung aufgebaut ist, führen Sie sie in Zeile 11 aus und drucken Sie das Ergebnis in Zeile 12. Mit Hilfe der Ausgabe $ inline $ \ textef {result.get_counts ()} $ inline $ Wir erhalten die "Berechnungen" der Schaltung, dh das Wörterbuch der Ausgabedaten und wie oft jedes Ergebnis empfangen wurde. In unserem Fall sind die einzigen möglichen Ausgaben 0 oder 1, und ein Beispiel für die Ausgabe des obigen Programms ist textef′0′:532,′1′:492 Dies zeigt an, dass wir 532 Instanzen von 0 und 492 Instanzen von 1 erhalten haben. (Standardmäßig wird die Anzahl der Zyklen zum Starten der aufgerufenen Schaltung angegeben textefSchüsse in QISKit ist 1024.)
d. Quantensprache
OpenQASM (die offene Quantenassemblersprache [25], die wir einfach als QASM bezeichnen können) ist eine Quantensprache, die Anweisungen für reale Quantengeräte enthält, die Assembler auf klassischen Computern ähneln. Die Basis der QASM-Syntax ist textefgatequbit wo textefgate legt die Operation des Quantengatters fest und TextsfQubit - Qubit. QISKit hat eine Funktion zum Generieren von QASM-Code aus einem Schema. Im obigen Zufallszahlenschema könnten wir eine Zeile hinzufügen.
print(qcircuit.qasm())
am Ende, um den QASM-Code für die unten gezeigte Schaltung zu erhalten:
OPENQASM 2.0; include ”qelib1.inc”; qreg q0[1]; creg c0[1]; h q0[0]; measure q0[0] −> c0[0];
Listing 5. OpenQASM-Code für einen Zufallszahlengenerator.
Die ersten beiden Zeilen sind in jeder QASM-Datei enthalten. Zeile 3 (4) erzeugt ein Quantenregister (klassisch), und die Zeilen 5 und 6 geben Anweisungen für die Schaltung. In OpenQASM können Sie kleine Schaltungen wie diese schreiben. Bei größeren Schaltungen ist es jedoch besser, Tools in QISKit für die kostenlose und effiziente Programmierung von Quantencomputern zu verwenden.
e. Quantenhardware
Es gibt eine große Menge an Dokumentation für Quanten-Backends, die von QISKit unterstützt werden. Diese Geräte umfassen IBMQX2 (5 Qubits), IBMQX4 (5 Qubits), IBMQX5 (16 Qubits) und QS1_1 (20 Qubits, nur für Mitglieder des IBM Q-Netzwerks verfügbar). Dokumentation für alle ist auf GitHub verfügbar. Wir werden uns IBMQX5 in Abschnitt III B genauer ansehen, dessen Topologie in Abbildung 3 dargestellt ist.
f. Simulator
IBM , . , 12 , , 25 . , III D.

Abbildung 3. Schematische Topologie von IBMQX5 aus [30]. Richtungspfeile zeigen Verwicklungsmöglichkeiten an. Zum Beispiel könnten wir eine Operation ausführen (in QASM) cx Q1, Q2 aber keine Operation cx Q2, Q1 . Um letzteres zu tun, übersetzt der Compiler den Befehl in äquivalente Gates, die in der Topologie und im Satz von Gates ausgeführt werden.ProjectqC. ProjectQ
ProjectQ — IBM, . ProjectQ Thomas Häner Damien S. Steiger Matthias Troyer ETH Zurich, .
a.
ProjectQ Python (2.7 3.4+). . pip ::
python −m pip install −−user projectq
( ). :
git clone https://github.com/ProjectQ−Framework/ProjectQ cd projectq python −m pip install −−user
, , . ProjectQ GitHub.
b.
ProjectQ . , . - ( , ). — / , . [18, 19] , , - .
c.
ProjectQ , . ProjectQ ( ProjectQ), — / . , :
6. ProjectQ .
2 , 3 . 5 (engine) MainEngine , 6 . 8 9 : 0, . « » . — operation | qubit , H|0> , . , /. pyQuil QISKit, ProjectQ . , qbits[0] 9, , int , 12.
d.
, ProjectQ . ProjectQ IBM, OpenQASM: IBM.
e.
ProjectQ . , IBM ProjectQ.
f.
ProjectQ , C++, , , Python. , ProjectQ ClassicalSimulator (stabilizer circuits), . . , , , CNOT [26]. , , , , . , C++ Simulator .
C++ Simulator ProjectQ . [23]() (, ), 26 5 , 28 20 — . [III D]() 6.
ProjectQ , , . , pyQuil ProjectQ [27], Microsoft QDK Thomas Häner Damian Steiger ETH Zurich [28], . ( , , QDK ProjectQ C++, .)
QuantenentwicklungskitD. Quantum Development Kit
Rigetti IBM, Microsoft . [29] , , , . , Microsoft , Quantum Development Kit (QDK), , . , QDK «-» Q#, Visual Studio Visual Studio Code 30 . 2018 , -, MacOS, Windows Linux.
a.
, Visual Studio Code , . ( VS Code, Visual Studio . - - , , VS Code.) , QDK , Bash:
dotnet new −i "Microsoft.Quantum.ProjectTemplates::0.2 −*"
QDK GitHub ( , QDK), :
git clone https://github.com/Microsoft/Quantum.git cd Quantum code
b.
— Q#, - , , , Q# . ; , .
c.
Q# . C#: , Python, , C#. , :
// random number generator circuit in QDK operation random (count: Int, initial: Result) : (Int, Int) { body { mutable numOnes = 0; using ( qubits = Qubit[1]) { for (test in 1..count) { Set(initial, qubits[0]); H(qubits[0]); let res = M(qubits[0]); // count the number of ones if (res == One) { set numOnes = numOnes + 1; } } Set(Zero, qubits[0]); } // return statistics return (count − numOnes, numOnes); } }
7. Q# .
, , /, , . . , , , . — .qs Q#, Driver.cs .qs , .csproj , . , 65 . -, , «Quickstart» .
, QDK , . , — (a+b) , . QDK , , ( C , , , , .
d. /
, QDK . Q# / .
e.
QDK , 30 . , QDK ProjectQ, , ProjectQ. ( III D.) Azure , 40 . QDK , .
, QDK (trace simulator), , , , . , . , . , , - , . . . - QDK.
III. Vergleich
Später in diesem Abschnitt, wenn die Grundlagen jeder Plattform berücksichtigt wurden, werden wir alle zusätzlichen Merkmale vergleichen, einschließlich der Unterstützung auf Bibliotheks-, Quantenausrüstungs- und Quantencompilerebene. Wir werden auch einige der bemerkenswerten und nützlichen Funktionen jeder Plattform auflisten.
A. Bibliotheksunterstützung
« » ( ) (, language.DoQuantumFourierTransform (...) ) . , , 4.
, , , . , , , .
, pyQuil, QISKit QDK . ProjectQ FermiLib, FermiLib, OpenFermion, . , , , ProjectQ. Microsoft QDK , , . , QDK , , QDK, . QISKit .
B.
pyQuil QISKit, . , — — « ». ( ), , / . , , --. IBMQX5 Agave, . - .
a. IBMQX5
IBMQX5 — 16- ( 3). (T2) 31±5 0- , — 89±17 15- . 80 10 . CNOT - , 170- cx q[6], q[7] 348 cx q[3], q[14] . 99,5% ( = 1 — ). - 94,9% . 12,4% 6%. [30].
, , IBM , , . Agave Rigetti, -, , . , .
b. Agave
Agave 8 (transmon) , 2. (T2) 9,2 1- , 15,52 2- . Controlled- Z 118 195 . 96,2% ( , = 1 — ) 93,2%. - 87% - . . - pyQuil.
Algorithm | pyQuil | QISKit | ProjectQ | QDK |
---|
Random Number Generator | (T) | (T) | (T) | (T) |
Teleportation | (T) | (T) | (T) | (T) |
Swap Test | (T) | | | |
Deutsch-Jozsa | (T) | (T) | | (T) |
Grover's Algorithm | (T) | (T) | (T) | (B) |
Quantum Fourier Transform | (T) | (T) | (B) | (B) |
Shor's Algorithm | | | (T) | (D) |
Bernstein Vazirani | (T) | (T) | | (T) |
Phase Estimation | (T) | (T) | | (B) |
Optimization/QAOA | (T) | (T) | | |
Simon's Algorithm | (T) | (T) | | |
Variational Quantum Eigensolver | (T) | (T) | (P) | |
Amplitude Amplification | (T) | | | (B) |
Quantum Walk | | (T) | | |
Ising Solver | (T) | | | (T) |
Quantum Gradient Descent | (T) | | | |
Five Qubit Code | | | | (B) |
Repetition Code | | (T) | | |
Steane Code | | | | (B) |
Draper Adder | | | (T) | (D) |
Beauregard Adder | | | (T) | (D) |
Arithmetic | | | (B) | (D) |
Fermion Transforms | (T) | (T) | (P) | |
Trotter Simulation | | | | (D) |
Electronic Structure (FCI, MP2, HF, etc.) | | | (P) | |
Process Tomography | (T) | (T) | | (D) |
Meyer-Penny Game | (D) | | | |
Vaidman Detection Test | | (T) | | |
Battleships Game | | (T) | | |
Emoji Game | | (T) | | |
Counterfeit Coin Game | | (T) | | |
4. , . « » (T), (D), (B) (P).C.
, , , . / . — , , . QISKit Rigetti, .
IBMQX5 u1 , u2 , u3 und CNOT wo

, u1 Rz(θ) , u2 und u3 — Rx(π/2)

, .

wo X und Z — . IBM Rz(θ) « », , . , z , z () , .
IBMQX5 3. , CNOT , CNOT

, CNOT QISKit, , , QISKit CNOT, . QISKit , , .
8- Agave Rigetti Rx(kπ/2) k∈Z , Rz(θ) Controlled- Z . , , Controlled- Z ( CZ )

Agave 2. QISKit, pyQuil ( ).
, , 5. , pyQuil, Agave, QISKit — IBMQX5. , QISKit (. . ), pyQuil. , - . , IBMQX5 , , pyQuil, . , ( ) - - (, , [32]), . [46], .

5. ( ), pyQuil 8- Agave Rigetti ( ) , QISKit IBM IBMQX5 16- . , Agave, 0, 1 2 ( 2), , IBMQX5, 0, 1 2. , H , Rx Rz . CNOT IBMQX5, Agave — pyQuil CNOT Controlled- Z . ProjectQ.D.
, . , , (. . ) . , , , , , . . QISKit , C++, ProjectQ , B . QVM pyQuil.
a. pyQuil
Rigetti, Quantum Virtual Machine (QVM), , . , API. API 30- , . 16- 10 2,61 . 23 10 56,33 , , QVM API. - - , QVM , QVM , ProjectQ QISKit.
QVM . , . , , . Noise and Quantum Computation pyQuil.
b. QISKit
QISKit , : , , , und . . () . , / . [33], [34-36] . ClassicalSimulator ProjectQ, (stabilizer circuits), .
, 10 10 23,55 . — 239,97 , 12 1000 ( 17 ). , n 2n×2n .
C . 25 . 20 . 6 7.
s ProjectQ
ProjectQ C++, . , , 28 , (569,71 ) 20-. [18]. 6 7.

6. QISKit () ProjectQ C++ (), ( ) ( ). , ( ). **B**.
7. , ProjectQ C++ QISKit, . , √X , CNOT, . , . ProjectQ.E.
pyQuil Grove, GitHub, pyQuil. Rigetti , Slack Rigetti Forest. Quil ( ). , pyQuil OpenFermion [37], Python , .
QISKit JavaScript Swift. Python - . Grove, QISKit . , ACQUA QISKit . . IBM , . 3 , QISKit, 80000 , 60 , IBM [31]. QISKit Slack , , . , QISKit .
, ProjectQ . , TikZ TEX . ProjectQ. ProjectQ , . ProjectQ , IBM. , ProjectQ , OpenFermion, .
QDK Windows , 2018 macOS Linux. QDK, . , Q# , , . QDK , , , , , . .
IV.
, , , (-) (-) . — , . / .
, , :
- , , QISKit ( ProjectQ) pyQuil — .
- , , QISKit, pyQuil QDK — .
- , , Python — .
- , C/C#, QDK — .
- , , , ProjectQ — .
- , - , pyQuil — .
- , , Strawberry Fields .
, , . . , , .
- Bernhard Ömer, A procedural formalism for quantum computing , Master's thesis, Department of Theoretical Physics, Technical University of Vienna, 1998.
- S. Bettelli, L. Serafini, T. Calarco, Toward an architecture for quantum programming , Eur. Phys. J. D, Vol. 25, No. 2, pp. 181-200 (2003).
- Peter Selinger (2004), A brief survey of quantum programming languages , in: Kameyama Y., Stuckey PJ (eds) Functional and Logic Programming. FLOPS 2004. Lecture Notes in Computer Science, vol 2998. Springer, Berlin, Heidelberg.
- Benjamin P. Lanyon, James D. Whitfield, Geoff G. Gillet, Michael E. Goggin, Marcelo P. Almeida, Ivan Kassal, Jacob D. Biamonte, Masoud Mohseni, Ben J. Powell, Marco Barbieri, Alaґn Aspuru-Guzik, Andrew G. White, Towards quantum chemistry on a quantum computer , Nature Chemistry 2 , pages 106-111 (2010), doi:10.1038/nchem.483.
- Jonathan Olson, Yudong Cao, Jonathan Romero, Peter Johnson, Pierre-Luc Dallaire-Demers, Nicolas Sawaya, Prineha Narang, Ian Kivlichan, Michael Wasielewski, Alaґn Aspuru-Guzik, Quantum information and computation for chemistry , NSF Workshop Report, 2017.
- Jacob Biamonte, Peter Wittek, Nicola Pancotti, Patrick Rebentrost, Nathan Wiebe, Seth Lloyd, Quantum machine learning , Nature volume 549 , pages 195-202 (14 September 2017).
- Seth Lloyd, Masoud Mohseni, Patrick Rebentrost, Quantum principal component analysis , Nature Physics volume 10 , pages 631-633 (2014).
- Vadim N. Smelyanskiy, Davide Venturelli, Alejandro Perdomo-Ortiz, Sergey Knysh, and Mark I. Dykman, Quantum annealing via environment-mediated quantum diffusion , Phys. Rev. Lett. 118 , 066802, 2017.
- Patrick Rebentrost, Brajesh Gupt, Thomas R. Bromley, Quantum computational finance: Monte Carlo pricing of financial derivatives , arXiv preprint (arXiv:1805.00109v1), 2018.
- IM Georgescu, S. Ashhab, Franco Nori, Quantum simulation , Rev. Mod. Phys. 86, 154 (2014), DOI: 10.1103/RevModPhys.86.153.
- EF Dumitrescu, AJ McCaskey, G. Hagen, GR Jansen, TD Morris, T. Papenbrock, RC Pooser, DJ Dean, P. Lougovski, Cloud quantum computing of an atomic nucleus , Phys. Rev. Lett. 120 , 210501 (2018), DOI: 10.1103/PhysRevLett.120.210501.
- Lukasz Cincio, Yigit Subasi, Andrew T. Sornborger, and Patrick J. Coles, Learning the quantum algorithm for state overlap , arXiv preprint (arXiv:1803.04114v1), 2018
- Patrick J. Coles, Stephan Eidenbenz, Scott Pakin, et al., Quantum algorithm implementations for beginners , arXiv preprint (arXiv:1804.03719v1), 2018.
- Mark Fingerhuth, Open-Source Quantum Software Projects , accessed May 12, 2018.
- Quantiki: List of QC Simulators , accessed May 12, 2018
- R. Smith, MJ Curtis and WJ Zeng, A practical quantum instruction set architecture , 2016.
- QISKit, originally authored by Luciano Bello, Jim Challenger, Andrew Cross, Ismael Faro, Jay Gambetta, Juan Gomez, Ali Javadi-Abhari, Paco Martin, Diego Moreda, Jesus Perez, Erick Winston, and Chris Wood, https://github.com/QISKit/qiskit-sdk-py .
- Damian S. Steiger, Thomas Häner, and Matthias Troyer ProjectQ: An open source software framework for quantum computing , 2016.
- Thomas Häner, Damian S. Steiger, Krysta M. Svore, and Matthias Troyer A software methodology for compiling quantum programs , 2016.
- The Quantum Development Kit by Microsoft, homepage: https://www.microsoft.com/en — us/quantum/development-kit, github: https://github.com/Microsoft/Quantum .
- Michael A. Nielsen and Isaac L. Chuang, Quantum Computation and Quantum Information 10th Anniversary Edition, Cambridge University Press, 2011.
- Doug Finke, Education , Quantum Computing Report, https://quantumcomputingreport.com/resources/education/ , accessed May 26, 2018.
- All code in this paper was run and tested on a Dell XPS 13 Developer Edition laptop running 64 bit Ubuntu 16.04 LTS with 8 GB RAM and an Intel Core i7-8550U CPU at 1.80 GHz. Programs were run primarily from the command line but the Python developer environment Spyder was also used for Python programs and Visual Studio Code was used for C# (Q#) programs.
- Forest: An API for quantum computing in the cloud, https://www.rigetti.com/index.php/forest , accessed May 14, 2018.
- Andrew W. Cross, Lev S. Bishop, John A. Smolin, Jay M. Gambetta, Open quantum assembly language , 2017.
- Scott Aaronson, Daniel Gottesman, Improved Simulation of Stabilizer Circuits , Phys. Rev. A 70 , 052328, 2004.
- pyQuil Lisence, github.com/rigetticomputing/pyquil/blob/master/LICENSE#L204 , accessed June 7, 2018.
- Microsoft Quantum Development Kit License, marketplace.visualstudio.com/items/quantum.DevKit/license , accessed June 7, 2018.
- Hao Zhang, Chun-Xiao Liu, Sasa Gazibegovic, et al. Quantized Majorana conductance , Nature 556 , 74-79 (05 April 2018).
- 16-qubit backend: IBM QX team, “ibmqx5 backend specification V1.1.0,” (2018). Retrieved from https://ibm.biz/qiskit-ibmqx5 and https://quantumexperience.ng.bluemix.net/qx/devices on May 23, 2018.
- Talia Gershon, Celebrating the IBM Q Experience Community and Their Research , March 8, 2018.
- M. Reck, A. Zeilinger, HJ Bernstein, and P. Bertani, Experimental realization of any discrete unitary operator , Physical Review Letters, 73, p. 58, 1994.
- Ryan LaRose, Distributed memory techniques for classical simulation of quantum circuits , arXiv preprint (arXiv:1801.01037v1), 2018.
- Thomas Haner, Damian S. Steiger, 0.5 petabyte simulation of a 45-qubit quantum circuit , arXiv preprint (arXiv:1704.01127v2), September 18, 2017.
- Jianxin Chen, Fang Zhang, Cupjin Huang, Michael Newman, Yaoyun Shi, Classical simulation of intermediate-size quantum circuits , arXiv preprint (arXiv:1805.01450v2), 2018.
- Alwin Zulehner, Robert Wille, Advanced simulation of quantum computations , arXiv preprint ( arXiv:1707.00865v2 ), November 7, 2017.
- Jarrod R. McClean, Ian D. Kivlichan, Kevin J. Sung, et al., OpenFermion: The electronic structure package for quantum computers , arXiv:1710.07629, 2017.
- Nathan Killoran, Josh Izaac, Nicols Quesada, Ville Bergholm, Matthew Amy, Christian Weedbrook, Strawberry Fields: A Software Platform for Photonic Quantum Computing , arXiv preprint (arXiv:1804.03159v1), 2018.
- IonQ website, https://ionq.co/ , accessed June 15, 2018.
- D-Wave: The quantum computing company, https://www.dwavesys.com/home , accessed June 20, 2018.
- 4 2018 Rigetti 20- , . , 8- «- ». , 20- (, , ).
- IBMQ Network , 2017 — JP Morgan Chase , Daimler , Samsung , Honda , Oak Ridge National Lab , — , 2018 — Zapata Computing , Strangeworks , QxBranch , Quantum Benchmark , QC Ware , Q-CTRL , Cambridge Quantum Computing (CQC) , 1QBit . North Carolina State University , IBM Q Hub, University of Oxford University of Melbourne . https://www.research.ibm.com/ibmq/network/ .
- , - - . QISKit, ACQUA , pyQuil.
- pyQuil : , from pyquil.gates import H, MEASURE . pyquil.gates , , , .
- , () . , () , , .
- IBM, 31 2018 , « » Python Cython, .
A, . Players Quantum Computing Report [22]. , , . / — .
a. Strawberry Fields
Xanadu , , Strawberry Fields Python , [38]. Xanadu «qumodes» ( ), , , . Strawberry Fields Numpy TensorFlow, Blackbird. GitHub, , , , . , Xanadu https://www.xanadu.ai/ , .
b. IonQ
IonQ — -, College Park , . IonQ , . 171 Yb , IonQ T2 () 15- , T2 1 . , T1 ( ) 20 000 , 10−4 . , -- - , «» . , .
IonQ , IonQ . . , - [39].
c. D-Wave Systems
D-Wave [40], , . D-Wave, 1999 , , , ,
D-Wave , — 2048 , Matlab, C/C++ Python . /, D-Wave . D-Wave .
BB.
ProjectQ C++. Dell XPS 13 Developer Edition 64- Ubuntu 16.04 LTS 8 Intel Core i7-8550U 1,80 .
, , 7. , QISKit — .
CC. :
. , QDK , , . — , — — . . , , , — , .
, , . , QISKit.

8. , circuit_drawer , QISKit v0.5.4.pyQuil
QISKit
ProjectQ
Quantum Developer Kit
// ============================================================================= // teleport.qs // // Teleportation circuit in QDK. // ============================================================================= operation Teleport(msg : Qubit, there : Qubit) : () { body { using (register = Qubit[1]) { // get auxiliary qubit to prepare for teleportation let here = register[0]; // main circuit H(here); CNOT(here, there); CNOT(msg, here); H(msg); // conditional operations if (M(msg) == One) { Z(there); } if (M(here) == One) { X(there); } // reset the "here" qubit Reset(here); } } } operation TeleportClassicalMessage(message : Bool) : Bool { body { mutable measurement = false; using (register = Qubit[2]) { // two qubits let msg = register[0]; let there = register[1]; // encode message to send if (message) { X(msg); } // do the teleportation Teleport(msg, there); // check what message was sent if (M(there) == One) { set measurement = true; } // reset all qubits ResetAll(register); } return measurement; } }