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.
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.
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 2γ 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₁⟩.
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)))
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 2γ 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).
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ı
p = 1 QAOA — kompakt şema
mor · H turuncu · IsingZZ yeşil · RX
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).
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
-
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.
-
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.
-
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.
-
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.
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.
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.