Eksperimen Stern-Gerlach menggunakan komputer kuantum
Untuk modul Qiskit in Classrooms ini, mahasiswa harus memiliki lingkungan Python yang berfungsi dengan paket-paket berikut yang sudah terpasang:
qiskitv2.1.0 atau lebih baruqiskit-ibm-runtimev0.40.1 atau lebih baruqiskit-aerv0.17.0 atau lebih baruqiskit.visualizationnumpypylatexenc
Untuk menyiapkan dan memasang paket-paket di atas, lihat panduan Install Qiskit. Untuk menjalankan job pada komputer kuantum sungguhan, mahasiswa perlu membuat akun IBM Quantum® dengan mengikuti langkah-langkah dalam panduan Siapkan akun IBM Cloud kamu.
Modul ini telah diuji dan menggunakan 2 detik waktu QPU. Ini hanyalah perkiraan. Penggunaan aktualmu bisa berbeda.
# 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'
Tonton panduan modul oleh Dr. Katie McCormick di bawah ini, atau klik di sini untuk menontonnya di YouTube.
Latar Belakang
Di awal tahun 1900-an, bukti perilaku terkuantisasi pada skala atom semakin banyak. Banyak interpretasi data yang berhasil, seperti penjelasan Max Planck tentang bencana ultraviolet, dan eksperimen seperti yang dilakukan oleh Otto Stern dan Walther Gerlach sangat penting dalam meyakinkan dunia bahwa sistem mekanika kuantum diperlukan, dan bahwa fenomena fisik tertentu adalah terkuantisasi. Dalam kasus eksperimen Stern-Gerlach (digagas oleh Stern pada tahun 1921 dan dilakukan oleh Stern dan Gerlach pada tahun 1922), tujuannya adalah untuk memeriksa kuantisasi momentum sudut dalam atom.
Sekitar waktu yang sama, model atom yang umum digunakan adalah model Bohr-Sommerfeld, yang merupakan perluasan dari model Bohr, dan seperti model Bohr, model ini memprediksi bahwa elektron berada dalam orbit terkuantisasi tertentu, mirip seperti planet yang mengorbit matahari.

Meskipun pada akhirnya perlakuan ini tidak cukup untuk menjelaskan perilaku mekanika kuantum atom, secara umum model ini memang memprediksi banyak fenomena yang diamati, seperti garis spektrum diskret dari atom. Orbit terkuantisasi elektron dengan energi spesifik sesuai dengan nilai-nilai terkuantisasi dari momentum sudut. Inilah momentum sudut orbital yang ingin diamati Stern dan Gerlach dalam eksperimen mereka, meskipun eksperimen ini berlaku untuk semua jenis momentum sudut terkuantisasi, termasuk spin. Kamu mungkin sering mendengar eksperimen Stern-Gerlach diterapkan pada spin. Fokus eksperimen aslinya adalah pada momentum sudut orbital karena George Uhlenbeck dan Samuel Goudsmit baru akan mengajukan teori keberadaan spin pada tahun 1925.
Terlepas dari jenis momentum sudutnya, muatan dengan momentum sudut memiliki momen magnetik. Dalam perlakuan klasik gerak orbital, seseorang akan mengharapkan partikel bermuatan , massa dan momentum sudut memiliki momen magnetik yang diberikan oleh
Ternyata hampir rumus yang sama berlaku untuk momentum sudut mekanika kuantum, dengan catatan penambahan rasio numerik yang berkaitan dengan jenis momentum sudut, yang disebut g-faktor . Saat menggabungkan berbagai jenis momentum sudut, atau menggeneralisasi ke jenis sembarang, seseorang sering melihat digunakan sebagai pengganti , sehingga kita menulis:
Untuk objek klasik . Untuk elektron, , dan ada banyak nilai untuk berbagai inti dan partikel subatomik. Poin utamanya di sini adalah bahwa momentum sudut terkuantisasi berarti momen magnetik yang terkuantisasi!
Momen magnetik ini akan mengalami torsi dalam medan magnet:
Dan akan mengalami gaya dalam medan magnet dengan gradien tak nol:
Kita sering akan mempertimbangkan ekspresi di atas satu komponen sekaligus, sehingga mungkin lebih mudah untuk memikirkan komponen -nya:
Dengan menggabungkan ekspresi-ekspresi, kita bisa mendapatkan
Stern dan Gerlach tidak mengetahui tentang faktor , tetapi bahkan dengan adanya faktor itu dalam ekspresi, kita memiliki gaya yang sama dengan beberapa konstanta yang diketahui atau terukur dikalikan momentum sudut. Jadi, menggunakan medan magnet dengan gradien yang diketahui, dan mengukur defleksi partikel saat melewati medan tersebut, kita seharusnya mendapatkan informasi tentang momentum sudut. Inilah inti dari eksperimen Stern-Gerlach.

