¿Cómo implementaría el oráculo cuántico en el algoritmo de Deutsch?


13

Estoy tratando de simular el algoritmo de Deutsch (caso elemental del algoritmo de Deutsch-Josza), y no estoy del todo seguro de cómo implementar el oráculo cuántico necesario para que el algoritmo funcione, sin anular el propósito del algoritmo y "mirar" en qué es la función introducida, evaluando la función.



¿Por qué no elegirlo al azar cada vez que ejecutas la prueba? De esa manera no puedes saberlo.
DaftWullie

@DaftWullie ¿Se refiere a elegir una función al azar en cada simulación? Todavía surge el problema de que la computadora tiene que saber cuáles son las salidas de la función introducida, para crear la función necesaria, a través de un oráculo cuántico.
Jack Ceroni

Sí, la computadora necesita saberlo, pero puede localizarlo en una sola función que toma como entrada un estado cuántico y le da un estado cuántico como salida. Solo esa función lo sabría (y algo tiene que saberlo). Además, si la elección aleatoria es local para esa función, y es diferente cada vez que se llama, eso encaja perfectamente con el hecho de que solo debería llamarse una vez.
DaftWullie

@DaftWullie Si calcula una propiedad de una función aleatoria, ¿por qué no producir inmediatamente una salida aleatoria?
Norbert Schuch el

Respuestas:


9

Hay dos preguntas aquí. El primero pregunta cómo podría implementar esto en el código, y el segundo pregunta cuál es el punto si sabe en qué oráculo está pasando.

Implementación

Probablemente la mejor manera es crear una función IsBlackBoxConstantque tome el oráculo como entrada, luego ejecute el programa Deutsch Oracle para determinar si es constante. Puede seleccionar el oráculo al azar, si lo desea. Aquí está, implementado en 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;
    }
}

¿Cuál es el punto de?

Complejidad de consulta

La complejidad computacional es un campo relacionado con la clasificación de algoritmos de acuerdo con la cantidad de recursos que consumen en función del tamaño de entrada. Estos recursos incluyen tiempo (medido en pasos / instrucciones), memoria y también algo llamado complejidad de consulta . La complejidad de la consulta se refiere a la cantidad de veces que un algoritmo tiene que consultar una función de oráculo de caja negra.

El problema del oráculo de Deutsch es interesante para los teóricos de la complejidad porque el algoritmo cuántico solo tiene que consultar el cuadro negro una vez, pero el algoritmo clásico tiene que consultarlo dos veces. Con el problema generalizado de Deutsch-Josza donde un oráculo de bits contiene una función que es constante o equilibrada, el algoritmo cuántico nuevamente solo tiene que consultarlo una vez, pero el algoritmo clásico (determinista) requiere consultas.n2n1

Cabe señalar que existe un algoritmo clásico probabilístico que resuelve el problema de Deutsch-Josza en mucho menos de consultas muestreando aleatoriamente las entradas del oráculo: si el oráculo continúa emitiendo el mismo valor sin importar la entrada, el La probabilidad de que el oráculo sea constante crece muy rápidamente. Esto significa que Deutsch-Josza no es un buen candidato para un problema de supremacía / ventaja cuántica, lo que lleva a ...2n1

Aplicaciones en el mundo real.

Si no es un teórico de la complejidad, es posible que no le importe mucho la complejidad de las consultas y, en cambio, quiera saber por qué el problema del oráculo de Deutsch es importante en un mundo "sin reglas" en el que se le permite mirar dentro del cuadro negro. Intentar analizar un problema de Oracle como un problema que no es de Oracle está lleno de dificultades, y no creo que nadie haya resuelto la cuestión del mejor algoritmo clásico para el problema de Oracle cuando se le permite analizar el circuito de Oracle. Podrías pensar: ¿qué hay para analizar? ¡Solo hay cuatro circuitos posibles! De hecho, es mucho más complicado.

Si observamos la representación más simple del Deutsch Oracle de un bit, la construcción de la puerta es la siguiente:

Identidad:C1,0

Negación:X0C1,0

Constante-0:I4

Constante-1:X0

Sin embargo, estas no son la única forma de implementar los oráculos. ¡Todo esto puede reescribirse usando cientos, miles, incluso millones de puertas lógicas! Lo único que importa es que el efecto acumulativo de estas puertas lógicas es equivalente a la construcción simple anterior. Considere la siguiente implementación alternativa de Constant-1:

