Kuantum hesaplamayı taklit ederken dolaşıklıkları nasıl takip edebilirim?


9

Üniversite projem olarak kuantum hesaplama kütüphanesi oluşturmaya çalışıyorum. Hâlâ Kuantum Hesaplama alanının tüm yönlerini öğreniyorum. Kuantum öykünmesi için zaten verimli kütüphaneler olduğunu biliyorum. Sadece kendim yapmak istiyorum, bu da Quantum Computing'in bazı temel kavramlarını kavramamı sağlayacak.

bunu biliyorum n kübitler bir 2neleman karmaşık dizisi. Ayrıca birn kübit kapısı bir 2n×2n2B dizi. Yani, şüphelerim şunlardır (çoğunlukla dolaşma ile ilgili):

  1. Kapıların tensör ürününü ne zaman bulmam gerekiyor? IHI, için 3qubit sistemi)? Siparişin tensör ürününü hesaplamak her zaman gerekli mi?2n×2nkubitler dolaşmış olmasa bile?

  2. Sadece bir 2neleman dizisi (hangi katsayıları saklamak), aslında bir şekilde hangi qubits dolaşmış hesaplayabilir miyim? Yoksa benim dolaşıklık bilgileri saklamak için başka bir veri yapısı yapmak gerekirn kübitler (hangi kübitlerin dolaştığı)?

  3. 2. sorum gerçekten alakalı mı? Dolaşma bilgisini hiç takip etmem gerekir mi? Yani, kapıları katsayılarla çarpmanın yeterli olup olmadığını bilmiyorum (sistem dolaşmış olsa bile). Belki sadece ölçüm anında geçerlidir.


1
Göre değişir ndolaşma düzenini takip etmek için optimizasyonun erken olup olmadığı. Eğer sadece 3 kübitiniz varsa, o zaman bu çabayı göstererek çok fazla kazanmıyorsunuz, böylece "erken optimizasyon" olurdu. Öyleyse kendinize bunun ne kadar ölçeklenebilir olması gerektiğini sorun.
AHusain

1
@MidhunXDA "Fiziksel olarak neler olduğunu biliyorum, ama bunu matematiksel formata çeviremiyorum". Bildiğim kadarıyla, kuantum hesaplamaya yol açan birçok fiziksel süreç var. Sana, bunun iyi bir fikir olacağını düşünüyorum doğrusu (eğer hala söz kapsamında olacağını düşünüyorsanız, veya hepsi) taklit etmek isteyen fiziksel süreçlerin birini açıklamaktadır. Bunu belirtmenin soruyu daha açık ve daha kolay cevaplandırdığını düşünüyorum.
Ayrık kertenkele

1
Lütfen bunu birden fazla soruya bölün - en az üç ayrı soru görüyorum.
Heather

3
@heather Posterin hepsinin aynı şeyin farklı yönleri olan tüm sorular olduğunu kabul ediyorum. Soruyu nasıl geliştireceğimi gerçekten göremiyorum, ancak bir cevap verebilecek kadar iyi anladığımı düşünüyorum.
DaftWullie

2
@heather şiddetle moderatörler tavsiye değil (: pervasızca konu dışı veya spam okuyun) aşırı durumlar dışında kendileri tarafından beklemeye soruları. Bu soru, biraz geniş olmasına rağmen, tek bir gönderide makul bir şekilde cevaplanabilir. FWIW Burada temel olarak iki soru var: 1) Kapıların tensör ürünlerinin ne zaman hesaplanması? 2) Bunu yaparken dolaşıklığın etkisi nasıl dikkate alınır?
Sanchayan Dutta

Yanıtlar:


5

Her zaman tam hesaplamak için yeterlidir 2n×2n birimsel matris ve daha sonra 2ndevlet vektör. Yapmayı seçtiğiniz buysa, tüm dolaşma bilgileri bu vektörde yer aldığından tek yapmanız gereken budur. Belirli bir kübitin karışıp karışmadığını görmenin hızlı ve kolay bir yolu, (saf) durum vektörünüzün tüm diğer kubitlerin üzerindeki kısmi izini almaktır. Sonuçta elde edilen matris sıra 1 ise, bu kubit ayrılabilir bir durumdadır, aksi takdirde dolanır.

Sorunuzun amacının gerçekten "Bu büyük hesaplama maliyetinden nasıl kaçınılabilir?" Olduğunu varsayıyorum. Genel olarak, yapamaz - kuantum bilgisayarın tam gücünü kullanıyorsanız, her zaman2ndevlet vektör. Bununla birlikte, hesaplama maliyetini azaltan, dolaşıklığı takip ederek böyle bir büyük durum vektörüne olan ihtiyacı geciktirmek gibi çeşitli hileler vardır.

Verimlilik İyileştirmeleri

Yukarıdaki saf uygulamaya kıyasla yapabileceğiniz en büyük tasarruf, 2n×2nüniter matrisler. Örneğin, yalnızca 1 veya 2-kubit kapıları kullanıyorsanız, sadece matrislerin genişliğini kullanmak,O(2n) yerine depolama O(22n).

Sonra kullanabileceğiniz başka taktikler var. Örneğin, iki-kübit üniter kapıyı uygulamak istediğinizi düşününU kubitlerde i ve j. Durum vektörünüzden 4 elemanlık setler alabilirsiniz (|x1,2,ni,j|yi,j sabit için x{0,1}n2 hepsini farklı alarak y{0,1}2) ve sadece 4×4 birimsel UBu 4 elementli vektör üzerinde. Bunu her biri için tekrarlamakx geri dönücek U orijinal durum vektörü üzerinde yürürlüğe girdi.