Gbr. Eksperimen Stern–Gerlach[1]: Atom perak yang bergerak melalui medan magnet tak homogen, dan dibelokkan ke atas atau ke bawah tergantung pada spin mereka. Secara klasik, kita mengharapkan distribusi kontinu pada layar, tetapi dalam eksperimen kita melihat dua titik berbeda.
Atom perak netral dipanaskan dalam sebuah oven. Saat berkas atom perak mengalir dari oven, kolimator berkas digunakan untuk memilih hanya atom-atom yang bergerak mendekati pusat medan magnet tak homogen. Tentu saja, beberapa atom sedikit menyimpang ke kiri atau kanan, dan mengalami gradien medan yang lebih lemah, atau tidak ada gradien sama sekali. Jadi, kita tidak terlalu mempermasalahkan perilaku atom yang jauh ke kiri atau kanan. Kita tertarik pada apa yang terjadi pada atom-atom yang bergerak di sepanjang tengah saluran, di mana gradien medan magnet akan menghasilkan gaya yang membelokkan atom hanya dalam arah .
Apa yang seharusnya kita harapkan secara klasik?
Bagaimana atom-atom ini akan berperilaku jika mereka persis seperti magnet klasik yang besar? Kamu bisa melakukan eksperimennya. Bayangkan menembakkan magnet neodimium kecil melewati magnet besar dan kuat. Orientasi magnet-magnet kecil itu acak. Namun saat melewati magnet besar, mereka cepat mengorientasikan diri untuk sejajar dengan medan, dan tertarik ke magnet besar. Sebagian besar magnet kecil dibelokkan ke arah magnet besar. Pengamat yang sangat jeli mungkin bertanya, "Bagaimana dengan konservasi energi?"
Memang, momen magnetik dalam medan magnet eksternal memiliki energi potensial yang terkait dengannya:
Jadi, jika momen magnetik berputar dalam medan magnet eksternal, akan ada perubahan energi yang diberikan oleh:
Dalam kasus khusus magnet kecil yang anti-sejajar sempurna dengan medan eksternal membalik dan sejajar dengannya, ini akan sesuai dengan penurunan energi potensial:
Jadi ke mana energi itu pergi? Magnet klasik seperti magnet kulkas neodimium kecil memiliki banyak partikel dan dapat membuang hampir semua jumlah energi sebagai panas. Sudut awal dan akhir antara momen magnetik dan medan magnet eksternal bisa berupa apa saja, dan setidaknya orientasi awal akan acak. Jadi jumlah energi yang berbeda akan dibuang sebagai panas untuk setiap magnet kecil. Namun secara klasik ini bukan masalah, karena kumpulan partikel klasik dapat membuang energi berapa pun sebagai panas.
Apa yang seharusnya kita harapkan dengan menerapkan pemikiran klasik ke skala atom?
Setidaknya ini tidak sama untuk magnet berskala atom, karena ada lebih sedikit partikel yang terlibat, lebih sedikit derajat kebebasan untuk membuang energi. Proposal mekanika kuantum awal lebih jauh menyarankan bahwa energi yang dapat diserap oleh partikel individual, seperti elektron, akan terkuantisasi, artinya elektron hanya dapat menyerap beberapa jumlah energi tertentu. Karena orientasi awal yang acak memerlukan pembuangan energi dalam jumlah acak, ini seharusnya tidak mungkin terjadi pada sistem dengan tingkat energi terkuantisasi. Energi berlebih tidak bisa dibuang sebagai panas. Jadi apa yang akan terjadi sebagai gantinya?
Cek pemahamanmu
Baca pertanyaan-pertanyaan di bawah ini, pikirkan jawabanmu, lalu klik segitiga untuk mengungkap solusinya.
Jelaskan apa yang menurutmu akan terjadi dalam situasi seperti yang dijelaskan di atas. Yaitu, kamu memiliki magnet berukuran atom yang tidak dapat membuang energi sebagai panas. Jadi, energi potensial magnetik awal apa pun harus tetap dalam sistem. Namun, torsi diterapkan oleh medan magnet eksternal, yang mencoba memutar magnet kecil agar sejajar dengan medan eksternal. Apa yang terjadi?
Jawaban:
Momen magnetik kecil akan berputar menuju kesejarajan dengan medan eksternal. Namun ketika sejenak sejajar, ia akan memiliki energi kinetik rotasional yang akan membuatnya terus berputar melampaui medan dan kembali keluar dari kesejarajan. Perilaku ini bahkan bisa dilihat pada magnet klasik besar. Namun dalam sistem klasik tersebut, osilasi momen magnetik kecil akhirnya berhenti karena energi dibuang menjadi panas. Namun dalam sistem tanpa mekanisme disipasi seperti itu, osilasi seharusnya berlanjut tanpa batas.
Dengan perilaku yang diharapkan dalam jawaban di atas, distribusi partikel magnetik seperti apa yang kamu harapkan terlihat di layar?
Jawaban:
Distribusi halus dari defleksi maksimum ke arah sisi medan magnet yang lebih kuat (partikel-partikel yang kebetulan mulai sejajar dengan medan eksternal) hingga defleksi maksimum ke arah sisi medan yang lebih lemah (partikel-partikel yang mulai anti-sejajar dengan medan eksternal), dan setiap defleksi di antaranya, sesuai dengan setiap orientasi awal di antara kedua ekstrem tersebut.

