Je veux faire fonctionner un ordinateur quantique avec Python

introduction

Google a démontré la transcendance quantique, et récemment, il y a eu beaucoup de discussions sur les ordinateurs quantiques, alors je me suis penché dessus à la légère. Cependant, il y avait une méthode que n'importe qui pouvait essayer de faire fonctionner un ordinateur quantique (qui sera décrite plus tard, mais la méthode de recuit quantique est différente de la méthode développée par Google). Alors je l'ai résumé ici. Comme je ne suis pas un expert dans ce domaine, il peut y avoir des erreurs dans l'explication. Veuillez noter ce point.

référence

J'ai fait référence à ce qui suit lors de la compréhension de l'ordinateur quantique et du fonctionnement réel de l'ordinateur quantique.

Qu'est-ce qu'un ordinateur quantique

À propos de l'explication de l'ordinateur quantique Parce que l'explication parue dans le journal Nikkei était complète et facile à comprendre Tout d'abord, je vais le citer tel quel.

▼ Ordinateur quantique Un ordinateur qui applique la loi physique «mécanique quantique» qui tient dans le monde microscopique, comme les atomes et les électrons qui composent une substance. Les ordinateurs conventionnels représentent et calculent les informations en unités de bits «0» et «1», mais une énorme quantité de calculs est nécessaire selon la façon dont 0 et 1 sont disposés. Les ordinateurs quantiques, quant à eux, utilisent un état spécial appelé «superposition», qui est à la fois 0 et 1. En appliquant ce principe, on s'attend à ce que les calculs qui étaient difficiles dans le passé puissent être effectués en peu de temps.

Dans un ordinateur quantique, l'existence d'un bit quantique qui peut avoir un état de superposition de ** 0 et 1 ** est très importante, et en utilisant cela, la meilleure combinaison de toutes les combinaisons peut être instantanément sélectionnée. On dit que la machine que l'on peut trouver est un ordinateur quantique.

Il existe actuellement deux méthodes pour les ordinateurs quantiques.

méthode Aperçu Fournisseur de développement
Méthode de recuit quantique Une méthode spécialisée pour le traitement des tâches d'optimisation de combinaison D-Systèmes de vagues, etc.
Méthode de porte quantique Une méthode polyvalente qui peut calculer n'importe quoi comme un ordinateur conventionnel Google,IBM etc.

Actuellement, les entreprises mènent des expériences de démonstration sur des machines de recuit quantique. En 2011, une entreprise appelée D-wave Systems au Canada a commencé la vente commerciale de machines de recuit quantique, et diverses entreprises mènent des expériences de démonstration.