Birinin ortaya koyabileceği başka stratejiler olduğunu hayal ediyorum. Orijinal sorudan kendini öneren, dolaşıklık takibi idi. Bu, bir hesaplamanın başlangıcında bellek ve hız iyileştirmeleri sağlar, ancak nihayetinde eşdeğer olur, çünkü (muhtemelen) kuantum bilgisayardaki her şey birbirine dolanır.

Dolaşıklık Takibi

Diyelim ki hesaplamanız sadece üniter evrim ven qubits, yani bir yapışma, olasılık haritaları vb. yoktur. Ayrıca, tamamen ayrılabilir bir durumdan başladığınızı varsayalım. |0n. Bu noktada, her kubit ayrılabilir ve saklamak yeterlidirnher biri ayrılabilir bir kübit durumunu taşıyan farklı kayıtlar. İlk kapınız sadece tek bir kubit işlemi iseU kubit üzerinde i, daha sonra qubit'te depolanan durumu güncellersiniz i gibi |ψiU|ψive başka bir şeye dokunmanıza gerek yok.

İki kübit bir kapı yapmak istiyorsanız V kubitler arasında i ve j, diyelim ki, her iki sitedeki durumları birleştirmeniz gerekir. Bu nedenle, boyut 2'nin her birini, durum içeren boyut 4'ün bir kaydıyla değiştirirsiniz.V|ψi|ψj. Sorun şu ki, bu durumu tekrar bölemezsiniz, bu yüzden bu iki kübiti sonsuza dek bir kayıtta tutmanız gerekir. Tabii ki, eğer 1-kübit bir kapınız varsaU kubit üzerine başvurmak i, şimdi başvurmanız gerekecek |ψi,jUI|ψi,j. Sonra, bir dahaki sefere 2-kübit bir kapı istediğinizi varsayalım,j ve k, için boşlukları birleştirmeniz gerekecek (i,j) ve k. Bu alanlar büyümeye devam edecek, ancak bir kapı sadece bir alanda yerelleştirilmişse, sadece oraya uygulamanız gerekir (I kubitlerin geri kalanına doldurmak için) ve diğer alanlara hiçbir şey yapmanız gerekmez.

Böyle bir şey yapıyorsanız, (en azından algoritmanızın ilk birkaç adımı için) tek bir 2neleman kaydı. Bir grup farklı kayıtlara sahip olmanız ve hangi kayıtların hangi kayıt tarafından ayrı bir dizide tanımlandığını takip etmeniz gerekir. Bazı kübitlerin boşluklarını her birleştirdiğinizde, o ekstra diziyi güncellersiniz.

İşte anlamımı aktarmaya yardımcı olabilecek bazı çok kaba sahte kod:

#initialise variables
entangled_blocks={{1},{2},{3},...,{n}}
quantum_states={{1,0},{1,0},...,{1,0}}

#apply action of each gate
for each gate
   for each gate_target
       target_block=entangled_blocks entry containing gate_target
   next gate_target
   if all target_blocks equal then
      apply gate on target_block (pad with identity on other qubits)
   else
      new_entangled_block=union(target_blocks)
      new_state_vec=tensor_product(quantum_states for each target block)
      apply gate on new_state_vec (pad with identity on other qubits)
      replace all target_blocks in entangled_blocks with new_entangled_block
      replace all quantum_states(all target blocks) with new_state_vec
   end if
next gate

Diğer seçenekler

(Hiçbir şekilde ayrıntılı değildir)

Çok fazla karışmamış durumlar hakkındaki bilgileri kapsüllemenin güzel bir yolu olan ve tam olarak ne elde etmeye çalıştığınıza bağlı olarak sizin için alternatif bir yol sağlayabilen Matrix Ürün Durumları hakkında bilgi edinmek isteyebilirsiniz.


Elde etmeye çalıştığım şey elbette verimlilik. Ayrıca, tüm bu süreçlerin nasıl çalıştığını tam olarak bilmek istiyorum (çünkü ben bir noobie'yim). Yani, pratikte, daha iyi bir seçim sadece tüm kubit katsayılarını tek bir dizide (kayıt) saklamaktır, değil mi? Cevap verdiğiniz için teşekkür ederim.
Midhun XDA

@DaftWullie İlk cümleniz genel olarak tam metnin saklanması gerektiği izlenimini veriyor 2n×2n üniter, sadece 2nvektör.
Norbert Schuch

@MidhunXDA Verimlilik açısından, her şey esasen eşdeğerdir, çünkü bir kuantum bilgisayarı sonunda her şeyin karışmasına neden olacaktır. Neler olduğunu öğrenmek için, durum vektörüne karşılık gelen tek bir diziden başlamanız daha iyi olacaktır. Ancak, dolaşıklık izlemeyi kullanarak biraz daha uzun simülasyonları etkinleştirecek bazı hız ve bellek iyileştirmeleri kazanabilirsiniz.
DaftWullie

@NorbertSchuch Bunu yapmanın "yeterli" olduğunu söyledim, bu doğru. Bundan kaçınmak için biraz daha detay ekledim. Muhtemelen diğer daha iyi taktikleri biliyorsunuzdur.
DaftWullie
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.