1. Ana sayfa
  2. Algoritmalar
  3. Varyasyonel optimizasyon ve QML
  4. QAOA · PennyLane
Kombinatorik optimizasyon · PennyLane

Kuantum yaklaşık optimizasyon — maliyet katmanı · karıştırıcı · beklenen değer

QAOA (Quantum Approximate Optimization Algorithm), seçilen bir maliyet Hamiltonyeninin (burada İsing tipi iki kübit etkileşimi) beklenen değerini küçültmek veya büyütmek için alternatif maliyet ve karıştırıcı katmanları uygular; katman sayısı p ile derinlik ayarlanır. PennyLane’de aynı düzen qml.IsingZZ, yerel RX karıştırıcısı ve qml.expval(qml.PauliZ(0) @ qml.PauliZ(1)) ile doğrudan yazılır — tam optimizer döngüsü yerine bu dosyada p = 1 · iki kübit · tek kenar iskeleti, qml.draw çıktısı ve SVG ile doğrulanır.

  • İskelet: H → IsingZZ → RX · p = 1
  • Örnek maliyet okuması: ⟨Z₀Z₁⟩
  • Çekirdek: PennyLane default.qubit · QNode
  • Dış döngü: klasik optimizer (bu sayfada yalnızca tek ileri geçiş)

Kuantum yaklaşık optimizasyon (QAOA) nedir?

QAOA, kombinatorik bir optimizasyon veya kesim problemine karşılık gelen bir maliyet Hamiltonyenini HC — çoğu zaman graf kenarlarından gelen İsing ZZ terimleri ve gerekiyorsa alan/manyetik Z terimlerinin Pauli cümlesi — kuantum tarafında küçük ünitelerin bileşimi olarak uygular ve klasik bir döngüde sürekli parametreleri ayarlar. Önce hazırlık (çoğu sunumda ürün durumundan eş süperpozisyona giden H kapıları), ardından bir katmanda sırasıyla maliyet evrimine uygun ünite e−iγHC ile örtüşen iki kübit etkileşimleri ve karıştırıcı evrime uygun ünite e−iβHM (tipik olarak tek kübit X ekseninde rotasyonlar) gelir. Bu iki blok birlikte tek bir QAOA “katmanı”dır; katman sayısı p olunca aynı yapı p kez üst üste konur ve parametre vektörleri γ = (γ1, …, γp), β = (β1, …, βp) klasik optimizatör tarafından güncellenir. Kuantum çekirdekten okunan skaler neredeyse daima seçilen Pauli gözlemlenebilirlerinin beklenen değerleri veya bunların HC içindeki katsayılarla toplanmasıdır; böylece “Hamiltonyen enerjisi” veya problem özelinde tanımlanan bir uygunluk tek bir sayıya iner.

Bu dosya PennyLane izinde yazılmıştır: maliyet üyesini doğrudan qml.IsingZZ gibi kapılarla kodlamak, beklenen değeri qml.expval(...) ile okumak ve parametreleri pennylane.numpy tensörleri olarak tutup gerektiğinde otomatik türev zincirine bağlamak mümkündür. Yani anlatım ekseni “QuantumCircuit + transpile + Estimator” değil; QNode · soyut Pauli kapıları · diferansiyellenebilir maliyet düzenidir. Qiskit tarafında derinlemesine problem kodlaması, Aer/ donanım örnekleri ve kütüphane API akışı için QAOA · Qiskit sayfası kullanılır — buradaki metin onun yerine geçmez; aynı matematiksel çekirdeği farklı çatı altında göstermek içindir.

Genel bir varyasyonel devre şablonu (Ansatz tasarımı, tek maliyet gözlemi) için VQC · PennyLane dosyasına bakın. Orada maliyet–karıştırıcı ayrımı sabit değildir; bu sayfada ise blokların rolleri QAOA düzenine göre adlandırılır.

Bu sayfanın sınırı Grafın tam kodlaması, tam bir Max-Cut koşusu veya donanım gürültüsü yerine PennyLane ile tutarlı p = 1 devre + çizim + doğrulama şeması sunulur; teorik geniş anlatım Qiskit eşleniğinde, PennyLane uygulama iskeleti burada kalır.

p = 1 iskelet: süperpozisyon, maliyet ve karıştırıcı

p = 1, maliyet–karıştırıcı çiftinin yalnızca bir kez uygulanmasıdır; parametre sayısı bu minimal örnekte tek γ ve tek β ile sınırlı kalır. İki kübit ve graf üzerinde yalnızca tek kenar (0, 1) seçildiğinde, İsing tarafında o kenara düşen tek Pauli terimi Z₀Z₁ olur; çok kenarlı graflerde her kenar için ayrı iki-kübit kapı (uygun kablolama ile) sıraya eklenir — burada şema tek blokta kalması için bilerek sade tutulur.

