Come implementerei l'oracolo quantistico nell'algoritmo di Deutsch?


13

Sto cercando di simulare l'algoritmo di Deutsch (caso elementare dell'algoritmo di Deutsch-Josza) e non sono del tutto sicuro di come implementare l'oracolo quantico necessario per far funzionare l'algoritmo, senza sconfiggere lo scopo dell'algoritmo e "guardare" a cosa serve la funzione immessa, valutando la funzione.



Perché non sceglierlo a caso ogni volta che si esegue il test? In questo modo non puoi saperlo.
DaftWullie,

@DaftWullie Ti riferisci alla scelta casuale di una funzione in ogni simulazione? Sorge ancora il problema che il computer deve sapere quali sono gli output della funzione immessa, al fine di creare la funzione necessaria, attraverso un oracolo quantistico.
Jack Ceroni,

Sì, il computer deve saperlo, ma è possibile localizzarlo in un'unica funzione che accetta come input uno stato quantico e fornisce uno stato quantico come output. Solo quella funzione lo saprebbe (e qualcosa deve saperlo). Inoltre, se la scelta casuale è locale per quella funzione ed è diversa ogni volta che viene chiamata, ciò si adatta bene al fatto che dovrebbe essere chiamato solo una volta.
DaftWullie,

@DaftWullie Se si calcola una proprietà di una funzione casuale, perché non produrre immediatamente un risultato casuale?
Norbert Schuch,

Risposte:


9

Ci sono due domande qui. Il primo ti chiede come potresti effettivamente implementarlo nel codice, e il secondo ti chiede qual è il punto se sai in quale oracolo stai passando.

Implementazione

Probabilmente il modo migliore è creare una funzione IsBlackBoxConstantche accetta l'oracolo come input, quindi esegue il programma Oracle Oracle per determinare se è costante. Se lo desideri, puoi selezionare l'oracolo a caso. Eccolo, implementato in Q #:

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;
    }
}

Qual e il punto?

Complessità della query

La complessità computazionale è un campo interessato alla classificazione degli algoritmi in base alla quantità di risorse che consumano in funzione della dimensione dell'input. Queste risorse includono tempo (misurato in passaggi / istruzioni), memoria e anche qualcosa chiamato complessità della query . La complessità della query riguarda il numero di volte in cui un algoritmo deve eseguire una query su una funzione oracle black-box.

n2n1

2n1

Applicazioni nel mondo reale

Se non sei un teorico della complessità, potresti ragionevolmente non preoccuparti molto della complessità delle query e invece vuoi sapere perché il problema dell'oracolo tedesco è importante in un mondo "senza regole" in cui ti è permesso guardare all'interno della scatola nera. Cercare di analizzare un problema dell'oracolo come un problema non oracolo è irto di difficoltà e non credo che nessuno abbia risolto la questione del miglior algoritmo classico per il problema dell'oracolo tedesco quando ti è permesso analizzare il circuito dell'oracolo. Potresti pensare: cosa c'è da analizzare? Ci sono solo quattro possibili circuiti! In effetti, è molto più complicato.

Se osserviamo la rappresentazione più semplice dell'oracolo Deutsch a un bit, la costruzione del gate è la seguente:

C1,0

X0C1,0

I4

X0

Tuttavia, questi non sono affatto l'unico modo per implementare gli oracoli. Tutti questi possono essere riscritti usando centinaia, migliaia, persino milioni di porte logiche! Tutto ciò che conta è che l'effetto cumulativo di queste porte logiche equivale alla semplice costruzione di cui sopra. Considera la seguente implementazione alternativa di Constant-1:

H0Z0H0

Si scopre che, per ogni input che potresti mai dare:

H0Z0H0|ψ=X0|ψ

H0Z0H0X0

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

Quindi abbiamo:

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

H0Z0H0X0

Importante per motivi storici e pedagogici

