Ang eksperimento ng Stern-Gerlach gamit ang mga quantum computer
Para sa modyul na ito ng Qiskit in Classrooms, kailangan ng mga estudyante ng isang gumaganang Python environment na may naka-install na mga sumusunod na pakete:
qiskitv2.1.0 o mas bagoqiskit-ibm-runtimev0.40.1 o mas bagoqiskit-aerv0.17.0 o mas bagoqiskit.visualizationnumpypylatexenc
Para i-set up at i-install ang mga paketeng nasa itaas, tingnan ang gabay na I-install ang Qiskit. Para makapag-patakbo ng mga trabaho sa tunay na mga quantum computer, kailangan ng mga estudyante na mag-set up ng account sa IBM Quantum® sa pamamagitan ng pagsunod sa mga hakbang sa gabay na I-set up ang iyong IBM Cloud account.
Ang modyul na ito ay nasubok at gumamit ng 2 segundo ng QPU time. Tantiya lamang ito. Ang iyong aktwal na paggamit ay maaaring mag-iba.
# Added by doQumentation — required packages for this notebook
!pip install -q numpy qiskit qiskit-aer qiskit-ibm-runtime
# Uncomment and modify this line as needed to install dependencies
#!pip install 'qiskit>=2.1.0' 'qiskit-ibm-runtime>=0.40.1' 'qiskit-aer>=0.17.0' 'numpy' 'pylatexenc'
Panoorin ang walkthrough ng modyul ni Dr. Katie McCormick sa ibaba, o mag-click dito para mapanood ito sa YouTube.
Panimula
Noong unang bahagi ng 1900's, patuloy na dumarami ang katibayan ng quantized na pag-uugali sa antas ng mga atomo. Maraming matagumpay na interpretasyon ng datos tulad ng paliwanag ni Max Planck sa ultraviolet catastrophe, at mga eksperimento tulad ng ginawa nina Otto Stern at Walther Gerlach ang naging kritikal sa pagkukumbinsi sa mundo na kailangan ng isang sistema ng quantum mechanics, at na ang ilang mga pisikal na penomenon ay quantized. Sa kaso ng eksperimento ng Stern-Gerlach (naisip ni Stern noong 1921 at isinagawa nina Stern at Gerlach noong 1922), ang layunin ay suriin ang quantization ng angular momentum sa mga atomo.
Sa parehong panahon, isang kilalang modelo para sa atomo ang Bohr-Sommerfeld model, na isang extension ng Bohr model, at tulad ng Bohr model, hinulaan nito na ang mga elektron ay umiiral sa ilang mga quantized na orbit na katulad ng mga planeta na umiikot sa araw.

Kahit sa huli ay lumalabas na hindi sapat ang ganitong pagtrato para ipaliwanag ang quantum mechanical na pag-uugali ng atomo, sa pangkalahatan, hinulaan nito ang maraming napansin na penomenon, tulad ng mga diskretong spectral line ng mga atomo. Ang mga quantized na orbit ng mga elektron na may tiyak na mga enerhiya ay tumutugma sa mga quantized na halaga ng angular momentum. Ito ang orbital angular momentum na nastudyuhan nina Stern at Gerlach sa kanilang eksperimento, kahit na ang eksperimento ay naaangkop sa anumang uri ng quantized angular momentum, kabilang ang spin. Madalas mong marinig ang eksperimento ng Stern-Gerlach na inilalapat sa mga spin. Ang pokus ng orihinal na eksperimento ay nasa orbital angular momentum lamang dahil si George Uhlenbeck at Samuel Goudsmit ay hindi pa mag-tteorya ng pag-iral ng spin hanggang 1925.
Anuman ang uri ng angular momentum, ang isang karga na may angular momentum ay may magnetic moment. Sa klasikal na pagtrato ng orbital na paggalaw, inaasahan nating ang isang particle na may karga , masa at angular momentum ay magkakaroon ng magnetic moment na ibinibigay ng
Lumabas na halos parehong pormula ang nananatili para sa quantum mechanical angular momentum, na may karagdagang numerical ratio na may kaugnayan sa uri ng angular momentum, tinatawag na g-factor . Kapag pinagsama ang iba't ibang uri ng angular momentum, o ginageneralize sa isang arbitrary na uri, madalas makita ang na ginagamit sa halip na , kaya isinusulat natin:
Para sa mga klasikal na bagay, . Para sa mga elektron, , at maraming iba't ibang halaga para sa iba't ibang mga nucleus at subatomic particle. Ang pangunahing punto dito ay ang quantized angular momentum ay nangangahulugang quantized na magnetic moment!
Ang magnetic moment na ito ay magkakaroon ng torque sa isang magnetic field:
At magkakaroon ito ng puwersa sa isang magnetic field na may hindi-zerong gradient:
Madalas naming isasaalang-alang ang ekspresyon sa itaas nang isa-isang component, kaya maaaring maging kapaki-pakinabang na isipin ang -component nito:
Sa pamamagitan ng pagsasama ng mga ekspresyon, makukuha natin
Hindi alam nina Stern at Gerlach ang factor, ngunit kahit kasama ito sa ekspresyon, mayroon tayong puwersang katumbas ng ilang kilala o nasusukat na mga constant na pinarami ng angular momentum. Kaya gamit ang isang magnetic field na may kilalang gradient, at sinusukat ang deflection ng isang particle habang dumadaan ito sa field, dapat tayong makakuha ng impormasyon tungkol sa angular momentum. Ito ang kakanyahan ng eksperimento ng Stern-Gerlach.

