Algoritmo ni Shor
Tansiya ng paggamit: Tatlong segundo sa isang Eagle r3 processor (TANDAAN: Ito ay isang tantiya lamang. Maaaring mag-iba ang inyong runtime.)
Ang algoritmo ni Shor, na binuo ni Peter Shor noong 1994, ay isang makabagong quantum algorithm para sa pag-factor ng mga integer sa polynomial time. Ang kahalagahan nito ay nakasalalay sa kakayahan nitong mag-factor ng malalaking integer nang mas mabilis nang exponential kaysa sa alinmang kilalang classical algorithm, na bumabanta sa seguridad ng malawakang ginagamit na mga cryptographic system tulad ng RSA, na umaasa sa kahirapan ng pag-factor ng malalaking numero. Sa pamamagitan ng epektibong paglutas ng problemang ito sa sapat na makapangyarihang quantum computer, ang algoritmo ni Shor ay maaaring magdulot ng rebolusyon sa mga larangan tulad ng cryptography, cybersecurity, at computational mathematics, na nagpapahayag ng transformative power ng quantum computation.
Nakatuon ang tutorial na ito sa pagpapakita ng algoritmo ni Shor sa pamamagitan ng pag-factor ng 15 sa isang quantum computer.
Una, tutukuyin natin ang order finding problem at bubuo ng mga katumbas na circuit mula sa quantum phase estimation protocol. Susunod, pagaganahin natin ang mga order finding circuit sa tunay na hardware gamit ang pinakamaikling-lalim na mga circuit na maaari nating i-transpile. Ang huling seksyon ay kukumpletuhin ang algoritmo ni Shor sa pamamagitan ng pag-uugnay ng order finding problem sa integer factorization.
Tatapusin natin ang tutorial na may pag-uusap tungkol sa iba pang mga demonstrasyon ng algoritmo ni Shor sa tunay na hardware, na nakatuon sa parehong generic na mga implementasyon at sa mga iniayon para sa pag-factor ng mga partikular na integer tulad ng 15 at 21. Tandaan: Ang tutorial na ito ay mas nakatuon sa implementasyon at demonstrasyon ng mga circuit na may kaugnayan sa algoritmo ni Shor. Para sa isang malalim na educational resource sa materyal, mangyaring sumangguni sa kursong Fundamentals of quantum algorithms ni Dr. John Watrous, at mga papel sa seksyong References.
Mga Kinakailangan​
Bago magsimula sa tutorial na ito, siguraduhin na mayroon kayo ng mga sumusunod na naka-install:
- Qiskit SDK v2.0 o mas bago, na may suportang visualization
- Qiskit Runtime v0.40 o mas bago (
pip install qiskit-ibm-runtime)
Setup​
# Added by doQumentation — required packages for this notebook
!pip install -q numpy pandas qiskit qiskit-ibm-runtime
import numpy as np
import pandas as pd
from fractions import Fraction
from math import floor, gcd, log
from qiskit import QuantumCircuit, QuantumRegister, ClassicalRegister
from qiskit.circuit.library import QFT, UnitaryGate
from qiskit.transpiler import CouplingMap, generate_preset_pass_manager
from qiskit.visualization import plot_histogram
from qiskit_ibm_runtime import QiskitRuntimeService
from qiskit_ibm_runtime import SamplerV2 as Sampler
Hakbang 1: I-map ang mga classical input sa isang quantum problem​
Background​
Ang algoritmo ni Shor para sa integer factorization ay gumagamit ng isang intermediary problem na kilala bilang order finding problem. Sa seksyong ito, ipapakita natin kung paano lutasin ang order finding problem gamit ang quantum phase estimation.
Problema sa phase estimation​
Sa phase estimation problem, binibigyan tayo ng isang quantum state na ng qubit, kasama ng isang unitary quantum circuit na gumagana sa qubit. Ipinangako sa atin na ang ay isang eigenvector ng unitary matrix na na naglalarawan sa aksyon ng circuit, at ang ating layunin ay kalkulahin o tantiyahin ang eigenvalue na kung saan tumutugma ang . Sa madaling salita, ang circuit ay dapat mag-output ng approximation sa numerong na nakakatugon sa
Ang layunin ng phase estimation circuit ay tantiyahin ang sa bits. Sa matematika, nais nating makahanap ng na , kung saan ang . Ang sumusunod na larawan ay nagpapakita ng quantum circuit na tumantiya ng sa bits sa pamamagitan ng paggawa ng measurement sa qubit.
Sa circuit sa itaas, ang itaas na qubit ay sinimulan sa estado ng , at ang ibabang qubit ay sinimulan sa , na ipinangakong isang eigenvector ng . Ang unang sangkap sa phase estimation circuit ay ang mga controlled-unitary operation na responsable sa pagsasagawa ng phase kickback sa kanilang katumbas na control qubit. Ang mga controlled unitary na ito ay naka-exponentiate alinsunod sa posisyon ng control qubit, mula sa least significant bit hanggang sa most significant bit. Dahil ang ay isang eigenvector ng , ang estado ng ibabang qubit ay hindi naapektuhan ng operasyong ito, ngunit ang phase information ng eigenvalue ay kumakalat sa itaas na qubit.
Lumalabas na pagkatapos ng phase kickback operation sa pamamagitan ng mga controlled-unitary, ang lahat ng posibleng estado ng itaas na qubit ay orthonormal sa isa't isa para sa bawat eigenvector na ng unitary na . Samakatuwid, ang mga estadong ito ay perpektong maipag-kakaiba, at maaari nating i-rotate ang basis na kanilang binubuo pabalik sa computational basis upang gumawa ng measurement. Ang isang mathematical analysis ay nagpapakita na ang rotation matrix na ito ay tumutugma sa inverse quantum Fourier transform (QFT) sa -dimensional Hilbert space. Ang intuition sa likod nito ay ang periodic structure ng mga modular exponentiation operator ay naka-encode sa quantum state, at ang QFT ay nag-convert ng periodicity na ito sa mga nasu-sukat na peak sa frequency domain.
Para sa mas malalim na pag-unawa kung bakit ginagamit ang QFT circuit sa algoritmo ni Shor, inirerekomenda namin sa mambabasa ang kursong Fundamentals of quantum algorithms. Handa na tayong gumamit ng phase estimation circuit para sa order finding.
Problema sa order finding​
Upang tukuyin ang order finding problem, magsisimula tayo sa ilang konsepto ng number theory. Una, para sa anumang ibinigay na positive integer na , tukuyin ang set na bilang Ang lahat ng arithmetic operation sa ay ginagawa modulo . Partikular, ang lahat ng elemento na na coprime sa ay espesyal at bumubuo ng bilang Para sa isang elemento na , ang pinakamaliit na positive integer na na ay tinutukoy bilang order ng modulo . Tulad ng makikita natin sa ibang pagkakataon, ang paghahanap ng order ng isang ay magbibigay-daan sa atin upang i-factor ang . Upang buuin ang order finding circuit mula sa phase estimation circuit, kailangan natin ng dalawang pagsasaalang-alang. Una, kailangan nating tukuyin ang unitary na na magpapahintulot sa atin na mahanap ang order na , at pangalawa, kailangan nating tukuyin ang isang eigenvector na ng upang ihanda ang panimulang estado ng phase estimation circuit.
Upang iugnay ang order finding problem sa phase estimation, isasaalang-alang natin ang operasyon na tinukoy sa isang system na ang mga classical state ay tumutugma sa , kung saan tayo ay nag-multiply ng isang fixed element na . Partikular, tutukuyin natin ang multiplication operator na na para sa bawat . Tandaan na implisito na ang produkto modulo ay kinukuha natin sa loob ng ket sa kanang bahagi ng equation. Ang isang mathematical analysis ay nagpapakita na ang ay isang unitary operator. Higit pa rito, lumalabas na ang ay may mga pares ng eigenvector at eigenvalue na nagpapahintulot sa atin na iugnay ang order na ng sa phase estimation problem. Partikular, para sa anumang pagpili ng , mayroon tayo na ay isang eigenvector ng na ang katumbas na eigenvalue ay , kung saan Sa pag-obserba, nakikita natin na ang isang convenient na pares ng eigenvector/eigenvalue ay ang estado na na may . Samakatuwid, kung makakahanap tayo ng eigenvector na , maaari nating tantiyahin ang phase na gamit ang ating quantum circuit at sa gayon ay makakuha ng tantiya ng order na . Gayunpaman, hindi ito madali gawin, at kailangan nating isaalang-alang ang alternatibo.
Isaalang-alang natin kung ano ang magreresulta sa circuit kung ihanda natin ang computational state na bilang panimulang estado. Ito ay hindi isang eigenstate ng , ngunit ito ay ang uniform superposition ng mga eigenstate na aming inilarawan sa itaas. Sa madaling salita, ang sumusunod na relasyon ay totoo. Ang implikasyon ng equation sa itaas ay kung itakda natin ang panimulang estado sa , makakakuha tayo ng eksaktong parehong resulta ng measurement na parang pumili tayo ng nang pantay-pantay na random at ginamit ang bilang eigenvector sa phase estimation circuit. Sa madaling salita, ang isang measurement ng itaas na qubit ay nagbubunga ng approximation na sa halaga ng kung saan ang ay pinili nang pantay-pantay na random. Ito ay nagbibigay-daan sa atin na matutunan ang na may mataas na antas ng kumpiyansa pagkatapos ng ilang independyenteng run, na siyang ating layunin.
Mga modular exponentiation operator​
Sa ngayon, inugnay natin ang phase estimation problem sa order finding problem sa pamamagitan ng pagtukoy ng at sa ating quantum circuit. Samakatuwid, ang huling natitirang sangkap ay ang paghahanap ng isang epektibong paraan upang tukuyin ang mga modular exponential ng bilang para sa . Upang isagawa ang computation na ito, nakikita natin na para sa anumang power na na ating pipiliin, maaari tayong lumikha ng circuit para sa hindi sa pamamagitan ng pag-uulit ng beses ang circuit para sa , kundi sa halip sa pamamagitan ng pagkalkula ng at pagkatapos ay paggamit ng circuit para sa . Dahil kailangan lang natin ng mga power na mga power din ng 2, maaari nating gawin ito nang epektibo sa classical gamit ang iterative squaring.
Hakbang 2: I-optimize ang problema para sa quantum hardware execution​
Partikular na halimbawa na may at ​
Maaari tayong huminto dito upang talakayin ang isang partikular na halimbawa at buuin ang order finding circuit para sa . Tandaan na ang posibleng nontrivial na para sa ay . Para sa halimbawang ito, pipiliin natin ang . Bubuo tayo ng operator at ng mga modular exponentiation operator na . Ang aksyon ng sa mga computational basis state ay ang mga sumusunod. Sa pag-obserba, nakikita natin na ang mga basis state ay na-shuffle, kaya mayroon tayong permutation matrix. Maaari nating buuin ang operasyong ito sa apat na qubit gamit ang mga swap gate. Sa ibaba, bubuo tayo ng at ng mga controlled- operation.
def M2mod15():
"""
M2 (mod 15)
"""
b = 2
U = QuantumCircuit(4)
U.swap(2, 3)
U.swap(1, 2)
U.swap(0, 1)
U = U.to_gate()
U.name = f"M_{b}"
return U
# Get the M2 operator
M2 = M2mod15()
# Add it to a circuit and plot
circ = QuantumCircuit(4)
circ.compose(M2, inplace=True)
circ.decompose(reps=2).draw(output="mpl", fold=-1)
def controlled_M2mod15():
"""
Controlled M2 (mod 15)
"""
b = 2
U = QuantumCircuit(4)
U.swap(2, 3)
U.swap(1, 2)
U.swap(0, 1)
U = U.to_gate()
U.name = f"M_{b}"
c_U = U.control()
return c_U
# Get the controlled-M2 operator
controlled_M2 = controlled_M2mod15()
# Add it to a circuit and plot
circ = QuantumCircuit(5)
circ.compose(controlled_M2, inplace=True)
circ.decompose(reps=1).draw(output="mpl", fold=-1)
Ang mga gate na gumagana sa mahigit dalawang qubit ay pag-hahatiin pa sa mga two-qubit gate.
circ.decompose(reps=2).draw(output="mpl", fold=-1)

Ngayon kailangan nating buuin ang mga modular exponentiation operator. Upang makakuha ng sapat na precision sa phase estimation, gagamitin natin ang walong qubit para sa estimation measurement. Samakatuwid, kailangan nating buuin ang na may para sa bawat .
def a2kmodN(a, k, N):
"""Compute a^{2^k} (mod N) by repeated squaring"""
for _ in range(k):
a = int(np.mod(a**2, N))
return a
k_list = range(8)
b_list = [a2kmodN(2, k, 15) for k in k_list]
print(b_list)
[2, 4, 1, 1, 1, 1, 1, 1]
Tulad ng makikita natin mula sa listahan ng mga halaga ng , bilang karagdagan sa na dati nating ginawa, kailangan din nating bumuo ng at . Tandaan na ang ay gumagana nang trivial sa mga computational basis state, kaya ito ay simpleng identity operator.
Ang ay gumagana sa mga computational basis state na ganito.