1. Ana sayfa
  2. Algoritmalar
  3. Grover ve arama
  4. Genlik güçlendirme · Qiskit
Grover ve arama · Qiskit

Genlik güçlendirme — Grover’ın genelleştirilmiş iskeleti

Genlik güçlendirme (amplitude amplification), bir kuantum sisteminde “istenen” durumların ölçümde görünme olasılığını, istenmeyen durumları girişimle sönümleyerek sistematik biçimde artıran genel bir operatör desenidir. Grover araması bunun en ünlü uygulamasıdır: özel bir oracle ve özel bir başlangıç dağılımı seçer.

  • Desen: oracle + diffüzör
  • Geometri: 2B döndürme
  • Hızlanma: O(1/√p)
  • Örnek: 3 kübit · hedef "101"

Genlik Güçlendirme Nedir? (Derinlemesine Analiz)

Genlik güçlendirme, bir “başarı” altuzayına düşme olasılığı düşük olan bir kuantum prosedürü, birkaç kontrollü iterasyonla yüksek olasılıkla başarıya taşıyan genel bir şablondur. Buradaki amaç tek bir çıktı değil; istenen durumlar kümesini ölçümde baskın hâle getirmektir.

Grover vs. genlik güçlendirme Grover araması, genlik güçlendirmenin “veritabanı araması”na uyarlanmış halidir: işaretlenen çözümler bir oracle ile fazdan seçilir, ardından diffüzör ile genliğe çevrilir. Genlik güçlendirme ise aynı fikri daha geniş bir problem ailesine taşır.

Temel felsefe

Klasik istatistikte bir olayın olasılığını büyütmek için deneme sayısını artırırız. Kuantum mekaniğinde ise olasılığın kendisi değil, onun karekökü olan genlik üzerinde çalışırız.

  • Genlikler işaret taşıyabilir

    Genlikler negatif/karmaşık olabildiği için, istenmeyen sonuçları yıkıcı girişimle birbirini yok edecek şekilde hizalayabiliriz.

  • Ölçüm en sonda

    “Başarı”yı büyüten şey ölçüm değil, ölçümden önce uygulanan yansıma/döndürme adımlarıdır; ölçüm sadece sonucu okur.

Matematiksel sihir: ortalama etrafında yansıma

Protokol, Hilbert uzayında iki boyutlu bir düzlemde (başarı altuzayı + başarısız altuzay) döndürme gibi okunabilir. Bir iterasyon, iki yansımanın birleşimidir.

İşaretleme (oracle)Uω

Oracle, istenen durumu |ω⟩ fazdan işaretler: genliğin işaretini çevirir. Sezgi: vektörü “hedef eksenine” göre yansıtmak.

Yansıtma (diffüzör)Us

Diffüzör, genlikleri “ortalama genlik” etrafında yansıtır. İşaretlenmiş durum ortalamadan uzaklaştığı için yansıma sonrası daha büyük pozitif genlik kazanır; diğerleri ortalamaya yakın kaldığı için göreli olarak küçülür.

Over-cooking uyarısı Bu süreç birikimli bir “toplama” değil, periyodik bir döndürmedir. Fazla iterasyon hedefi tepeyi geçip tekrar düşürebilir; durma noktasını doğru seçmek gerekir.

Hızlanma analizi

Eğer başlangıç prosedürünüzün başarı olasılığı p ise, klasik tekrar denemede beklenen süre O(1/p) ölçeğindedir. Genlik güçlendirme, aynı başarıyı tipik olarak O(1/√p) iterasyon ölçeğine indirir.

Yaklaşım Başarı olasılığı Beklenen deneme / iterasyon
Klasik tekrar deneme p O(1/p)
Genlik güçlendirme p (aynı başlangıç) O(1/√p)

Qiskit kod örneği

Aşağıdaki örnek, 3 kübitlik bir sistemde hedef bit dizisini ("101") oracle ile fazdan işaretleyip, diffüzör ile genliğe çeviren tek bir güçlendirme adımı kurar. Ardından ölçüm yapmadan önce durum vektöründen olasılıkları okuruz.

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


def amplitude_amplification_step(qc, target_bitstring: str):
    n = qc.num_qubits

    # 1) ORACLE (İşaretleme) — hedef durumu fazdan işaretle
    for i, bit in enumerate(target_bitstring):
        if bit == "0":
            qc.x(i)

    qc.h(n - 1)
    qc.mcx(list(range(n - 1)), n - 1)  # Çoklu kontrollü X
    qc.h(n - 1)

    for i, bit in enumerate(target_bitstring):
        if bit == "0":
            qc.x(i)

    qc.barrier()

    # 2) DIFFUSER (Yansıtma) — ortalama etrafında yansıtma
    qc.h(range(n))
    qc.x(range(n))
    qc.h(n - 1)
    qc.mcx(list(range(n - 1)), n - 1)
    qc.h(n - 1)
    qc.x(range(n))
    qc.h(range(n))
    qc.barrier()