Fig. Eksperimento ng Stern–Gerlach[1]: Mga silver atom na dumadaan sa isang inhomogeneous magnetic field, at nide-deflect pataas o pababa depende sa kanilang spin. Sa klasikal, inaasahan nating makakakita ng tuluy-tuloy na distribusyon sa screen, ngunit sa eksperimento ay dalawang natatanging tuldok ang nakikita natin.
Ang mga neutral na silver atom ay pinainit sa isang hurno. Habang dumadaloy ang isang beam ng mga silver atom mula sa hurno, ginamit ang mga beam collimator para pumili lamang ng mga atom na naglalakbay malapit sa gitna ng inhomogeneous magnetic field. Siyempre, ang ilang mga atom ay medyo lumihis sa kaliwa o kanan, at nakakaranas ng mas mahinang gradient sa field, o wala ni anumang gradient. Kaya, hindi kami labis na nababahala sa pag-uugali ng mga atom na malayo sa kaliwa o kanan. Interesado kami sa nangyayari sa mga atom na naglalakbay sa gitna ng channel, kung saan ang magnetic field gradient ay magbubunga ng puwersang nag-de-deflect ng mga atom sa -direksyon lamang.
Ano ang inaasahan natin, sa klasikal?
Paano mag-uugali ang mga atom na ito kung sila ay katulad ng malalaki, klasikal na mga magnet? Maaari mong gawin ang eksperimento. Isipin ang pagpapaputok ng maliliit na neodymium magnet sa tabi ng isang malaki, malakas na magnet. Ang oryentasyon ng maliliit na mga magnet ay random. Ngunit habang dumadaan sila sa malapit sa malaking magnet, mabilis silang nag-o-orient muli para mag-align sa field, at naakit sa malaking magnet. Karamihan sa maliliit na magnet ay nide-deflect patungo sa malaking magnet. Ang napaka-maingat na tagamasid ay maaaring magtanong, "Paano naman ang conservation of energy?"
Sa katunayan, ang isang magnetic moment sa isang panlabas na magnetic field ay may kaugnay na potential energy:
Kaya, kung ang isang magnetic moment ay mag-rotate sa panlabas na magnetic field, magkakaroon ng pagbabago ng enerhiya na ibinibigay ng:
Sa espesyal na kaso ng isang maliit na magnet na perpektong anti-aligned sa panlabas na field na bumabaligtad at nag-aalign dito, tumutugon ito sa isang pagbaba ng potential energy:
Kaya saan napupunta ang enerhiyang iyon? Ang isang klasikal na magnet tulad ng isang maliit na neodymium refrigerator magnet ay may maraming particle at maaaring mag-dissipate ng halos anumang dami ng enerhiya bilang init. Ang mga paunang at panghuling anggulo sa pagitan ng magnetic moment at ng panlabas na magnetic field ay maaaring maging anuman, at hindi bababa sa paunang oryentasyon ay magiging random. Kaya ang ibang dami ng enerhiya ay didi-dissipate bilang init para sa bawat maliit na magnet. Ngunit klasikal na walang problema dito, dahil ang isang ensemble ng mga klasikal na particle ay maaaring mag-dissipate ng anumang dami ng enerhiya bilang init.
Ano ang inaasahan natin kapag inilapat ang klasikal na pag-iisip sa antas ng mga atomo?
Hindi bababa sa, hindi ito pareho para sa mga magnet sa antas ng atomo, dahil mas kaunti ang mga particle na sangkot, mas kaunti ang mga degrees of freedom kung saan maaaring mag-dissipate ng enerhiya. Ang mga panukala ng maagang quantum mechanics ay nagmungkahi pa na ang enerhiyang maaaring masipsip ng isang indibidwal na particle, tulad ng elektron, ay magiging quantized, ibig sabihin ang isang elektron ay maaari lamang sumipsip ng ilang tiyak na dami ng enerhiya. Dahil ang mga random na paunang oryentasyon ay mangangailangan ng pag-dissipate ng mga random na dami ng enerhiya, hindi ito dapat posible para sa isang sistema na may mga quantized na energy level. Ang labis na enerhiya ay hindi maaaring i-dissipate bilang init. Kaya ano ang mangyayari sa halip?
Suriin ang iyong pag-unawa
Basahin ang mga tanong sa ibaba, mag-isip tungkol sa iyong mga sagot, pagkatapos ay mag-click sa mga tatsulok para makita ang mga solusyon.
Ipaliwanag kung ano sa tingin mo ang mangyayari sa sitwasyong tulad ng inilarawan sa itaas. Iyon ay, mayroon kang isang atomically maliit na magnet na hindi maaaring mag-dissipate ng anumang enerhiya bilang init. Kaya, anumang paunang magnetic potential energy ay dapat manatili sa sistema. Gayunpaman, ang isang torque ay inilalapat ng isang panlabas na magnetic field, na sumusubok na i-rotate ang maliit na magnet para mag-align sa panlabas na field. Ano ang mangyayari?
Sagot:
Ang maliit na magnetic moment ay mag-ro-rotate patungo sa pag-align sa panlabas na field. Ngunit kapag pansamantalang nag-align ito, magkakaroon ito ng rotational kinetic energy na magpapatuloy sa pag-rotate nito lampas sa field at pabalik sa hindi pag-align. Ang pag-uugaling ito ay makikita rin sa malalaking klasikal na magnet. Ngunit sa mga klasikal na sistemang iyon, ang pag-oscillate ng maliit na magnetic moment ay humihinto sa kalaunan habang ang enerhiya ay dini-dissipate bilang init. Ngunit sa isang sistema na walang ganoong dissipative na mekanismo, ang pag-oscillate ay dapat magpatuloy nang walang katapusan.
Dahil sa pag-uugaling inaasahan sa sagot sa itaas, anong distribusyon ng mga magnetic particle ang inaasahan mong makita sa screen?
Sagot:
Ang isang maayos na distribusyon mula sa ilang pinakamataas na deflection patungo sa mas malakas na gilid ng magnetic field (ang mga particle na nagkataong nagsimulang naka-align sa panlabas na field) hanggang sa ilang pinakamataas na deflection patungo sa mas mahinang gilid ng field (ang mga particle na nagsimulang anti-aligned sa panlabas na field), at bawat deflection sa pagitan, na tumutugon sa bawat paunang oryentasyon sa pagitan ng mga extrema na iyon.

