Deutsch algoritmasında kuantum kehaneti nasıl uygularım?


13

Deutsch'un algoritmasını (Deutsch-Josza algoritmasının temel durumu) simüle etmeye çalışıyorum ve algoritmanın işlevini bozmadan ve "bakarken" algoritmanın çalışması için gerekli kuantum kehaneyi uygulamaya nasıl devam edeceğimden tam olarak emin değilim. girilen fonksiyonun ne olduğunu, fonksiyonu değerlendirerek.



Testi her çalıştırdığınızda neden rastgele seçmiyorsunuz? Bu şekilde bilemezsin.
DaftWullie

@DaftWullie Her simülasyonda rastgele bir işlev seçmeye mi atıfta bulunuyorsunuz? Sorun hala bilgisayarın girilen fonksiyonun çıkışlarının ne olduğunu, gerekli fonksiyonu oluşturmak için bir kuantum kehanetinden bilmek zorunda kaldığı ortaya çıkmaktadır.
Jack Ceroni

Evet, bilgisayarın bilmesi gerekir, ancak kuantum durumu olarak giriş yapan ve çıkış olarak kuantum durumu veren tek bir işleve yerelleştirebilirsiniz. Sadece bu işlev onu bilirdi (ve bir şey bunu bilmek zorundadır). Rasgele seçim o fonksiyona yerel olduğunu ve denir her zaman farklıdır Ayrıca, eğer o gerçeği ile iyi oturuyor olmalıdır yalnızca bir kez denilen olsun.
DaftWullie

@DaftWullie Rasgele bir işlevin bir özelliğini hesaplarsanız, neden hemen rasgele bir çıktı üretmiyorsunuz?
Norbert Schuch

Yanıtlar:


9

Burada iki soru var. Birincisi, bunu aslında kodda nasıl uygulayabileceğinizi sorar ve ikincisi hangi kâhini geçtiğinizi biliyorsanız neyin ne olduğunu sorar.

uygulama

Muhtemelen en iyi yol, IsBlackBoxConstantoracle'i girdi olarak alan, daha sonra sabit olup olmadığını belirlemek için Deutsch Oracle programını çalıştıran bir işlev oluşturmaktır . İsterseniz oracle'i rastgele seçebilirsiniz. İşte Q # ile uygulanır:

operation IsBlackBoxConstant(blackBox: ((Qubit, Qubit) => ())) : (Bool)
{
    body
    {
        mutable inputResult = Zero;
        mutable outputResult = Zero;

        // Allocate two qbits
        using (qbits = Qubit[2])
        {
            // Label qbits as inputs and outputs
            let input = qbits[0];
            let output = qbits[1];

            // Pre-processing
            X(input);
            X(output);
            H(input);
            H(output);

            // Send qbits into black box
            blackBox(input, output);

            // Post-processing
            H(input);
            H(output);

            // Measure both qbits
            set inputResult = M(input);
            set outputResult = M(output);

            // Clear qbits before release
            ResetAll(qbits);
        }

        // If input qbit is 1, then black box is constant; if 0, is variable
        return One == inputResult;
    }
}

Amaç ne?

Sorgu karmaşıklığı

Hesaplama karmaşıklığı, algoritmaların girdi boyutunun bir fonksiyonu olarak tükettikleri kaynak miktarına göre sınıflandırılmasıyla ilgili bir alandır. Bu kaynaklar zamanı (adım / talimatlarla ölçülür), belleği ve ayrıca sorgu karmaşıklığı olarak adlandırılan bir şeyi içerir . Sorgu karmaşıklığı, bir algoritmanın bir kara kutu oracle işlevini kaç kez sorgulaması gerektiğiyle ilgilidir.

n2n1

2n1

Gerçek dünyadaki uygulamalar

