1. Ana sayfa
  2. İçerik planı
  3. Statevector simülasyonu · Qiskit
Qiskit · simülasyon ve Aer

Statevector simülasyonu — tam kuantum durumunun klasik temsili

Bu sayfa, devrenin Born örneklemesiyle değil, genlik vektörü olarak temsil edilen kuantum durumunun nasıl üretildiğini ve okunacağını işler. Aer simülatörü başlığında genel arka uç ve yöntem ailesi özetlenmişti; burada ise “statevector yolu”nun sözleşmesi, bellek maliyeti, kübit sırası ve ölçümle ayrışan kullanım senaryoları üzerinde duruyoruz. Devre metni ve kapı cebiri devre yapısı ile kapılar ve ünite mantığı sayfalarında kaldı; ölçüm satırlarının histogram diline geçişi ölçüm mantığı sayfasında. Üstel bellek sınırının sezgisi için klasik simülasyon maliyeti başlığına dönüş yapılabilir.

  • Nesne: Statevector · StatevectorSimulator
  • Boyut: karmaşık vektör uzunluğu 2ⁿ
  • Sınır: ölçüm ve dinamik akışta ünite resminin kırılması

Statevector neyi verir, neyi vermez

n kübitlik saf bir durum, karmaşık sayılardan oluşan 2ⁿ uzunluklu bir sütun vektörü ile kodlanır; her bileşen, hesaplama tabanında o klasik ikili etiketinin genliğidir. Statevector simülasyonu, ünite adımların bu vektör üzerinde çarpan olarak işlendiği yürütmeyi ifade eder — yani “tek bir dalga fonksiyonu” resminin makinede tutulmasıdır. Bu resim, algoritma tasarımında içgörü sağlar; fakat donanımda doğrudan okunmaz ve ölçüm içeren üretim akışının tamamını tek başına taşımaz.

Neden ayrı bir “mod” gibi düşünmelisiniz?

Aynı devre dosyası hem histogram üretmek hem de ara durumları incelemek için kullanılabilir; fakat iki hedef farklı çıktı sözleşmeleri getirir. Statevector yolu, olasılık dağılımını doğrudan örneklemek yerine önce tam genlikleri verir; histogram istiyorsanız ya bu genliklerden teorik dağılımı türetir ya da ölçüm ve shot dünyasına geçersiniz. Bu ayrımı zihinde tutmak, “simülatör hata verdi” paniğini azaltır: çoğu zaman sorun matematikte değil, yanlış çıktı türünü beklemektedir.

“Gerçek kuantum bilgisayarı gibi mi?” kısa yanıt

Hayır — en azından okuma ve zamanlama anlamında. Statevector yürütmesi, ideal ünite modelinin içinde kalır; T1/T2, okuma yanlılığı ve bağlanırlık kısıtı burada doğmaz. Donanıma yaklaşmak istiyorsanız gürültü veya emülasyon hatlarına kaymanız gerekir; bu sayfa o reçeteyi vermez, yalnızca ideal matematiksel çekirdeği netleştirir.

Kapsam GPU hızlandırması, anlık görüntüleme (snapshot) veya olasılık kaydetme gibi komşu başlıklar ayrı konu sayfalarında tutulacak şekilde tasarlandı; burada yalnızca vektörün kendisinin üretimi ve yorumu ele alınır.

İki giriş: Aer arka ucu ve quantum_info

Pratikte iki aile görürsünüz: Aer’in StatevectorSimulator arka ucu, devreyi yürütüp sonuç nesnesinden vektör okumanızı sağlar; Qiskit’in quantum_info.Statevector sınıfı ise çoğu zaman devreyi saf ünite olarak yorumlayıp durumu doğrudan üretir. İkisi de aynı lineer cebri paylaşır; fakat bellek yönetimi, transpile ihtiyacı ve hata mesajları farklılaşabilir. Ekip içinde birini “standart” ilan etmek, karşılaştırmalı deneyleri basitleştirir.

Ne zaman hangisi?

Hızlı matematiksel deneme ve küçük devrelerde Statevector.from_instruction akışı okunabilir ve hafif olabilir. Büyük devrelerde ve Aer seçenekleriyle (örneğin hassasiyet veya paralellik) oynamak istediğinizde arka uç yolu tercih edilir. Kritik olan, her iki yolda da aynı devre grafiğinin aynı ünite olarak yorumlandığını küçük örneklerle doğrulamanızdır; transpile veya basis değişimi gibi ön işlemler vektörü sessizce kaydırır.

Aer ile ilişki

Aer simülatörü sayfasında AerSimulator içinde method="statevector" benzeri bir seçimle de aynı temsil kullanılabilir; burada odak, “genel Aer” yerine vektörü birinci sınıf çıktı olarak sunan yoldur. API ayrıntıları sürüme göre değişebileceğinden, burada yürüttüğümüz tartışma bilerek API’den biraz kopuk, davranışsal düzeydedir.