Ano ang huhulaan ng quantum mechanics?
Marahil ang pinaka-kakaibang posibilidad sa lahat ay ang sumusunod: Paano kung ang angular momentum ng elektron ay quantized, ngunit pati na rin ang proyeksyon nito sa ilang axis ay quantized din? Ang quantization ng angular momentum bilang isang magnitude ay kawili-wili, ngunit maaari itong subukang ipaliwanag gamit ang klasikal na intuisyon, sa paraan na ang mga planetary orbit ay nag-settle sa mga naayos na landas na hindi nagtatawid sa isa't isa, na may ilang pinapayagang angular momenta lamang. Ngunit paano kung ang angular momentum vector na iyon ay maaari lamang tumuro nang eksakto kasabay ng o eksakto laban sa , ngunit hindi magkaroon ng anupamang component kasabay ng ? Paano kung kapag sinukat sa ibang direksyon, ang vector ay maaari lamang tumuro nang buo kasabay ng o buo laban sa , at wala sa pagitan? Magiging kakaiba iyon sa isang paraan na nilalabanan ang lahat ng klasikal na intuisyon.
Suriin ang iyong pag-unawa
Basahin ang tanong sa ibaba, mag-isip tungkol sa iyong sagot, pagkatapos ay mag-click sa tatsulok para makita ang solusyon.
Anong uri ng distribusyon ng mga particle sa screen ang inaasahan mong mahanap sa huling kaso na ito, kung saan ang proyeksyon ng angular momentum kasabay ng direksyon ng field ay quantized? Huwag mag-alinlang na isaalang-alang lamang ang mga particle na perpektong dumadaan sa gitna ng device, o isama ang mga medyo lumilihis sa gilid kung saan ang gradient ay mas mahina. Maging maliwanag lamang.
Sagot:
Ang mga particle sa gitna ng device ay makakaranas ng isang inhomogeneous field at lahat ay susukat na may isa sa dalawang oryentasyon ng kanilang mga magnetic moment. Kaya, sila ay alinman ay ma-deflect nang pinakamataas kasabay ng gradient o pinakamataas laban sa gradient, at wala sa pagitan. Siyempre, sa magkabilang gilid, kung saan ang gradient ay mas mahina, ang deflection ay mas maliit. Sa napaka-malalaking lateral na posisyon, maaari silang ganap na nasa labas ng gradient, at maaari lamang magkaroon ng isang rehiyon ng mga hindi nai-deflect na particle.

