İlk Kuantum Programları

QTEA26 — Salı Oturum 2/3

Öğr. Gör. Oktay Cesur

2026-03-10

Tersine Çevrilebilirlik ve Kuantum Programı

  • Klasik programlar çoğunlukla tersine çevrilemez — çıktıya bakıp giriş bulunamaz
  • Ama bazı klasik operatörler tersine çevrilebilir: NOT, Identity, SWAP
  • Tersine çevrilebilir klasik program = geçerli bir kuantum programı
  • NOT operatörü bu kesişim noktasında: hem klasik hem kuantum

Qiskit: Üç Temel Nesne

from qiskit import QuantumRegister, ClassicalRegister, QuantumCircuit

q  = QuantumRegister(1, "qreg")   # kuantum bitleri
c  = ClassicalRegister(1, "creg") # ölçüm sonuçları
qc = QuantumCircuit(q, c)         # devre
Nesne Ne tutar? Neden gerekli?
QuantumRegister Kubitler Üzerinde kapılar çalışıyor
ClassicalRegister Klasik bitler Ölçüm sonuçları buraya yazılıyor
QuantumCircuit Devrenin tamamı Kapıları ve ölçümleri bir arada tanımlıyor

İlk Devre: NOT Kapısı

qc.x(q[0])             # NOT operatörü — x-gate
qc.measure(q[0], c[0]) # ölç, sonucu c[0]'a yaz
  • Kubitler ve klasik bitler indeks 0’dan başlar
  • x → NOT operatörünün Qiskit adı (x-gate)
  • measure(q[0], c[0]) → kubiti ölç, sonucu klasik bite yaz
  • Başlangıçta her kubit \(|0\rangle\) durumunda
  • x-gate sonrası: \(|0\rangle \rightarrow |1\rangle\) → ölçüm her zaman 1

Devre Görselleştirme

qc.draw()                  # ASCII — metin tabanlı
qc.draw(output='mpl')      # matplotlib — grafik
  • Her kuantum biti tek çizgi , klasik bitler çift çizgi
  • Kapılar kare kutular içinde; ölçüm ayrı sembolle gösterilir
  • Devre soldan sağa okunur — sol = zaman başlangıcı
  • Başlangıç durumu sol tarafta: \(|0\rangle\)

Devreyi Çalıştırma

from qiskit_aer import AerSimulator

job    = AerSimulator().run(qc, shots=1024)
counts = job.result().get_counts(qc)
print(counts)  # {'1': 1024}
  • AerSimulator — yerel klasik simülatör, gerçek donanım gerektirmiyor
  • shots — devrenin kaç kez çalıştırılacağı
  • counts{'sonuç': frekans} sözlüğü
  • NOT devresinde: '1' her seferinde → {'1': 1024}

Sonuçları Okuma

from qiskit.visualization import plot_histogram
plot_histogram(counts)
  • plot_histogram: counts sözlüğünden otomatik bar grafiği
  • Y ekseni: frekans (ya da olasılık)
  • NOT devresinde: tek bar, %100 '1'

Gerçek Kuantum Bilgisayar vs Simülatör

  • Simülatör: gürültüsüz, her zaman beklenen sonuç
  • Gerçek kuantum bilgisayar: gürültülü — fiziksel hata oranları var
  • NOT devresini IBM gerçek donanımında çalıştırma sonucu (1024 shot):
{'0': 62, '1': 962}
  • Beklenen: {'1': 1024} — gerçekte 62 hata (~%6 hata oranı)

Çoklu Kubit Devresi

q2  = QuantumRegister(4, "qreg")
c2  = ClassicalRegister(4, "creg")
qc2 = QuantumCircuit(q2, c2)

qc2.x(q2[0]); qc2.x(q2[0])                         # 2 kez → 0
qc2.x(q2[3])                                         # 1 kez → 1
qc2.x(q2[2]); qc2.x(q2[2]); qc2.x(q2[2])           # 3 kez → 1
qc2.x(q2[1]); qc2.x(q2[1]); qc2.x(q2[1]); qc2.x(q2[1])  # 4 kez → 0

qc2.barrier()
qc2.measure(q2, c2)
  • barrier() — görsel ayırıcı; hesaplamayı etkilemez
  • qc2.measure(q2, c2) — tüm kubitleri tek satırda ölç

Okuma Sırası

Qiskit dört kubiti şu sıraya göre birleştiriyor:

\[qreg[3],\ qreg[2],\ qreg[1],\ qreg[0]\]

  • En solda qreg[3] — en anlamlı bit (MSB)
  • En sağda qreg[0] — en az anlamlı bit (LSB)

Çoklu kubit devresi sonucu:

\[\underbrace{1}_{qreg[3]}\ \underbrace{1}_{qreg[2]}\ \underbrace{0}_{qreg[1]}\ \underbrace{0}_{qreg[0]} \rightarrow \texttt{'1100'}\]

qc2.draw(output='mpl', reverse_bits=True)  # çizimde sırayı tersine çevir

Görev: Rastgele 8-bit Sayı

from qiskit import QuantumRegister, ClassicalRegister, QuantumCircuit
from qiskit_aer import AerSimulator
from random import randrange

q  = QuantumRegister(8)
c  = ClassicalRegister(8)
qc = QuantumCircuit(q, c)

for i in range(8):
    if randrange(2) == 0:  # Python ile yazı-tura: 0 = tura
        qc.x(q[i])

qc.barrier()
qc.measure(q, c)

display(qc.draw(output='mpl', reverse_bits=True))

job    = AerSimulator().run(qc, shots=128)
counts = job.result().get_counts(qc)
print(counts)
  • randrange(2): Python yazı-turası — 0 veya 1
  • Her çalıştırmada farklı kapı dizisi → farklı ikili sayı
  • shots=128 → aynı deterministik devreyi 128 kez tekrarlar

Özet

  • Tersine çevrilebilir klasik operatörler → doğrudan kuantum programı
  • Qiskit’te devre: QuantumRegister + ClassicalRegisterQuantumCircuit
  • x-gate = NOT operatörü — ilk kuantum kapısı; deterministik, gürültüsüz
  • AerSimulator().run(qc, shots=N)counts sözlüğü
  • Okuma sırası: qreg[N-1] ... qreg[0] (MSB → LSB)
  • Sonraki: Hadamard kapısı → ölçüm belirsizliği, foton deneyinin matematiksel karşılığı