[PYTHON] Probieren Sie den Variational-Quantum-Eigensolver (VQE) -Algorithmus mit Blueqat aus

\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}}

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/

Aufbau

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.

Versuchen Sie es tatsächlich mit Blueqat

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() 
スクリーンショット 2020-02-09 20.52.21.png

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 ) anstelle des RY-Gatters ( \ theta ) verwenden. Der VQE-Algorithmus ist erfolgreich. Am RZ-Gate ( \ theta ) ist dies jedoch nicht erfolgreich. Das ist RZ ( \ 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.

Schließlich

Quantencomputerspaß

Recommended Posts

Probieren Sie den Variational-Quantum-Eigensolver (VQE) -Algorithmus mit Blueqat aus
So testen Sie den Friends-of-Friends-Algorithmus mit pyfof
Ich habe versucht, VQE mit Blueqat zu implementieren
Versuchen Sie, das Bild mit opencv2 zu verwischen
Versuchen Sie, die Kamera mit Pythons OpenCV zu verwenden
Durchsuche das Labyrinth mit dem Python A * -Algorithmus
Probieren Sie den Cloud-basierten Algorithmus-Handelsdienst "Quantopian" aus
Versuchen Sie, die Datei mit dem Befehl less neu zu schreiben
Versuchen Sie, das Problem des Handlungsreisenden mit einem genetischen Algorithmus zu lösen (Theorie)
Versuchen Sie, das Fizzbuzz-Problem mit Keras zu lösen
Versuchen Sie, das Problem des Handlungsreisenden mit einem genetischen Algorithmus (Python-Code) zu lösen.
Versuchen Sie, das Problem des Handlungsreisenden mit einem genetischen Algorithmus zu lösen (Ausführungsergebnis)
Versuchen Sie, das Mensch-Maschine-Diagramm mit Python zu lösen
Visualisieren Sie das Verhalten des Sortieralgorithmus mit matplotlib
Finden Sie den kürzesten Weg mit dem Python Dijkstra-Algorithmus
Lösen Sie das Python-Rucksackproblem mit dem Greedy-Algorithmus
Versuchen Sie, das Programmier-Herausforderungsbuch mit Python3 zu lösen
Versuchen Sie, mit Python zu übersetzen, während Sie das PDF-Layout beibehalten
Stellen wir uns den Raum mit Raspeltorte vor, Teil 1
Versuchen Sie, den Servomotor mit RasPi (180-Grad-Version) zu bewegen.
Versuchen Sie, den Inhalt von Word mit Golang zu erhalten
[Neo4J] ④ Versuchen Sie, die Diagrammstruktur mit Cypher zu handhaben
Versuchen Sie es mit Python.
Versuchen Sie SNN mit BindsNET
Versuchen Sie eine Regression mit TensorFlow
Versuchen Sie, COVID-19 Tokyo-Daten mit Python zu kratzen
Versuchen Sie, mit Python schnell und einfach auf die Twitter-API zuzugreifen
CNN mit Keras Versuchen Sie es mit dem Bild, das Sie aufgenommen haben
Versuchen Sie, mit dem Uprobe zu spielen, der Systemtap direkt unterstützt
Suche nach einer Lösung für das N-Queen-Problem mit einem genetischen Algorithmus (2)
[Python] Versuchen Sie, die FX-Systolenparameter mit einem genetischen Algorithmus zu optimieren
Ich habe versucht, den FloodFill-Algorithmus mit TRON BATTLE von CodinGame zu implementieren
Löse das Spiralbuch (Algorithmus und Datenstruktur) mit Python!
Versuchen Sie, den Betrieb von Netzwerkgeräten mit Python zu automatisieren
Versuchen Sie, eine multimodale Verteilung mithilfe des EM-Algorithmus zu modellieren
Versuchen Sie, die verstümmelten Zeichen im angehängten Dateinamen mit Python zu entschlüsseln
Suche nach einer Lösung für das N-Queen-Problem mit einem genetischen Algorithmus (1)
Versuchen Sie, Merkmale von Sensordaten mit CNN zu extrahieren