[PYTHON] J'ai essayé de résoudre le problème d'optimisation des combinaisons avec Qiskit

J'ai déjà implémenté le problème d'optimisation de combinaison avec blueqat (voir l'article sur blueqat ici), mais cette fois je voudrais l'implémenter avec Qiskit. Étant donné que cet article est destiné à confirmer la méthode de mise en œuvre, je voudrais traiter du problème d'optimisation de combinaison simple lui-même.

Problème à résoudre

Le problème à résoudre est le même qu'avant. Trouvez la combinaison de $ q (0) $ et $ q (1) $ qui minimise le hamiltonien $ H $ suivant. $ H = 1 - q(0) - q(1) $ Notez que $ q (0) $ et $ q (1) $ valent 0 ou 1. Dans ce paramètre de problème, lorsque $ q (0) = q (1) = 1 $, hamiltonien $ H = -1 $ est la valeur minimale.

Information supplémentaire

À propos, Hamiltonian a les valeurs suivantes pour toutes les combinaisons de $ q (0) et q (1) $.

À propos de l'environnement d'exécution

Exécutez avec Google Colabratory. La version de Qiskit est "0.14.1".

Code source

Installez Qiskit

pip install qiskit

Importer les packages requis pour Qiskit

from qiskit import BasicAer
from qiskit.aqua.algorithms import QAOA
from qiskit.optimization.algorithms import MinimumEigenOptimizer
from qiskit.optimization import QuadraticProgram

Définition de variable, hamiltonien

qubo = QuadraticProgram()
#Définition de variable binaire
qubo.binary_var('q0')
qubo.binary_var('q1')
#Définition hamiltonien
qubo.minimize(linear=[-1,-1],constant=1.0)
print(qubo.export_as_lp_string())

Le résultat de la définition de la variable hamiltonien est le suivant.

\ This file has been generated by DOcplex
\ ENCODING=ISO-8859-1
\Problem name: CPLEX

Minimize
 obj: - q0 - q1 + 1
Subject To

Bounds
 0 <= q0 <= 1
 0 <= q1 <= 1

Binaries
 q0 q1
End

Résolvez le hamiltonien défini dans QAOA.

#Initialisation de MinimumEigensolver
qaoa_mes = QAOA(quantum_instance=BasicAer.get_backend('statevector_simulator'))

#Créer un optimiseur
qaoa = MinimumEigenOptimizer(qaoa_mes) 

#Calcul QAOA/Sortie de résultat
qaoa_result = qaoa.solve(qubo)
print("QAOA result:")
print(qaoa_result)

Le résultat de l'exécution est le suivant.

QAOA result:
x=[1.0,1.0], fval=-1.0

J'ai pu trouver une solution avec succès!

Impressions que j'ai essayé de mettre en œuvre

L'impression que j'ai essayé de mettre en œuvre est "difficile à écrire ...". Ce qui est particulièrement étrange, c'est la partie de la définition hamiltonienne. Je pensais que les variables binaires q0 et q1 pouvaient être traitées comme le symbole de Sympy, mais cela ne semble pas être le cas.

finalement

Veuillez me faire savoir s'il existe une meilleure façon de l'implémenter dans Qiskit. Personnellement, je pense que ce n'est pas très intelligent.

Recommended Posts

J'ai essayé de résoudre le problème d'optimisation des combinaisons avec Qiskit
J'ai essayé de résoudre le problème avec Python Vol.1
J'ai essayé de résoudre TSP avec QAOA
J'ai essayé de résoudre le problème d'optimisation du placement de la machine virtuelle (version simple) avec blueqat
Je voulais résoudre le problème ABC164 A ~ D avec Python
J'ai essayé de résoudre Soma Cube avec python
J'ai essayé de passer par l'optimisation bayésienne. (Avec des exemples)
J'ai essayé de résoudre la théorie des nombres entiers d'AOJ avec Python
[Keras] J'ai essayé de résoudre le problème de classification des zones de type beignet par apprentissage automatique [Étude]
J'ai essayé de créer automatiquement un rapport avec la chaîne de Markov
J'ai essayé de commencer avec Hy ・ Définir une classe
J'ai essayé de trier une colonne FizzBuzz aléatoire avec un tri à bulles.
J'ai essayé d'écrire dans un modèle de langage profondément appris
Le 15e temps réel hors ligne, j'ai essayé de résoudre le problème de l'écriture avec python
[5e] J'ai essayé de créer un certain outil de type Authenticator avec python
J'ai essayé de résoudre l'édition du débutant du livre des fourmis avec python
[2nd] J'ai essayé de créer un certain outil de type Authenticator avec python
[3ème] J'ai essayé de créer un certain outil de type Authenticator avec python
[Python] Un mémo que j'ai essayé de démarrer avec asyncio
J'ai essayé d'exécuter Platypus qui peut résoudre un petit problème d'optimisation - Partie 2
J'ai essayé de créer une liste de nombres premiers avec python
J'ai essayé de faire un processus d'exécution périodique avec Selenium et Python
J'ai essayé de créer une application de notification de publication à 2 canaux avec Python
J'ai essayé de créer des taureaux et des vaches avec un programme shell
J'ai essayé de créer une application todo en utilisant une bouteille avec python
[4th] J'ai essayé de créer un certain outil de type Authenticator avec python
[1er] J'ai essayé de créer un certain outil de type Authenticator avec python
J'ai essayé de résoudre le problème de planification des équipes par diverses méthodes
J'ai essayé de faire une étrange citation pour Jojo avec LSTM
J'ai essayé de créer un mécanisme de contrôle exclusif avec Go
J'ai essayé de créer un linebot (implémentation)
J'ai essayé de créer un linebot (préparation)
J'ai essayé de visualiser AutoEncoder avec TensorFlow
J'ai essayé de commencer avec Hy
Je voulais résoudre ABC160 avec Python
J'ai essayé de laisser optuna résoudre le nombre
J'ai essayé un langage fonctionnel avec Python
[AtCoder] Résoudre ABC1 ~ 100 Un problème avec Python
J'ai essayé d'implémenter CVAE avec PyTorch
J'ai créé une API Web
Je voulais résoudre ABC172 avec Python
J'ai essayé "Implémentation d'un algorithme génétique (GA) en python pour résoudre le problème du voyageur de commerce (TSP)"
J'ai essayé de communiquer avec un serveur distant par communication Socket avec Python.
J'ai essayé de mettre en œuvre une blockchain qui fonctionne réellement avec environ 170 lignes
J'ai essayé de créer un programme qui convertit les nombres hexadécimaux en nombres décimaux avec python
J'ai essayé d'exprimer de la tristesse et de la joie face au problème du mariage stable.
Comment écrire hors ligne en temps réel J'ai essayé de résoudre E11 avec python
J'ai essayé de créer un plug-in avec HULFT IoT Edge Streaming [Development] (2/3)
Essayez de résoudre le problème du voyageur de commerce avec un algorithme génétique (théorie)
J'ai essayé de créer un LINE BOT "Sakurai-san" avec API Gateway + Lambda
J'ai écrit un diagramme de configuration du système avec des diagrammes sur Docker
J'ai essayé de faire un signal avec Raspeye 4 (édition Python)
J'ai essayé de créer un plug-in avec HULFT IoT Edge Streaming [Execution] (3/3)