Kvantové algoritmy: Odhad fáze
Kento Ueda (15. května 2024)
Tento notebook představuje základní pojmy a implementaci kvantové Fourierovy transformace (QFT) a kvantového odhadu fáze (QPE).
Stáhni si pdf původní přednášky. Pamatuj, že některé úryvky kódu mohou být zastaralé, protože jde o statické obrázky.
Přibližný čas QPU potřebný pro tento experiment je 7 sekund.
1. Úvod
Kvantová Fourierova transformace (QFT)
Kvantová Fourierova transformace je kvantovým protějškem klasické diskrétní Fourierovy transformace. Jde o lineární transformaci aplikovanou na kvantové stavy, která zobrazuje výpočetní báze do jejich reprezentací ve Fourierově bázi. QFT hraje klíčovou roli v mnoha kvantových algoritmech a poskytuje efektivní metodu pro získávání informací o periodicitě z kvantových stavů. QFT lze implementovat pomocí operací s kvantovými hradly, jako jsou Hadamardova hradla a Control-Phase hradla pro Qubitů, což umožňuje exponenciální zrychlení oproti klasické Fourierově transformaci.
- Aplikace: Tvoří základ kvantových algoritmů, jako je Shorův algoritmus pro faktorizaci velkých celých čísel a diskrétní logaritmus.
Kvantový odhad fáze (QPE)
Kvantový odhad fáze je kvantový algoritmus používaný k odhadu fáze spojené s vlastním vektorem unitárního operátoru. Tento algoritmus vytváří most mezi abstraktními matematickými vlastnostmi kvantových stavů a jejich výpočetními aplikacemi.
- Aplikace: Umožňuje řešit úlohy, jako je hledání vlastních čísel unitárních matic a simulace kvantových systémů.
QFT a QPE společně tvoří zásadní páteř mnoha kvantových algoritmů řešících problémy, které jsou pro klasické počítače neproveditelné. Na konci tohoto notebooku získáš představu o tom, jak jsou tyto techniky implementovány.
2. Základy kvantové Fourierovy transformace (QFT)
# Added by doQumentation — required packages for this notebook
!pip install -q numpy qiskit qiskit-aer qiskit-ibm-runtime
from qiskit import QuantumCircuit, QuantumRegister, ClassicalRegister
from qiskit_aer import AerSimulator
from qiskit.visualization import plot_histogram, plot_bloch_multivector
from qiskit.quantum_info import Statevector
from qiskit.transpiler.preset_passmanagers import generate_preset_pass_manager
from qiskit_ibm_runtime import Sampler
from numpy import pi
Analogicky s diskrétní Fourierovou transformací QFT působí na kvantový stav pro Qubitů a zobrazuje ho na kvantový stav .
kde .
Nebo reprezentace pomocí unitární matice:
2.1. Intuice
Kvantová Fourierova transformace (QFT) převádí mezi dvěma bázemi: výpočetní (Z) bází a Fourierovou bází. Co však Fourierova báze v tomto kontextu znamená? Nejspíš si vybavíš, že Fourierova transformace funkce popisuje konvoluci se sinusoidální funkcí o frekvenci . Laicky řečeno: Fourierova transformace je funkce, která popisuje, kolik z každé frekvence bychom potřebovali, abychom sestavili funkci ze sinových (nebo kosinových) funkcí. Abys lépe pochopil, co v tomto kontextu QFT znamená, podívej se na níže uvedené sekvenční obrázky, které ukazují číslo zakódované binárně pomocí čtyř Qubitů:
Ve výpočetní bázi ukládáme čísla binárně pomocí stavů a .
Všimni si frekvence, s jakou se jednotlivé Qubity mění; nejlevější Qubit se překlápí při každém zvýšení čísla, další při každých 2 zvýšeních, třetí při každých 4 zvýšeních a tak dále.
Pokud na tyto stavy aplikujeme kvantovou Fourierovu transformaci, zobrazíme
(Stavy ve Fourierově bázi často označujeme pomocí vlnovky (~)).
Ve Fourierově bázi ukládáme čísla pomocí různých rotací kolem osy Z:
IFRAME
Úhel, o který se každý Qubit kolem osy Z otočí, určuje číslo, které chceme uložit. Ve stavu jsou všechny Qubity ve stavu . Jak je vidět ve výše uvedeném příkladu, k zakódování stavu na 4 Qubitech jsme nejlevější Qubit otočili o celé otáčky ( radiánů). Další Qubit je otočen o dvojnásobek ( radiánů, tedy celé otáčky), tento úhel se pak zdvojnásobuje pro další Qubit a tak dále.
Opět si všimni frekvence, s jakou se jednotlivé Qubity mění. Nejlevější Qubit (qubit 0) má v tomto případě nejnižší frekvenci a ten nejpravější nejvyšší.
2.2 Příklad: 1qubitová QFT
Uvažujme případ .
Unitární matici lze zapsat:
Tato operace je výsledkem aplikace Hadamardova Gate ().
2.3 Reprezentace QFT jako součinu
Zobecněme transformaci pro , působící na stav .
2.4 Příklad: Konstrukce obvodu pro 3qubitovou QFT
Z výše uvedeného popisu nemusí být zřejmé, jak sestrojit QFT Circuit. Prozatím si jen všimni, že očekáváme, že tři Qubits budou mít fáze, které se vyvíjejí různými „rychlostmi“. Přesné pochopení, jak se to promítá do Circuit, je ponecháno jako cvičení pro čtenáře. V přednáškovém pdf najdeš řadu diagramů a příkladů. Mezi další zdroje patří tato lekce z kurzu Fundamentals of quantum algorithms.
QFT budeme demonstrovat pouze pomocí simulátorů, a tak nebudeme používat framework Qiskit patterns, dokud nepřejdeme ke kvantovému odhadu fáze.
# Prepare for 3 qubits circuit
qr = QuantumRegister(3)
cr = ClassicalRegister(3)
qc = QuantumCircuit(qr, cr)
qc.h(2)
qc.cp(pi / 2, 1, 2) # Controlled-phase gate from qubit 1 to qubit 2
qc.cp(pi / 4, 0, 2) # Controlled-phase gate from qubit 0 to qubit 2
qc.draw(output="mpl")
qc.h(1)
qc.cp(pi / 2, 0, 1) # Controlled-phase gate from qubit 0 to qubit 1
qc.draw(output="mpl")
qc.h(0)
qc.draw(output="mpl")
qc.swap(0, 2)
qc.draw(output="mpl")
Jako příklad zkusíme aplikovat QFT na .
Nejprve potvrdíme binární zápis celého čísla 5 a vytvoříme Circuit kódující stav 5:
bin(5)
'0b101'
qc = QuantumCircuit(3)
qc.x(0)
qc.x(2)
qc.draw(output="mpl")
Kvantové stavy zkontrolujeme pomocí simulátoru Aer:
statevector = Statevector(qc)
plot_bloch_multivector(statevector)

