Présentation et comparaison des plates-formes logicielles Quantum au niveau de la porte

Bonjour, Habr! Je vous présente la traduction de l'article "Présentation et comparaison des plateformes logicielles Quantum Gate Level" par Ryan LaRose.


Les ordinateurs quantiques sont disponibles pour une utilisation dans l'infrastructure cloud, mais en mĂȘme temps, l'essor rĂ©cent des plates-formes logicielles quantiques peut ĂȘtre Ă©crasant pour ceux qui dĂ©cident quoi utiliser. Cet article offre une image actuelle du paysage en Ă©volution rapide de l'informatique quantique en comparant quatre plates-formes logicielles - Forest (pyQuil), QISKit, ProjectQ et Quantum Development Kit - qui permettent aux chercheurs d'utiliser des appareils quantiques rĂ©els et simulĂ©s. Cette analyse couvre les exigences et l'installation, la syntaxe du langage sur l'exemple des programmes, le support au niveau de la bibliothĂšque et les possibilitĂ©s d'un simulateur quantique pour chaque plateforme. Pour les plates-formes qui prennent en charge les ordinateurs quantiques, nous comparons le matĂ©riel, les langages d'assembleurs quantiques et les compilateurs quantiques. En conclusion, nous examinerons les caractĂ©ristiques de chacun d'entre eux et mentionnerons briĂšvement d'autres logiciels pour l'informatique quantique.


Table des matiĂšres


I. Introduction
II. Plateformes logicielles
A. pyQuil
B. QISKit
C. ProjectQ
D. Kit de développement Quatum
III. Comparaison
A. Prise en charge de la bibliothĂšque
Matériel quantique
C. Compilateurs quantiques
D. Performances du simulateur
E. Caractéristiques
IV. Discussion et conclusions
Les références
Annexe A. Autres plates-formes logicielles
Annexe B. Test des performances du simulateur
Annexe C. Exemple de programme: programme de téléportation


I. Introduction


Les langages de programmation quantique ont été envisagés il y a au moins deux décennies [1-3], mais ils étaient pour la plupart théoriques et sans équipement existant. Les ordinateurs quantiques sont désormais une réalité, et il existe des langages de programmation quantiques qui permettront à toute personne ayant accÚs à Internet de les utiliser. Un bon nombre de chercheurs, tant dans l'industrie que dans le milieu universitaire, ont créé de petits appareils quantiques qui fonctionnent sur un modÚle de circuit de l'informatique quantique. Ces ordinateurs sont petits, bruyants et pas aussi puissants que les ordinateurs classiques modernes. Mais ils émergent, en croissance constante et préfigurant l'avenir d'une puissance de calcul incroyablement grande pour les tùches de chimie [4, 5], d'apprentissage automatique [6, 7], d'optimisation [8], du secteur financier [9] et plus encore [10]. Ces appareils sont un banc d'essai pour former la prochaine génération d'ingénieurs en logiciel quantique à résoudre les tùches classiques complexes existantes de la technologie informatique. En effet, l'informatique quantique du cloud a déjà été utilisée pour calculer l'énergie de liaison au deutéron [11] et tester des routines dans des algorithmes d'apprentissage automatique [12, 13].


RĂ©cemment, il y a eu une croissance rapide des logiciels informatiques quantiques sur un large Ă©ventail de langages informatiques classiques. Une liste de projets open source avec plus de cinquante projets est disponible dans [14], et une liste de simulations informatiques quantiques est disponible dans [15]. Ce grand nombre de programmes qui reflĂštent positivement la croissance dans le domaine rend difficile pour les Ă©tudiants et les chercheurs de dĂ©cider quel logiciel utiliser, afin de ne pas se perdre dans la documentation ou d'ĂȘtre choquĂ© par les connaissances initiales nĂ©cessaires.


Cet article devrait fournir un bref aperçu et une comparaison des principales plates-formes logicielles pour l'informatique quantique à usage général au niveau de la porte. Quatre ont été sélectionnés dans une longue liste: trois, donnant à l'utilisateur la possibilité de se connecter à de vrais appareils quantiques - pyQuil de Rigetti [16], QISKit d'IBM [17] et ProjectQ de l'ETH Zurich [18, 19], et un avec des fonctionnalités similaires, mais sans la capacité actuelle de se connecter à un ordinateur quantique - Kit de développement quantique de Microsoft [20]. En faveur du choix de ces plateformes est devenu la possibilité de se connecter à un véritable appareil quantique. Pour cette raison, et par souci de concision, un certain nombre de programmes respectables sont délibérément omis. Certains d'entre eux sont mentionnés à l'annexe A.


À l'heure actuelle, l'objectif principal est de prĂ©senter une image de paysage de l'informatique quantique causĂ©e par ces quatre plates-formes. Dans la section II, nous examinerons tour Ă  tour chaque plate-forme, en discutant des exigences et de l'installation, de la documentation et des didacticiels, de la syntaxe du langage et de l'Ă©quipement quantique. La section III fournit une comparaison dĂ©taillĂ©e des plates-formes. Il comprend: la prise en charge au niveau de la bibliothĂšque d'algorithmes quantiques dans III A , la prise en charge matĂ©rielle quantique dans III B , des compilateurs de circuits quantiques dans III C et des simulateurs informatiques quantiques III D. La section IV traite de certains commentaires subjectifs sur chaque plate-forme. L'annexe A contient des informations sur d'autres logiciels quantiques, l'annexe B contient des informations dĂ©taillĂ©es sur les tests de simulateurs de circuits quantiques, et l'annexe C montre le code des schĂ©mas de tĂ©lĂ©portation quantique dans chacune des quatre langues pour la comparaison cĂŽte Ă  cĂŽte.


II. Plateformes logicielles


