Qubit, gate, dan litar kuantum
Kifumi Numata (19 Apr 2024)
Klik di sini untuk memuat turun PDF kuliah asal. Perlu diingat bahawa beberapa coretan kod mungkin sudah lapuk kerana ia adalah imej statik.
Anggaran masa QPU untuk menjalankan eksperimen ini ialah 5 saat.
1. Pengenalan
Bit, gate, dan litar adalah blok binaan asas pengkomputeran kuantum. Kamu akan belajar pengkomputeran kuantum dengan model litar menggunakan bit kuantum dan gate, serta mengulang kaji superposisi, pengukuran, dan jalinan.
Dalam pelajaran ini kamu akan belajar:
- Gate Qubit tunggal
- Sfera Bloch
- Superposisi
- Pengukuran
- Gate dua Qubit dan keadaan jalinan
Di akhir kuliah ini, kamu akan belajar tentang kedalaman litar, yang penting untuk pengkomputeran kuantum berskala utiliti.
2. Pengiraan sebagai gambar rajah
Apabila menggunakan qubit atau bit, kita perlu memanipulasinya supaya input yang ada boleh diubah kepada output yang diperlukan. Untuk atur cara paling mudah dengan sangat sedikit bit, adalah berguna untuk mewakili proses ini dalam gambar rajah yang dikenali sebagai gambar rajah litar.
Rajah di bawah sebelah kiri adalah contoh litar klasik, dan rajah di bawah sebelah kanan adalah contoh Circuit kuantum. Dalam kedua-dua kes, input berada di sebelah kiri dan output berada di sebelah kanan, manakala operasi diwakili oleh simbol. Simbol yang digunakan untuk operasi dipanggil "gate", kebanyakannya atas sebab sejarah.
3. Gate kuantum Qubit tunggal
3.1 Keadaan kuantum dan sfera Bloch
Keadaan Qubit diwakili sebagai superposisi dan . Keadaan kuantum sembarangan diwakili sebagai
di mana dan ialah nombor kompleks sedemikian rupa sehingga .
dan ialah vektor dalam ruang vektor kompleks dua dimensi:
Oleh itu, keadaan kuantum sembarangan juga diwakili sebagai
Daripada ini, kita dapat lihat bahawa keadaan bit kuantum adalah vektor unit dalam ruang hasil darab dalaman kompleks dua dimensi dengan asas ortonormal dan . Ia dinormalkan kepada 1.
|\psi\rangle =\begin\{pmatrix\} \alpha \\ \beta \end\{pmatrix\} juga dikenali sebagai statevector.
Keadaan kuantum Qubit tunggal juga boleh diwakili sebagai
di mana dan ialah sudut sfera Bloch dalam rajah berikut.
Dalam beberapa sel kod berikut, kita akan membina pengiraan asas daripada komponen-komponen dalam Qiskit. Kita akan membina Circuit kosong kemudian menambah operasi kuantum, membincangkan gate dan menggambarkan kesannya semasa proses.
Kamu boleh menjalankan sel dengan menekan "Shift" + "Enter". Import perpustakaan dahulu.
# Added by doQumentation — required packages for this notebook
!pip install -q qiskit qiskit-aer qiskit-ibm-runtime
# Import the qiskit library
from qiskit import QuantumCircuit
from qiskit_aer import AerSimulator
from qiskit.quantum_info import Statevector
from qiskit.visualization import plot_bloch_multivector
from qiskit_ibm_runtime import Sampler
from qiskit.transpiler.preset_passmanagers import generate_preset_pass_manager
from qiskit.visualization import plot_histogram
Sediakan Circuit kuantum
Kita akan mencipta dan melukis Circuit Qubit tunggal.
# Create the single-qubit quantum circuit
qc = QuantumCircuit(1)
# Draw the circuit
qc.draw("mpl")
Gate X
Gate X ialah putaran mengelilingi paksi sfera Bloch. Menggunakan Gate X pada menghasilkan , dan menggunakan Gate X pada menghasilkan , jadi ia adalah operasi yang serupa dengan Gate NOT klasik, dan juga dikenali sebagai bit flip. Perwakilan matriks Gate X adalah seperti berikut.
qc = QuantumCircuit(1) # Prepare the single-qubit quantum circuit
# Apply a X gate to qubit 0
qc.x(0)
# Draw the circuit
qc.draw("mpl")
Dalam IBM Quantum®, keadaan awal ditetapkan kepada , jadi Circuit kuantum di atas dalam perwakilan matriks adalah
Seterusnya, mari jalankan Circuit ini menggunakan simulator statevector.
# See the statevector
out_vector = Statevector(qc)
print(out_vector)
# Draw a Bloch sphere
plot_bloch_multivector(out_vector)
Statevector([0.+0.j, 1.+0.j],
dims=(2,))
Vektor menegak dipaparkan sebagai vektor baris, dengan nombor kompleks (bahagian imaginar diindeks dengan ).
Gate H
Gate Hadamard ialah putaran mengelilingi paksi yang berada di tengah-tengah antara paksi dan pada sfera Bloch. Menggunakan Gate H pada menghasilkan keadaan superposisi seperti . Perwakilan matriks Gate H adalah seperti berikut.
qc = QuantumCircuit(1) # Create the single-qubit quantum circuit
# Apply an Hadamard gate to qubit 0
qc.h(0)
# Draw the circuit
qc.draw(output="mpl")
# See the statevector
out_vector = Statevector(qc)
print(out_vector)
# Draw a Bloch sphere
plot_bloch_multivector(out_vector)
Statevector([0.70710678+0.j, 0.70710678+0.j],
dims=(2,))
Ini adalah
Keadaan superposisi ini sangat biasa dan penting sehingga ia diberi simbolnya sendiri:
Dengan menggunakan Gate pada , kita telah mencipta superposisi dan di mana pengukuran dalam asas komputasi (sepanjang z dalam gambaran sfera Bloch) akan memberikan setiap keadaan dengan kebarangkalian yang sama.
Keadaan
Mungkin kamu sudah meneka bahawa terdapat keadaan yang sepadan:
Untuk mencipta keadaan ini, mula-mula gunakan Gate X untuk membuat , kemudian gunakan Gate H.
qc = QuantumCircuit(1) # Create the single-qubit quantum circuit
# Apply a X gate to qubit 0
qc.x(0)
# Apply an Hadamard gate to qubit 0
qc.h(0)
# draw the circuit
qc.draw(output="mpl")
# See the statevector
out_vector = Statevector(qc)
print(out_vector)
# Draw a Bloch sphere
plot_bloch_multivector(out_vector)
Statevector([ 0.70710678+0.j, -0.70710678+0.j],
dims=(2,))
Ini adalah
Menggunakan Gate pada menghasilkan superposisi sama rata antara dan , tetapi tanda adalah negatif.
3.2 Keadaan kuantum Qubit tunggal dan evolusi unitari
Tindakan semua Gate yang telah kita lihat setakat ini adalah unitari, bermakna ia boleh diwakili oleh pengoperasi unitari. Dengan kata lain, keadaan output boleh diperoleh dengan menggunakan matriks unitari pada keadaan awal:
Matriks unitari ialah matriks yang memenuhi syarat
Dari segi operasi komputer kuantum, kita boleh katakan bahawa menggunakan Gate kuantum pada Qubit akan mengevolusikan keadaan kuantum tersebut. Gate Qubit tunggal yang lazim termasuklah yang berikut.
Gate Pauli:
di mana hasil darab luar dikira seperti berikut:
Gate Qubit tunggal biasa yang lain:
Makna dan penggunaan Gate-gate ini dijelaskan dengan lebih terperinci dalam kursus Basics of Quantum Information.
Latihan 1
Gunakan Qiskit untuk mencipta Circuit kuantum yang menyediakan keadaan-keadaan seperti yang diterangkan di bawah. Kemudian jalankan setiap Circuit menggunakan simulator statevector dan paparkan keadaan yang terhasil pada sfera Bloch. Sebagai cabaran tambahan, cuba jangka apakah keadaan akhir berdasarkan intuisi tentang Gate dan putaran pada sfera Bloch.
(1)
(2)
(3)
Tips: Gate Z boleh digunakan dengan
qc.z(0)
Penyelesaian:
### (1) XX|0> ###
# Create the single-qubit quantum circuit
qc = QuantumCircuit(1) ##your code goes here##
# Add a X gate to qubit 0
qc.x(0) ##your code goes here##
# Add a X gate to qubit 0
qc.x(0) ##your code goes here##
# Draw a circuit
qc.draw(output="mpl")
# See the statevector
out_vector = Statevector(qc)
print(out_vector)
# Draw a Bloch sphere
plot_bloch_multivector(out_vector)
Statevector([1.+0.j, 0.+0.j],
dims=(2,))
### (2) HH|0> ###
##your code goes here##
qc = QuantumCircuit(1)
qc.h(0)
qc.h(0)
qc.draw("mpl")
# See the statevector
out_vector = Statevector(qc)
print(out_vector)
# Draw a Bloch sphere
plot_bloch_multivector(out_vector)
Statevector([1.+0.j, 0.+0.j],
dims=(2,))
### (3) HZH|0> ###
##your code goes here##
qc = QuantumCircuit(1)
qc.h(0)
qc.z(0)
qc.h(0)
qc.draw("mpl")
# See the statevector
out_vector = Statevector(qc)
print(out_vector)
# Draw a Bloch sphere
plot_bloch_multivector(out_vector)
Statevector([0.+0.j, 1.+0.j],
dims=(2,))
3.3 Pengukuran
Pengukuran secara teorinya ialah topik yang sangat kompleks. Namun secara praktikalnya, membuat pengukuran sepanjang paksi (seperti yang dilakukan oleh semua komputer kuantum IBM®) hanya memaksa keadaan Qubit kepada sama ada atau dan kita perhatikan hasilnya.
- ialah kebarangkalian kita akan mendapat apabila kita mengukur.
- ialah kebarangkalian kita akan mendapat apabila kita mengukur.
Jadi, dan dipanggil amplitud kebarangkalian. (lihat "Petua Born")
Sebagai contoh, mempunyai kebarangkalian yang sama untuk menjadi atau apabila diukur. mempunyai peluang 75% untuk menjadi .
Simulator Qiskit Aer
Seterusnya, mari kita ukur sebuah Circuit yang menyediakan superposisi kebarangkalian sama rata di atas. Kita perlu menambah Gate pengukuran, kerana simulator Qiskit Aer mensimulasikan perkakasan kuantum yang ideal (tanpa bunyi) secara lalai. Nota: Simulator Aer juga boleh menerapkan model bunyi berdasarkan komputer kuantum sebenar. Kita akan kembali kepada model bunyi kemudian.
# Create a new circuit with one qubits (first argument) and one classical bits (second argument)
qc = QuantumCircuit(1, 1)
qc.h(0)
qc.measure(0, 0) # Add the measurement gate
qc.draw(output="mpl")
Kita kini bersedia untuk menjalankan Circuit kita pada simulator Aer. Dalam contoh ini, kita akan menggunakan shots=1024 sebagai nilai lalai, bermakna kita akan mengukur sebanyak 1024 kali. Kemudian kita akan memplot kiraan tersebut dalam histogram.
# Run the circuit on a simulator to get the results
# Define backend
backend = AerSimulator()
# Transpile to backend
pm = generate_preset_pass_manager(backend=backend, optimization_level=1)
isa_qc = pm.run(qc)
# Run the job
sampler = Sampler(mode=backend)
job = sampler.run([isa_qc])
result = job.result()
# Print the results
counts = result[0].data.c.get_counts()
print(counts)
# Plot the counts in a histogram
plot_histogram(counts)
{'0': 521, '1': 503}
Kita dapati bahawa 0 dan 1 diukur dengan kebarangkalian hampir 50% setiap satu. Walaupun bunyi tidak disimulasikan di sini, keadaan-keadaan masih bersifat kebarangkalian. Jadi walaupun kita jangkakan taburan 50-50, kita jarang mendapati ia tepat begitu. Sama seperti 100 lambungan syiling jarang menghasilkan tepat 50 kali bagi setiap sisi.
4. Gate kuantum pelbagai Qubit dan keterjeratan
4.1 Circuit kuantum pelbagai Qubit
Kita boleh mencipta Circuit kuantum dua Qubit dengan kod berikut. Kita akan menerapkan Gate H pada setiap Qubit.
# Create the two qubits quantum circuit
qc = QuantumCircuit(2)
# Apply an H gate to qubit 0
qc.h(0)
# Apply an H gate to qubit 1
qc.h(1)
# Draw the circuit
qc.draw(output="mpl")
# See the statevector
out_vector = Statevector(qc)
print(out_vector)
Statevector([0.5+0.j, 0.5+0.j, 0.5+0.j, 0.5+0.j],
dims=(2, 2))
Nota: Susunan bit Qiskit
Qiskit menggunakan notasi Little Endian untuk menyusun Qubit dan bit, bermakna Qubit 0 ialah bit paling kanan dalam rentetan bit. Contoh: bermaksud q0 ialah dan q1 ialah . Berhati-hati kerana sebahagian literatur komputasi kuantum menggunakan notasi Big Endian (Qubit 0 ialah bit paling kiri), dan banyak literatur mekanik kuantum juga berbuat demikian.
Perkara lain yang perlu diperhatikan ialah apabila menggambarkan Circuit kuantum, sentiasa diletakkan di bahagian atas Circuit. Dengan mengambil kira perkara ini, keadaan kuantum Circuit di atas boleh ditulis sebagai hasil darab tensor keadaan kuantum satu Qubit.
( )
Keadaan awal Qiskit ialah , jadi dengan menerapkan pada setiap Qubit, ia berubah kepada keadaan superposisi yang sama rata.
Peraturan pengukuran juga sama seperti kes satu Qubit, kebarangkalian mengukur ialah .
# Draw a Bloch sphere
plot_bloch_multivector(out_vector)