Bellek, boyut ve ölçek stratejisi

Her karmaşık genlik yaklaşık sekiz bayt yer tutar (tek veya çift hassasiyet); toplam bellek ölçeği O(2ⁿ) mertebesindedir ve bu, “bir kübit daha” eklemenin masrafını ikiye katlaması anlamına gelir. Bu yüzden statevector, eğitim ve algoritma doğrulaması için mükemmeldir; fakat üretim ölçeminde tek başına ölçeklenmez. Ölçek sınırına yaklaştığınızda MPS, stabilizatör veya yoğunluk gibi başka Aer yollarına geçiş düşünülür — bunların her biri farklı devre sınıflarında geçerlidir ve bu sayfada derinleştirilmez.

Profil çıkarma alışkanlığı

Kübit sayısını bir bir artırıp bellek ve süre eğrisini not etmek, ekip içi sezgiyi güçlendirir. İşletim sistemi bellek sayaçları bazen “ani tavan”ı geç gösterir; bu yüzden küçük prototipten sonra aynı kodu biraz daha büyük n ile denemek, planlama hatasını erken yakalar.

Ne zaman vazgeçmek gerekir?

Eğer amacınız yalnızca belirli bir observabl’ın beklenen değeri ise, tam vektörü üretmek gereksiz pahalı olabilir; varyasyonel hatlarda Estimator benzeri soyutlamalar tasarlanmıştır. Bu sayfa o soyutlamaları anlatmaz; yalnızca “tam durum gerekiyor mu?” sorusuna dürüst bir çerçeve çizer.

Endian, indeks ve okuma alışkanlığı

Vektörün k. bileşeninin hangi klasik ikili etikete denk geldiği, kütüphanenin kübit sırası sözleşmesine bağlıdır. İki farklı araç aynı devreyi “doğru” yürütüp farklı indeks düzeninde vektör döndürdüğünde, sorun genelde matematikte değil etiketlemededir. Bu yüzden küçük bir n=2 referans devresinde beklenen genlikleri elle tabloya dökmek, ekip içi tek doğruluk kaynağı oluşturur.

Çizim ile dizi aynı şey değildir

Devre çizimi estetik olarak “soldan sağa” okunur; vektör indeksleri ise bellek düzenine oturur. Görselleştiriciler bazen marjinal olasılıkları ayrıca hesaplar — bu iyi bir güvenlik valfidir: çizim güzel olsa da, sayısal dizi ile aynı sırayı paylaşmayabilir.

Kayıt ve kablo düzeni

Çoklu kübit kayıtları ve kablo permütasyonları, vektörün yorumunu etkiler; kayıt düzeyi disiplini için kayıt sistemleri sayfasındaki sözleşmeyi burada da hatırlamak gerekir.

Ünite evrim ile ölçüm arasındaki çatlak

Ölçüm talimatı, Born kuralı ile klasik bir sonuç üretir ve saf durum resmini tek başına sürdürmeyi zorlaştırır: ya dağılım diline geçersiniz ya da ölçüm öncesindeki ünite prefiksine çekilirsiniz. Statevector aracı, tipik olarak ünite veya ölçümsüz prefiks üzerinde anlamlıdır; ölçüm satırı eklenmiş devrede neyin döndüğünü her zaman “ham vektör” sanmamak gerekir. Bu ayrım, ölçüm mantığı ile dinamik devreler sayfalarının birleştiği noktadır.

Pratik desen

Aynı algoritmanın hem ünite analiz hem ölçümlü deney sürümünü yan yana tutmak için devreyi kopyalayıp bir kopyadan ölçüm satırlarını ayırmak sık bir desendir. Bu küçük disiplin, “neden ünite testim ölçüm sonrası devrede kırılıyor?” sorusunu kökten azaltır.

Klasik kontrol ve koşullu akış

Klasik geri beslemeli dinamik bloklar, yürütmeyi tek bir sabit ünite çarpanı olarak yazmayı zorlaştırır; statevector aracını bu senaryolarda kullanmadan önce desteklenen alt küme hakkında resmi belgeyi doğrulayın. Burada yalnızca riski işaretliyoruz, tam matrisi vermiyoruz.

Doğrulama ve küçük devre disiplini

Ünite kontrolü için Operator veya küçük boyutlu doğrudan matris çarpımı ile statevector sonucunu karşılaştırmak, regresyon testlerinde altın standarttır. Büyük devrede tam matris tutulamayacağından, ya bloklara bölünür ya da rastgele yönlerde özdeğer testleri gibi yöntemlere geçilir — bu sayfa o ileri teknikleri açmaz, fakat “küçükte kanıtla, büyükte ölç” ilkesini pekiştirir.

Transpile ve eşdeğerlik

Transpile edilmiş devre, orijinali ile ünite olarak eşdeğer olmalıdır; fakat farklı optimizasyon seviyeleri sayısal olarak mikroskobik farklar bırakabilir. Statevector karşılaştırmasında tolerans kullanmak, “sıfır mı değil mi” kadar basit bir karar olmayabilir.

