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.
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.
À propos, Hamiltonian a les valeurs suivantes pour toutes les combinaisons de $ q (0) et q (1) $.
Exécutez avec Google Colabratory. La version de Qiskit est "0.14.1".
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!
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.
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