Apa yang akan diprediksi mekanika kuantum?
Mungkin yang paling aneh dari semua kemungkinan adalah sebagai berikut: Bagaimana jika momentum sudut elektron terkuantisasi, tetapi juga proyeksinya pada suatu sumbu juga terkuantisasi? Kuantisasi momentum sudut sebagai besaran menarik, tetapi seseorang mungkin mencoba berargumen melaluinya menggunakan intuisi klasik, seperti orbit planet yang menetap dalam jalur tetap yang tidak saling berpotongan, dengan hanya momentum sudut tertentu yang diizinkan. Tetapi bagaimana jika vektor momentum sudut itu hanya bisa menunjuk tepat sepanjang atau tepat berlawanan dengan , tetapi tidak memiliki komponen lain sepanjang ? Bagaimana jika kemudian ketika diukur sepanjang arah yang berbeda, vektor tersebut hanya bisa menunjuk sepenuhnya sepanjang atau sepenuhnya berlawanan dengan , dan tidak ada yang di antaranya? Itu akan menjadi sesuatu yang aneh dengan cara yang mengacaukan semua intuisi klasik.
Cek pemahamanmu
Baca pertanyaan di bawah ini, pikirkan jawabanmu, lalu klik segitiga untuk mengungkap solusinya.
Distribusi partikel seperti apa di layar yang kamu harapkan akan ditemukan dalam kasus terakhir ini, di mana proyeksi momentum sudut sepanjang arah medan terkuantisasi? Kamu bebas mempertimbangkan hanya partikel yang melewati tepat di tengah perangkat, atau menyertakan juga yang sedikit melenceng ke samping di mana gradiennya lebih lemah. Cukup jelaskan secara eksplisit.
Jawaban:
Partikel-partikel di pusat perangkat akan mengalami satu medan tak homogen tunggal dan semuanya akan diukur memiliki salah satu dari dua orientasi momen magnetik mereka. Jadi, mereka akan dibelokkan secara maksimal mengikuti gradien atau secara maksimal berlawanan gradien, dan tidak ada yang di antaranya. Tentu saja, di kedua sisi, di mana gradiennya lebih lemah, defleksinya akan lebih kecil. Pada posisi lateral yang sangat besar, mereka mungkin berada sepenuhnya di luar gradien, dan bisa saja ada hanya satu wilayah partikel yang tidak terdefleksi.