Birim testi önerisi

Bell durumu gibi el ile yazılmış referans genlikler, CI hattında hızlı bir kontrol sunar. Testin anlamı, Aer sürümünüz yükseldiğinde regresyonu yakalamaktır.

Global faz, normalizasyon ve sayısal gürültü

Saf durumlar, global bir faz çarpanına kadar özdeştir; iki vektör bileşen bileşen yakınsa ama faz farkı taşıyorsa, aynı fiziksel durumu temsil edebilirler. Karşılaştırma yaparken bazen mutlak değer kareleri yeterlidir, bazen de fazı hizalamak için bir bileşeni referans seçmek gerekir. Sayısal simülasyonda birikmiş yuvarlama, normun biraz sapmasına yol açabilir; yeniden normalizasyon stratejisi, analiz hattınıza göre bilinçli seçilmelidir.

İçgörü mü, raporlama mı?

Araştırma notunda global fazı sabitlemek okunabilirlik kazandırır; üretim logunda ise fazı gereksiz yere “düzeltmek” bazen hata ayıklamayı zorlaştırır. Amaç fonksiyonunuza göre bir politika seçin ve kodda yorum satırıyla kilitleyin.

Notasyon köprüsü: Dirac ve bilgisayar belleği

Ders kitaplarında gördüğünüz |ψ⟩ yazımı ile Python dizisi arasındaki fark yalnızca sözdizimi değildir: biri sonsuz boyutlu Hilbert uzayı fikrini telaffuz etmeye uygun, diğeri ise sonlu boyutta gerçek bir bellek düzenine oturur. Qiskit’te statevector, işte bu ikinci dünyanın somut örneğidir; dolayısıyla “ket gördüm, dolayısıyla vektörü doğrudan okuyorum” geçişi, küçük bir zihinsel çeviri ister.

Kısa tarihsel not, bağlamı koparmadan

Dirac’ın braket notasyonu 20. yüzyıl ortasında hesaplamayı sadeleştirdi; kuantum bilgi çağında ise aynı fikir, SIMD ile hızlandırılmış dizi işlemlerine dönüştü. Richard Feynman’ın “klasik bilgisayarlar kuantumu verimli simüle edemez” uyarısı (polinom zamanlı genel simülasyon bağlamında) bugün hâlâ yön verir — Aer statevector da bu sınırın içinde çalışan bir araçtır; sihirli olarak sınırı aşmaz, fakat sınır içinde mümkün olanın hızlı yoludur. Bu cümleler kişisel biyografi okuması değil, neden bellek eğrisinin dik olduğunu hatırlatan kültürel bir çerçevedir.

Hilbert uzayı tekrarını nerede bulursunuz?

Soyut uzay ve durum postülatları için Hilbert uzayı ve durum sayfasına dönün; burada yalnızca o dilin Qiskit dizisiyle eşlendiği noktayı işaretledik.

Kod laboratuvarı

İlk blok, çekirdek quantum_info.Statevector yolunu gösterir (ölçüm içermeyen küçük devreler için uygundur). İkinci blok, Aer’in StatevectorSimulator yolundan vektör okur; sürümünüze göre import veya sonuç API’si değişebileceğinden, çalıştırmadan önce kısa bir doğrulama yapmanız önerilir.

statevector_from_instruction.py Python
from qiskit import QuantumCircuit
from qiskit.quantum_info import Statevector

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

sv = Statevector.from_instruction(qc)
print("Boyut:", len(sv.data))
print(sv)
qiskit Ünite devre · ölçüm satırı eklemeden deneyin UTF-8 · LF
aer_statevector_sim.py Python
from qiskit import QuantumCircuit
from qiskit_aer import StatevectorSimulator

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

backend = StatevectorSimulator()
job = backend.run(qc)
state = job.result().get_statevector()
print(type(state), len(state))
qiskit-aer Arka uç · sonuç API’si sürüme duyarlı olabilir UTF-8 · LF

İleri okuma ve özet

Statevector yolu, algoritmanın lineer cebirini göz önüne serer; histogram ve donanım dünyasına geçiş ise başka sözleşmeler ister. Bu sayfa, Aer ailesinin bu ucunu diğer konulardan ayırarak okumanıza yardım etti; kardeş başlıklar (shot mantığı, anlık görüntü, olasılık kaydı, GPU) eklendikçe buradan çapraz bağlanabilir.

Özet Statevector simülasyonu, 2ⁿ boyutlu karmaşık vektörü ünite adımlarla güncelleyerek ideal kuantum evrimi gösterir; ölçüm ve dinamik klasik kontrol ile ilişkisi kopukluk yaratabilir. İki pratik giriş (quantum_info.Statevector ve Aer’in statevector arka ucu) aynı matematiği paylaşır; endian ve faz gibi yorum meseleleri insan hatasını önlemek için erken sabitlenmelidir.