La figure 1 montre divers ordinateurs quantiques et logiciels utilisĂ©s pour se connecter Ă  des appareils. Actuellement, quatre plates-formes logicielles vous permettent de vous connecter Ă  quatre ordinateurs quantiques diffĂ©rents - un de Rigetti, un ordinateur quantique Ă  8 qubits, vous pouvez vous connecter Ă  l'aide de pyQuil [41]; et trois d'IBM, avec les 16 qubits les plus Ă©levĂ©s disponibles, qui peuvent ĂȘtre connectĂ©s Ă  l'aide de QISKit ou ProjectQ. En outre, IBM propose un quatriĂšme ordinateur quantique Ă  20 qubits, mais cet appareil n'est disponible que pour les membres du rĂ©seau IBM Q [42]: un groupe d'entreprises, d'universitĂ©s et de laboratoires nationaux intĂ©ressĂ©s et investissant dans l'informatique quantique. La figure 1 montre Ă©galement les ordinateurs quantiques d'entreprises telles que Google, IBM et Intel qui ont Ă©tĂ© annoncĂ©s mais qui ne sont actuellement pas disponibles pour les utilisateurs rĂ©guliers.



Figure 1. Un diagramme schĂ©matique montrant comment connecter un ordinateur personnel Ă  l'ordinateur quantique utilisĂ© au niveau de la porte. À partir d'un ordinateur personnel (en bas au centre), les nƓuds verts affichent un logiciel qui peut ĂȘtre installĂ© sur l'ordinateur personnel de l'utilisateur. Les nƓuds gris indiquent que les simulateurs s'exĂ©cutent localement (c'est-Ă -dire sur l'ordinateur d'un utilisateur). Les lignes en pointillĂ©s montrent les connexions API / cloud aux ressources de l'entreprise affichĂ©es en «nuages» jaunes. Les simulateurs quantiques et les ordinateurs quantiques utilisĂ©s fournis par ces ressources nuageuses sont reprĂ©sentĂ©s respectivement en bleu et or. Les cadres rouges indiquent les exigences de la mĂ©thode sĂ©lectionnĂ©e. Par exemple, pour vous connecter Ă  Rigetti Forest et utiliser l'ordinateur quantique Agave 8 qubit, vous devez tĂ©lĂ©charger et installer pyQuil (disponible sur MacOS, Windows et Linux), vous inscrire sur le site Web de Rigetti pour obtenir une clĂ© API, puis demander l'accĂšs Ă  l'appareil via Internet forme. Notes: (i) La machine virtuelle quantique Rigetti nĂ©cessite une Ă©lĂ©vation des droits pour plus de 30 qubits, (ii) les simulateurs locaux dĂ©pendent de l'ordinateur de l'utilisateur, donc les nombres donnĂ©s sont approximatifs, et (iii) les ordinateurs quantiques qui ont Ă©tĂ© annoncĂ©s mais qui actuellement indisponible pour les utilisateurs rĂ©guliers.


La technologie de l'Ă©quipement quantique Ă©volue rapidement. Il est trĂšs probable que de nouveaux ordinateurs apparaĂźtront d'ici la fin de l'annĂ©e, et dans deux ou trois ans, cette liste pourrait ĂȘtre complĂštement dĂ©passĂ©e. Cependant, il reste le logiciel utilisĂ© pour se connecter Ă  cette technologie. Il serait trĂšs simple d'utiliser de nouveaux ordinateurs quantiques, en changeant seulement quelques lignes de code, sans rĂ©ellement changer la syntaxe utilisĂ©e pour gĂ©nĂ©rer ou exĂ©cuter le circuit quantique. Par exemple, dans QISKit, il vous suffit de changer le nom du pĂ©riphĂ©rique principal lors de l'exĂ©cution du schĂ©ma:


execute(quantum_circuit, backend="name", ...) 

Liste 1. La chaßne «nom» indique un périphérique principal pour exécuter des programmes quantiques à l'aide de QISKit. Lorsque de futurs ordinateurs quantiques seront commercialisés, il sera aussi simple de changer de nom que d'utiliser un nouveau matériel.


Bien que le logiciel change également avec la sortie de la nouvelle version [43], il s'agit, pour la plupart, de modifications syntaxiques relativement mineures qui ne modifient pas de maniÚre significative la fonctionnalité du logiciel.


Dans cette section, nous examinerons chacune des quatre plates-formes, en discutant des exigences et de l'installation, de la documentation et des manuels, de la syntaxe du langage, du langage quantique, de l'équipement quantique et des capacités du simulateur. Cette revue n'est pas destinée à enseigner pleinement la langue, mais elle donne au lecteur une compréhension de chaque plate-forme avant de plonger dans une (ou plusieurs) des plates-formes sélectionnées. L'analyse actuelle comprend suffisamment d'informations pour exécuter des algorithmes sur des ordinateurs quantiques. Néanmoins, le lecteur, lorsqu'il a choisi une plateforme spécifique, est envoyé vers une documentation spéciale pour des informations complÚtes. Des liens vers des sources de documentation et de didacticiel pour chaque progiciel ont été ajoutés. On suppose également qu'il existe des connaissances de base en informatique quantique, pour lesquelles il existe maintenant de nombreuses bonnes références [21, 22].


Tous les fragments de code et les programmes inclus dans ce document ont été testés et exécutés sur un ordinateur portable Dell XPS 13 Developer Edition exécutant Linux Ubuntu 16.04 LTS, dont les spécifications complÚtes sont répertoriées dans [23]. Bien que tous les packages logiciels fonctionnent dans les trois principaux systÚmes d'exploitation, il est beaucoup plus facile pour l'auteur d'installer et d'utiliser le logiciel sur la plate-forme sur laquelle il a été développé. Sur Linux Ubuntu, il n'y a eu aucune difficulté ou message d'erreur inhabituel lors de l'installation de ces packages logiciels.