Eğer bir karmaşıklık teorisyeni değilseniz, sorgu karmaşıklığını çok fazla önemsemezsiniz ve bunun yerine Deutsch oracle sorununun kara kutunun içine bakmanıza izin verilen "kuralsız" bir dünyada neden önemli olduğunu bilmek isteyebilirsiniz. Kâhin sorununu kâhin olmayan bir sorun olarak analiz etmeye çalışmak güçlükle doludur ve oracle devresini analiz etmenize izin verildiğinde kimsenin Deutsch oracle sorunu için en iyi klasik algoritma sorununu çözdüğüne inanmıyorum. Düşünebilirsiniz - analiz etmek için ne var? Sadece dört olası devre vardır! Aslında, çok daha karmaşıktır.

Bir bit Deutsch Oracle'ın en basit temsiline bakarsak , kapı yapımı aşağıdaki gibidir:

C1,0

X0C1,0

I4

X0

Ancak, bunlar hiçbir şekilde kehanetleri uygulamanın tek yolu değildir. Bütün bunlar yüzlerce, binlerce hatta milyonlarca mantık kapısı kullanılarak yeniden yazılabilir! Önemli olan tek şey bu mantık kapılarının kümülatif etkisi yukarıdaki basit yapıya eşdeğerdir. Constant-1'in aşağıdaki alternatif uygulamasını düşünün:

H0Z0H0

Görünüşe göre, verebileceğiniz herhangi bir giriş için:

H0Z0H0|ψ=X0|ψ

H0Z0H0X0

H0Z0H0=[12121212][1001][12121212]=[0110]=X0

Böylece sahibiz:

(H0(Z0(H0|ψ)))=(((H0Z0)H0)|ψ)=X0|ψ

H0Z0H0X0

Tarihsel ve pedagojik nedenlerden dolayı önemli

Deutsch Oracle sorunu öncelikle tarihsel ve pedagojik nedenlerle önemlidir. Öğrencilere öğretilen ilk algoritma çünkü en basit olanı ve çok fazla soru sormadığınız sürece kuantum hızını gösteriyor gibi görünüyor. Aynı zamanda Simon'un Periyodiklik Problemini ve ardından Shor'un Algoritmasını öğrenmek için iyi bir başlangıç ​​noktasıdır.


Gotteman-Knill olayına kadar seninleydim. Neden karmaşık devrenizi (i) tek katlı kapılar ve (ii) sabitleyici kapılarıyla sınırlandırıyorsunuz?
Norbert Schuch

Anladığım kadarıyla, rasgele bir kuantum devresinin birkaç basit klasik devreden birini uygulayıp uygulamadığını belirlemek için etkili algoritmalar vardır. Kuantum avantajı için incelenen rastgele devreler daha karmaşık davranışlar gerektirir.
ahelwer

Bunun doğru olduğunu düşünmüyorum. Yanılmıyorsam, iki devrenin aynı şeyi yapıp yapmadığını sormak QMA-complete'tur. Gottesman-Knill ile simulabiliteye izin veren sadece Clifford kapılarına kısıtlamanızdır.
Norbert Schuch

Haklısın, Gottesman-Knill'in rolünü açıklığa kavuşturmak için yazımı güncelledikten sonra devre azaltma olayını biraz daha araştıracağım.
ahelwer

Robin Kothari'ye e-posta yoluyla bazı sorular sorduktan sonra cevabımı güncelledim .
ahelwer

3

Kehaneti, Deutsch algoritmasının noktasını yenmeyecek şekilde inşa etmenin bir yolu yoktur - bu yüzden kehanete dayalı bir algoritmadır.

xf(x)f(0)=f(1)

f(x)1xNf(x)yf(x+y)=f(x)f(x)

Mesele şu ki, oracle tabanlı algoritmalar , bu yapı ile ilgili bir sorununuz varsa (yani bir fonksiyonun sadece belirli bir özelliğini öğrenmek istediğinizde) hızlanabileceğinizi kanıtlar , ancak size böyle bir sorun var.