In primo luogo, il problema di Oracle Oracle è importante per motivi storici e pedagogici. È il primo algoritmo insegnato agli studenti perché è il più semplice e sembra dimostrare la velocità quantistica fintanto che non fai troppe domande. Serve anche come un buon punto di partenza per l'apprendimento del problema della periodicità di Simon e quindi dell'algoritmo di Shor.


Sono stato con te fino alla faccenda di Gotteman-Knill. Perché limiti il ​​tuo circuito complicato a (i) gate a un qubit e (ii) gate stabilizzatori?
Norbert Schuch,

A quanto ho capito, ci sono algoritmi efficienti per determinare se un circuito quantistico arbitrario implementa uno dei numerosi circuiti classici semplici. I circuiti casuali studiati per un vantaggio quantico richiedono un comportamento più complicato.
ahelwer,

Non penso sia vero. Se non sbaglio, chiedere se due circuiti fanno la stessa cosa è QMA completo. È solo la tua limitazione alle porte di Clifford che consente la simulabilità attraverso Gottesman-Knill.
Norbert Schuch,

Hai ragione, cercherò ancora un po 'la cosa sulla riduzione del circuito, quindi aggiornerò il mio post per chiarire il ruolo di Gottesman-Knill.
ahelwer,

Ho aggiornato la mia risposta dopo aver fatto alcune domande a Robin Kothari tramite e-mail.
ahelwer,

3

Non c'è modo di costruire l'oracolo in un modo che non vanifichi il punto dell'algoritmo di Deutsch - ecco perché è un algoritmo basato su oracolo.

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

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

Quindi il punto è che gli algoritmi basati su Oracle dimostrano che è possibile ottenere un'accelerazione se si ha un problema con quella struttura (ovvero dove si desidera solo apprendere alcune proprietà specifiche di una funzione), ma non ti dice se esiste un problema del genere.

Quindi, se vuoi implementare Deutsch, qualsiasi modo di fare l'oracolo va bene - è un algoritmo di "prova di principio" e non produce un vero accelerare su un problema reale (almeno nessuno di cui siamo a conoscenza).



2

Non ho un esempio dell'algoritmo di Deutsch a portata di mano, ma qui e qui ci sono due tutorial che ti guidano attraverso l'implementazione dell'algoritmo di Deutsch-Jozsa e degli oracoli che usa in Q #.

L'idea per questi due algoritmi è la stessa: devi fornire l'oracolo all'algoritmo come un'operazione implementata altrove. In questo modo l'algoritmo non sa quale oracolo viene dato e non ha modo di "guardare" l'oracolo se non chiamandolo. Questi tutorial hanno anche un cablaggio che conta quante volte viene chiamato l'oracolo, in modo che se la tua soluzione lo chiama più di una volta, fallisce il test.

Certo, questo ha ancora un problema che gli algoritmi dell'oracolo hanno spesso: un essere umano può guardare l'implementazione del test e dell'oracolo superato e capire la risposta capendo quale oracolo è implementato. Questo può essere contrastato randomizzando la scelta dell'oracolo, come ha suggerito DaftWullie.


1

Penso che ahelwerla risposta tocchi alcuni modi in cui pensiamo alla complessità degli algoritmi. Tuttavia, dato che non abbiamo letteralmente "oracoli" nel mondo reale che desideriamo interrogare, potresti chiederti perché dovremmo preoccuparci della complessità delle interrogazioni o dell'idea degli oracoli. Cercherò di dare una prospettiva su questo, e in particolare di descrivere come potresti provare a pensare ai modi per costruire un "oracolo di Deutsch-Josza" in un modo in cui non ti senti come se stessi barando.

