1. Ana sayfa
  2. İçerik planı
  3. Klasik kontrol · Qiskit
Qiskit · devre modeli

Klasik kontrol — ölçüm sonrası mantık ve koşullu kapı

Kuantum devreleri çoğu zaman yalnızca ünite kapılardan ibaret değildir: ölçüm sonucu klasik bite yazılır ve bu sonuç, sonraki kuantum adımlarını seçer. Qiskit’te bu ikinci dil, klasik kayıtlar ve onlara bağlı koşullarla modellenir. Ölçümün ne anlama geldiği ölçüm mantığı sayfasında; hatların nasıl adlandığı kayıt sistemleri sayfasında anlatıldı. Burada ise “klasik sonuç geldi, şimdi ne yapılacak?” sorusunun API yüzeyi var. Tam akış zamanlaması ve donanım gerçekliği için dinamik devreler başlığına sık dönüş yapılır — bu sayfa klasik koşulun mantıksal çekirdeğinde kalır.

  • Koşul: Clbit · ClassicalRegister
  • Klasik: c_if ve blok API’lerine köprü
  • Yürütme: simülatör ve cihaz yetenek ayrımı

İkinci Dil: Klasik Durum ve Kuantum Seçim

Klasik kontrol, kuantum durum vektörünün yanında ikinci bir durum değişkeni taşır: ölçümle güncellenen ikili sonuçlar. Bu sonuçlar, bir sonraki “zaman adımında” hangi kuantum kapılarının gerçekten çalışacağını belirler; bu anlamda küçük bir program kontrol akışı gibidir. Fiziksel olarak bu, geri beslemenin donanım veya simülatör tarafından taşınmasını gerektirir; API ise olası akışları metin olarak yazar.

Kısa cümle: klasik kontrol, “ölçtüm bitti” değil, “ölçtüm, karar verdim, devam ettim” üçlüsüdür.

Bu ikinci dil olmadan da kuantum programı yazılabilir; fakat teleportasyon düzeltmesi, hata düzeltme sınıfları ve birçok protokol, ölçüm sonrası dallanmayı zorunlu kılar. Bu yüzden klasik kontrolü “ileri seviye süs” sanmak yanıltıcıdır — doğru yerde çekirdek gereklilik haline gelir.

Tek bit ve kayıt sözcüğü

Koşul bazen tek bir Clbit üzerinden kurulur; bazen tüm ClassicalRegister sözcüğü bir tamsayıyla karşılaştırılır. İkinci biçim kısa notasyon sağlar; fakat bit sırası yorumunu unutmak kolaydır. Hangi uçtan hangi bitin anlamlı olduğunu küçük bir tabloyla sabitleyin.

Tek bit düşünmek beyin için rahattır; kayıt düşünmek ise donanım olaylarını modellemek için sık gereklidir.

Çakışmayı önleme Ölçüm olasılığı ve Born kuralı bu sayfada işlenmez; yalnızca “sonuç yazıldıktan sonra” ne yapıldığı işlenir.

Koşul Ne Zaman Okunur?

Koşullu kapı, çizimde ölçüm kutusunun sağında dursa bile, anlam olarak ölçümün ürettiği klasik değere bağımlıdır. Bu bağımlılık, yürütücünün olay sırasını nasıl modellediğine bağlıdır: bazı simülatörler “ideal ve anında” okur; donanım ise gecikme ve senkronizasyon maliyeti taşır. API aynı kalsa da davranış aynı olmayabilir.

Bu yüzden “koşul anında değerlendirilir” varsayımını üretimde taşımadan önce cihaz belgelerine bakın. Aksi halde algoritma doğru görünürken zamanlama yanlış olur.

Okuma zamanı konusunda şüphe varsa, küçük devrede tek shot ve bilinen girişle gecikme ölçümü yapın — pahalı ama bir kez ödenir.

Ölçüm–koşum aralığı