Bagaimana qubit akan membantu kita menguji ini?
Sebagian besar komputer kuantum menggunakan "qubit" — analog kuantum dari bit klasik. Lebih tepatnya, mereka dirancang sebagai sistem dua tingkat, analog dengan keadaan "on"/"off" dari bit klasik. Paradigma komputasi kuantum memang ada yang menggunakan sistem tiga tingkat (yang disebut "qutrit") atau sistem banyak tingkat (yang disebut "qudit"). Namun sebagian besar pekerjaan terkonsentrasi pada qubit. Secara khusus, komputer kuantum IBM® menggunakan apa yang disebut qubit transmon frekuensi tetap. Ini cukup berbeda dari momentum sudut orbital atau spin atom. Namun seperti spin elektron, qubit IBM® adalah sistem mekanika kuantum yang dapat berinteraksi dengan cahaya dan di mana pengukuran dapat dilakukan. Faktanya, seseorang sering menemukan analogi yang dibuat antara keadaan spin mekanika kuantum dan keadaan komputasi Qubit. Misalnya, seseorang sering melihat keadaan "spin-up" dikaitkan dengan keadaan komputasi 0, dan "spin-down" dikaitkan dengan keadaan komputasi 1:
Kita bisa menggunakan kesamaan-kesamaan ini untuk mengamati perilaku mekanika kuantum dalam komputer kuantum IBM yang meniru perilaku mekanika kuantum dari momentum sudut orbital atau spin dalam atom. Kita akan membuat pengamatan serupa menggunakan kombinasi linear dari keadaan-keadaan ini yang memungkinkan kita memperluas diskusi ke momentum sudut dalam arah mana pun.
Eksperimen pertama: Satu pengukuran
Dalam eksperimen pertama ini dan sepanjang modul ini, kita akan menggunakan kerangka kerja komputasi kuantum yang dikenal sebagai "pola Qiskit", yang membagi alur kerja menjadi langkah-langkah berikut:
- Langkah 1: Petakan input klasik ke masalah kuantum
- Langkah 2: Optimalkan masalah untuk eksekusi kuantum
- Langkah 3: Jalankan menggunakan Qiskit Runtime Primitives
- Langkah 4: Pasca-pemrosesan dan analisis klasik
Kita umumnya akan mengikuti langkah-langkah ini, meskipun kita mungkin tidak selalu memberi label secara eksplisit.
Langkah 1: Petakan input klasik ke masalah kuantum
Di sini, input klasik adalah orientasi spin sebelum pengukuran dalam perangkat Stern-Gerlach. Jangan terlalu khawatir tentang sifat pasti dari keadaan kuantum sebelum pengukuran. Itu adalah subjek dari modul Qiskit Classrooms yang berbeda, tentang teorema Bell.
Perhatikan bahwa komputer kuantum IBM mengukur keadaan sepanjang sumbu . Jadi eksperimen pertama ini akan sangat mirip dengan eksperimen Stern-Gerlach dengan gradien medan magnet sepanjang . Kita akan melihat cara mengubah sistem untuk mengukur sepanjang arah yang berbeda, nanti.
Mari kita mulai dengan membuat analog dari keadaan spin, yaitu beberapa campuran dan atau secara ekuivalen dari dan . Kita telah mengusulkan beberapa nilai awal. Tapi kamu bebas bermain dengan nilai lain atau bahkan nilai acak.
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
Sekarang kita akan menggunakan sudut-sudut di atas sebagai parameter dalam Circuit kuantum. Kita hanya mempertimbangkan satu partikel sekaligus, jadi kita hanya akan menggunakan satu Qubit dalam Circuit kita, dan kita hanya memerlukan satu register klasik.
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")
Langkah 2: Optimalkan masalah untuk eksekusi kuantum
Untuk menjalankan eksperimen kita pada komputer kuantum sungguhan, kita perlu memuat Qiskit Runtime Service, dan memilih komputer kuantum (atau "Backend"). Di bawah ini, kita cukup memilih komputer kuantum yang paling tidak sibuk yang tersedia bagi kita.
Ada kode di bawah ini untuk menyimpan kredensialmu saat pertama kali digunakan. Pastikan untuk menghapus informasi ini dari notebook setelah menyimpannya ke lingkunganmu, agar kredensialmu tidak dibagikan secara tidak sengaja saat kamu berbagi notebook. Lihat Siapkan akun IBM Cloud kamu dan Inisialisasi layanan di lingkungan yang tidak terpercaya untuk panduan lebih lanjut.
# 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
Kita sekarang harus men-transpile Circuit, artinya kita harus memetakan Circuit kita ke gate dasar yang tersedia pada komputer kuantum yang dipilih, dan kita ingin mengoptimalkan Circuit kita untuk dijalankan pada komputer kuantum tersebut.
# 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)
Langkah 3: Jalankan menggunakan Qiskit Runtime Primitives
Sekarang kita ingin menjalankan ini pada komputer kuantum sungguhan. Semua sintaks yang diperlukan untuk itu ada dalam blok kode di bawah ini. Jika kamu telah menghabiskan waktu yang dialokasikan pada komputer kuantum sungguhan, atau jika kamu tidak memiliki koneksi internet, kamu dapat menghapus komentar dari blok kode berikutnya, yang akan menjalankan kode pada simulator lokal.
# 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()
Gunakan kode di bawah ini jika kamu tidak dapat menjalankan eksperimen pada komputer kuantum sungguhan.
# 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()
Langkah 4: Pasca-pemrosesan dan analisis klasik
Untuk eksperimen yang sangat sederhana ini, analisis klasik hanya terdiri dari visualisasi hasil eksperimen.
from qiskit.visualization import plot_histogram
print("counts = ", counts)
plot_histogram(counts)
counts = {'0': 1}
Kita membuat satu pengukuran dan mendapatkan "0". Ini tidak mengejutkan bagi kita. Kita tahu kita menggunakan komputer kuantum yang terdiri dari qubit dan kita sangat terbiasa dengan bit klasik yang mengembalikan 0 atau 1. Namun ingat: ini adalah analog komputasi kuantum dari eksperimen yang dilakukan dengan partikel-partikel yang memiliki momen magnetik. Jika kita mengharapkan sebaran merata antara 0 dan +1, mungkin memang mengejutkan kita bahwa kita mendapatkan salah satu ekstrem pada pengukuran pertama kita. Inilah kuantisasi hasil yang mengejutkan dalam eksperimen Stern-Gerlach yang membawa kita pada pemahaman alam yang lebih baik, dan yang pada gilirannya membantu kita akhirnya membangun komputer kuantum.
Mari kita lihat apa yang terjadi ketika kita membuat sekumpulan pengukuran.
Eksperimen kedua: Mengukur banyak partikel
Untuk mengumpulkan statistik dari banyak pengukuran seperti itu, kita tidak perlu mengulangi langkah 1 & 2. Kita cukup meningkatkan jumlah shot dalam eksperimen kita. Kamu bebas bermain dengan jumlah shot dalam contoh langkah 3 di bawah ini.
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()
Seperti sebelumnya, jika kamu tidak dapat menjalankan pada komputer kuantum sungguhan, hapus komentar dari blok di atas dari eksperimen pertama, dan cukup ubah num_shots = 1 menjadi num_shots = 100 atau lebih.
plot_histogram(counts)
Kita melihat bahwa kita terkadang mengukur 0 dan terkadang mengukur 1. Perhatikan bahwa kita tidak pernah mengukur hal lain! Kamu bisa mengubah jumlah shot, dan memperhatikan bahwa probabilitas pengukuran 0 atau 1 tampaknya cukup konsisten antara berbagai run dengan jumlah shot yang berbeda. Jadi, sesuatu tentang persiapan keadaan tampaknya menentukan probabilitas hasil pengukuran, meskipun setiap satu pengukuran dapat menghasilkan 0 atau 1.
Eksperimen ketiga: Spin acak dalam oven
Dalam eksperimen Stern-Gerlach, para peneliti tidak dapat menentukan sudut di mana vektor momentum sudut akan keluar dari oven. Orientasinya acak (atau sesuatu yang bahkan lebih misterius! Lihat modul Qiskit Classroom tentang teorema Bell). Analog yang masuk akal dari eksperimen itu adalah kita secara acak menginisialisasi keadaan Qubit kita dan melakukan banyak pengukuran.
Langkah 1: Petakan input klasik ke masalah kuantum
Circuit yang ingin kita buat adalah sama seperti sebelumnya. Satu-satunya perbedaan adalah bahwa kali ini, kita akan membangun Circuit menggunakan gate dengan parameter bebas dan . Nilai numerik untuk parameter-parameter tersebut kemudian akan ditetapkan untuk setiap run baru.
# 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")
Menjalankan Circuit kuantum hanya untuk satu shot dan melakukannya untuk banyak konfigurasi acak adalah alur kerja yang tidak biasa untuk komputer kuantum. Ini tentu bisa dilakukan, tetapi demi kesederhanaan, kita akan menggunakan simulator lokal di sini.
# 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)
Jadi kita melihat bahwa keadaan awal acak dari qubit (yang sesuai dengan orientasi acak momentum sudut dalam eksperimen Stern-Gerlach) menghasilkan jumlah keadaan 0 dan 1 yang serupa (seperti jumlah keadaan spin atas dan spin bawah yang serupa). Inilah tepatnya yang ditunjukkan oleh eksperimen Stern-Gerlach asli.
Eksperimen keempat: Pengukuran berulang
Ketika sebuah qubit dimulai dalam keadaan acak, kita melihat ada peluang sekitar 50-50 untuk mengukur satu nilai ekstrem dibanding yang lain. Tapi apa yang terjadi pada keadaan qubit (atau momentum sudut partikel) setelah pengukuran? Untuk menjawabnya, kita perlu mendefinisikan sebuah Circuit yang memungkinkan kita melakukan beberapa pengukuran pada qubit yang sama. Mari kita definisikan sebuah Circuit yang bisa kita gunakan untuk menyelidiki ini. Kita ingin memungkinkan kemungkinan mengukur kedua keadaan dan , jadi kita butuh sesuatu untuk memutar keadaan awal qubit dari keadaan default . Dalam hal ini, kita akan menggunakan hadamard Gate , karena . Perhatikan bahwa, secara default, kedua pengukuran ini akan dilakukan sepanjang .
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)
Pada gambar di atas, bin-bin diberi label "00", "01" dan seterusnya. Di sini, angka-angka ini mengacu pada "hasil ke-2, hasil ke-1". Jadi "00" berarti kedua pengukuran menghasilkan keadaan , dan "01" berarti pengukuran pertama menghasilkan , dan pengukuran kedua menghasilkan . Sebagian besar qubit diukur dalam keadaan