Paano makakatulong ang mga qubit sa atin para masubok ito?
Karamihan sa mga quantum computer ay gumagamit ng "mga qubit" — ang quantum analog ng mga klasikal na bit. Mas tiyak, idinisenyo sila para maging mga two-level system, katulad ng "on"/"off" na mga estado ng mga klasikal na bit. Ang mga quantum computing paradigm ay mayroon din na gumagamit ng mga three-level system (tinatawag na "mga qutrit") o marami-level na sistema (tinatawag na "mga qudit"). Ngunit karamihan sa gawain ay nakatuon sa mga qubit. Sa partikular, ang mga IBM® quantum computer ay gumagamit ng tinatawag na fixed-frequency transmon qubit. Ang mga ito ay medyo naiiba mula sa orbital o spin angular momentum ng mga atomo. Ngunit tulad ng spin ng isang elektron, ang mga IBM® qubit ay mga quantum mechanical na sistema na maaaring makipag-interact sa liwanag at kung saan maaaring gumawa ng mga sukat. Sa katunayan, madalas makakita ng mga analohiya na ginagawa sa pagitan ng mga estado ng quantum mechanical spin at mga computational na estado ng isang qubit. Halimbawa, madalas makita ang "spin-up" na estado na nauugnay sa computational 0 na estado, at "spin-down" na nauugnay sa computational 1 na estado:
Maaari tayong gumamit ng mga pagkakatulad na ito para mapansin ang quantum mechanical na pag-uugali sa mga IBM quantum computer na ginagaya ang quantum mechanical na pag-uugali ng orbital o spin angular momentum sa mga atomo. Gagawa tayo ng mga katulad na obserbasyon gamit ang mga linear combination ng mga estadong ito na nagpapahintulot sa atin na palawakin ang talakayan sa angular momentum sa anumang direksyon.
Unang eksperimento: Isang sukat
Sa unang eksperimentong ito at sa buong modyul, gagamitin natin ang isang framework para sa quantum computing na kilala bilang "Qiskit patterns", na hinahati ang mga workflow sa mga sumusunod na hakbang:
- Hakbang 1: I-map ang mga klasikal na input sa isang quantum problem
- Hakbang 2: I-optimize ang problema para sa quantum execution
- Hakbang 3: Mag-execute gamit ang Qiskit Runtime Primitives
- Hakbang 4: Post-processing at klasikal na pagsusuri
Sa pangkalahatan susundin natin ang mga hakbang na ito, kahit na hindi natin palagi itong malinaw na lalabelin.
Hakbang 1: I-map ang mga klasikal na input sa isang quantum problem
Dito, ang mga klasikal na input ay mga oryentasyon ng isang spin bago ang sukat sa isang Stern-Gerlach device. Huwag mag-alala nang sobra tungkol sa eksaktong kalikasan ng quantum state bago ang sukat. Iyon ang paksa ng ibang modyul ng Qiskit Classrooms, sa Bell's theorem.
Pansinin na ang mga IBM quantum computer ay sumusukat ng mga estado kasabay ng axis. Kaya ang unang eksperimentong ito ay magiging katulad ng eksperimento ng Stern-Gerlach na may magnetic field gradient kasabay ng . Makikita natin kung paano baguhin ang sistema para sumukat sa iba't ibang direksyon, sa kalaunan.
Magsimula tayo sa pamamagitan ng paggawa ng analog ng isang spin state, iyon ay, ilang halo ng at o katumbas ng at . Nagmungkahi kami ng ilang paunang halaga. Ngunit huwag mag-alinlang na maglaro ng iba pang mga halaga o maging mga random na halaga.
import random
from numpy import pi
import numpy as np
# Use these lines to choose your own arbitrary state vector and normalize it.
# a = 2
# b = (1+1j)
# norm = np.sqrt(a*np.conjugate(a)+b*np.conjugate(b))
# a = a/norm
# b = b/norm
# print(a,b)
# Use these lines if you would rather look at at random spin orientations.
a = random.random()
b = random.random()
norm = np.sqrt(a * np.conjugate(a) + b * np.conjugate(b))
a = a / norm
b = b / norm
print(a, b)
0.7032089086145691 0.7109832845047109
Ngayon ay gagamitin natin ang mga anggulo sa itaas bilang mga parameter sa isang quantum circuit. Isinasaalang-alang natin ang isang particle lamang sa isang pagkakataon, kaya gagamit tayo ng isang qubit lamang sa ating circuit, at kakailanganin lamang natin ng isang klasikal na register.
from qiskit.circuit import QuantumRegister, ClassicalRegister, QuantumCircuit, Parameter
# Define registers
qr = QuantumRegister(1, "q")
cr = ClassicalRegister(1, "c")
qc = QuantumCircuit(qr, cr)
# Initialize the quantum state
qc.initialize([a, b])
qc.measure(0, 0)
qc.draw("mpl")
Hakbang 2: I-optimize ang problema para sa quantum execution
Para patakbuhin ang ating eksperimento sa isang tunay na quantum computer, kailangan nating i-load ang Qiskit Runtime Service, at pumili ng isang quantum computer (o isang "backend"). Sa ibaba, pinipili natin ang pinaka-hindi abala na quantum computer na available sa atin.
May code sa ibaba para sa pag-save ng iyong mga kredensyal sa unang paggamit. Tiyakin na tanggalin ang impormasyong ito mula sa notebook pagkatapos itong i-save sa iyong environment, para hindi aksidenteng ibahagi ang iyong mga kredensyal kapag ibinabahagi mo ang notebook. Tingnan ang I-set up ang iyong IBM Cloud account at I-initialize ang service sa isang hindi pinagkakatiwalaang environment para sa karagdagang gabay.
# Load the Qiskit Runtime service
from qiskit_ibm_runtime import QiskitRuntimeService
# Syntax for first saving your token. Delete these lines after saving your credentials.
# QiskitRuntimeService.save_account(channel='ibm_quantum_platform', instance = '<YOUR_IBM_INSTANCE_CRN>', token='<YOUR-API_KEY>', overwrite=True, set_as_default=True)
# service = QiskitRuntimeService(channel='ibm_quantum_platform')
# Syntax for specifying a channel and instance (if you need to change from the default set above)
# service = QiskitRuntimeService(channel='<channel name here>', instance="<your instance name here>")
# Load saved credentials
service = QiskitRuntimeService()
# Load the Runtime primitive and session
from qiskit_ibm_runtime import Session, SamplerV2 as Sampler
# Use the least busy backend, specify options as needed
# backend = service.least_busy(operational=True, simulator=False, min_num_qubits = 127)
backend = service.least_busy()
print(backend.name)
ibm_sherbrooke
Kailangan na nating i-transpile ang circuit, ibig sabihin kailangan nating i-map ang ating circuit sa mga base gate na available sa ating piniling quantum computer, at gusto nating i-optimize ang ating circuit para sa pagpapatakbo sa quantum computer na iyon.
# Transpile the circuit and optimize for running on the quantum computer selected
from qiskit.transpiler.preset_passmanagers import generate_preset_pass_manager
pm = generate_preset_pass_manager(optimization_level=3, backend=backend)
qc_ibm = pm.run(qc)
Hakbang 3: Mag-execute gamit ang Qiskit Runtime Primitives
Ngayon gusto naming patakbuhin ito sa isang tunay na quantum computer. Lahat ng kinakailangang syntax para doon ay nasa code block sa ibaba. Kung naubos mo na ang iyong naka-allot na oras sa mga tunay na quantum computer, o kung wala kang koneksyon sa internet, maaari mong i-uncomment ang susunod na code block, na magpapatakbo ng code sa isang lokal na simulator.
# Specify that we want to use only a single shot, to represent a single measurement of a spin in a SG device.
num_shots = 1
# Evaluate the problem using a QPU via Qiskit IBM Runtime
# The best practice is to use a session as shown below. This is available to Premium Plan, Flex Plan, and On-Prem (IBM Quantum Platform API) Plan users.
with Session(backend=backend) as session:
sampler = Sampler(mode=session)
dist = sampler.run([qc_ibm], shots=num_shots).result()
session.close()
counts = dist[0].data.c.get_counts()
# Open users can still carry out this experiment, but without making use of a session, meaning repeated queuing is possible.
# from qiskit_ibm_runtime import Batch,
# batch = Batch(backend=backend)
# sampler = Sampler(mode=batch)
# dist = sampler.run([qc_ibm], shots=num_shots).result()
# Close the batch because no context manager was used.
# batch.close()
# counts = dist[0].data.c.get_counts()
Gamitin ang code sa ibaba kung hindi ka makakapagpatakbo ng eksperimento sa isang tunay na quantum computer.
# This uses a local simulator
# from qiskit_aer import AerSimulator
# This generates a simulator that mimics the real quantum system
# backend_sim = AerSimulator.from_backend(backend)
# Import an estimator, this time from qiskit (we import from Runtime for real hardware)
# from qiskit.primitives import BackendSamplerV2
# sampler = BackendSamplerV2(backend = backend_sim)
# num_shots = 1
# This runs the job
# dist = sampler.run([qc_ibm], shots = num_shots).result()
# This selects measurement counts for the 0th circuit, which in this case is the only circuit
# counts=dist[0].data.c.get_counts()
Hakbang 4: Post-processing at klasikal na pagsusuri
Para sa napaka-simpleng eksperimentong ito, ang klasikal na pagsusuri ay binubuo lamang ng pag-visualize ng resulta ng eksperimento.
from qiskit.visualization import plot_histogram
print("counts = ", counts)
plot_histogram(counts)
counts = {'0': 1}
Gumawa kami ng isang sukat at nakakuha ng "0". Hindi ito nagulat sa amin. Alam natin na gumagamit tayo ng isang quantum computer na binubuo ng mga qubit at sanay na tayo sa mga klasikal na bit na nagbabalik ng 0 o 1. Ngunit tandaan: ito ang quantum computing analog ng mga eksperimentong ginawa sa mga particle na may mga magnetic moment. Kung inaasahan nating pantay na spread sa pagitan ng 0 at +1, maaaring talagang nagulat tayo na nakakuha tayo ng isang extremum sa ating unang sukat. Ito ang nakagulat na quantization ng mga resulta sa eksperimento ng Stern-Gerlach na humantong sa atin sa mas malalim na pag-unawa sa kalikasan, at na sa kalaunan ay nakatulong sa atin na magtayo ng mga quantum computer.
Tingnan natin kung ano ang mangyayari kapag gumawa tayo ng isang ensemble ng mga sukat.
Ikalawang eksperimento: Pagsukat ng maraming particle
Para makakuha ng mga istatistika sa maraming ganoong mga sukat, hindi natin kailangang ulitin ang mga hakbang 1 at 2. Maaari tayong simpleng taasan ang bilang ng mga shot sa ating eksperimento. Huwag mag-alinlang na maglaro sa bilang ng mga shot sa instance ng hakbang 3 sa ibaba.
from qiskit_ibm_runtime import Session, SamplerV2 as Sampler
num_shots = 100
# Evaluate the problem using a QPU via Qiskit IBM Runtime
# The best practice is to use a session as shown below. This is available to Premium Plan, Flex Plan, and On-Prem (IBM Quantum Platform API) Plan users.
with Session(backend=backend) as session:
sampler = Sampler(mode=session)
dist = sampler.run([qc_ibm], shots=num_shots).result()
session.close()
counts = dist[0].data.c.get_counts()
# Open users can still carry out this experiment, but without making use of a session, meaning repeated queuing is possible.
# batch = Batch(backend=backend)
# sampler = Sampler(mode=batch)
# dist = sampler.run([qc_ibm], shots=num_shots).result()
# Close the batch because no context manager was used.
# batch.close()
# counts = dist[0].data.c.get_counts()
Tulad ng dati, kung hindi ka makakapagpatakbo sa isang tunay na quantum computer, i-uncomment ang block sa itaas mula sa unang eksperimento, at baguhin lamang ang num_shots = 1 sa num_shots = 100 o higit pa.
plot_histogram(counts)
Nakikita nating minsan ay sumusukat tayo ng 0 at minsan ay sumusukat tayo ng 1. Pansinin na hindi tayo sumusukat ng anumang iba pa! Maaari mong baguhin ang bilang ng mga shot, at mapansin na ang probabilidad ng pagsukat ng 0 o 1 ay tila medyo pare-pareho sa pagitan ng iba't ibang mga run na may iba't ibang bilang ng mga shot. Kaya, ang isang bagay tungkol sa paghahanda ng estado ay tila nagtatakda ng probabilidad ng mga resulta ng sukat, kahit na ang anumang isang sukat ay maaaring magbunga ng alinman sa 0 o 1.
Ikatlong eksperimento: Mga random na spin mula sa isang oven
Sa eksperimento ng Stern-Gerlach, hindi pinili ng mga mananaliksik kung sa anong anggulo lalabas ang vector ng angular momentum mula sa oven. Random ang mga oryentasyon (o may mas misteryosong dahilan! Tingnan ang Qiskit Classroom module tungkol sa Bell's theorem). Ang makatwirang katumbas ng eksperimentong iyon ay ang random na pagsisimula ng mga estado ng ating qubit at ang paulit-ulit na pagsukat.
Hakbang 1: I-map ang mga classical na input sa isang quantum na problema
Ang Circuit na gusto nating buuin ay katulad ng dati. Ang pagkakaiba lamang ay sa pagkakataong ito, bubuuin natin ang Circuit gamit ang mga gate na may libreng parameter na at . Ang mga numerong halaga ng mga parameter na iyon ay itatakda para sa bawat bagong takbo.
# from qiskit.circuit import QuantumCircuit, Parameter
theta = Parameter("θ")
phi = Parameter("$\phi$")
# Define registers
qr = QuantumRegister(1, "q")
cr = ClassicalRegister(1, "c")
qc = QuantumCircuit(qr, cr)
# Add rotation gates for rotating the state of qubit 0 to random orientations
qc.rx(theta, 0)
qc.rz(phi, 0)
qc.measure(0, 0)
qc.draw("mpl")
Ang pagpapatakbo ng isang quantum circuit para sa isang shot lamang at paggawa nito nang maraming beses para sa iba't ibang random na kumpigurasyon ay hindi karaniwang daloy ng trabaho para sa isang quantum computer. Magagawa ito nang tiyak, ngunit para sa kaginhawahan, gagamit tayo ng lokal na simulator dito.
# This uses a local simulator
from qiskit_aer import AerSimulator
# Import an estimator, this time from qiskit (we import from Runtime for real hardware)
from qiskit.primitives import BackendSamplerV2
# This generates a simulator that mimics the real quantum system
backend_sim = AerSimulator.from_backend(backend)
sampler_sim = BackendSamplerV2(backend=backend_sim)
# from qiskit.primitives import BackendSamplerV2
# sampler = BackendSamplerV2(backend=backend)
# A list to store the accumulated probabilities of the two possible measurement outcomes.
probslist = {"0": 0.0, "1": 0.0}
# Choose how many "particles"/measurements
measurements = 100
num_shots = 1
for i in range(measurements):
# Assign a random orientation for each measurement
phi = random.random() * 2 * pi
theta = random.random() * 2 * pi
angles = [phi, theta]
circuit = qc.assign_parameters(angles)
qc_ibm = pm.run(circuit)
# Run the circuit
# job = sampler.run([circuit],num_shots = 1)
dist = sampler_sim.run([qc_ibm], shots=num_shots).result()
# Update the list of probabilities
zeroterm = dist[0].data.c.get_counts().get("0") or 0
oneterm = dist[0].data.c.get_counts().get("1") or 0
probslist.update({"0": probslist.get("0") + zeroterm})
probslist.update({"1": probslist.get("1") + oneterm})
probslist.update({"0": probslist.get("0") / measurements})
probslist.update({"1": probslist.get("1") / measurements})
# print(probslist)
plot_histogram(probslist)
Kaya nakikita natin na ang random na paunang estado ng mga qubit (na katumbas ng random na oryentasyon ng angular momentum sa isang eksperimento ng Stern-Gerlach) ay nagbubunga ng halos pantay na bilang ng mga estado na 0 at 1 (tulad ng halos pantay na bilang ng mga estado ng spin up at spin down). Ito mismo ang ipinakita ng orihinal na eksperimento ng Stern-Gerlach.
Ikaapat na eksperimento: Paulit-ulit na pagsukat
Kapag nagsimula ang isang qubit sa isang random na estado, makikita natin na humigit-kumulang 50-50 ang tsansa ng pagsukat ng isang extremum kaysa sa isa. Ngunit ano ang mangyayari sa estado ng qubit (o sa angular momentum ng particle) pagkatapos ng pagsukat? Para masagot iyon, kailangan nating tumukoy ng Circuit na nagbibigay-daan sa atin na gumawa ng maraming pagsukat ng parehong mga qubit. Tukuyin natin ang isang Circuit na magagamit natin upang siyasatin ito. Gusto naming payagan ang posibilidad ng pagsukat ng parehong estado na at , kaya kailangan nating may bagay na mag-iikot sa paunang estado ng qubit mula sa default na estado na . Sa kasong ito, gagamit tayo ng hadamard gate na , dahil . Tandaan na, bilang default, ang parehong pagsukat na ito ay magiging nasa .
from qiskit import QuantumCircuit
# Define registers
qr = QuantumRegister(1, "q")
cr = ClassicalRegister(2, "c")
qc = QuantumCircuit(qr, cr)
# Initialize the qubit to be a mixture of 0 and 1 states.
qc.h(0)
# Add a first measurement
qc.measure(0, 0)
qc.barrier()
# Add a second measurement
qc.measure(0, 1)
qc.draw("mpl")
qc_ibm = pm.run(qc)
# Step 3: Run the job
num_shots = 1000
dist = sampler.run([qc_ibm], shots=num_shots).result()
# To run on a simulator, uncomment the line below and comment out the line above.
# dist = sampler_sim.run([qc_ibm], shots=num_shots).result()
counts = dist[0].data.c.get_counts()
print(counts)
{'00': 497, '11': 498, '01': 3, '10': 2}
# Step 4: Post-process
plot_histogram(counts)
Sa figure sa itaas, ang mga bin ay may label na "00", "01", at iba pa. Dito, ang mga numerong ito ay tumutukoy sa "ika-2 kinalabasan, ika-1 kinalabasan". Kaya ang "00" ay nangangahulugang parehong pagsukat ay nagbunga ng estado na , at ang "01" ay nangangahulugang ang unang pagsukat ay nagbunga ng , at ang pangalawa ay nagbunga ng . Ang napakaraming qubit ay nasukat na dalawang beses sa , o dalawang beses sa . Bihirang masukat ang mga qubit sa isang estado at pagkatapos ay masukat sa ibang estado, at ang ilang kaso kung saan nangyari iyon (~1%) ay dahil sa ingay. Sa kasong ito, ang ingay na iyon ay ginaya upang makatugma sa gawi ng tunay na quantum system. Ang obserbasyon ng ugnayan sa pagitan ng mga magkakasunod na pagsukat ay napansin din sa mga Stern-Gerlach na uri ng pagsukat ng mga particle na may spin angular momentum. Kung ang isang particle ay nasukat na "spin-up", ang kasunod na pagsukat matapos ang maikling sandali ay magbubunga muli ng "spin-up" (maliban sa maliit na pagbabago dahil sa ingay).
Maaaring tila walang kabuluhan ito. Pagkatapos ng lahat, kung ang isang qubit ay nasukat na nasa isang estado, at pagkatapos ay sinusukat ko ito muli nang mabilis, bakit hindi na ito magiging nasa estadong iyon? Ngunit kung tunay na titingnan natin ang subtlety na ito, maaari itong makatulong sa atin na pumili ng mga kagamitang matematikal upang ilarawan ang penomenong ito.
Pagsusuri ng mga eksperimento hanggang ngayon
Pagsamahin natin ang ilang mga obserbasyon mula sa ating mga eksperimento hanggang ngayon:
- Ang pagsukat ng isang quantum mechanical na sistema ay magbubunga lamang ng isa sa isang hanay ng "mga pinapayagang halaga". Para sa mga two-level system tulad ng mga qubit o spin-1/2 na particle, ang pagsukat ay magbubunga lamang ng isa sa dalawang binary na kinalabasan.
- Kapag random nating sinisimulan ang estado ng ating binary na sistema (tulad ng mga spin-1/2 na particle na lumalabas mula sa isang oven), posible ang alinman sa dalawang binary na kinalabasan ng pagsukat.
- Kapag nagawa na ang pagsukat at nalam na ang estado ng sistema, ang pag-uulit ng pagsukat ng parehong physical observable ay hindi nagbabago ng estado! Ibig sabihin, kung makuha natin ang estado na 0 nang isang beses, kapag sinukat natin muli ito ay nasa estado pa rin itong 0 (maliban sa maliit na ingay sa sistema na ~0.1% hanggang 1%).
Pansinin nang malinaw na hindi pa natin tinatalakay ang probabilistikong katangian ng quantum mechanics, ni wala pang sinasabi tungkol sa "pagbulusok" ng estado patungo sa isang eigenstate. Gamit lamang ang mga obserbasyon sa itaas, maaaring matukso tayong maghanap ng isang operasyong matematikal na na nag-iiwan ng ilang espesyal na hanay ng mga quantum mechanical na estado na na hindi nagbabago maliban sa isang constant: , dahil ang pagsukat sa nang dalawang beses ay nagbubunga ng parehong resulta. Sa huli, ang paghahanap na iyon ay mabibigo sa paglalarawan ng lahat ng mga gawi na ating makikita. Ngunit maaari itong maglalarawan ng ilang bagay, kaya itutuloy pa natin ito nang kaunti.
May ganitong operasyon na talagang umiiral. Ang operasyon ng matrix sa ilang mga vector ay nagbabago ng mga vector, at ang operasyon ng matrix sa ibang mga vector (eigenvectors) ay nag-iiwan ng vector na hindi nagbabago maliban sa isang constant. Halimbawa, ang matrix na at ang vector na kung saan
at
Pansinin na
Ngunit para sa ibang mga vector, halimbawa , mayroon tayo
Maaari nating subukang ilarawan ang spin ng isang particle gamit ang isang matrix, at maaari nating subukang ilarawan ang mga estado ng mga particle pagkatapos ng pagsukat gamit ang isang vector, na tinatawag na "state vector". Hindi talaga malinaw kung anong mga halaga ang dapat ilagay sa naturang matrix o state vector, ngunit ang tanging katangian na mayroon tayo mula sa mga pagsukat na ginawa natin na maaaring gamitin upang ma-label ang mga estado ay ang probabilidad ng pagsukat ng 0 o 1 ("spin-up" o "spin-down" sa konteksto ng mga spin-1/2 na particle). Dapat nating isaalang-alang na ang mga entry sa mga state vector ay dapat na may kaugnayan sa probabilidad na ito (eksaktong probabilidad, "probability amplitude" — ibig sabihin, kinukuha natin ang parisukat ng entry upang makuha ang probabilidad, at iba pa). Ngunit sa puntong ito, hindi tayo sigurado kung ang mga entry sa mga matrix na ito ay dapat na talagang real, complex, o iba pa. Para maiwasan ang problema, subukan nating bumuo ng isang balangkas kung saan ang mga vector at matrix ay nakakatugon sa sumusunod:
- Ang mga matrix operator ay kailangang maabot ang eksperimento hangga't maaari. Halimbawa, maaari nating iugnay ang mga eigenvalue ng isang spin matrix sa mga eksperimentong naobserbahang spin projection.
- Ang mga state vector ay dapat na may kaugnayan sa probabilidad sa sumusunod na paraan: Kung ang isang particle ay nasa state vector na , ang probabilidad na ang kasunod na pagsukat ay makakahanap ng particle sa estado na ay .
Nagbibigay ito sa atin ng maraming kalayaan sa pagbuo ng ating unang mga matrix. Halimbawa, maaari nating naively subukang
Dito, ang ay nangangahulugang may mga estado sa mga quantum computer at sa mga spin-1/2 na sistema na magkatulad at madalas na iniuugnay sa isa't isa. Hindi sila eksaktong magkapareho, dahil tumutukoy sila sa iba't ibang sistema. Ngunit ang algebra na naglalarawan sa mga two-state na sistemang ito ay maaaring sumunod sa parehong mga panuntunan (spoiler: ginagawa nila!). Pansinin na ang random na pagpiling ito ay mayroon nang isang magandang katangian. Pansinin na
Ibig sabihin, kung ang isang particle ay nasa estado na , ang probabilidad na ang kasunod na pagsukat ay magbubunga rin ng ay 1 (maliban sa mga epekto ng ingay). Napakaganda nito, dahil nakita na natin na kapag nasa estado na 0 o "spin-up" ang isang estado, nananatili ito roon sa kasunod na pagsukat. Ang probabilidad sa itaas ay dapat na talagang 100%.
Suriin ang iyong pag-unawa
Basahin ang mga tanong sa ibaba, isipin ang iyong mga sagot, at pagkatapos ay i-click ang mga tatsulok upang makita ang mga solusyon.
Bakit mas mainam ang
kaysa sa, halimbawa,
Sagot:
Ang ating pagtatangkang iugnay ang probabilidad ng pagsukat sa parisukat ng inner product ay nangangahulugang kailangan ang magnitude ng bawat vector na maging 1. Ibig sabihin, para sa lahat ng , dahil ang probabilidad ng isang bagay sa estado na na maging nasa estado na ay 100%. Ito ay kilala bilang "normalization condition".
Bakit mas mainam ang
kaysa sa, halimbawa,
Sagot:
Hindi ito mas mainam. Walang dahilan kung bakit kailangan nating unang piliin ang . Sa halip, ito ay isang kombensyon. Gayunpaman, kapag ginawa na natin ang pagpiling iyon, nagpapataw ito ng ilang mga hadlang sa mga kasunod na pagpipilian. Tingnan sa ibaba.
Alalahanin na sa mga eksperimento sa itaas, nalaman natin na ang isang qubit na paunang nasa estado na ay nananatili sa estadong iyon sa kasunod na pagsukat. Ganoon din ang totoo para sa . Ibig sabihin, ang isang qubit na nasa ay may zero na probabilidad na masukat sa estado na