H0Z0H0

Resulta que, para cualquier entrada que puedas dar:

H0Z0H0|ψ=X0|ψ

Esto se debe a la asociatividad de la multiplicación de matrices. Si escribe las matrices reales para y las multiplica, obtendrá :H0Z0H0X0

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

Entonces tenemos:

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

Entonces, puede pasar el circuito (o algo mucho más complicado) en su algoritmo cuántico de Oracle Oracle en lugar de , ¡y el algoritmo aún funciona! Le dirá si el oráculo es constante o variable, independientemente de lo complicados que sean sus elementos internos. Entonces, un algoritmo que "engaña" y mira dentro del cuadro negro no tiene un tiempo tan simple como podría pensar. Considere el caso de I, un extraño en Internet, que le ofrece un circuito muy complicado que se garantiza que sea constante o variable y luego le pregunta cuál es. ¡No es algo tan fácil de resolver con solo mirarlo!H0Z0H0X0

Importante por razones históricas y pedagógicas.

Principalmente, el problema Deutsch Oracle es importante por razones históricas y pedagógicas. Es el primer algoritmo enseñado a los estudiantes porque es el más simple y parece demostrar una aceleración cuántica siempre que no hagas demasiadas preguntas. También sirve como un buen punto de partida para aprender el Problema de Periodicidad de Simon y luego el Algoritmo de Shor.


Estuve contigo hasta lo de Gotteman-Knill. ¿Por qué restringe su circuito complicado a (i) compuertas de un qubit y (ii) compuertas estabilizadoras?
Norbert Schuch el

Según tengo entendido, existen algoritmos eficientes para determinar si un circuito cuántico arbitrario implementa uno de varios circuitos clásicos simples. Los circuitos aleatorios que se estudian para obtener ventajas cuánticas requieren un comportamiento más complicado.
ahelwer

No creo que esto sea cierto. Si no me equivoco, preguntar si dos circuitos hacen lo mismo es QMA completo. Es solo su restricción a las puertas Clifford lo que permite la simulación a través de Gottesman-Knill.
Norbert Schuch el

Tienes razón, investigaré un poco más sobre la reducción del circuito y luego actualizaré mi publicación para aclarar el papel de Gottesman-Knill.
ahelwer

Actualicé mi respuesta después de hacerle algunas preguntas a Robin Kothari por correo electrónico.
ahelwer

3

No hay forma de construir el oráculo de una manera que no derrote el punto del algoritmo de Deutsch, es por eso que es un algoritmo basado en oráculo.

La única forma sería si se te ocurriera una función increíblemente difícil de calcular (esto es, un circuito increíblemente largo) que tomaría un bit de entrada y daría un bit de salida (pero en el camino podría usarse como tantas ancillas como desee), y donde por alguna razón solo le interesaría si . Luego, puede usar el algoritmo de Deutsch para ahorrar la mitad del tiempo (ya que solo debe ejecutar este circuito una vez).xf(x)f(0)=f(1)

Ahora, esto suena bastante artificial, y lo es. Por otro lado, suena igualmente artificial que podría haber una función donde y entero, y le gustaría encontrar algo tal que , sin la necesidad de aprender sí mismo; sin embargo, resulta que esto es exactamente lo que se requiere para factorizar.f(x)1xNf(x)yf(x+y)=f(x)f(x)

Entonces, el punto es que los algoritmos basados ​​en Oracle demuestran que puedes acelerar si tienes un problema con esa estructura (es decir, donde solo quieres aprender alguna propiedad específica de una función), pero no te dice si Tal problema existe.

Entonces, si desea implementar Deutsch, cualquier forma de hacer el oráculo está bien: es un algoritmo de "prueba de principio" y no produce una aceleración real en un problema real (al menos ninguno que conozcamos).



2

No tengo a mano un ejemplo del algoritmo de Deutsch, pero aquí y aquí hay dos tutoriales que lo guían a través de la implementación del algoritmo de Deutsch-Jozsa y los oráculos que usa en Q #.

La idea para estos dos algoritmos es la misma: debe proporcionar el oráculo al algoritmo como una operación implementada en otro lugar. De esta manera, el algoritmo no sabe qué oráculo se le da y no tiene una manera de "mirar" al oráculo que no sea llamarlo. Estos tutoriales también tienen un arnés que cuenta cuántas veces se llama al oráculo, de modo que si su solución lo llama más de una vez, falla la prueba.