İki talimat arasına başka ünite adımlar sıkıştırılabilir mi? Çoğu modelde evet; fakat koşulun hangi klasik anlık görüntüye baktığı net olmalıdır. Ara adımlar klasik sonucu değiştirmiyorsa sorun yok; değiştiriyorsa sıra kritiktir.

c_if Deseni ve Zincirleme

Yaygın ve taşınabilir desen, bir kapıyı oluşturup ardından c_if ile koşul eklemektir. Zincirleme okunabilir gelir; fakat her zincir halkası ayrı bir “koşullu uygulama”dır ve çizimde ayrı satırlara düşebilir. Bu, okunabilirlik kazandırır veya gürültü yapar — devre büyüklüğüne bağlıdır.

Sürümler arasında c_if imzası değişebilir; tek bit, kayıt veya farklı sarmalayıcı türleri görülebilir. Bu yüzden eğitim kodunu kopyalarken “aynı satır benim ortamımda çalışır” varsayımını azaltın; küçük birim testle doğrulayın.

Zincir ve okunabilirlik

Uzun zincirler, çizimde dikey olarak şişer. Modülerleştirmek için alt devreye ayırmak veya blok API’ye geçmek düşünülebilir (birleştirme ve ters devre).

Kayıt Sözcüğü ve Tamsayı Karşılaştırması

ClassicalRegister genişliği n ise, koşulda karşılaştırılan tamsayı 0 ile 2ⁿ−1 aralığındadır. Bu tamsayı, bitlerin birleşiminin hangi uçtan okunduğuna bağlıdır; çizimde soldan sağa ile sayısal yorum arasında kayma yaşanabilir. Bu yüzden ilk gün küçük bir tablo çizilir; ikinci gün tartışma bitmiş olur.

İkili 3 ile onluk 3 aynı sembol değildir; hangi tabanda konuştuğunuzu ekibe yazın.

Çoklu kayıt düzeni

Birden fazla klasik kayıt varken, koşulun hangi kayda baktığı isim ve sıra ile bağlanır. Birleştirme sonrası kayıt sırası değişirse, aynı sayısal koşul farklı anlama gelebilir.

Blok Tabanlı Kontrol Akışı

Yeni nesil API’ler, if–else ve benzeri yapıları devre metnine blok olarak gömer. Bu, çizimi ve analizi bazen kolaylaştırır; fakat transpile ve donanım desteği açısından ek tablo gerektirir. Bu sayfa blokların iç cebirini anlatmaz; yalnızca “klasik kontrolün iki yüzü” olduğunu işaretler: ince c_if satırları veya blok sınırları.

Hangisini seçeceğiniz, ekibin okuma alışkanlığı ve hedef cihazın destek matrisiyle belirlenir — ideolojik bir tercih değildir.

Geçiş ve bloklar

Bloklar, geçiş yöneticisinin tanıdığı desenlere dönüşebilir veya dönüşmeyebilir. Bu yüzden blok kullanırken bile, transpile sonrası şemayı inceleme alışkanlığını bırakmayın (devre optimizasyon mantığı).

Zaman Sıralaması ve Çizim Okuması

Klasik kontrol çizimde ince çizgilerle veya yan panellerle gösterilir; stil seçeneği sürüme göre değişir. Okuma disiplini yine .data listesidir: koşul hangi talimatla aynı “sütunda” duruyor, hangi ölçüm satırından sonra geliyor? Bu soruların yanıtı, protokolün doğruluğundan sorumludur.

Güzel çizim yanlış protokolü affetmez; çirkin çizim doğru protokolü de düzeltmez.

Bariyer ve sıra

Bariyer, klasik kontrolün anlamını değiştirmez; fakat geçişin yeniden sıralama özgürlüğünü kısıtlayabilir. Bu etkileşim bariyer ve akış kontrolü sayfasında ayrıntılandı.

Simülatör ve Donanım: Yetenek Çizgisi