Hazırlık olarak her iki kübite H uygulamak, yaygın sunumlarda ürün durumundan eş ağırlıklı süperpozisyona geçişi verir; üretimde veya farklı QAOA varyantlarında başlangıç başka bir üniteyle de seçilebilir; bu sayfadaki kod, okunabilirlik için klasik “Her kübitte H” düzenini izler.

PennyLane’de iki kübit İsing etkileşimi qml.IsingZZ(φ, wires=[0, 1]) ile yazılır; bu kapı exp(−i φ/2 · Z₀Z₁) üssünü temsil eder. Bu yüzden kütüphanede φ = 2γ seçmek, makalelerde sık geçen exp(−iγ Z₀Z₁) maliyet üssü ile aynı fiziksel aşamayı verir — kısaca: önce elde tutmak istediğiniz γ’yi belirleyin, kapı argümanına koyun. Karıştırıcı tarafta PennyLane’de RX(θ) tek kübitte exp(−i θ/2 · X) üssüdür; standart QAOA karıştırıcısı e−iβX₀ e−iβX₁ biçiminde yerel ünitelerin çarpımı olduğundan, her kübitte RX(2β) kullanmak aynı matematiksel karıştırıcıyı (sıra bu örnekte değişmez) kodlar.

Örnek okuma olarak ⟨Z₀Z₁⟩ seçilmesinin nedeni doğrudanlık: beklenen değer, o kenarın maliyet terimine — uygun işaret ve katsayılarla — klasik tarafta eklenecek sayıyı besler. Tam bir İsing veya Max-Cut kodlamasındaki toplam maliyet ve işaret kuralları QAOA · Qiskit anlatımında ayrıntılanır; burada yalnızca tek terimin PennyLane’de nasıl ölçüldüğü gösterilir.

Parametreler γ = 0.35, β = 0.22 yalnızca sabit bir sayısal örnektir; aynı devrede tek ileri geçişte yaklaşık ⟨Z₀Z₁⟩ ≈ 0.497 elde edilir (default.qubit üzerinde analitik beklenen değer). Optimizasyon döngüsü burada çalıştırılmaz; amaç, γ ve β değiştikçe bu beklenen değerin nasıl hareket edeceğini klasik bir algoritmanın maliyet yüzeyinde tarayabileceğini düşünmek için şeffaf bir QNode bırakmaktır.

PennyLane boru hattı

QAOA tarafında PennyLane’i “soyut bir makine” olarak düşünmek işi kolaylaştırır: seçilen cihaz kuantum fonksiyonunun hangi soyutta çalışacağını ve ölçüm modelini belirler; qml.device("default.qubit", wires=2) bu dosyada iki kübitlik tam durumu sayısal olarak izleyen bir simülatör seçer — graf tek kenarlı olduğu için kablo sayısı iki ile yeterlidir. Üzerine yazdığımız fonksiyon qaoa_p1(γ, β) için kullanılan ana soyutlama @qml.qnode(dev) dekoratörüdür: böylece blok sırasıyla uygulanan kapılar ile fonksiyonun Python çıktısı arasında tek bir tanım kalır; altta beklenen Pauli değerleri expval ile hesaplanır ve klasik tarafta tek bir skaler maliyet olarak kullanılabilir.

Bu örnekte dönüş qml.expval(qml.PauliZ(0) @ qml.PauliZ(1)) olduğundan skaler doğrudan ⟨Z₀Z₁⟩ ile ilişkilidir — genel VQC sayfasındaki tek kübit ⟨Z₀⟩ okumasından farklı olarak, maliyet gözlemi burada iki kübit korelasyonunu ölçer ve §2’deki tek kenarlı ZZ terimiyle aynı çizgidedir. Tam bir optimizasyon koşusunda skaler genelde çok terimin ağırlıklı toplamıdır; burada tek terim şeffaflığı korunur.

Parametreleri pennylane.numpy (import pennylane.numpy as pnp) ile tensör olarak tutmak, γ ve β üzerinden otomatik türev çizmeyi mümkün kılar — yani QAOA’nın klasik döngüsü seçilirse aynı QNode’dan gelen skalerin bu parametrelere göre gradyanı hesaplanabilir. Bu sayfa optimizer çağrısı göstermez; amaç, maliyet yüzeyinin “hangi soyutlama üzerinden tanımlandığını” net bırakmaktır. VQC · PennyLane dosyası ise genel θ vektörü ve tek Pauli okuması ekseninde genişler; burada odak QAOA katmanının parametreleri ve iki kübit gözlemidir.

