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/
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.
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()
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
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 $.
Amusement informatique quantique
Recommended Posts