(Come Norbert Schuchsottolineato, per il problema di Deutsch, che è il caso elementare di Deutsch-Josza, non c'è molto spazio per le intuizioni, ma mi aspetto che la tua domanda sugli oracoli si applichi anche più in generale. Ecco di cosa parlerò qui.)

Un'intuizione sugli oracoli

Il concetto di oracolo è un modo per permetterci di semplificare il modo in cui parliamo di problemi computazionali.

L'applicazione originale del concetto di oracolo era di considerare ipoteticamente cosa potremmo fare se fossimo in grado di risolvere problemi difficili, anche impossibili, senza impegnarci a come potremmo farlo anche in linea di principio. Ma nella complessità computazionale in questi giorni - in particolare nel calcolo quantistico, ad esempio  nei casi di Deutsch – Josza, Bernstein – Vazirani e altri problemi dell'oracolo - la situazione è diversa: l'oracolo descrive una funzione che è alla base del problema. Il fatto che sia "un oracolo" è un modo per strutturare il modo in cui descriviamo la funzione che è al centro del problema: non che non dobbiamo mai contemplare come viene calcolata la funzione, ma che queste informazioni semplicemente non sono fornite come parte del problema e che non ci occupiamo del tempo o di altre complessità associate a tale funzione.

Quando adottiamo questo approccio, possiamo effettivamente ottenere risposte relative a domande molto difficili nel calcolo. Per esempio, si può sapere che non sappiamo come dimostrare sia P  ≠  NP o P  =  NP , ma che ci può mostrare che ci sono oracoli A tali che possiamo dimostrare che P A  ≠  NP A . Ciò che l'oracolo A fa qui non aiuta un computer (più precisamente, una macchina di Turing deterministica o una macchina di Turing non deterministica) a risolvere un problema: rappresenta il problema che il computer deve risolvere. Il fatto che possiamo dimostrare in alcuni casi che P A ≠  NP A , non significa che P sia davvero diverso da NP : significa solo che l'uso del non determinismo è davvero una risorsa significativa per un modello di calcolo - ti consente di risolvere alcuni problemi in modo efficiente, e non c'è modo genericamente per simulare il non determinismo in modo efficiente su un computer deterministico. Quindi, se vuoi risolvere il problema relativo a ciò che A calcola, avresti assolutamente bisogno di alcune informazioni sulla struttura di qualsiasi funzione che potrebbe calcolare A in modo efficiente .

Questa è una delle cose principali che riguardano gli oracoli: ti permettono di parlare dei modi in cui i modelli di calcolo possono o non possono risolvere i problemi, quando ti vengono fornite informazioni limitate sul problema.

Utilizzo di algoritmi oracle per risolvere problemi non oracle

L'algoritmo Deutsch – Josza o l'algoritmo Bernstein – Vazirani, in linea di principio, non sono algoritmi che uno esegue per il proprio interesse. (Beh, non proprio - vedi la prossima sezione.) Rappresentano i modi in cui puoi risolvere un problema . Quali problemi risolvono? Ti consentono di scoprire alcune caratteristiche di una funzione che ti interessa, sia essa costante / bilanciata, o quale vettore è associato in una funzione lineare con valori scalari sui vettori.

Su quali funzioni le esegui? - Li esegui su qualsiasi funzione per la quale sei interessato alla risposta.

La descrizione di questi come algoritmi basati su Oracle è accanto al punto. I problemi dell'oracolo consentono sostanzialmente di sapere che, con un computer quantistico ideale, è possibile risolvere il problema anche se si conosce molto poco della funzione , a condizione che si possa effettivamente valutare la funzione in modo efficace nella pratica. Per valutare effettivamente una tale funzione, ovviamente avrai bisogno di una descrizione di come farlo, e quindi hai più informazioni che nell'impostazione dell'oracolo; ma ciò non ti impedisce di utilizzare lo stesso algoritmo.

Ciò che accade quando si hanno più informazioni rispetto all'impostazione dell'oracolo, è che improvvisamente ci sono altri modi in cui si potrebbe essere in grado di risolvere il problema. In particolare, potrebbe diventare possibile risolvere il problema in modo efficiente in modo classico . (Questa è la stessa osservazione di P A  ≠  NP A : dimostra che ci sono problemi che sono in NP , che qualsiasi algoritmo deterministico efficiente richiederebbe almeno informazioni strutturali effettive per essere in grado di risolvere - in modo che quando si fornisce una descrizione di una funzione calcolabile in modo efficiente piuttosto che un "oracolo", è possibile che il problema si presentiP. ) Significa che l'algoritmo quantistico potrebbe non avere lo stesso vantaggio rispetto agli algoritmi classici nel risolvere il particolare problema che presenti - e in effetti potrebbe essere che l'approccio classico sia migliore (in particolare con i dispositivi che abbiamo al momento).

Alla fine, solo perché hai un algoritmo quantico per risolvere qualcosa, non significa che sia necessariamente il modo migliore per risolvere qualcosa. Questo è certamente vero per l'algoritmo Deutsch – Josza: anche nell'oracolo, l'uso della casualità è quasi altrettanto buono, ed è molto meglio dato che non abbiamo ancora grandi computer quantistici affidabili! Ma poi di nuovo ...

"Implementare" un oracolo

Lo scopo dell'implementazione dell'algoritmo Deutsch-Josza è lo stesso dell'implementazione di " Hello, World! " - non per risolvere un problema irrisolto urgente, ma per esercitarsi con uno strumento che ci si aspetta sarà utile per fare altre cose.

Per esercitarsi nella programmazione, dovresti sentirti assolutamente rilassato e a tuo agio con l' idea di implementare un oracolo e con l'idea del computer che sta valutando l'oracolo. In linea di principio, questo è il punto di ciò che vuoi fare. Anche se stai usando un emulatore classico, in cui il computer classico sta effettivamente valutando tutti i rami della sovrapposizione e quindi trova esplicitamente la risposta a un problema per far finta che si tratti di un computer quantistico che agisce in modo leggermente più circolare, quindi sia - stai esercitando su come utilizzare uno strumento che può essere utile per altre cose e che un giorno non verrà eseguito su un computer classico.

Quindi, come dovresti implementare il tuo oracolo?

(i) Se sei veramente impegnato nell'idea che stai solo facendo pratica, non devi fingere di fare qualcosa di magico. Trova qualsiasi modo per implementare la funzione oracolo, anche se è palesemente ovvio per l'osservatore casuale se il risultato è costante o equilibrato. Stai solo cercando di esercitarti a realizzare un algoritmo - non preoccuparti che qualcuno ti accusa di essere un impostore, che stai fingendo di curare il cancro ma in realtà stai giocando con Lego. Non si può mai eri finta di curare il cancro, e si sta giocando con il Lego per scelta deliberata. Abbraccialo e fallo.

f(x)=g(x,r)rg(x,r)xre dove non è ovvio come risolverlo in modo classico, non è banale.

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

  • È concepibile che la costruzione di cui sopra possa essere elaborata / offuscata in qualche modo, per ottenere una costruzione che è garantita per valutare una funzione costante o una funzione bilanciata, e dove quale di questi due si verifica non è ovvio o addirittura difficile - ma posso ' Non penso a come, al momento.

Ricorda che questo in realtà è molto difficile da fare, ma se riesci a vedere un modo per farlo, potrebbe essere molto utile: Bravyi, Gossett e Koening hanno fatto qualcosa del genere per il problema Bernstein – Vazirani, e questo gli ha permesso mostrare una piccola ma incondizionata separazione tra complessità quantistica e classica, che è stata una delle cose più interessanti che si sono verificate nella complessità quantistica negli ultimi anni.

TL; DR

  • Non preoccuparti del fatto che stai "valutando" un oracolo.

  • Se sudi per qualcosa, preoccupati solo che una descrizione effettiva della funzione potrebbe consentire di risolvere facilmente lo stesso problema senza un computer quantistico.

  • Se la tua motivazione è solo quella di esercitarti con la programmazione quantistica, non preoccuparti nemmeno di questo. Salva il tuo preoccupante per i problemi di Worthier, come il riscaldamento globale. Nel frattempo divertiti a giocare con Legos mentre costruisci qualcosa di più.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.