Deutsch'u uygulamak istiyorsanız, kâhin yapmanın herhangi bir yolu iyidir - bu bir "prensip kanıtı" algoritmasıdır ve gerçek bir sorun üzerinde gerçek bir hızlanma sağlamaz (en azından hiçbirini bilmiyoruz).



2

Deutsch'un algoritması için kullanışlı bir örneğim yok , ancak burada ve burada Deutsch-Jozsa algoritmasını ve Q #'da kullandığı kehanetleri uygulamanızda size yol gösteren iki öğretici var.

Bu iki algoritma için fikir aynıdır: algoritmaya başka yerde uygulanan bir işlem olarak kâhin vermeniz gerekir. Bu şekilde algoritma hangi kâhin verildiğini bilmez ve kâhine çağırmaktan başka "kâhete" bakmanın bir yolu yoktur. Bu öğreticiler aynı zamanda kehanetin kaç kez çağrıldığını sayan bir koşum takımına sahiptir, böylece çözümünüz bir kereden fazla çağırırsa test başarısız olur.

Kuşkusuz, bunun hala kehanet algoritmalarının sıklıkla sahip olduğu bir sorunu vardır: bir insan testin ve geçen kehanetin uygulanmasına bakabilir ve hangi kehanetin uygulandığını anlayarak cevabı çözebilir. Bu, DaftWullie'nin önerdiği gibi, kehanet seçimini rastgele seçerek önlenebilir.


1

Bunun ahelwercevabının algoritmaların karmaşıklığı hakkında düşündüğümüz bazı yollara değindiğini düşünüyorum. Ancak - sorgulamak istediğimiz gerçek dünyada kelimenin tam anlamıyla "oracles" olmadığı göz önüne alındığında, sorgu karmaşıklığı veya oracles fikri hakkında neden endişe duyacağımızı merak edebilirsiniz. Bu konuya bir bakış açısı vermeye çalışacağım ve özellikle de bir "Deutsch – Josza kehaneti" kurmanın yollarını hile yapıyormuş gibi hissetmeyecek şekilde nasıl düşünmeye çalışacağınızı anlatmaya çalışacağım.