Seterusnya, mari kita ukur Circuit ini.
# Create a new circuit with two qubits (first argument) and two classical bits (second argument)
qc = QuantumCircuit(2, 2)
# Apply the gates
qc.h(0)
qc.h(1)
# Add the measurement gates
qc.measure(0, 0) # Measure qubit 0 and save the result in bit 0
qc.measure(1, 1) # Measure qubit 1 and save the result in bit 1
# Draw the circuit
qc.draw(output="mpl")
Sekarang, kita akan menggunakan simulator Aer sekali lagi untuk mengesahkan secara eksperimental bahawa kebarangkalian relatif semua keadaan output yang mungkin adalah lebih kurang sama.
# Run the circuit on a simulator to get the results
# Define backend
backend = AerSimulator()
# Transpile to backend
pm = generate_preset_pass_manager(backend=backend, optimization_level=1)
isa_qc = pm.run(qc)
# Run the job
sampler = Sampler(mode=backend)
job = sampler.run([isa_qc])
result = job.result()
# Print the results
counts = result[0].data.c.get_counts()
print(counts)
# Plot the counts in a histogram
plot_histogram(counts)
{'10': 262, '01': 246, '00': 265, '11': 251}
Seperti yang dijangka, keadaan , , , diukur hampir 25% setiap satu.
4.2 Gate kuantum pelbagai Qubit
Gate CNOT
Gate CNOT ("controlled NOT" atau CX) ialah Gate dua Qubit, bermakna tindakannya melibatkan dua Qubit sekaligus: Qubit kawalan dan Qubit sasaran. CNOT membalikkan Qubit sasaran hanya apabila Qubit kawalan berada dalam keadaan .
| Input (sasaran,kawalan) | Output (sasaran,kawalan) |
|---|---|
| 00 | 00 |
| 01 | 11 |
| 10 | 10 |
| 11 | 01 |
Mari kita simulasikan tindakan Gate dua Qubit ini apabila q0 dan q1 kedua-duanya , dan dapatkan vektor keadaan output. Sintaks Qiskit yang digunakan ialah qc.cx(qubit kawalan, qubit sasaran).
# Create a circuit with two quantum registers and two classical registers
qc = QuantumCircuit(2, 2)
# Apply the CNOT (cx) gate to a |00> state.
qc.cx(0, 1) # Here the control is set to q0 and the target is set to q1.
# Draw the circuit
qc.draw(output="mpl")
# See the statevector
out_vector = Statevector(qc)
print(out_vector)
Statevector([1.+0.j, 0.+0.j, 0.+0.j, 0.+0.j],
dims=(2, 2))
Seperti yang dijangka, menerapkan Gate CNOT pada tidak mengubah keadaan, kerana Qubit kawalan berada dalam keadaan . Mari kita kembali kepada operasi CNOT kita. Kali ini kita akan menerapkan Gate CNOT pada dan lihat apa yang berlaku.
qc = QuantumCircuit(2, 2)
# q0=1, q1=0
qc.x(0) # Apply a X gate to initialize q0 to 1
qc.cx(0, 1) # Set the control bit to q0 and the target bit to q1.
# Draw the circuit
qc.draw(output="mpl")
# See the statevector
out_vector = Statevector(qc)
print(out_vector)
Statevector([0.+0.j, 0.+0.j, 0.+0.j, 1.+0.j],
dims=(2, 2))
Dengan menerapkan Gate CNOT, keadaan kini telah menjadi .
Mari kita sahkan keputusan ini dengan menjalankan Circuit pada simulator.
# Add measurements
qc.measure(0, 0)
qc.measure(1, 1)
# Draw the circuit
qc.draw(output="mpl")
# Run the circuit on a simulator to get the results
# Define backend
backend = AerSimulator()
# Transpile to backend
pm = generate_preset_pass_manager(backend=backend, optimization_level=1)
isa_qc = pm.run(qc)
# Run the job
sampler = Sampler(backend)
job = sampler.run([isa_qc])
result = job.result()
# Print the results
counts = result[0].data.c.get_counts()
print(counts)
# Plot the counts in a histogram
plot_histogram(counts)
{'11': 1024}
Keputusan seharusnya menunjukkan bahawa telah diukur dengan kebarangkalian 100%.
4.3 Keterjeratan kuantum dan pelaksanaan pada peranti kuantum sebenar
Mari kita mulakan dengan memperkenalkan satu keadaan keterjeratan tertentu yang sangat penting dalam komputasi kuantum, kemudian kita akan takrifkan istilah "keterjeratan":
dan keadaan ini dipanggil keadaan Bell.
Keadaan keterjeratan ialah keadaan yang terdiri daripada keadaan kuantum dan yang tidak boleh diwakili oleh hasil darab tensor keadaan kuantum individu.
Jika di bawah mempunyai dua keadaan dan ;
hasil darab tensor kedua-dua keadaan ini adalah seperti berikut
tetapi tiada pekali dan yang boleh memenuhi kedua-dua persamaan ini. Oleh itu, tidak boleh diwakili oleh hasil darab tensor keadaan kuantum individu, dan , dan ini bermakna ialah keadaan yang terjerat.
Mari kita cipta keadaan Bell dan jalankan pada komputer kuantum sebenar. Sekarang kita akan ikuti empat langkah untuk menulis program kuantum, yang dipanggil corak Qiskit:
- Petakan masalah kepada Circuit dan pengendali kuantum
- Optimumkan untuk perkakasan sasaran
- Laksanakan pada perkakasan sasaran
- Proses selepas keputusan
Langkah 1. Petakan masalah kepada Circuit dan pengendali kuantum
Dalam program kuantum, Circuit kuantum ialah format asli untuk mewakili arahan kuantum. Apabila mencipta Circuit, anda biasanya akan mencipta objek QuantumCircuit baru, kemudian menambah arahan ke dalamnya secara berurutan.
Sel kod berikut mencipta Circuit yang menghasilkan keadaan Bell, iaitu keadaan keterjeratan dua Qubit khusus dari atas tadi.
qc = QuantumCircuit(2, 2)
qc.h(0)
qc.cx(0, 1)
qc.measure(0, 0)
qc.measure(1, 1)
qc.draw("mpl")
Langkah 2. Optimumkan untuk perkakasan sasaran
Qiskit menukar Circuit abstrak kepada Circuit QISA (Quantum Instruction Set Architecture) yang mematuhi kekangan perkakasan sasaran dan mengoptimumkan prestasi Circuit. Jadi sebelum pengoptimuman, kita akan tentukan perkakasan sasaran.
Jika anda tidak mempunyai qiskit-ibm-runtime, anda perlu memasangnya terlebih dahulu. Untuk maklumat lanjut tentang Qiskit Runtime, lihat rujukan API.
# Install
# !pip install qiskit-ibm-runtime
Kita akan tentukan perkakasan sasaran.
from qiskit_ibm_runtime import QiskitRuntimeService
service = QiskitRuntimeService()
service.backends()
# You can specify the device
# backend = service.backend('ibm_kingston')
# You can also identify the least busy device
backend = service.least_busy(operational=True)
print("The least busy device is ", backend)
Transpilasi Circuit adalah satu lagi proses yang kompleks. Secara ringkas, ini menulis semula Circuit kepada Circuit yang setara secara logik menggunakan "gate asli" (gate yang boleh dilaksanakan oleh komputer kuantum tertentu) dan memetakan Qubit dalam Circuit anda kepada Qubit sebenar yang optimum pada komputer kuantum sasaran. Untuk maklumat lanjut tentang transpilasi, lihat dokumentasi ini.
# Transpile the circuit into basis gates executable on the hardware
pm = generate_preset_pass_manager(backend=backend, optimization_level=1)
target_circuit = pm.run(qc)
target_circuit.draw("mpl", idle_wires=False)
Anda boleh lihat bahawa dalam transpilasi, Circuit telah ditulis semula menggunakan gate baru. Untuk maklumat lanjut, rujuk dokumentasi ECRGate.
Langkah 3. Laksanakan Circuit sasaran
Sekarang, kita akan menjalankan Circuit sasaran pada peranti sebenar.
sampler = Sampler(backend)
job_real = sampler.run([target_circuit])
job_id = job_real.job_id()
print("job id:", job_id)
Pelaksanaan pada peranti sebenar mungkin memerlukan menunggu dalam giliran, kerana komputer kuantum adalah sumber yang berharga dan sangat diminati. job_id digunakan untuk menyemak status pelaksanaan dan keputusan kerja kemudian.
# Check the job status (replace the job id below with your own)
job_real.status(job_id)
Anda juga boleh menyemak status kerja dari papan pemuka IBM Quantum anda:https://quantum.cloud.ibm.com/workloads
# If the Notebook session got disconnected you can also check your job status by running the following code
from qiskit_ibm_runtime import QiskitRuntimeService
service = QiskitRuntimeService()
job_real = service.job(job_id) # Input your job-id between the quotations
job_real.status()
# Execute after job has successfully run
result_real = job_real.result()
print(result_real[0].data.c.get_counts())
Langkah 4. Proses selepas keputusan
Akhir sekali, kita mesti memproses keputusan kita untuk mencipta output dalam format yang dijangka, seperti nilai atau graf.
plot_histogram(result_real[0].data.c.get_counts())
Seperti yang dapat dilihat, dan adalah yang paling kerap diperhatikan. Terdapat beberapa keputusan selain daripada data yang dijangka, dan ia disebabkan oleh hingar dan penyahrincian Qubit. Kita akan belajar lebih lanjut tentang ralat dan hingar dalam komputer kuantum dalam pelajaran-pelajaran kemudian dalam kursus ini.
4.4 Keadaan GHZ
Konsep keterjeratan boleh diperluaskan kepada sistem lebih daripada dua Qubit. Keadaan GHZ (keadaan Greenberger-Horne-Zeilinger) ialah keadaan yang terjerat sepenuhnya bagi tiga atau lebih Qubit. Keadaan GHZ bagi tiga Qubit ditakrifkan sebagai
Ia boleh dicipta dengan Circuit kuantum berikut.
qc = QuantumCircuit(3, 3)
qc.h(0)
qc.cx(0, 1)
qc.cx(1, 2)
qc.measure(0, 0)
qc.measure(1, 1)
qc.measure(2, 2)
qc.draw("mpl")
"Kedalaman" Circuit kuantum ialah metrik yang berguna dan lazim untuk menggambarkan Circuit kuantum. Jejaki laluan melalui Circuit kuantum, bergerak dari kiri ke kanan, hanya menukar Qubit apabila ia disambungkan oleh Gate pelbagai Qubit. Kira bilangan Gate di sepanjang laluan tersebut. Bilangan maksimum Gate untuk mana-mana laluan sedemikian melalui Circuit ialah kedalamannya. Dalam komputer kuantum berderau moden, Circuit berkedalaman rendah mempunyai lebih sedikit ralat dan berkemungkinan besar memberikan keputusan yang baik. Circuit yang sangat dalam tidak begitu.
Menggunakan QuantumCircuit.depth(), kita boleh menyemak kedalaman Circuit kuantum kita. Kedalaman Circuit di atas ialah 4. Qubit paling atas hanya mempunyai tiga Gate termasuk pengukuran. Tetapi terdapat laluan dari Qubit paling atas ke sama ada Qubit 1 atau Qubit 2 yang melibatkan satu Gate CNOT lagi.
qc.depth()
4
Latihan 2
Keadaan GHZ bagi sistem 8 Qubit ialah
Tulis kod untuk menyediakan keadaan ini dengan Circuit yang sedangkal mungkin. Kedalaman Circuit kuantum yang paling cetek ialah 5, termasuk Gate pengukuran.
Penyelesaian:
# Step 1
qc = QuantumCircuit(8, 8)
##your code goes here##
qc.h(0)
qc.cx(0, 4)
qc.cx(4, 6)
qc.cx(6, 7)
qc.cx(4, 5)
qc.cx(0, 2)
qc.cx(2, 3)
qc.cx(0, 1)
qc.barrier() # for visual separation
# measure
for i in range(8):
qc.measure(i, i)
qc.draw("mpl")
# print(qc.depth())
print(qc.depth())
5
from qiskit.visualization import plot_histogram
# Step 2
# For this exercise, the circuit and operators are simple, so no optimizations are needed.
# Step 3
# Run the circuit on a simulator to get the results
backend = AerSimulator()
pm = generate_preset_pass_manager(backend=backend, optimization_level=1)
isa_qc = pm.run(qc)
sampler = Sampler(mode=backend)
job = sampler.run([isa_qc], shots=1024)
result = job.result()
counts = result[0].data.c.get_counts()
print(counts)
# Step 4
# Plot the counts in a histogram
plot_histogram(counts)
{'11111111': 535, '00000000': 489}
5. Ringkasan
Anda telah mempelajari komputasi kuantum dengan model Circuit menggunakan bit kuantum dan Gate, serta telah mengkaji semula superposisi, pengukuran, dan keterjeratan. Anda juga telah mempelajari kaedah untuk melaksanakan Circuit kuantum pada peranti kuantum sebenar.
Dalam latihan akhir untuk mencipta Circuit GHZ, anda telah cuba mengurangkan kedalaman Circuit, yang merupakan faktor penting untuk mendapatkan penyelesaian berskala utiliti dalam komputer kuantum berderau. Dalam pelajaran-pelajaran kemudian dalam kursus ini, anda akan belajar tentang hingar dan kaedah pengurangan ralat secara terperinci. Dalam pelajaran ini, sebagai pengenalan, kita mempertimbangkan pengurangan kedalaman Circuit dalam peranti ideal, tetapi dalam realiti, kita mesti mempertimbangkan kekangan peranti sebenar, seperti ketersambungan Qubit. Anda akan belajar lebih lanjut tentang ini dalam pelajaran-pelajaran seterusnya dalam kursus ini.
# See the version of Qiskit
import qiskit
qiskit.__version__
'2.0.2'