Es cierto que esto todavía tiene un problema que los algoritmos de Oracle tienen con frecuencia: un humano puede ver la implementación de la prueba y del oráculo aprobado y descubrir la respuesta al averiguar qué oráculo se implementa. Esto puede contrarrestarse aleatorizando la elección del oráculo, como sugirió DaftWullie.


1

Creo que esa ahelwerrespuesta toca algunas de las formas en que pensamos sobre la complejidad de los algoritmos. Sin embargo, dado que no tenemos literalmente "oráculos" en el mundo real que deseamos consultar, es posible que se pregunte por qué deberíamos preocuparnos por la complejidad de la consulta o la idea de los oráculos. Trataré de dar un poco de perspectiva sobre esto, y en particular para describir cómo podrías tratar de pensar en formas de construir un "oráculo Deutsch-Josza" de una manera que no sientas que estás haciendo trampa.

(Como se Norbert Schuchseñala, para el problema de Deutsch, que es el caso elemental de Deutsch-Josza, no hay mucho margen para las percepciones, pero espero que su pregunta sobre los oráculos también se aplique de manera más general. Eso es de lo que hablaré aquí).

Una intuición sobre los oráculos

El concepto de un oráculo es una forma de permitirnos simplificar la forma en que hablamos de problemas computacionales.

La aplicación original del concepto de un oráculo era considerar hipotéticamente lo que podríamos hacer si pudiéramos resolver problemas difíciles, incluso problemas imposibles, sin comprometernos a cómo podríamos hacerlo, incluso en principio. Pero en la complejidad computacional en estos días, particularmente en la computación cuántica, por ejemplo ,  en los casos de Deutsch – Josza, Bernstein – Vazirani y otros problemas del oráculo, la situación es diferente: el oráculo describe una función que es la base del problema. El hecho de que sea 'un oráculo' es una forma de estructurar cómo describimos la función que está en el centro del problema: no es que nunca debamos contemplar cómo se calcula la función, sino que esta información simplemente no se proporciona como parte del problema, y ​​que no nos preocupa el tiempo u otra complejidad asociada con esa función.

Cuando adoptamos este enfoque, en realidad podemos obtener respuestas relacionadas con preguntas muy difíciles en la computación. Por ejemplo, es posible saber que no sabemos cómo probar cualquiera P  ≠  NP o P  =  NP , pero que nos puede mostrar que hay oráculos A tales que se puede demostrar que P A  ≠  NP A . Lo que hace el oráculo A aquí no es ayudar a una computadora (más precisamente, una máquina de Turing determinista o una máquina de Turing no determinista) para resolver un problema: representa el problema que la computadora debe resolver. El hecho de que podemos mostrar en algunos casos que P A ≠  NP A , no significa que P sea realmente diferente de NP : solo significa que solo usar el no determinismo es realmente un recurso significativo para tener un modelo de computación: le permite resolver algunos problemas de manera eficiente, y no hay manera genéricamente para simular el no determinismo de manera eficiente en una computadora determinista. Así que si se quiere resolver el problema relacionado con lo que A computa, a pesar de todo se requeriría alguna información acerca de la estructura de cualquier función que podría eficiente de cómputo A .

Esta es una de las principales cosas de las que se tratan los oráculos: le permiten hablar sobre las formas en que los modelos de cómputo pueden o no resolver problemas, cuando se le proporciona información limitada sobre el problema.

Uso de algoritmos de oráculo para resolver problemas que no son de oráculo

El algoritmo Deutsch-Josza, o el algoritmo Bernstein-Vazirani, en principio no son algoritmos que uno realiza por sí mismo. (Bueno, en realidad no ; vea la siguiente sección). Representan formas en que puede resolver un problema . ¿Qué problemas resuelven? Le permiten descubrir ciertas características de una función que le interesa, ya sea constante / equilibrada, o qué vector está asociado en alguna función lineal con valores escalares en los vectores.

¿En qué funciones las realiza? - Los realiza en cualquier función para la que esté interesado en la respuesta.