Nakonec přidáme QFT a podíváme se na výsledný stav našich Qubits:
qc.h(2)
qc.cp(pi / 2, 1, 2)
qc.cp(pi / 4, 0, 2)
qc.h(1)
qc.cp(pi / 2, 0, 1)
qc.h(0)
qc.swap(0, 2)
qc.draw(output="mpl")
statevector = Statevector(qc)
plot_bloch_multivector(statevector)

Vidíme, že naše funkce QFT zafungovala správně. Qubit 0 byl otočen o plné otáčky, qubit 1 o plné otáčky (což odpovídá plné otáčky) a qubit 2 o plné otáčky (což odpovídá plné otáčky).
2.5 Cvičení: QFT
(1) Implementuj QFT pro 4 qubity.
##your code goes here##
(2) Aplikuj QFT na , simuluj a vykresli stavový vektor pomocí Blochovy sféry.
##your code goes here##
Řešení cvičení: QFT
(1)
qr = QuantumRegister(4)
cr = ClassicalRegister(4)
qc = QuantumCircuit(qr, cr)
qc.h(3)
qc.cp(pi / 2, 2, 3)
qc.cp(pi / 4, 1, 3)
qc.cp(pi / 8, 0, 3)
qc.h(2)
qc.cp(pi / 2, 1, 2)
qc.cp(pi / 4, 0, 2)
qc.h(1)
qc.cp(pi / 2, 0, 1)
qc.h(0)
qc.swap(0, 3)
qc.swap(1, 2)
qc.draw(output="mpl")
(2)
bin(14)
'0b1110'
qc = QuantumCircuit(4)
qc.x(1)
qc.x(2)
qc.x(3)
qc.draw("mpl")
qc.h(3)
qc.cp(pi / 2, 2, 3)
qc.cp(pi / 4, 1, 3)
qc.cp(pi / 8, 0, 3)
qc.h(2)
qc.cp(pi / 2, 1, 2)
qc.cp(pi / 4, 0, 2)
qc.h(1)
qc.cp(pi / 2, 0, 1)
qc.h(0)
qc.swap(0, 3)
qc.swap(1, 2)
qc.draw(output="mpl")
statevector = Statevector(qc)
plot_bloch_multivector(statevector)

3. Základy odhadu kvantové fáze (QPE)
Pro danou unitární operaci QPE odhaduje v , protože je unitární, všechny jeho vlastní hodnoty mají normu 1.
3.1 Postup
1. Nastavení
se nachází v jedné sadě qubitových registrů. Další sada qubitů tvoří čítací registr, do kterého uložíme hodnotu :
2. Superpozice
Aplikuj -bitovou operaci Hadamardova Gate na čítací registr:
3. Řízené unitární operace
Potřebujeme zavést řízené unitární , které aplikuje unitární operátor na cílový registr pouze tehdy, pokud příslušný řídicí bit je