(Belirtildiği gibi Norbert Schuch, Deutsch – Josza'nın temel vakası olan Deutsch sorunu için, içgörüler için fazla bir kapsam yoktur, ancak oracles hakkındaki sorunuzun daha genel olarak da geçerli olmasını bekliyorum. Burada konuşacağım şey budur.)

Orasles hakkında bir sezgi

Bir kehanet kavramı, hesaplama problemleri hakkında konuşmamızı basitleştirmemize izin vermenin bir yoludur.

Bir kehanet kavramının orijinal uygulaması, prensipte bile nasıl yapabileceğimizi taahhüt etmeden, zor problemleri, hatta imkansız problemleri çözebilirsek ne yapabileceğimizi varsayımsal olarak ele almaktı . Ancak bugünlerde hesaplama karmaşıklığında - özellikle de kuantum hesaplamada, örneğin  Deutsch – Josza, Bernstein-Vazirani ve diğer kehanet problemlerinde - durum farklıdır: kehanet sorunun temelini oluşturan bir işlevi tanımlar. Bunun bir kâhin olması, sorunun merkezinde yer alan işlevi nasıl tanımladığımızı yapılandırmanın bir yoludur: işlevin nasıl hesaplandığını asla düşünmemeliyiz, ancak bu bilgi sadece bir parçası olarak sağlanmaz ve bu işlevle ilişkili zaman veya diğer karmaşıklıkla ilgilenmiyoruz.

Bu yaklaşımı ele aldığımızda aslında hesaplamadaki çok zor sorularla ilgili cevaplar elde edebiliriz. Örneğin, biz ya kanıtlamak için nasıl bilmiyorum olduğunu anlasın P  ≠  NP veya P  =  NP , ama bunu yapabilirsiniz kahinler olduğunu göstermek A biz göstereceğiz ki böyle P A  ≠  NP A . Buradaki kehanet A'nın yaptığı şey bir bilgisayarın (daha kesin olarak, deterministik bir Turing makinesi veya belirsiz bir Turing makinesi) bir sorunu çözmesine yardımcı değildir - bilgisayarın çözmesi gereken problemi temsil eder. Bazı durumlarda P A'nın ≠  NP A , anlamına gelmez P ise gerçekten farklı NP sadece gerekirci olmayan makinalar kullanılarak sadece araçlar için gerçekten hesaplama modeli için önemli bir kaynaktır - bu verimli bazı sorunları çözmek için izin verir ve yolu yoktur: belirleyici olmayan bir bilgisayarda belirsizliği etkin bir şekilde simüle etmek. Dolayısıyla , A'nın hesapladığı şeyle ilgili sorunu çözmek istiyorsanız , kesinlikle A'yı etkili bir şekilde hesaplayabilen herhangi bir fonksiyonun yapısı hakkında bazı bilgilere ihtiyacınız olacaktır .

Onlar hesaplama modelleri ya ki yolları hakkında konuşmak için izin: Bu kahinler üzeresiniz ana şeylerden biridir olamaz sorunun ilgili bilgilerin sınırlı verilmektedir sorunları çözmek.

Oracle olmayan problemleri çözmek için Oracle algoritmalarını kullanma

Deutsch – Josza algoritması veya Bernstein – Vazirani algoritması, prensip olarak, kişinin kendi uğruna gerçekleştirdiği algoritmalar değildir. (Eh, gerçekten - Sonraki Bölüm bakın.) Bunlar için durmak Eğer bir sorunu çözmek anlamına yolları . Hangi sorunları çözüyorlar? İlgilendiğiniz bir işlevin belirli özelliklerini keşfetmenize olanak tanır - ister sabit / dengeli olsun, ister vektörlerdeki skaler değerli doğrusal fonksiyonda hangi vektörün ilişkili olduğu.

Hangi işlevleri yerine getiriyorsunuz? - Bunları, ilgilendiğiniz herhangi bir işlev üzerinde gerçekleştirirsiniz.

Bunların kehanete dayalı algoritmalar olarak tanımlanması noktanın yanındadır. Oracle problemleri temel olarak, ideal bir kuantum bilgisayarı ile, işlevi pratikte verimli bir şekilde değerlendirebilmeniz şartıyla , işlev hakkında çok az şey biliyor olsanız bile sorunu çözebileceğinizi bilmenizi sağlar . Böyle bir işlevi gerçekten değerlendirmek için, elbette bunun nasıl yapılacağına dair bir açıklamaya ihtiyacınız olacak ve böylece kehanet ayarından daha fazla bilgiye sahip olacaksınız ; ancak bu aynı algoritmayı kullanmanızı engellemez.

Ne var ne olur daha oracle ortamda daha bilgi, aniden olmasıdır diğer sorunu çözmek mümkün olabileceğini yolları. Özellikle, problemi klasik olarak verimli bir şekilde çözmek mümkün olabilir . (Bu, P A  ≠  NP A ile aynı gözlemdir : NP'de olan ve herhangi bir verimli deterministik algoritmanın en azından çözmesi için gerçek yapısal bilgi gerektireceği problemleri olduğunu kanıtlar - böylece bir açıklama sağladığınızda bir 'kehanet' yerine verimli bir şekilde hesaplanabilir bir fonksiyonun olması, sorununS. ) Kuantum algoritmasının, sunduğunuz problemi çözmede klasik algoritmalara göre aynı avantaja sahip olmayabileceği anlamına gelir - ve aslında klasik yaklaşımın (özellikle şu anda sahip olduğumuz cihazlarla) daha iyi olması olabilir.

Sonuçta, bir şeyi çözmek için bir kuantum algoritmanız olması, bir şeyi çözmenin mutlaka en iyi yol olduğu anlamına gelmez . Deutsch – Josza algoritması için bu kesinlikle doğrudur: kehanet ortamında bile, rasgelelik kullanmak neredeyse aynı derecede iyidir ve henüz büyük güvenilir kuantum bilgisayarlarımız olmadığı göz önüne alındığında çok daha iyidir! Ama sonra tekrar...

Bir kehaneti "uygulamak"

Deutsch – Josza algoritmasının uygulanmasının amacı, “ Merhaba, Dünya! ” Uygulamakla aynıdır - acil çözülmemiş bir sorunu çözmek için değil, başka şeyler yapmak için faydalı olacağını düşündüğünüz bir araç kullanarak pratik yapmak.

Kodlama uygulaması için, kesinlikle rahat ve konforlu hissetmelidir fikri bir kahini uygulanması ve bilgisayar fikri ile değerlendirilmesi kahini. Prensip olarak, bu yapmak istediğiniz şeyin noktasıdır. Klasik bilgisayarın süperpozisyonun tüm dallarını gerçekten değerlendirdiği ve biraz daha dolambaçlı bir şekilde hareket eden bir kuantum bilgisayarı olduğunu iddia etmek için bir sorunun cevabını açıkça bulduğu klasik bir emülatör kullanıyor olsanız bile, olsun - başka şeyler için yararlı olabilecek ve bir gün klasik bir bilgisayarda çalıştırılmayacak bir aracı nasıl kullanacağınızı pratik yapıyorsunuz.

Öyleyse kehanetinizi nasıl hayata geçirmelisiniz?

(i) Sadece alıştırma yaptığınız fikrine gerçekten bağlıysanız, büyülü bir şey yapıyormuş gibi davranmanız gerekmez. Sonuç sabit veya dengeli olsun, sıradan gözlemci için bariz bir şekilde açık olsa bile, oracle işlevini uygulamak için herhangi bir yolla gelin. Sadece bir algoritma gerçekleştirmeye çalışıyorsunuz - birinin sizi bir sahtekâr olmakla suçlayacağından, kanseri tedavi ediyormuş gibi yaptığınızdan ama aslında Lego ile oynadığınızdan endişelenmeyin. Sen asla edildi kanser tedavisi gibi davranarak ve edilmektedir kasıtlı seçimiyle Lego oynuyor. Bunu kucakla ve yap.

f(x)=g(x,r)rg(x,r)xrve klasik olarak nasıl çözüleceği açık değilse, önemsiz değildir.

  • g(x,r)=xrx,r{0,1}ng(x,r)f(x)f(x)r0

  • Yukarıdaki yapının bir şekilde detaylandırılabileceği / gizlenebileceği, sabit bir işlevi veya dengeli bir işlevi değerlendireceği garanti edilen bir yapı elde etmek ve bu ikisinden hangisinin meydana geldiği açık veya hatta zor değildir - ancak Şu anda nasıl olduğunu düşünmeyin.

Bunun aslında çok zor olduğunu unutmayın - ancak bunu yapmanın bir yolunu görebiliyorsanız, çok faydalı olabilir: Bravyi, Gossett ve Koening Bernstein-Vazirani sorunu için böyle bir şey yaptı ve onlara izin verdi kuantum ve klasik karmaşıklık arasında küçük ama koşulsuz bir ayrım sergilemek, ki bu son yıllarda kuantum karmaşıklığında meydana gelmesi daha ilginç şeylerden biriydi.

TL; DR

  • Bir kehaneti 'değerlendirdiğiniz' gerçeğini terlemeyin.

  • Herhangi bir şey üzerinde terliyorsanız, sadece işlevin gerçek bir tanımının kuantum bilgisayarı olmadan aynı sorunu kolayca çözebileceğini düşünün.

  • Motivasyonunuz sadece kuantum programlama ile pratik yapmaksa, bunun için bile endişelenmeyin. Küresel ısınma gibi kayda değer problemler için endişelerinizi koruyun. Bu arada, daha fazla bir şeye inşa ederken Legos ile oynamanın tadını çıkarın.

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.