# Uygulama: 3 kübitlik sistemde "101" durumunu güçlendirelim
target = "101"
qc = QuantumCircuit(3)
qc.h(range(3))  # Eşit süperpozisyonla başla
qc.barrier()

# Bir adım güçlendirme uygula
amplitude_amplification_step(qc, target)

# Ölçüm yapmadan önce durum vektöründen olasılıkları oku
state = Statevector.from_instruction(qc)
probs = state.probabilities_dict()
print(f"Hedef durum '{target}' olasılığı: {probs.get(target, 0.0):.4f}")
print("Tüm dağılım:", probs)
qiskit Statevector · ölçümsüz UTF-8 · LF

Kod analizi · satır satır

Importlar QuantumCircuit devreyi kurar. Statevector ise ölçüm yapmadan önceki genlik/olasılık dağılımını okumak için kullanılır; yani “genlik güçlendirme gerçekten bir şey yaptı mı?” sorusuna doğrudan cevap verir.

amplitude_amplification_step(qc, target) Bu fonksiyon bir iterasyon (Grover step) uygular: önce oracle ile hedefi fazdan işaretler, sonra diffüzör ile bu faz farkını genlik farkına çevirir. Birden çok iterasyon yapmak için bu fonksiyonu döngüyle çağırırsınız.

Oracle kısmı: “0” bitlerini X ile çevirme Hedef bit dizisi "101" iken, çoklu kontrollü kapının “tüm kontroller 1” şartına uyabilmesi için hedefte 0 olan konumlara geçici X uygulanır. Böylece işaretleme, doğrudan hedef duruma hizalanır; sonra aynı X'ler geri alınır.

qc.mcx(...) ile faz işaretleme Burada HMCXH sandviçi, çoklu kontrollü Z etkisi üretir: hedef durumun fazı tersine döner. Yani oracle olasılığı değil, fazı değiştirir.

Diffüzör: ortalama etrafında yansıma Diffüzör bloğu standart şablondur: HX → (çoklu kontrollü faz) → XH. Sezgi: “uniform” durum ekseni etrafında yansıma yaparak işaretli durumun genliğini büyütür.

qc.barrier() Bariyerler matematiği değiştirmez; devreyi okurken “oracle bitti / diffüzör başladı” gibi sahneleri net ayırır ve transpiler optimizasyonunun bölümleri iç içe geçirmesini engeller.

Statevector ile doğrulama probabilities_dict() çıktısında hedef anahtarın ("101") olasılığının başlangıca göre yükselmesi beklenir. İterasyon sayısını artırırsanız olasılık bir noktada tepe yapar; sonra “over-cooking” nedeniyle tekrar düşebilir.

Devre ve doğrulama

Aşağıdaki şema tek bir güçlendirme iterasyonunu görselleştirir: süperpozisyon → oracle (faz işareti) → diffüzör (ortalama etrafında yansıma) → (opsiyonel) ölçüm. 3 kübitlik örnekte hedef "101" seçilmiştir.

Genlik güçlendirme · 3 kübit · hedef "101" H → oracle → diffüzör → ölçüm
q0 q1 q2 c H H H başlangıç Oracle faz işareti · hedef "101" Diffüzör ortalama etrafında yansıma M M M
Neden hedef "101"? Kodda "101" dizisindeki 0 olan bit için (orta kübit) uygulanan X kapıları, oracle’ın “tüm kontroller 1” şartını bu özel desene hizalar. Böylece oracle sadece "101" durumunu fazdan işaretler. Diffüzör ise bu faz farkını kullanarak "101"’in “sesini yükseltir”.

Şemayı adım adım oku

  1. Hadamard katmanı, tüm adayları aynı başlangıç genliğiyle hazırlar.

  2. Oracle, “başarı” durumlarını fazdan işaretler; olasılık henüz değişmez.

  3. Diffüzör, ortalama etrafında yansıma ile faz farkını genlik farkına çevirir.

  4. Yeterli iterasyondan sonra ölçüm yapılır; başarı altuzayı baskın hale gelir.

Doğrulama

Hedef: tek adım sonunda bile "101" olasılığının uniform başlangıca göre artması.

  • başlangıç1/8
  • sonra > 1/8
  • not iterasyon sayısı arttıkça tepe yapar

Tasarım ve içerik geliştirme notları

  • Grover bir uygulama

    Grover, genlik güçlendirmenin “arama” problemine uyarlanmış halidir. Aynı şablon, “başarı testi” yazabildiğiniz her yerde yeniden kullanılabilir.

  • Geometrik gösterim

    Hilbert uzayındaki vektör döndürmeyi gösteren küçük bir SVG, neden iterasyon sayısını abartmamak gerektiğini (fazla döndürme riski) çok net anlatır.

  • Hızlanma notu

    Klasik başarı süresi O(1/p) iken, genlik güçlendirme O(1/√p) ölçeğine indirir. Bu fark, “genlik” ile “olasılık” ayrımını doğrudan görünür kılar.