Aynı devre metni iki yürütücüde farklı desteklenir: biri koşulu idealize eder, diğeri reddeder veya kısıtlar. Bu fark, “API kabul etti” ile “cihaz çalıştırdı” arasındaki mesafedir. Üretim öncesi destek matrisini okumak sıkıcıdır; fakat en ucuz sigortadır.

Kısa not: “Aer’de çalıştı” cümlesi, donanım sözleşmesi değildir.

Donanımda klasik geri besleme gecikmesi, kapı hatalarıyla birleşince protokolünüzün hata toleransını test eder. Bu testler, bu sayfanın konusunun ötesine geçer; yine de API doğru olsa bile sistem yanlış olabilir.

Pratik kural Önce simülatörde mantığı, sonra hedef cihazda yetenek ve zamanlama kısıtını doğrulayın. İkisini aynı günde karıştırmayın.

Geçiş ve Birleştirme Etkisi

Geçiş yöneticisi, klasik kontrol içeren devreleri yeniden yazarken koşullu yapıları başka temsillere dönüştürebilir veya koruyabilir. Birleştirme ise iki modülün klasik kayıtlarını aynı çatı altına getirir; koşul ifadeleri çakışırsa anlam sessizce kayar. Bu yüzden modül sınırında klasik kayıt adları ve koşul hedefleri belgeye yazılır.

Transpile öncesi birleştirilmiş devre, “kaynak gerçek” kabul edilmeli; sonrası türevdir.

Yaygın Tuzaklar

Ölçüm yazılmadan koşul kurmak; koşulun yanlış kayda bakması; bit sırasını yanlış yorumlayıp doğru görünen yanlış tamsayı kullanmak; paylaşımlı klasik kayıtta beklenmedik üzerine yazma — bunların hepsi gerçek dünyada görülür. Liste uzun olsa da çözüm disiplin aynıdır: küçük devre, açık tablo, otomasyon.

Bir tuzak daha: koşulu “optimizasyon güvenli” sanmak. Klasik kontrol, geçiş için ek kısıt olabilir.

Ölçüm ve koşul yarışı

Aynı klasik bite hem ölçüm hem başka yazıcı talimatlar bağlanıyorsa sıra belirleyicidir. Bu yarış, çok iş parçacıklı simülasyonlarda bile sürpriz çıkarabilir.

Kod Laboratuvarı

İlk örnek tek bit koşulu; ikinci örnek iki bitlik kayıt sözcüğü ile koşullu rotasyon gösterir. Ortamınızdaki c_if imzası farklıysa resmi belgeye göre uyarlayın.

c_if_single_bit.py Python
from qiskit import QuantumCircuit

qc = QuantumCircuit(1, 1)
qc.h(0)
qc.measure(0, 0)

# Klasik 0. bit 1 ise X uygula (sürümünüze göre c_if imzasını doğrulayın).
qc.x(0).c_if(qc.cregs[0], 1)

print(qc)
qiskit c_if · ClassicalRegister UTF-8 · LF
c_if_register_word.py Python
from qiskit import QuantumCircuit

qc = QuantumCircuit(2, 2)
qc.h(0)
qc.cx(0, 1)
qc.measure([0, 1], [0, 1])

# İki bitlik klasik sözcük tam olarak 3 (ikili 11) ise küçük bir faz adımı.
qc.rz(0.2, 0).c_if(qc.cregs[0], 3)

print(qc)
qiskit Kayıt sözcüğü · değer 3 = her iki bit 1 UTF-8 · LF

İleri Okuma ve Özet

Klasik kontrol; ölçümün ürettiği sonuçları okuyup kuantum akışını yönlendiren ince ama kritik katmandır. Blok API’ler ve c_if aynı ailenin farklı yüzleridir; donanım desteği ise ayrı bir gerçekliktir.

Özet Klasik kontrol, klasik duruma bağlı kuantum adımları seçer. c_if yaygın taşınabilir desendir; kayıt sözcüğü karşılaştırması bit sırası disiplini ister. Simülatör ile cihaz yetenekleri ayrılır; geçiş ve birleştirme klasik tarafı yeniden düzenleyebilir.