pyQuilQISKitProjectqQDK
L'institutionRigettiIbmEt zurichMicrosoft
PremiÚre versionv0.0.2 le 15 janv.20170.1 le 7 mars 2017v0.1.0 le 3 janv.20170.1.1712.901 le 4 janvier 2018 (version préliminaire)
Version actuellev1.9.0 le 6 juin 20180.5.4 le 11 juin 2018v0.3.6 le 6 février 20180.2.1802.2202 le 26 février 2018 (version préliminaire)
Open source✅✅✅✅
LicenceApache 2.0Apache 2.0Apache 2.0MIT
Page d'accueilAccueilAccueilAccueilAccueil
GithubGitGitGitGit
La documentationDocuments , didacticiels ( Grove )Documents , cahiers didacticiels , matérielDocuments , exemples de programmes , papierDocuments
OSMac, Windows, LinuxMac, Windows, LinuxMac, Windows, LinuxMac, Windows, Linux
PrérequisPython 3, Anaconda (recommandé)Python 3.5+, Jupyter Notebooks (pour les tutoriels), Anaconda 3 (recommandé)Python 2 ou 3Code Visual Studio (fortement recommandé)
Langage classiquePythonPythonPythonQ #
Langue quantiqueQuilOpenqasmaucun / hybrideQ #
Matériel quantique8 qubitsIBMQX2 (5 qubits), IBMQX4 (5 qubits), IBMQX5 (16 qubits), QS1_1 (20 qubits)aucun matériel dédié, peut se connecter aux backends IBMaucun
Simulateur∌20 qubits localement, 26 qubits avec la plupart des clĂ©s API pour QVM, 30+ avec accĂšs privĂ©Qu25 qubits localement, 30 via le cloud∌28 qubits localement30 qubits localement, 40 via le cloud Azure
CARACTÉRISTIQUESGĂ©nĂ©ration de code Quil, exemples d'algorithmes dans Grove, compilateur spĂ©cifique Ă  la topologie, capacitĂ©s de bruit dans le simulateur, canal Slack communautaireGĂ©nĂ©ration de code QASM, compilateur spĂ©cifique Ă  la topologie, canal Slack communautaire, tiroir de circuits, bibliothĂšque ACQUADessinez des circuits, connectez-vous Ă  des backends IBM, plusieurs plug-ins de bibliothĂšqueAlgorithmes intĂ©grĂ©s, exemples d'algorithmes

pyQuil

A. pyQuil


pyQuil est une bibliothÚque Python open source développée par Rigetti pour créer, analyser et exécuter des programmes quantiques. Il est construit sur la base du langage Quil - un langage ouvert d'instructions quantiques (ou simplement un langage quantique ), spécialement conçu pour les ordinateurs quantiques prometteurs les plus proches et basé sur un modÚle de mémoire classique / quantique commun [24] (cela signifie que les qubits et bits classiques). pyQuil est l'une des bibliothÚques principales développées dans Forest, qui est la plate-forme clé pour tous les logiciels Rigetti. Forest comprend également Grove et Reference QVM, qui seront décrits plus loin.


a. Configuration requise et installation


L'installation et l'utilisation de pyQuil nécessitent des versions Python 2 ou 3, bien que Python 3 soit fortement recommandé, car les futures fonctions de développement ne prendront en charge que Python 3. En outre, la distribution Python Anaconda est recommandée pour diverses dépendances de module Python, bien que cela ne soit pas nécessaire.


La façon la plus simple d'installer pyQuil est d'utiliser la commande du gestionnaire de packages Python. À l'invite de commande Linux Ubuntu, entrez


 pip install pyquil 

pour une installation rĂ©ussie du logiciel. Alternativement, si Anaconda est installĂ©, pyQuil peut ĂȘtre installĂ© en tapant


 conda install −c rigetti pyquil 

sur la ligne de commande. Une autre alternative consiste à télécharger le code source à partir du référentiel git et à installer le logiciel. Pour ce faire, entrez les commandes suivantes:


 git clone https://github.com/rigetticomputing/pyquil cd pyquil pip install −e 

Cette derniÚre méthode est recommandée pour tous les utilisateurs qui peuvent contribuer à pyQuil. Consultez le guide de dépÎt GitHub pour plus d'informations.


b. Documentation et tutoriels


pyQuil a une excellente documentation publiĂ©e sur Internet, avec une introduction Ă  l'informatique quantique, des instructions d'installation, des programmes de base et des opĂ©rations de porte, un simulateur connu sous le nom de machine virtuelle quantique (QVM), un vĂ©ritable ordinateur quantique et un langage Quil avec un compilateur. En tĂ©lĂ©chargeant le code source pyQuil depuis GitHub, vous obtiendrez Ă©galement un dossier avec des exemples dans les cahiers Jupyter, des exemples Python rĂ©guliers et un programme $ inline $ \ textesf {run_quil.py} $ inline $ , qui peut exĂ©cuter des documents texte Ă©crits en Quil Ă  l'aide d'une machine virtuelle quantique. Enfin, mentionnez Grove , un ensemble d'algorithmes quantiques construits Ă  l'aide de pyQuil et de l'environnement de la forĂȘt Rigetti.


c. Syntaxe


La syntaxe pyQuil est trĂšs simple et pratique. Le principal Ă©lĂ©ment d'enregistrement des circuits quantiques est le programme et peut ĂȘtre importĂ© de  textesfpyquil.quil . Les opĂ©rations de porte peuvent ĂȘtre trouvĂ©es dans  textesfpyquil.gates . Module  textesfapi vous permet d'exĂ©cuter des circuits quantiques dans une machine virtuelle. L'une des fonctionnalitĂ©s intĂ©ressantes de pyQuil est que les registres qubit et les registres classiques n'ont pas Ă  ĂȘtre dĂ©finis a priori et peuvent ĂȘtre allouĂ©s dynamiquement en mĂ©moire. Les Qubits dans le registre qubit sont dĂ©signĂ©s par des indices (0, 1, 2, ...) et de mĂȘme pour les bits dans le registre classique. Ainsi, le circuit gĂ©nĂ©rateur alĂ©atoire peut s'Ă©crire comme suit:


 # random number generator circuit in pyQuil from pyquil.quil import Program import pyquil.gates as gates from pyquil import api qprog = Program() qprog += [gates.H(0), gates.MEASURE(0, 0)] qvm = api.QVMConnection() print(qvm.run(qprog)) 