Pour les entreprises japonaises, [Recruit Communications applique l'ordinateur quantique à l'optimisation des publicités](http://dwavejapan.com/recruit-communications-d-wave-collaborate-apply-quantum-computing-marketing-advertising-communications- Il semble que nous menions des travaux de recherche et développement visant l'optimisation /).

Cette fois, c'est la machine de recuit quantique des systèmes D-wave qui fonctionne sur Python. ** Depuis novembre 2019, n'importe qui peut faire fonctionner la machine de recuit quantique gratuitement pendant 1 minute simplement en s'enregistrant. ** **

Préparation

Prêt à faire fonctionner un ordinateur quantique

Tout d'abord, enregistrez-vous en tant qu'utilisateur depuis le site ici. Vous pouvez vous inscrire en entrant simplement votre nom, votre adresse e-mail et vos informations professionnelles, et aucune information de carte de crédit n'est requise.

スクリーンショット 2019-11-09 9.44.21.png

Lorsque vous vous connectez, vous verrez d'abord un écran comme celui-ci en haut. À l'extrême gauche, divers films d'explication expliquent ce que cette machine de recuit quantique peut faire. Vous pouvez voir une démo de l'ordinateur quantique au milieu, mais sachez que cela prendra du temps à partir de la minute d'essai. À l'extrême droite, vous trouverez une explication sur la façon d'exécuter une machine de recuit quantique avec la bibliothèque Python.

スクリーンショット 2019-11-04 18.33.11.png

Si vous faites défiler, vous verrez également un tableau de bord comme celui-ci. Ici vous pouvez voir combien de temps vous pouvez exécuter l'ordinateur quantique.

スクリーンショット 2019-11-04 18.33.30.png

Si vous l'utilisez, le temps sera ainsi réduit.

スクリーンショット 2019-11-09 9.53.24.png

Préparation de la bibliothèque Python

Bien qu'il s'agisse d'une bibliothèque, elle peut être installée normalement avec pip. Cependant, dans l'environnement que j'utilise toujours, des erreurs se sont produites fréquemment lors de l'installation pour une raison quelconque, j'ai donc démarré le conteneur à partir de l'image pour l'apprentissage automatique avec Docker et l'ai installé là-bas.

pip install dwave-ocean-sdk

Une fois cette installation terminée, exécutez la commande suivante.

dwave config create

Ensuite, ce qui suit sera affiché dans l'ordre du haut, mais en gros, il vous suffit d'appuyer sur Entrée et Entrez votre jeton API dans le champ "Jeton d'authentification". Vous pouvez copier votre jeton API en haut de Ma page.

Confirm configuration file path [/home/jane/.config/dwave/dwave.conf]:
Profile (create new) [prod]:
API endpoint URL [skip]:
Authentication token [skip]:Décrivez votre jeton API
Default client class (qpu or sw) [qpu]:
Default solver [skip]:
Configuration saved.

Les préparatifs sont terminés ici. Exécutez la commande suivante pour confirmer que la connexion est réussie.

dwave ping

Si ça ressemble à ça, ça va.

Using endpoint: https://my.dwavesys.url/
Using solver: My_DWAVE_2000Q

Wall clock time:
 * Solver definition fetch: 2007.239 ms
 * Problem submit and results fetch: 1033.931 ms
 * Total: 3041.171 ms

QPU timing:
 * total_real_time = 10493 us
 * anneal_time_per_run = 20 us
 * post_processing_overhead_time = 128 us
 * qpu_anneal_time_per_sample = 20 us

Résolvez des tâches avec un ordinateur quantique

Maintenant, résolvons la tâche en utilisant un ordinateur quantique.

Tâches à résoudre avec un ordinateur quantique

Cette fois, il est préparé comme exemple de problème de référence API, Nous allons résoudre la tâche d'ordonnancement avec des contraintes.

problème

Les règles suivantes sont stipulées comme conditions de détention de MTG. Nous essaierons d'extraire de manière exhaustive les conditions dans lesquelles MTG peut être détenu sans violer cette règle. ** Règles **

Résolvez la tâche

Problème de conversion

Commencez par convertir 0 et 1 afin que les conditions ci-dessus puissent être lues par l'ordinateur.

--Lorsque time est égal à 1, il est" dans le temps ". Quand il est égal à 0, il est" hors du temps ". --Lorsque location est à 1, il est" à l'intérieur du bureau ". Quand il est à 0, il est" à l'extérieur du bureau ". --Lorsque "length" est 1, "Le temps MTG est de 30 minutes ou moins" Quand 0, "Le temps MTG est de 30 minutes ou plus" --Lorsque «obligatoire» vaut 1, «participation forcée» lorsque 0, «participation volontaire»

Maintenant, créons une fonction qui supprime la conversion 0,1 ci-dessus pour la règle.

def scheduling(time, location, length, mandatory):
    if time:                                 #À temps
        return (location and mandatory)      #Participation obligatoire au bureau
    else:                                    #Non programmé
        return ((not location) and length)   #Conférence téléphonique de 30 minutes ou moins

Créez une condition de contrainte à partir de cette fonction à l'aide d'une bibliothèque.

import dwavebinarycsp
csp = dwavebinarycsp.ConstraintSatisfactionProblem(dwavebinarycsp.BINARY)
csp.add_constraint(scheduling, ['time', 'location', 'length', 'mandatory'])

De plus, il est converti en un format appelé modèle de vieillissement (problème de minimisation de format secondaire). ** Il est essentiel de convertir le problème dans ce format pour que l'ordinateur quantique puisse résoudre le problème **. Bien qu'il soit min_classical_gap spécifié par l'argument suivant, il n'est pas spécifié dans l'exemple de code officiel. Si vous gardez la valeur par défaut, cela ne fonctionnera pas, alors je l'ai spécifié ici, mais je n'ai pas pu trouver la cause même après avoir enquêté ... J'apprécierais que quelqu'un puisse me le dire.

bqm = dwavebinarycsp.stitch(csp, min_classical_gap=2.1)
print(bqm)
BinaryQuadraticModel({'a': -1.0, 'aux0': -2.0, 'aux1': 0.0, 'b': 2.0, 'c': 1.0, 'aux2': -1.0}, {('aux0', 'a'): 1.0, ('aux1', 'a'): 1.0, ('aux1', 'aux0'): -1.0, ('b', 'a'): -1.0, ('b', 'aux0'): -1.0, ('b', 'aux1'): -1.0, ('c', 'a'): 0.0, ('c', 'aux0'): -1.0, ('c', 'aux1'): -1.0, ('c', 'b'): 1.0, ('aux2', 'a'): 1.0, ('b', 'aux2'): -1.0, ('c', 'aux2'): 1.0}, 0.0, Vartype.SPIN)

La sortie ci-dessus correspond à cela mathématiquement. \sum_i^N q_ix_i + \sum_{i

Laisser l'ordinateur quantique résoudre le problème

from dwave.system.samplers import DWaveSampler
from dwave.system.composites import EmbeddingComposite
sampler = EmbeddingComposite(DWaveSampler(endpoint='https://cloud.dwavesys.com/sapi', token='Décrivez votre jeton API', solver='DW_2000Q_2_1'))

Demandez un échantillonnage à l'ordinateur quantique. Puisque les résultats échantillonnés sont probabilistes, demander plusieurs échantillons au lieu d'un seul appellera plusieurs solutions «optimales» et vous empêchera de choisir des solutions non optimales. Ce qui suit nécessite 5000 échantillons comme arguments.

response = sampler.sample(bqm, num_reads=5000)
#La solution avec la plus petite valeur énergétique est la solution optimale
min_energy = next(response.data(['energy']))

Jetons un coup d'œil aux résultats de l'échantillonnage.

total = 0
for sample, energy, occurrences in response.data(['sample', 'energy', 'num_occurrences']):
    total = total + occurrences 
    if energy == min_energy:
        time = 'À temps' if sample['time'] else 'Non programmé'
        location = 'Bureau' if sample['location'] else 'Conférence téléphonique'
        length = '30 minutes ou moins' if sample['length'] else 'Plus de 30 minutes'
        mandatory = 'Participation obligatoire' if sample['mandatory'] else 'Participation volontaire'
        sub = str(sample['mandatory'])
#         print("{}: During {} at {}, you can schedule a {} meeting that is {}::{}".format(occurrences, time, location, length, mandatory, sub))
        print(" {}Est{}alors,{}MTG{}Il peut être tenu à.".format(time, location, length, mandatory))
Il s'agit d'une conférence téléphonique en dehors des heures normales, et un MTG de 30 minutes ou moins peut être organisé volontairement.
Vous pouvez tenir un MTG de 30 minutes ou moins par participation obligatoire au bureau pendant l'heure prévue.
Vous pouvez tenir un MTG de plus de 30 minutes par participation obligatoire au bureau pendant l'heure prévue.
Vous pouvez tenir un MTG de plus de 30 minutes par participation obligatoire au bureau pendant l'heure prévue.
Vous pouvez tenir un MTG de plus de 30 minutes par participation obligatoire au bureau pendant l'heure prévue.
Il est possible de tenir un MTG de 30 minutes ou moins sur participation obligatoire par conférence téléphonique en dehors des heures régulières.
Vous pouvez tenir un MTG de plus de 30 minutes par participation obligatoire au bureau pendant l'heure prévue.

Il existe plusieurs solutions qui se chevauchent, mais toutes ont pu extraire des solutions qui satisfont aux conditions de contrainte.

Next J'ai essayé de faire fonctionner l'ordinateur quantique pour le moment, mais il y avait beaucoup de choses que je ne comprenais pas, comme la matrice QUBO et le modèle de vieillissement, alors j'aimerais étudier si j'ai le temps. De plus, cette fois, la quantité de données effectuées dans le test était faible, et comme cet ordinateur quantique lui-même était connecté dans le cloud, je ne pouvais pas vraiment ressentir la vitesse de calcul du sujet. Je pense que ce domaine est un domaine qui progresse de jour en jour, alors j'aimerais bien le suivre.

Recommended Posts

Je veux faire fonctionner un ordinateur quantique avec Python
Je veux faire un jeu avec Python
Je veux travailler avec un robot en python.
Je veux déboguer avec Python
Je veux créer un environnement Python
Je veux analyser les journaux avec Python
Je souhaite utiliser un caractère générique que je souhaite décortiquer avec Python remove
Je souhaite rechercher le texte intégral avec elasticsearch + python
[Introduction] Je veux créer un robot Mastodon avec Python! 【Débutants】
Je veux créer une fenêtre avec Python
Je souhaite utiliser le répertoire temporaire avec Python2
#Unresolved Je veux compiler gobject-introspection avec Python3
Je veux résoudre APG4b avec Python (chapitre 2)
Je souhaite intégrer une variable dans une chaîne Python
Je veux facilement implémenter le délai d'expiration en python
Je veux répéter plusieurs fois un générateur Python
Je veux que DQN Puniki frappe un home run
Je veux générer rapidement UUID (memo memo) ~ Edition Python ~
Je veux faire la transition avec un bouton sur le ballon
Je veux escalader une montagne avec l'apprentissage par renforcement
Je veux écrire en Python! (2) Écrivons un test
Je veux échantillonner au hasard un fichier avec Python
Je veux hériter de l'arrière avec la classe de données python
De l'achat d'un ordinateur à l'exécution d'un programme sur python
Je veux diviser une chaîne de caractères avec hiragana
[Python] Je veux faire d'une liste imbriquée un taple
Je veux AWS Lambda avec Python sur Mac!
Je souhaite créer manuellement une légende avec matplotlib
Je veux lier une variable locale avec lambda
J'ai fait une loterie avec Python.
Je veux faire ○○ avec les Pandas
J'ai créé un démon avec Python
Je veux pouvoir analyser des données avec Python (partie 3)
Je souhaite spécifier une autre version de Python avec pyvenv
Je veux pouvoir analyser des données avec Python (partie 1)
J'ai créé un package pour filtrer les séries chronologiques avec python
J'ai écrit rapidement un programme pour étudier la DI avec Python ①
Je veux créer un éditeur de blog avec l'administrateur de django
Je veux démarrer un environnement Jupyter avec une seule commande
Je veux démarrer beaucoup de processus à partir de python
Je veux faire une macro de clic avec pyautogui (désir)
Je veux pouvoir analyser des données avec Python (partie 4)
Je veux pouvoir analyser des données avec Python (partie 2)
Je veux faire une macro de clic avec pyautogui (Outlook)
[Python] Je souhaite utiliser l'option -h avec argparse
Je souhaite utiliser un environnement virtuel avec jupyter notebook!
Je veux installer le package de requirements.txt avec poésie
[Visualisation] Je veux dessiner un beau graphique avec Plotly
Je veux pouvoir exécuter Python avec VS Code
Je veux ajouter un joli complément à input () en python
[Python] Je souhaite utiliser uniquement l'index lors de la mise en boucle d'une liste avec une instruction for
Je veux dire aux gens qui souhaitent importer depuis un répertoire supérieur avec Python direnv
[Mac] Je souhaite créer un serveur HTTP simple qui exécute CGI avec Python
[5e] J'ai essayé de créer un certain outil de type Authenticator avec python
Je veux détecter des objets avec OpenCV
J'ai créé une bibliothèque qui lit facilement les fichiers de configuration avec Python
Je veux connaître la météo avec LINE bot avec Heroku + Python