[PYTHON] Essayez l'algorithme Variational-Quantum-Eigensolver (VQE) avec Blueqat

\def\bra#1{\mathinner{\left\langle{#1}\right|}} \def\ket#1{\mathinner{\left|{#1}\right\rangle}} \def\braket#1#2{\mathinner{\left\langle{#1}\middle|#2\right\rangle}}

Après avoir pratiqué le simulateur de porte quantique Blueqat, trouvons une énergie de base hamiltonienne simple avec l'algorithme VQE. Qu'est-ce que Blueqat: https://blueqat.readthedocs.io/ja/latest/ Qu'est-ce que VQE: http://dojo.qulacs.org/ja/latest/notebooks/5.1_variational_quantum_eigensolver.html Autres pages référencées: https://qiita.com/YuichiroMinato/items/62444351b712743d83b7 http://dkopczyk.quantee.co.uk/vqe/

Réglage

Cette fois, comme cet article, RY pour déclarer $ \ ket {0} = (1, 0) ^ {\ mathrm {T}} $ En faisant fonctionner la porte ($ \ theta $), un état $ \ ket {\ psi (\ theta)} $ qui dépend du paramètre $ \ theta $ est créé. Calculez la valeur du produit interne $ \ braket {\ psi (\ theta)} {H \ psi (\ theta)} $ avec diverses valeurs $ \ theta $, Ce produit interne $ \ braket {\ psi (\ theta)} {H \ psi (\ theta)} $ est le plus petit en raison de la méthode de variation. En trouvant $ \ theta (= \ theta_ {\ mathrm {min}}) $, l'état de base $ \ ket {\ psi (\ theta_ {\ mathrm {min}})} $ sera trouvé. La porte RY ($ \ theta $) est une opération qui fait pivoter l'état autour de l'axe y de la sphère bloch.

RY(\theta) = 
\left(
    \begin{array}{cc}
            \cos{\Big( \frac{\theta}{2}\Big)} & -\sin{\Big( \frac{\theta}{2}\Big)} \\
             \sin{\Big( \frac{\theta}{2}\Big)} &  \cos{\Big( \frac{\theta}{2}\Big)}\\
    \end{array}
\right)

Cette fois également, comme hamiltonien $ H $, matrice de Pauli $ Z $ comme dans cet article

Z = \left(
    \begin{array}{cc}
            1 & 0 \\
            0 & -1\\
    \end{array}
\right)

Est utilisé. À l'origine, $ Z $ est diagonalisé, et son état de base est $ \ ket {1} = (0, 1) ^ {\ mathrm {T}} $ (multiple complexe), donc ce paramètre $ La recherche \ theta $ est réussie s'il s'avère que $ \ theta = \ pi $ est un paramètre qui donne l'état de base. Parce que dans ce cadre

\ket{\psi(\theta = \pi)} = \left(
    \begin{array}{cc}
            \cos{\Big( \frac{\pi}{2}\Big)} & -\sin{\Big( \frac{\pi}{2}\Big)} \\
             \sin{\Big( \frac{\pi}{2}\Big)} &  \cos{\Big( \frac{\pi}{2}\Big)}\\
    \end{array}
\right)
 \left(
    \begin{array}{c}
            1  \\
             0 \\
    \end{array}
\right)
=
\left(
    \begin{array}{cc}
            0 & -1 \\
            1 &  0\\
    \end{array}
\right)
 \left(
    \begin{array}{c}
            1  \\
             0 \\
    \end{array}
\right)
=
 \left(
    \begin{array}{c}
            0  \\
             1 \\
    \end{array}
\right)

C'est pourquoi.

Essayez en fait d'utiliser Blueqat

Faites-le avec le notebook jupyter. Si vous n'avez pas installé Blueqat, installez pip ci-dessous.

!pip3 install blueqat

Importez la bibliothèque utilisée cette fois

import numpy as np
import matplotlib.pyplot as plt
from blueqat import Circuit

Tout d'abord, en tant que paramètres candidats, préparez 20 parties égales de 0 $ à 2 $ \ pi $.

angles = np.linspace(0.0,2*np.pi,20)
angles
# array([0.        , 0.33069396, 0.66138793, 0.99208189, 1.32277585,
#       1.65346982, 1.98416378, 2.31485774, 2.64555171, 2.97624567,
#       3.30693964, 3.6376336 , 3.96832756, 4.29902153, 4.62971549,
#       4.96040945, 5.29110342, 5.62179738, 5.95249134, 6.28318531])

Tout d'abord, utilisez le quatrième angle (angle [3] = 0.99208189) pour calculer le produit interne $ \ braket {\ psi (\ theta)} {H \ psi (\ theta)} $. Dans Blueqat, vous pouvez construire un circuit de porte en préparant d'abord un circuit (Circuit ()) et en y ajoutant une porte (porte RY cette fois). Pour la porte RY, ajoutez ry ({angle}) [{numéro de bit quantique actif}] comme indiqué ci-dessous.

#circuit
Circuit().ry(angles[3])[0]

De plus, lorsque la méthode d'exécution est exécutée sur le circuit de porte, le vecteur d'état à ce stade est obtenu par numpy.

#Parce qu'il est dans l'état initial| 0>
Circuit().run()
# array([1.+0.j])

# | 0>État après application de la porte RY à
Circuit().ry(angles[3])[0].run()
# array([0.87947375+0.j, 0.47594739+0.j])

Maintenant, calculez le produit intérieur $ \ braket {\ psi (\ theta)} {H \ psi (\ theta)} $. Tout d'abord, $ \ ket {\ psi (\ theta)} $ ressemble à ceci:

psi = Circuit().ry(angles[3])[0].run()
psi
# array([0.87947375+0.j, 0.47594739+0.j])

Alors, $ \ ket {H \ psi (\ theta)} $ devient comme suit.

h_psi = Circuit().ry(angles[3])[0].z[0].run()
h_psi
# array([ 0.87947375+0.j, -0.47594739+0.j])

A partir de ceux-ci, le produit interne $ \ braket {\ psi (\ theta)} {H \ psi (\ theta)} $ est le suivant.

np.dot(psi, h_psi)
# (0.5469481581224267+0j)

Ensuite, calculez ce produit intérieur pour les 20 premiers angles créés, tracez l'axe horizontal comme angle et l'axe vertical comme produit intérieur et tracez une ligne comme suit.

energies = []
for angle in angles:
    psi = Circuit().ry(angle)[0].run()
    z_psi = Circuit().ry(angle)[0].z[0].run()
    energies.append(np.dot(psi, z_psi))
plt.xlabel('angle') 
plt.ylabel('Expectation value') 
plt.plot(angles, energies) 
plt.show() 
スクリーンショット 2020-02-09 20.52.21.png

Il semble que la valeur minimale soit prise près de $ \ theta = 3 $, donc l'algorithme VQE réussit. Au fait, lors de la création d'un état $ \ ket {\ psi (\ theta)} $ qui dépend du paramètre $ \ theta , vous pouvez utiliser la porte RX ( \ theta ) au lieu de la porte RY ( \ theta ). L'algorithme VQE réussit. Cependant, il ne réussit pas à la porte RZ ( \ theta ). C'est RZ ( \ theta $)

RZ(\theta) = 
\left(
    \begin{array}{cc}
            e^{-i\frac{\theta}{2}} & 0 \\
             0 &  e^{ i\frac{\theta}{2}}\\
    \end{array}
\right)

L'état $ \ ket {\ psi (\ theta)} $ créé par ceci est sous la forme de

\ket{\psi(\theta)} = \left(
    \begin{array}{cc}
            e^{-i\frac{\theta}{2}} & 0 \\
             0 &  e^{ i\frac{\theta}{2}}\\
    \end{array}
\right)
 \left(
    \begin{array}{c}
            1  \\
             0 \\
    \end{array}
\right)
=
 \left(
    \begin{array}{c}
            e^{-i\frac{\theta}{2}}  \\
             0 \\
    \end{array}
\right)
=
e^{-i\frac{\theta}{2}}
\left(
    \begin{array}{c}
            1  \\
             0 \\
    \end{array}
\right)

En effet, l'état de base $ \ ket {1} = (0, 1) ^ {\ mathrm {T}} $ (multiplex) ne peut être créé avec la valeur d'aucun paramètre $ \ theta $.

finalement

Amusement informatique quantique

Recommended Posts

Essayez l'algorithme Variational-Quantum-Eigensolver (VQE) avec Blueqat
Comment essayer l'algorithme des amis d'amis avec pyfof
J'ai essayé d'implémenter VQE avec Blueqat
Essayez de brouiller l'image avec opencv2
Essayez d'utiliser l'appareil photo avec OpenCV de Python
Rechercher le labyrinthe avec l'algorithme python A *
Essayez le service de trading d'algorithmes basé sur le cloud "Quantopian"
Essayez de réécrire le fichier avec la commande less
Essayez de résoudre le problème du voyageur de commerce avec un algorithme génétique (théorie)
Essayez de résoudre le problème du fizzbuzz avec Keras
Essayez de résoudre le problème du voyageur de commerce avec un algorithme génétique (code Python)
Essayez de résoudre le problème du voyageur de commerce avec un algorithme génétique (résultat de l'exécution)
Essayez de résoudre le diagramme homme-machine avec Python
Visualisez le comportement de l'algorithme de tri avec matplotlib
Trouvez l'itinéraire le plus court avec l'algorithme de Python Dijkstra
Résolvez le problème du sac à dos Python avec l'algorithme glouton
Essayez de résoudre le livre des défis de programmation avec python3
Essayez de traduire avec Python tout en conservant la mise en page PDF
Visualisons la pièce avec tarte aux râpes, partie 1
Essayez de déplacer le servomoteur avec RasPi (version à 180 degrés)
Essayez d'obtenir le contenu de Word avec Golang
[Neo4J] ④ Essayez de gérer la structure du graphe avec Cypher
Essayez de gratter avec Python.
Essayez SNN avec BindsNET
Essayez la régression avec TensorFlow
Essayez de gratter les données COVID-19 Tokyo avec Python
Essayez d'utiliser l'API Twitter rapidement et facilement avec Python
CNN avec keras Essayez avec l'image que vous avez prise
Essayez de jouer avec l'uprobe qui prend directement en charge Systemtap
Trouver une solution au problème N-Queen avec un algorithme génétique (2)
[Python] Essayez d'optimiser les paramètres de systole FX avec un algorithme génétique
J'ai essayé d'implémenter l'algorithme FloodFill avec TRON BATTLE de CodinGame
Résolvez le livre en spirale (algorithme et structure de données) avec python!
Essayez d'automatiser le fonctionnement des périphériques réseau avec Python
Essayez de modéliser une distribution multimodale à l'aide de l'algorithme EM
Essayez de déchiffrer les caractères déformés dans le nom du fichier joint avec Python
Trouver une solution au problème N-Queen avec un algorithme génétique (1)
Essayez d'extraire les caractéristiques des données de capteur avec CNN