Nachdem wir den Quantengattersimulator Blueqat geübt haben, wollen wir mit dem VQE-Algorithmus eine einfache Hamilton-Basisenergie finden. Was ist Blueqat: https://blueqat.readthedocs.io/ja/latest/ Was ist VQE: http://dojo.qulacs.org/ja/latest/notebooks/5.1_variational_quantum_eigensolver.html Andere Seiten, auf die verwiesen wird: https://qiita.com/YuichiroMinato/items/62444351b712743d83b7 http://dkopczyk.quantee.co.uk/vqe/
Diesmal, wie dieser Artikel, RY, um $ \ ket {0} = (1, 0) ^ {\ mathrm {T}} $ anzugeben Indem das Gate ($ \ theta $) funktioniert, wird ein Zustand $ \ ket {\ psi (\ theta)} $ erstellt, der vom Parameter $ \ theta $ abhängt. Berechnen Sie den Wert des inneren Produkts $ \ braket {\ psi (\ theta)} {H \ psi (\ theta)} $ mit verschiedenen $ \ theta $ -Werten. Dieses innere Produkt $ \ braket {\ psi (\ theta)} {H \ psi (\ theta)} $ ist aufgrund der [Variationsmethode] das kleinste (https://en.wikipedia.org/wiki/Variational_method_(quantum_mechanics)). Durch Auffinden von $ \ theta (= \ theta_ {\ mathrm {min}}) $ wird der Basiszustand $ \ ket {\ psi (\ theta_ {\ mathrm {min}})} $ gefunden. Das RY-Gatter ($ \ theta $) ist eine Operation, die den Zustand um die y-Achse der Blochkugel dreht.
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)
Auch diesmal als Hamiltonian $ H $, Pauli Matrix $ Z $ wie in diesem Artikel
Z = \left(
\begin{array}{cc}
1 & 0 \\
0 & -1\\
\end{array}
\right)
Wird genutzt. Ursprünglich ist $ Z $ diagonalisiert und sein Grundzustand ist $ \ ket {1} = (0, 1) ^ {\ mathrm {T}} $ (komplexes Vielfaches), also dieser Parameter $ Die \ theta $ -Suche ist erfolgreich, wenn festgestellt wird, dass $ \ theta = \ pi $ ein Parameter ist, der den Basiszustand angibt. Weil in dieser Einstellung
\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)
Deswegen.
Mach es mit Jupiter Notebook. Wenn Sie Blueqat nicht installiert haben, installieren Sie pip unten.
!pip3 install blueqat
Importieren Sie die diesmal verwendete Bibliothek
import numpy as np
import matplotlib.pyplot as plt
from blueqat import Circuit
Bereiten Sie als Parameterkandidaten zunächst 20 gleiche Teile von $ 0 $ bis $ 2 \ pi $ vor.
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])
Verwenden Sie zunächst den vierten Winkel (Winkel [3] = 0,99208189), um das innere Produkt $ \ braket {\ psi (\ theta)} {H \ psi (\ theta)} $ zu berechnen. In Blueqat können Sie eine Gate-Schaltung erstellen, indem Sie zuerst eine Schaltung (Circuit ()) vorbereiten und ein Gate (diesmal RY-Gate) hinzufügen. Fügen Sie für das RY-Gatter ry ({Winkel}) [{wirkende Quantenbitnummer}] hinzu, wie unten gezeigt.
#Schaltkreis
Circuit().ry(angles[3])[0]
Wenn das Laufverfahren auf der Gate-Schaltung ausgeführt wird, wird der Zustandsvektor in diesem Stadium durch numpy erhalten.
#Weil es im Ausgangszustand ist| 0>
Circuit().run()
# array([1.+0.j])
# | 0>Zustand nach Anwenden des RY-Gatters auf
Circuit().ry(angles[3])[0].run()
# array([0.87947375+0.j, 0.47594739+0.j])
Berechnen Sie nun tatsächlich das innere Produkt $ \ braket {\ psi (\ theta)} {H \ psi (\ theta)} $. Erstens sieht $ \ ket {\ psi (\ theta)} $ folgendermaßen aus:
psi = Circuit().ry(angles[3])[0].run()
psi
# array([0.87947375+0.j, 0.47594739+0.j])
Dann wird $ \ ket {H \ psi (\ theta)} $ wie folgt.
h_psi = Circuit().ry(angles[3])[0].z[0].run()
h_psi
# array([ 0.87947375+0.j, -0.47594739+0.j])
Von diesen ist das innere Produkt $ \ braket {\ psi (\ theta)} {H \ psi (\ theta)} $ wie folgt.
np.dot(psi, h_psi)
# (0.5469481581224267+0j)
Berechnen Sie dann dieses innere Produkt für die ersten 20 erstellten Winkel, zeichnen Sie die horizontale Achse als Winkel und die vertikale Achse als inneres Produkt und zeichnen Sie eine Linie wie folgt.
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()
Es scheint, dass der Mindestwert in der Nähe von $ \ theta = 3 $ liegt, sodass der VQE-Algorithmus erfolgreich ist.
Übrigens können Sie beim Erstellen eines Zustands $ \ ket {\ psi (\ theta)} $, der vom Parameter $ \ theta $ abhängt, das RX-Gatter ($ \ theta
RZ(\theta) =
\left(
\begin{array}{cc}
e^{-i\frac{\theta}{2}} & 0 \\
0 & e^{ i\frac{\theta}{2}}\\
\end{array}
\right)
Der dadurch erstellte Zustand $ \ ket {\ psi (\ theta)} $ hat die Form von
\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)
Dies liegt daran, dass der Basiszustand $ \ ket {1} = (0, 1) ^ {\ mathrm {T}} $ (Multiplex) nicht mit dem Wert eines Parameters $ \ theta $ erstellt werden kann.
Quantencomputerspaß
Recommended Posts