qml.draw(qaoa_p1)(γ, β) tam bir çalışma zamanı grafiği değil, metin tabanlı bir devre özeti üretir; aşağıdaki kod ve SVG bölümlerinde aynı kapı sırasının görsel olarak izlenmesi için köprü görevi görür. İstenirse qml.specs veya benzeri çağrılarla cihaz ve kaynak bilgisi de okunabilir — bu minimal örnekte gerek yoktur.

default.qubit üzerinde tipik kurulumda beklenen değerler analitik üretilir; cihaz yapılandırmasına sonlu shots verilirse expval örneklenmiş ortalamaya yaklaşır ve hem skaler hem de türev tahmininin gürültüsü değişir. Gerçek donanım veya gürültülü simülatörde bağlantı haritası ve ek hata modeli girer — burada okuma ve şema doğrulaması için ideal ortam yeterlidir.

PennyLane kod örneği

İki kübit, p = 1: Hadamard hazırlığı, IsingZZ(2γ), ardından her kübitte RX(2β); çıkış ⟨Z₀Z₁⟩.

qaoa_p1_pennylane.py Python
import pennylane as qml
from pennylane import numpy as pnp

dev = qml.device("default.qubit", wires=2)

@qml.qnode(dev)
def qaoa_p1(gamma, beta):
    for w in range(2):
        qml.Hadamard(wires=w)
    qml.IsingZZ(2 * gamma, wires=[0, 1])
    qml.RX(2 * beta, wires=0)
    qml.RX(2 * beta, wires=1)
    return qml.expval(qml.PauliZ(0) @ qml.PauliZ(1))

gamma = pnp.array(0.35)
beta = pnp.array(0.22)
print(qml.draw(qaoa_p1)(gamma, beta))
print("⟨Z₀Z₁⟩ ≈", float(qaoa_p1(gamma, beta)))
pennylane default.qubit · IsingZZ · RX · expval(Z₀Z₁) UTF-8 · LF

Kod Analizi

İskeletin rolü

Bu blok, QAOA’nın bir katmanını PennyLane primitifleriyle yazmayı gösterir; şema ve analiz 6 · Aynı devre (iki temsil) ve 7 · Demo ve doğrulama ile birlikte okunmalıdır.

Hadamard döngüsü

İki kübite paralel H, graf bağımsız eş süperpozisyon hazırlar; farklı başlangıç politikaları üretimde kullanılabilir.

IsingZZ(2 * gamma, wires=[0, 1])

Tek kenarlı maliyet üyesinin üssü; argümanın seçilmesi, yaygın γ parametrizasyonuyla fazın uyumunu kolaylaştırır.

RX(2 * beta) her kübitte

Standart QAOA karıştırıcısının tek kübit X yönündeki uzayı örneklemesi; parametre β ile ölçeklenir.

expval(PauliZ(0) @ PauliZ(1))

İki kübit Pauli gözleminin beklenen değeri; tam İsing maliyeti birden çok kenar ve tek kübit terimi için terimlerin toplamına genişler.

qml.draw(qaoa_p1)(gamma, beta)

PennyLane sürümüne göre etiket biçimi değişebilir; önemli olan H → IsingZZ → RX sırasının korunmasıdır.

Aynı devre (iki temsil)

Solda print(qml.draw(qaoa_p1)(gamma, beta)) çıktısı; sağda aynı mantıksal sıranın şeması. Örnek parametreler γ = 0.35, β = 0.22 → çizimde IsingZZ(0.70), RX(0.44).

terminal

qml.draw · iki kübit · örnek γ, β

0: ──H─╭IsingZZ(0.70)──RX(0.44)─┤ ╭<Z@Z>
1: ──H─╰IsingZZ(0.70)──RX(0.44)─┤ ╰<Z@Z>

H · süperpozisyon IsingZZ · maliyet RX · karıştırıcı

svg

p = 1 QAOA — kompakt şema

0 1 H H IsingZZ RX RX ⟨Z₀Z₁⟩ expval

mor · H turuncu · IsingZZ yeşil · RX

Canlı devre paneli bu sayfada yok. Aşağıdaki terminal ve SVG (veya özet şema) tam referans görselidir; tarayıcıda simülatör veya örnek histogram çalışmaz. Canlı devre, moment turu ve örnek sayım şu an şu sayfalarda: Bell · Qiskit, GHZ · Qiskit, Bell · Cirq, QRNG · Qiskit, Süper yoğun kodlama, BB84, Teleportasyon, Bernstein–Vazirani ve Grover.
Ne öğreniyoruz? PennyLane çizimi ile elle çizilen şema aynı sırayı takip eder; gözlem etiketi terminalde <Z@Z> biçimindedir.

