← Quantum Store · Rehberler · Dersler · Sözlük · Paketler · Öğrenme yolları · English
Qiskit kursu: gerçek kuantum programlama · Ders 2 / 6 · 10 dk
Devreyi çalıştırmak: Sampler ve sayımlar
Qiskit’in Sampler aracıyla devreni binlerce kez çalıştır, sonuçları say ve sayımlardan olasılıkları tahmin et.
Primitifler: Sampler ve Estimator
Qiskit sonuç almak için iki temel araç sunar ve bunlara primitif (primitive) der. Sampler devreyi tekrar tekrar çalıştırıp ölçüm sonuçlarını sayar. Estimator ise bir büyüklüğün beklenen değerini hesaplar; onu dördüncü derste göreceğiz.
StatevectorSampler, ideal bir kuantum bilgisayarı senin bilgisayarında simüle eden Sampler’dır. Güzel tarafı şu: aynı kod küçük bir değişiklikle IBM’in gerçek cihazlarında da çalışır.
Bell devresini 1000 kez çalıştır
sampler.run bir devre listesi alır ve her devre için bir sonuç döndürür; result[0] listedeki ilk devrenin sonucudur. measure_all() sonuçları “meas” adlı yazmaca yazdığı için sayımlara data.meas üzerinden ulaşırız. get_counts() her sonucun kaç kez çıktığını bir sözlük olarak verir.
from qiskit import QuantumCircuit
from qiskit.primitives import StatevectorSampler
qc = QuantumCircuit(2)
qc.h(0)
qc.cx(0, 1)
qc.measure_all()
sampler = StatevectorSampler()
job = sampler.run([qc], shots=1000)
result = job.result()
counts = result[0].data.meas.get_counts()
print(counts) # örneğin {'00': 507, '11': 493}
Sayımlar neden her seferinde farklı?
shots, devrenin kaç kez çalıştırılacağıdır. Her çalıştırmada ölçüm rastgele bir sonuç verir; ideal olasılık %50 olsa bile 1000 denemede tam 500 çıkması nadirdir. Kodu her çalıştırdığında 507–493, 489–511 gibi farklı sayılar görürsün. shots büyüdükçe oranlar gerçek olasılıklara yaklaşır.
Olasılığı tahmin etmek için her sayımı toplam deneme sayısına bölersin. Deneme alanındaki “1000 kez ölç” düğmesi de tam olarak bunu yapar.
shots = 1000
olasiliklar = {bit: n / shots for bit, n in counts.items()}
print(olasiliklar) # örneğin {'00': 0.507, '11': 0.493}
Birden fazla devre ve kendi klasik bitlerin
sampler.run([qc1, qc2]) iki devreyi tek seferde çalıştırır; sonuçları result[0] ve result[1] içindedir. Gerçek cihazlarda bu, her devre için ayrı ayrı sıra beklemekten çok daha hızlıdır.
measure_all() yerine klasik bitleri kendin de açabilirsin: QuantumCircuit(2, 2) iki kübit ve iki klasik bit açar, qc.measure([0, 1], [0, 1]) kübitleri sırayla bu bitlere ölçer. Bu durumda yazmacın adı “c” olur ve sayımlar data.c.get_counts() ile alınır.
Kendin dene
GHZ örneğinde “1000 kez ölç” düğmesine birkaç kez bas: 000 ve 111 sayıları 500 civarında oynar, başka bir sonuç hiç çıkmaz. Qiskit’teki shots=1000 tam olarak bunu yapar.
Tarayıcıda dene (kurulum yok)Akılda kalsın
- Sampler devreyi shots kez çalıştırıp sonuçları sayar; StatevectorSampler bunu bilgisayarında ideal olarak simüle eder.
- measure_all() ile ölçülen devrenin sayımları result[0].data.meas.get_counts() ile alınır.
- Sayımlar rastgeledir; olasılık tahmini sayım bölü shots’tur ve shots arttıkça iyileşir.
- Birden fazla devre tek bir run çağrısıyla gönderilebilir.
Kendini sına
measure_all() ile ölçülen bir devrenin sayımlarını nereden alırsın?
- result[0].data.meas.get_counts()
- qc.get_counts()
- sampler.counts
Cevabı göster
result[0].data.meas.get_counts(). run her devre için bir sonuç döndürür; measure_all() sonuçları “meas” yazmacına yazdığı için sayımlar result[0].data.meas.get_counts() ile okunur.
← Qiskit’e giriş: ilk devreni Python’la yaz · Bit sırası: Qiskit sonuçlarını doğru okumak →