La descripción de estos como algoritmos basados ​​en Oracle no viene al caso. Los problemas de Oracle básicamente le permiten saber que, con una computadora cuántica ideal, puede resolver el problema incluso si sabe muy poco acerca de la función , siempre que realmente pueda evaluar la función de manera eficiente en la práctica. Para evaluar realmente dicha función, por supuesto, necesitará una descripción de cómo hacerlo y, por lo tanto, tendrá más información que en la configuración de Oracle; pero eso no le impide usar el mismo algoritmo.

Lo que sucede cuando tiene más información que en la configuración de Oracle, es que de repente hay otras formas en que puede resolver el problema. Específicamente, podría ser posible resolver el problema eficientemente de manera clásica . (Esta es la misma observación que con P A  ≠  NP A : demuestra que hay problemas que están en NP , que cualquier algoritmo determinista eficiente requeriría al menos información estructural real para poder resolver, de modo que cuando proporcione una descripción de una función computable eficientemente en lugar de un 'oráculo', es posible que el problema esté enP. ) Significa que el algoritmo cuántico podría no tener la misma ventaja sobre los algoritmos clásicos para resolver el problema particular que presenta, y de hecho puede ser que el enfoque clásico sea mejor (particularmente con los dispositivos que tenemos en este momento).

Al final, solo porque tenga un algoritmo cuántico para resolver algo, no significa que sea necesariamente la mejor manera de resolver algo. Esto es cierto para el algoritmo Deutsch-Josza: incluso en la configuración de oráculo, el uso de la aleatoriedad es casi igual de bueno, ¡y es mucho mejor dado que todavía no tenemos computadoras cuánticas grandes y confiables! Pero entonces de nuevo...

"Implementando" un oráculo

El propósito de implementar el algoritmo Deutsch-Josza es el mismo que implementar " ¡Hola, mundo! ", No para resolver un problema urgente sin resolver, sino para practicar el uso de una herramienta que usted espera que sea útil para hacer otras cosas.

Para practicar la codificación, debe sentirse absolutamente relajado y cómodo con la idea de implementar un oráculo y con la idea de que la computadora evalúe el oráculo. En principio, este es el punto de lo que quieres hacer. Incluso si está utilizando un emulador clásico, en el que la computadora clásica está evaluando todas las ramas de la superposición y de manera explícita encuentra la respuesta a un problema para pretender que es una computadora cuántica que actúa de una manera ligeramente más indirecta, entonces ya sea, estás practicando cómo usar una herramienta que puede ser útil para otras cosas y que algún día no se ejecutará en una computadora clásica.

Entonces, ¿cómo debes implementar tu oráculo?

(i) Si estás realmente comprometido con la idea de que solo estás practicando, no tienes que fingir que estás haciendo algo mágico. Encuentre cualquier forma de implementar la función oráculo, incluso si es obvio para el observador casual si el resultado es constante o equilibrado. Solo está tratando de practicar la realización de un algoritmo; no se preocupe de que alguien lo acusará de ser un impostor, de que finge curar el cáncer pero que en realidad está jugando con Lego. Nunca estaba fingiendo para curar el cáncer, y que está jugando con Lego por elección deliberada. Acepta eso y solo hazlo.

f(x)=g(x,r)rg(x,r)xr, y donde no es obvio cómo resolverlo de manera clásica, no es trivial.

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

  • Es concebible que la construcción anterior pueda elaborarse / ofuscarse de alguna manera, para obtener una construcción que garantice la evaluación de una función constante o una función equilibrada, y donde cuál de estos dos ocurre no es obvio o incluso difícil, pero puedo ' No pienses cómo, por el momento.

Tenga en cuenta que esto en realidad puede ser muy difícil de hacer, pero si puede ver una forma de hacerlo, podría valer la pena: Bravyi, Gossett y Koening hicieron algo así por el problema de Bernstein-Vazirani, y les permitió para mostrar una separación pequeña pero incondicional entre la complejidad cuántica y la clásica, que fue una de las cosas más interesantes que ocurrieron en la complejidad cuántica en los últimos años.

TL; DR

  • No se preocupe por el hecho de que está "evaluando" un oráculo.

  • Si sudas por algo, solo preocúpate de que una descripción real de la función pueda hacer posible resolver el mismo problema fácilmente sin una computadora cuántica.

  • Si su motivación es solo practicar con la programación cuántica, ni siquiera se preocupe por eso. Ahorre su preocupación por problemas más valiosos, como el calentamiento global. Mientras tanto, disfruta jugando con Legos mientras desarrollas algo más.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.