Demo ve doğrulama

Aşağıdaki çerçeve, 6 · Aynı devre (iki temsil) sağ panelindeki SVG ile aynı çizimdir (gradient kimliği plqaoa-wide-g ile çakışma önlenir).

QAOA p = 1 · 2 kübit · H → IsingZZ → RX · ⟨Z₀Z₁⟩ Bölüm 6 sağ panel ile aynı SVG
0 1 H H IsingZZ RX RX ⟨Z₀Z₁⟩ expval

Aşağıdaki okuma reçetesi bu sayfadaki PennyLane QAOA p = 1 örneğine özeldir: qaoa_p1(gamma, beta) içinde sırasıyla Hadamard döngüsü, IsingZZ(2 * gamma, wires=[0, 1]), her kübitte RX(2 * beta) ve dönüşte iki kübit Pauli gözleminin beklenen değeri yer alır — genel VQC Ansatz’ı veya QSVM özellik haritası şemasıyla karıştırılmamalıdır.

Şemayı adım adım oku

  1. Soldaki mor H kutuları başlangıç süperpozisyonunu kurar; kodda for w in range(2): qml.Hadamard(wires=w) ile üst üste bindirilir. Terminal satırlarında her kablo kendi H adımını gösterir.

  2. Ortadaki turuncu IsingZZ bloğu iki kübitlik maliyet üssüdür; örnekte IsingZZ(0.70), γ = 0.35 için 2γ = 0.70 ile uyumludur. Dikey çizgi iki hattın aynı iki-kübit kapıdan geçtiğini gösterir.

  3. Yeşil RX kutuları karıştırıcı katmandır; çizimde RX(0.44), β = 0.22 için 2β = 0.44 ile örtüşür. Sıra: maliyetten sonra her kübitte yerel karıştırma.

  4. Sağdaki kesik çerçeveli blok ⟨Z₀Z₁⟩ / expval okumasını temsil eder; fiziksel kapı eklenmez. Örnek parametrelerde sayısal değer yaklaşık 0.497 çıkar — tek turda sabit bir noktayı gösterir, optimizasyon döngüsü değildir.

Doğrulama

Hedef: soldan sağa H → IsingZZ → RX → ⟨Z₀Z₁⟩ akışının QAOA tek katmanı olarak okunması; turuncunun maliyet üssü, yeşilin karıştırıcı, kesik kutunun ise gözlem bekleneni olduğunun netleşmesi.

  • kapılar: H + IsingZZ + RX
  • örnek: 2 wires · γ=0.35 · β=0.22 · ⟨Z₀Z₁⟩≈0.497
  • not: expval kapı değildir

Geniş çerçeve ve ikili gösterim

Dört adım 6 · Aynı devre (iki temsil) kompakt SVG ile aynı mantıksal sırayı taşır; bu bölüm yalnızca sunumu büyütür. Kimlikler plqaoa-wide-g / plqaoa-dual-g sayfa içi SVG çakışmasını önler.

Doğrulama

Hedef: geniş diyagramın 6 · Aynı devre (iki temsil) sağ paneli ile özdeş sırayı göstermesi; kesik çerçevenin ölçüm dağılımı yerine beklenen değer soyutlaması olduğunun anlaşılması.

  • yerleşim: süperpozisyon · maliyet · karıştırıcı · expval
  • cihaz: default.qubit · QNode
  • not: kutu ≠ fiziksel kapı

Pratik notlar ve sonraki adımlar

Gerçek bir QAOA deneyinde aynı QNode maliyet yüzeyinde tekrar örneklenir: γ, β vektörleri p katman için uzar; klasik optimizatör bu parametreleri günceller. Graf daha çok kenar içerdiğinde her kenar için ek IsingZZ (veya topolojiye uygun iki kübit kapıları) sıraya eklenir; tek kübit Z terimleri için faz kapıları kullanılır. PennyLane’de qml.ApproxTimeEvolution veya Pauli cümleleri ile daha genel maliyet üsleri de kurulabilir — burada tek terimle şema sade tutulmuştur.

Simülatörde pürüzsüz beklenen değer eğrisi, sonlu shots veya donanımda gürültülü örneklemeye geçildiğinde dalgalanır; üretimde hata azaltma ve graf yerleşimine uyarlama eklenir.

İlgili okuma Tam problem kodlaması ve Qiskit API için QAOA · Qiskit; genel VQC iskelesi için VQC · PennyLane.