Listing 2. Code PyQuil pour un générateur de nombres aléatoires.


Les trois premiĂšres lignes importent le minimum nĂ©cessaire pour dĂ©clarer un schĂ©ma / programme quantique (ligne 2), pour effectuer des opĂ©rations de porte sur des qubits (ligne 3) [44] et pour exĂ©cuter le schĂ©ma (ligne 4). À la ligne 6, un programme quantique est créé, et aux lignes 7 Ă  8, une liste d'instructions lui est transmise: d'abord, agissez sur la porte Hadamard H au-dessus du qubit Ă  l'index 0, alors nous mesurons le mĂȘme qubit en un bit classique sous l'index 0. La ligne 10 Ă©tablit une connexion avec QVM, et Ă  11 le rĂ©sultat de notre circuit est lancĂ© et affichĂ©. Ce programme imprime la sortie standard de pyQuil sous la forme d'une liste de listes d'entiers: dans notre cas - \ textesf {[[[[0]]}} ou  textesf[[[[1]]] . En gĂ©nĂ©ral, le nombre d'Ă©lĂ©ments dans une liste externe est le nombre de tests effectuĂ©s. Les nombres entiers dans les listes internes sont les dimensions finales du registre classique. Puisque nous avons effectuĂ© un seul test (cela est indiquĂ© comme argument dans  textesfapi.QVMConnection.run , qui est dĂ©fini sur l'unitĂ© par dĂ©faut), nous obtenons une seule liste interne. Puisque dans le registre classique, nous n'avions qu'un seul bit, nous n'obtenons qu'un seul entier.


d. Langue quantique


Quil est un langage d'instructions quantiques, ou tout simplement un langage quantique qui transmet des commandes Ă  un ordinateur quantique. Ceci est similaire Ă  l'assembleur sur les ordinateurs classiques. Le cƓur de la syntaxe Quil est  textesfindexGATE oĂč  textesfGATE est une porte quantique qui s'applique aux qubits indexĂ©s  textesfindex (0, 1, 2, ...). pyQuil a une fonction pour gĂ©nĂ©rer du code Quil Ă  partir d'un programme donnĂ©. Par exemple, dans le gĂ©nĂ©rateur de nombres alĂ©atoires quantiques susmentionnĂ©, nous pourrions ajouter la ligne:


 print(qprog) 

à la fin pour obtenir le code du diagramme Quil, qui est illustré ci-dessous:


 H 0 MEASURE 0 [0] 

Listing 3. Code Quil pour un générateur de nombres aléatoires.


Peut-ĂȘtre que si quelqu'un commence Ă  comprendre Quil, Ă©crivez des circuits quantiques dans un Ă©diteur de texte dans Quil, puis exĂ©cutez le circuit sur QVM Ă  l'aide du programme $ inline $ \ textesf {run_quil.py} $ inline $ . Vous pouvez Ă©galement modifier $ inline $ \ textesf {run_quil.py} $ inline $ pour exĂ©cuter le circuit sur QPU. Notez que le compilateur pyQuil (Ă©galement appelĂ© compilateur Quil dans la documentation) convertit le circuit donnĂ© en code Quil qu'un vĂ©ritable ordinateur quantique peut comprendre. Nous en discuterons plus en dĂ©tail dans la section III C.


f. Matériel quantique


Rigetti a un processeur quantique qui peut ĂȘtre utilisĂ© par ceux qui demandent l'accĂšs. Pour demander l'accĂšs, vous devez visiter le site Web de Rigetti et fournir le nom complet, l'adresse e-mail, le nom de l'organisation et une description de la raison de l'accĂšs au QPU. Une fois cela fait, un reprĂ©sentant de l'entreprise vous contactera par e-mail pour planifier un moment pour donner Ă  l'utilisateur l'accĂšs au QPU. L'avantage de ce processus de planification, contrairement au systĂšme de mise en file d'attente QISKit, qui sera discutĂ© plus tard, est que de nombreuses tĂąches peuvent ĂȘtre effectuĂ©es dans un intervalle de temps distribuĂ© avec des temps d'exĂ©cution dĂ©terministes, ce qui est essentiel pour les algorithmes variationnels et hybrides. Ces types d'algorithmes envoient des donnĂ©es entre les ordinateurs classiques et quantiques - la nĂ©cessitĂ© d'attendre en ligne rend ce processus beaucoup plus long. L'inconvĂ©nient (Ă©ventuellement) est que les tĂąches ne peuvent ĂȘtre effectuĂ©es Ă  aucun moment lorsque le QPU est disponible et qu'il est nĂ©cessaire d'indiquer et de convenir d'un moment prĂ©cis.


Selon l'expĂ©rience de l'auteur, les employĂ©s sont prĂȘts Ă  aider et le processus est gĂ©nĂ©ralement couronnĂ© de succĂšs. Le pĂ©riphĂ©rique rĂ©el, dont la topologie est illustrĂ©e Ă  la figure 2, se compose de 8 qubits avec la connectivitĂ© du voisin le plus proche. Nous examinerons cet ordinateur plus en dĂ©tail dans la section III B.


g. Simulateur


La machine virtuelle quantique (QVM) est le principal utilitaire utilisĂ© pour exĂ©cuter les circuits quantiques. Ce programme, Ă©crit pour fonctionner sur un processeur classique, reçoit le code Quil et simule le dĂ©veloppement d'un processus sur un vĂ©ritable ordinateur quantique. Pour vous connecter Ă  QVM, vous devez enregistrer gratuitement une clĂ© API sur https://www.rigetti.com/forest avec un nom et une adresse e-mail. Ensuite, vous recevrez un e-mail contenant la clĂ© API et l'ID utilisateur qui doivent ĂȘtre configurĂ©s au dĂ©marrage:


 pyquil−config−setup 

sur la ligne de commande (aprÚs l'installation de pyQuil, bien sûr). Ensuite, il vous sera demandé de saisir les clés de l'e-mail.


Selon la documentation, la plupart des clés d'API permettent d'accéder à des machines virtuelles Java jusqu'à 30 qubits, et vous pouvez demander l'accÚs à plus de qubits. La clé API de l'auteur donne accÚs à 26 qubits (aucune mise à jour n'a été demandée).


De plus, la bibliothĂšque Forest contient un simulateur local Ă©crit en Python et open source, appelĂ© Reference QVM . Il n'est pas aussi productif que QVM, mais les utilisateurs peuvent exĂ©cuter des circuits avec un nombre de qubits limitĂ© par la quantitĂ© de mĂ©moire sur les machines locales. En rĂšgle gĂ©nĂ©rale, les circuits avec moins de 20 qubits peuvent ĂȘtre exĂ©cutĂ©s sur une large gamme d'Ă©quipements. La rĂ©fĂ©rence QVM doit ĂȘtre installĂ©e sĂ©parĂ©ment, ce qui peut ĂȘtre fait avec  textesfpip :


 pip install referenceqvm 

Pour utiliser Reference QVM au lieu de QVM, importez simplement  textesfapi de  textesfreferenceqvm au lieu de pyQuil:


 import referenceapi.api as api 


Figure 2. Diagramme schĂ©matique montrant la topologie (connectivitĂ©) d'un Agetti QPU Rigetti Ă  8 qubits. Les Qubits sont marquĂ©s par des entiers 0, 1, ..., 7, et les lignes reliant les qubits indiquent que deux opĂ©rations de qubit peuvent ĂȘtre effectuĂ©es entre ces qubits. Par exemple, nous pouvons exĂ©cuter Controlled- Z sur les qubits 0 et 1, mais pas entre 0 et 2. Pour accomplir ce dernier, le compilateur Quil convertit Controlled- Z (0, 2) dans l'opĂ©ration que le QPU peut effectuer. Ce diagramme est tirĂ© de la documentation pyQuil.


QISKit

B. QISKit


Le Quantum Information Software Kit, ou QISKit, est un kit de développement logiciel (SDK) open source pour travailler avec le langage quantique OpenQASM et les processeurs quantiques dans la plate-forme IBM Q. Il est disponible pour les langages Python, JavaScript et Swift, mais ici nous ne discutons que Version Python.


a. Configuration requise et installation


QISKit est disponible sur MacOS, Windows et Linux. L'installation de QISKit nécessite Python 3.5+. Les composants Jupyter Notebooks for tutorials et la distribution Python Anaconda 3, qui contient toutes les dépendances nécessaires, sont des composants utiles mais non obligatoires supplémentaires.


La façon la plus simple d'installer QISKit est d'utiliser le gestionnaire de packages pip pour Python. À l'invite de commande, pour installer le logiciel, entrez:


 pip install qiskit 

Veuillez noter que  textesfpip traite automatiquement toutes les dĂ©pendances et installe toujours la derniĂšre version. Les utilisateurs qui pourraient ĂȘtre intĂ©ressĂ©s Ă  contribuer Ă  QISKit peuvent installer le code source en entrant ce qui suit Ă  l'invite de commande, on suppose que git est installĂ©:


 git clone https://github.com/QISKit/qiskit−core cd qiskit−core python −m pip install −e 

Pour plus d'informations sur les dépÎts, consultez la documentation en ligne du guide des dépÎts sur GitHub.


b. Documentation et matériel de formation


La documentation QISKit est disponible sur Internet Ă  l' adresse https://qiskit.org/documentation/ . Il contient des instructions d'installation et de configuration, des exemples de programmes et de connexion Ă  de vĂ©ritables appareils quantiques, l'organisation du projet, une revue QISKit et une documentation pour les dĂ©veloppeurs. Des informations de base sur l'informatique quantique peuvent Ă©galement ĂȘtre trouvĂ©es pour les utilisateurs qui sont nouveaux dans le domaine. Une trĂšs bonne ressource est un lien vers le SDK, oĂč les utilisateurs peuvent trouver des informations sur la documentation du code source.


QISKit contient Ă©galement un grand nombre de didacticiels dans un rĂ©fĂ©rentiel GitHub sĂ©parĂ© (similaire Ă  pyQuil et Grove). Il s'agit notamment des États intriquĂ©s; des algorithmes standard tels que Deutsch Jozh, l'algorithme de Grover, l'estimation de phase et la transformĂ©e de Fourier quantique; Ă©galement des algorithmes plus complexes, tels que la rĂ©solution d'un problĂšme de valeur propre variationnelle quantique et l'application aux hamiltoniens fermions; et mĂȘme des jeux amusants, comme la «bataille navale» quantique. De plus, la bibliothĂšque ACQUA (Algorithms and Circuits for QUantum Applications) contient des algorithmes multidisciplinaires pour la chimie et l'intelligence artificielle avec de nombreux exemples.


Il existe également une documentation trÚs détaillée pour chacun des quatre backends quantiques contenant des informations sur la connectivité, le temps de cohérence et le temps d'utilisation de la porte. Enfin, mentionnez le site Web d' expérience IBM Q et les guides d'utilisation. Le site Web contient une interface graphique pour un circuit quantique dans laquelle les utilisateurs peuvent faire glisser des portes sur un circuit, ce qui est utile pour explorer les circuits quantiques. Les guides de l'utilisateur contiennent plus d'instructions sur l'informatique quantique et le langage QISKit.


c. Syntaxe


La syntaxe QISKit peut ĂȘtre consultĂ©e dans l'exemple de programme suivant. Ici, contrairement Ă  pyQuil, vous devez faire une distinction explicite entre les registres quantiques et classiques. Voici un programme pour le schĂ©ma de nombres alĂ©atoires de QISKit:


 # random number generator circuit in QISKit from qiskit import QuantumRegister, ClassicalRegister, QuantumCircuit, execute qreg = QuantumRegister(1) creg = ClassicalRegister(1) qcircuit = QuantumCircuit(qreg , creg) qcircuit.h(qreg[0]) qcircuit.measure(qreg[0], creg[0]) result = execute(qcircuit, 'local qasm simulator').result() print(result.get_counts()) 

Listing 4. Code QISKit pour un générateur de nombres aléatoires.


La ligne 2 importe des outils pour crĂ©er des registres quantiques et classiques, un circuit quantique et des fonctions pour exĂ©cuter ce circuit. Ensuite, nous crĂ©ons un registre quantique avec un qubit (ligne 4), un registre classique avec un bit (ligne 5) et un circuit quantique avec ces deux registres (ligne 6). Maintenant que le circuit est créé, nous commençons Ă  donner des instructions: Ă  la ligne 8, nous appliquons la porte de Hadamard au qubit zĂ©ro dans notre registre quantique (qui est le seul qubit du registre quantique); Ă  la ligne 9, nous mesurons ce qubit en un bit classique indexĂ© par zĂ©ro dans notre registre classique (qui est le seul dans le registre classique) [45]. Maintenant que le circuit quantique est construit, exĂ©cutez-le sur la ligne 11 et imprimez le rĂ©sultat sur la ligne 12. Au moyen de la sortie $ inline $ \ textesf {result.get_counts ()} $ inline $ nous obtenons les «calculs» du circuit, c'est-Ă -dire le dictionnaire des donnĂ©es de sortie et combien de fois chaque rĂ©sultat a Ă©tĂ© reçu. Dans notre cas, les seules sorties possibles sont 0 ou 1, et un exemple de la sortie du programme ci-dessus est  textesfâ€Č0â€Č:532,â€Č1â€Č:492 , ce qui indique que nous avons obtenu 532 instances de 0 et 492 instances de 1. (Par dĂ©faut, le nombre de cycles pour dĂ©marrer le circuit appelĂ©  textesfcoups dans QISKit, est 1024.)


d. Langue quantique


OpenQASM (le langage d'assemblage quantique ouvert [25], que nous pouvons simplement appeler QASM) est un langage quantique qui fournit des instructions pour de vrais dispositifs quantiques similaires Ă  l'assembleur sur les ordinateurs classiques. La base de la syntaxe QASM est  textesfgatequbit oĂč  textesfgate dĂ©finit le fonctionnement de la porte quantique, et  textesfqubit - qubit. QISKit a une fonction pour gĂ©nĂ©rer du code QASM Ă  partir d'un schĂ©ma. Dans le schĂ©ma de nombres alĂ©atoires ci-dessus, nous pourrions ajouter une ligne.


 print(qcircuit.qasm()) 

à la fin pour obtenir le code QASM pour le circuit illustré ci-dessous:


 OPENQASM 2.0; include ”qelib1.inc”; qreg q0[1]; creg c0[1]; h q0[0]; measure q0[0] −> c0[0]; 

Listing 5. Code OpenQASM pour un générateur de nombres aléatoires.


Les deux premiÚres lignes sont incluses dans chaque fichier QASM. La ligne 3 (4) crée un registre quantique (classique) et les lignes 5 et 6 donnent des instructions pour le circuit. Dans OpenQASM, vous pouvez écrire de petits circuits comme ceux-ci, mais pour les circuits plus grands, il est préférable d'utiliser des outils dans QISKit pour une programmation gratuite et efficace des ordinateurs quantiques.


e. Matériel quantique


Il existe une énorme quantité de documentation pour les backends quantiques pris en charge par QISKit. Ces périphériques incluent IBMQX2 (5 qubits), IBMQX4 (5 qubits), IBMQX5 (16 qubits) et QS1_1 (20 qubits, disponible uniquement pour les membres d'IBM Q Network). La documentation pour tout le monde est disponible sur GitHub. Nous examinerons de plus prÚs IBMQX5 dans la section III B, dont la topologie est illustrée à la figure 3.


f. Simulateur


IBM , . , 12 , , 25 . , III D.



Figure 3. Topologie schĂ©matique d'IBMQX5, tirĂ©e de [30]. Les flĂšches directionnelles indiquent les opportunitĂ©s d'enchevĂȘtrement. Par exemple, nous pourrions effectuer une opĂ©ration (dans QASM) cx Q1, Q2 mais pas une opĂ©ration cx Q2, Q1 . Pour ce faire, le compilateur traduit l'instruction en portes Ă©quivalentes qui s'exĂ©cutent dans la topologie et l'ensemble de portes.


Projectq

C. 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), — / . , :


 # random number generator circuit in ProjectQ from projectq import MainEngine import projectq.ops as ops eng = MainEngine() qbits = eng.allocate_qureg(1) ops.H | qbits[0] ops.Measure | qbits[0] eng.flush() print(int(qbits[0])) 

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.


h. ProjectQ


ProjectQ , , . , pyQuil ProjectQ [27], Microsoft QDK Thomas HĂ€ner Damian Steiger ETH Zurich [28], . ( , , QDK ProjectQ C++, .)


Kit de développement quantique

D. 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. Comparaison


Plus loin dans cette section, lorsque les bases de chaque plate-forme ont été examinées, nous comparerons chacune des caractéristiques supplémentaires, y compris le support à la bibliothÚque, l'équipement quantique et les compilateurs quantiques. Nous énumérerons également certaines des fonctionnalités remarquables et utiles de chaque plate-forme.


A. Prise en charge de la bibliothĂšque


« » ( ) (, 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.


AlgorithmpyQuilQISKitProjectQQDK
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 et CNOT oĂč



, u1 Rz(Ξ) , u2 et u3 — Rx(π/2)



, .



oĂč X et 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 , :local_qasm_simulator ,local_state_vector_simulator ,ibmq_qasm_simulator ,local_unitary_simulator etlocal_clifford_simulator . . () . , / . [33], [34-36] . ClassicalSimulator ProjectQ,local_clifford_simulator (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 .

, , . . , , .



  1. Bernhard Ömer, A procedural formalism for quantum computing , Master's thesis, Department of Theoretical Physics, Technical University of Vienna, 1998.
  2. S. Bettelli, L. SeraïŹni, T. Calarco, Toward an architecture for quantum programming , Eur. Phys. J. D, Vol. 25, No. 2, pp. 181-200 (2003).
  3. 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.
  4. Benjamin P. Lanyon, James D. WhitïŹeld, 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.
  5. 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.
  6. Jacob Biamonte, Peter Wittek, Nicola Pancotti, Patrick Rebentrost, Nathan Wiebe, Seth Lloyd, Quantum machine learning , Nature volume 549 , pages 195-202 (14 September 2017).
  7. Seth Lloyd, Masoud Mohseni, Patrick Rebentrost, Quantum principal component analysis , Nature Physics volume 10 , pages 631-633 (2014).
  8. 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.
  9. Patrick Rebentrost, Brajesh Gupt, Thomas R. Bromley, Quantum computational ïŹnance: Monte Carlo pricing of financial derivatives , arXiv preprint (arXiv:1805.00109v1), 2018.
  10. IM Georgescu, S. Ashhab, Franco Nori, Quantum simulation , Rev. Mod. Phys. 86, 154 (2014), DOI: 10.1103/RevModPhys.86.153.
  11. 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.
  12. Lukasz Cincio, Yigit Subasi, Andrew T. Sornborger, and Patrick J. Coles, Learning the quantum algorithm for state overlap , arXiv preprint (arXiv:1803.04114v1), 2018
  13. Patrick J. Coles, Stephan Eidenbenz, Scott Pakin, et al., Quantum algorithm implementations for beginners , arXiv preprint (arXiv:1804.03719v1), 2018.
  14. Mark Fingerhuth, Open-Source Quantum Software Projects , accessed May 12, 2018.
  15. Quantiki: List of QC Simulators , accessed May 12, 2018
  16. R. Smith, MJ Curtis and WJ Zeng, A practical quantum instruction set architecture , 2016.
  17. 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 .
  18. Damian S. Steiger, Thomas HĂ€ner, and Matthias Troyer ProjectQ: An open source software framework for quantum computing , 2016.
  19. Thomas HĂ€ner, Damian S. Steiger, Krysta M. Svore, and Matthias Troyer A software methodology for compiling quantum programs , 2016.
  20. The Quantum Development Kit by Microsoft, homepage: https://www.microsoft.com/en — us/quantum/development-kit, github: https://github.com/Microsoft/Quantum .
  21. Michael A. Nielsen and Isaac L. Chuang, Quantum Computation and Quantum Information 10th Anniversary Edition, Cambridge University Press, 2011.
  22. Doug Finke, Education , Quantum Computing Report, https://quantumcomputingreport.com/resources/education/ , accessed May 26, 2018.
  23. 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.
  24. Forest: An API for quantum computing in the cloud, https://www.rigetti.com/index.php/forest , accessed May 14, 2018.
  25. Andrew W. Cross, Lev S. Bishop, John A. Smolin, Jay M. Gambetta, Open quantum assembly language , 2017.
  26. Scott Aaronson, Daniel Gottesman, Improved Simulation of Stabilizer Circuits , Phys. Rev. A 70 , 052328, 2004.
  27. pyQuil Lisence, github.com/rigetticomputing/pyquil/blob/master/LICENSE#L204 , accessed June 7, 2018.
  28. Microsoft Quantum Development Kit License, marketplace.visualstudio.com/items/quantum.DevKit/license , accessed June 7, 2018.
  29. Hao Zhang, Chun-Xiao Liu, Sasa Gazibegovic, et al. Quantized Majorana conductance , Nature 556 , 74-79 (05 April 2018).
  30. 16-qubit backend: IBM QX team, “ibmqx5 backend speciïŹcation V1.1.0,” (2018). Retrieved from https://ibm.biz/qiskit-ibmqx5 and https://quantumexperience.ng.bluemix.net/qx/devices on May 23, 2018.
  31. Talia Gershon, Celebrating the IBM Q Experience Community and Their Research , March 8, 2018.
  32. M. Reck, A. Zeilinger, HJ Bernstein, and P. Bertani, Experimental realization of any discrete unitary operator , Physical Review Letters, 73, p. 58, 1994.
  33. Ryan LaRose, Distributed memory techniques for classical simulation of quantum circuits , arXiv preprint (arXiv:1801.01037v1), 2018.
  34. Thomas Haner, Damian S. Steiger, 0.5 petabyte simulation of a 45-qubit quantum circuit , arXiv preprint (arXiv:1704.01127v2), September 18, 2017.
  35. Jianxin Chen, Fang Zhang, Cupjin Huang, Michael Newman, Yaoyun Shi, Classical simulation of intermediate-size quantum circuits , arXiv preprint (arXiv:1805.01450v2), 2018.
  36. Alwin Zulehner, Robert Wille, Advanced simulation of quantum computations , arXiv preprint ( arXiv:1707.00865v2 ), November 7, 2017.
  37. Jarrod R. McClean, Ian D. Kivlichan, Kevin J. Sung, et al., OpenFermion: The electronic structure package for quantum computers , arXiv:1710.07629, 2017.
  38. 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.
  39. IonQ website, https://ionq.co/ , accessed June 15, 2018.
  40. D-Wave: The quantum computing company, https://www.dwavesys.com/home , accessed June 20, 2018.
  41. 4 2018 Rigetti 20- , . , 8- «- ». , 20- (, , ).
  42. 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/ .
  43. , - - . QISKit, ACQUA , pyQuil.
  44. pyQuil : , from pyquil.gates import H, MEASURE . pyquil.gates , , , .
  45. , () . , () , , .
  46. IBM, 31 2018 , « » Python Cython, .

A

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 , , , ,


H=∑ihiσxi+∑i,jJijσziσzj.


D-Wave , — 2048 , Matlab, C/C++ Python . /, D-Wave . D-Wave .


B

B.


ProjectQ C++. Dell XPS 13 Developer Edition 64- Ubuntu 16.04 LTS 8 Intel Core i7-8550U 1,80 .


 # ------------------------------------------------------------------------------ # imports # ------------------------------------------------------------------------------ from projectq import MainEngine import projectq.ops as ops from projectq.backends import Simulator import sys import time # ------------------------------------------------------------------------------ # number of qubits and depth # ------------------------------------------------------------------------------ if len(sys.argv) > 1: n = int(sys.argv[1]) else: n = 16 if len(sys.argv) > 1: depth = int(sys.argv[2]) else: depth = 10 # ------------------------------------------------------------------------------ # engine and qubit register # ------------------------------------------------------------------------------ eng = MainEngine(backend=Simulator(gate_fusion=True), engine_list=[]) qbits = eng.allocate_qureg(n) # ------------------------------------------------------------------------------ # circuit # ------------------------------------------------------------------------------ # timing -- get the start time start = time.time() # random circuit for level in range(depth): for q in qbits: ops.H | q ops.SqrtX | q if q != qbits[0]: ops.CNOT | (q, qbits[0]) # measure for q in qbits: ops.Measure | q # flush the engine eng.flush() # timing -- get the end time runtime = time.time() - start # print out the runtime print(n, depth, runtime) 

, , 7. , QISKit — .


C

C. :


. , QDK , , . — , — — . . , , , — , .


, , . , QISKit.



8. , circuit_drawer , QISKit v0.5.4.


pyQuil


 #!/usr/bin/env python3 # -*- coding: utf-8 -*- # ============================================================================== # teleport.py # # Teleportation circuit in pyQuil. # ============================================================================== # ------------------------------------------------------------------------------ # imports # ------------------------------------------------------------------------------ from pyquil.quil import Program from pyquil import api import pyquil.gates as gate # ------------------------------------------------------------------------------ # program and simulator # ------------------------------------------------------------------------------ qprog = Program() qvm = api.QVMConnection() # ------------------------------------------------------------------------------ # teleportation circuit # ------------------------------------------------------------------------------ # teleport |1> to qubit three qprog += gates.X(0) # main circuit qprog += [gates.H(1), gates.CNOT(1, 2), gates.CNOT(0, 1), gates.H(0), gates.MEASURE(0, 0), gates.MEASURE(1, 1)] # conditional operations qprog.if_then(0, gates.Z(2)) qprog.if_then(1, gates.X(2)) # measure qubit three qprog.measure(2, 2) # ------------------------------------------------------------------------------ # run the circuit and print the results # ------------------------------------------------------------------------------ print(qvm.run(qprog)) # optionally print the quil code print(qprog) 

QISKit


 #!/usr/bin/env python3 # -*- coding: utf-8 -*- # ============================================================================== # teleport.py # # Teleportation circuit in QISKit. # ============================================================================== # ------------------------------------------------------------------------------ # imports # ------------------------------------------------------------------------------ from qiskit import QuantumRegister, ClassicalRegister, QuantumCircuit, execute # ------------------------------------------------------------------------------ # registers and quantum circuit # ------------------------------------------------------------------------------ qreg = QuantumRegister(3) creg = ClassicalRegister(3) qcircuit = QuantumCircuit(qreg, creg) # ------------------------------------------------------------------------------ # do the circuit # ------------------------------------------------------------------------------ # teleport |1> to qubit three qcircuit.x(qreg[0]) # main circuit qcircuit.h(qreg[0]) qcircuit.cx(qreg[1], qreg[2]) qcircuit.cx(qreg[0], qreg[1]) qcircuit.h(qreg[0]) qcircuit.measure(qreg[0], creg[0]) qcircuit.measure(qreg[1], creg[1]) # conditional operations qcircuit.z(qreg[2]).c_if(creg[0][0], 1) qcircuit.x(qreg[2]).c_if(creg[1][0], 1) # measure qubit three qcircuit.measure(qreg[2], creg[2]) # ------------------------------------------------------------------------------ # run the circuit and print the results # ------------------------------------------------------------------------------ result = execute(qcircuit, 'local_qasm_simulator').result() counts = result.get_counts() print(counts) # optionally print the qasm code print(qcircuit.qasm()) # optionally draw the circuit from qiskit.tools.visualization import circuit_drawer circuit_drawer(qcircuit) 

ProjectQ


 #!/usr/bin/env python3 # -*- coding: utf-8 -*- # ============================================================================== # teleport.py # # Teleportation circuit in ProjectQ. # ============================================================================== # ------------------------------------------------------------------------------ # imports # ------------------------------------------------------------------------------ from projectq import MainEngine from projectq.meta import Control import projectq.ops as ops # ------------------------------------------------------------------------------ # engine and qubit register # ------------------------------------------------------------------------------ # engine eng = MainEngine() # allocate qubit register qbits = eng.allocate_qureg(3) # ------------------------------------------------------------------------------ # teleportation circuit # ------------------------------------------------------------------------------ # teleport |1> to qubit three ops.X | qbits[0] # main circuit ops.H | qbits[1] ops.CNOT | (qbits[1], qbits[2]) ops.CNOT | (qbits[0], qbits[1]) ops.H | qbits[0] ops.Measure | (qbits[0], qbits[1]) # conditional operations with Control(eng, qbits[1]): ops.X | qbits[2] with Control(eng, qbits[1]): ops.Z | qbits[2] # measure qubit three ops.Measure | qbits[2] # ------------------------------------------------------------------------------ # run the circuit and print the results # ------------------------------------------------------------------------------ eng.flush() print("Measured:", int(qbits[2])) 

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; } } 

Source: https://habr.com/ru/post/fr418505/


All Articles