Comment pourrais-je implémenter l'oracle quantique dans l'algorithme de Deutsch?

13

J'essaie de simuler l'algorithme de Deutsch (cas élémentaire de l'algorithme de Deutsch-Josza), et je ne suis pas tout à fait sûr de la façon dont j'allais procéder pour implémenter l'oracle quantique nécessaire au fonctionnement de l'algorithme, sans défaire le but de l'algorithme et "regarder" à ce que la fonction entrée est, en évaluant la fonction.

Jack Ceroni
la source
Cela peut être utile: quantumcomputing.stackexchange.com/a/2262/2645
meowzz
Pourquoi ne pas le choisir au hasard chaque fois que vous exécutez le test? De cette façon, vous ne pouvez pas savoir.
DaftWullie
@DaftWullie Faites-vous référence au choix d'une fonction au hasard dans chaque simulation? Le problème se pose toujours que l'ordinateur doit savoir quelles sont les sorties de la fonction entrée, afin de créer la fonction nécessaire, à travers un oracle quantique.
Jack Ceroni
Oui, l'ordinateur doit le savoir, mais vous pouvez le localiser dans une seule fonction qui prend en entrée un état quantique et donne un état quantique en sortie. Seule cette fonction le saurait (et quelque chose doit le savoir). De plus, si le choix aléatoire est local à cette fonction, et est différent à chaque appel, cela correspond bien au fait qu'il ne devrait être appelé qu'une seule fois.
DaftWullie
@DaftWullie Si vous calculez une propriété d'une fonction aléatoire, pourquoi ne pas produire immédiatement une sortie aléatoire?
Norbert Schuch

Réponses:

9

Il y a deux questions ici. Le premier demande comment vous pouvez réellement implémenter cela dans le code, et le second demande quel est le point si vous savez quel oracle vous passez.

la mise en oeuvre

La meilleure façon est probablement de créer une fonction IsBlackBoxConstantqui prend l'oracle en entrée, puis exécute le programme Deutsch Oracle pour déterminer si elle est constante. Vous pouvez sélectionner l'oracle au hasard, si vous le souhaitez. Le voici, implémenté 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;
    }
}

À quoi ça sert?

Complexité des requêtes

La complexité informatique est un domaine qui vise à classer les algorithmes en fonction de la quantité de ressources qu'ils consomment en fonction de la taille d'entrée. Ces ressources incluent le temps (mesuré en étapes / instructions), la mémoire et aussi quelque chose appelé complexité des requêtes . La complexité des requêtes concerne le nombre de fois qu'un algorithme doit interroger une fonction oracle de boîte noire.

Le problème de l'oracle de Deutsch est intéressant pour les théoriciens de la complexité car l'algorithme quantique n'a à interroger la boîte noire qu'une seule fois, mais l'algorithme classique doit l'interroger deux fois. Avec le problème de Deutsch-Josza généralisé où un oracle à n bits contient une fonction qui est constante ou équilibrée, l'algorithme quantique n'a à nouveau à l'interroger qu'une seule fois mais l'algorithme classique (déterministe) nécessite 2n-1 requêtes.

Il convient de noter qu'il existe un algorithme classique probabiliste qui résout le problème de Deutsch-Josza en beaucoup moins de 2n-1 requêtes en échantillonnant de manière aléatoire les entrées d'oracle: si l'oracle continue de produire la même valeur quelle que soit l'entrée, la probabilité que le oracle est constant se développe très rapidement. Cela signifie que Deutsch-Josza n'est pas un bon candidat pour un problème de suprématie / avantage quantique, ce qui conduit à ...

Applications dans le monde réel

Si vous n'êtes pas un théoricien de la complexité, vous pourriez raisonnablement ne pas vous soucier beaucoup de la complexité des requêtes et vouloir plutôt savoir pourquoi le problème de l'oracle Deutsch est important dans un monde "sans règles" où vous êtes autorisé à regarder à l'intérieur de la boîte noire. Essayer d'analyser un problème oracle comme un problème non oracle est très difficile, et je ne pense pas que quiconque ait résolu la question du meilleur algorithme classique pour le problème oracle Deutsch lorsque vous êtes autorisé à analyser le circuit oracle. Vous pourriez penser - qu'y a-t-il à analyser? Il n'y a que quatre circuits possibles! En fait, c'est beaucoup plus compliqué.

Si nous regardons la représentation la plus simple du Deutsch Oracle à un bit, la construction de la porte est la suivante:

Identité: C1,0

X0C1,0

je4

X0

Cependant, ce ne sont en aucun cas le seul moyen de mettre en œuvre les oracles. Tout cela peut être réécrit en utilisant des centaines, des milliers, voire des millions de portes logiques! Tout ce qui compte, c'est l'effet cumulatif de ces portes logiques est équivalent à la construction simple ci-dessus. Considérez l'implémentation alternative suivante de Constant-1:

H0Z0H0

Il s'avère que, pour toute entrée que vous pourriez donner:

H0Z0H0|ψ=X0|ψ

H0Z0H0X0

H0Z0H0=[121212-12][100-1][121212-12]=[0110]=X0

Donc nous avons:

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

H0Z0H0X0

Important pour des raisons historiques et pédagogiques

Surtout, le problème Deutsch Oracle est important pour des raisons historiques et pédagogiques. C'est le premier algorithme enseigné aux étudiants parce qu'il est le plus simple et semble démontrer une accélération quantique tant que vous ne posez pas trop de questions. Il sert également de bon point de départ pour apprendre le problème de périodicité de Simon puis l'algorithme de Shor.

ahelwer
la source
J'étais avec toi jusqu'à ce que l'affaire Gotteman-Knill. Pourquoi restreignez-vous votre circuit compliqué aux (i) portes à un qubit et (ii) aux portes stabilisatrices?
Norbert Schuch
Si je comprends bien, il existe des algorithmes efficaces pour déterminer si un circuit quantique arbitraire implémente l'un des nombreux circuits classiques simples. Les circuits aléatoires étudiés pour l'avantage quantique nécessitent un comportement plus compliqué.
ahelwer
Je ne pense pas que ce soit vrai. Si je ne me trompe pas, demander si deux circuits font la même chose est QMA-complet. Ce n'est que votre restriction aux portes de Clifford qui permettent la simulabilité via Gottesman-Knill.
Norbert Schuch
Vous avez raison, je vais rechercher un peu plus sur la réduction des circuits, puis mettre à jour mon article pour clarifier le rôle de Gottesman-Knill.
ahelwer
J'ai mis à jour ma réponse après avoir posé des questions à Robin Kothari par e-mail.
ahelwer
3

Il n'y a aucun moyen de construire l'oracle d'une manière qui ne vaincrait pas le point de l'algorithme de Deutsch - c'est pourquoi il s'agit d'un algorithme basé sur l'oracle.

XF(X)F(0)=F(1)

F(X)1XNF(X)yF(X+y)=F(X)F(X)

Donc, le fait est que les algorithmes basés sur Oracle prouvent que vous pouvez obtenir une accélération si vous avez un problème avec cette structure (c'est-à-dire où vous ne voulez apprendre que certaines propriétés spécifiques d'une fonction), mais cela ne vous dit pas si un tel problème existe.

Donc, si vous voulez implémenter Deutsch, n'importe quelle façon de faire l'oracle est très bien - c'est un algorithme de "preuve de principe" et ne donne pas d'accélération réelle sur un problème réel (du moins aucun à notre connaissance).

Norbert Schuch
la source
2

Je n'ai pas d'exemple pour l'algorithme de Deutsch à portée de main, mais voici et voici deux tutoriels qui vous guident à travers l'implémentation de l'algorithme Deutsch-Jozsa et les oracles qu'il utilise dans Q #.

L'idée de ces deux algorithmes est la même: il faut fournir l'oracle à l'algorithme comme une opération implémentée ailleurs. De cette façon, l'algorithme ne sait pas à quel oracle il est donné et n'a aucun moyen de "regarder" l'oracle autrement qu'en l'appelant. Ces didacticiels ont également un harnais qui compte le nombre de fois où l'oracle est appelé, de sorte que si votre solution l'appelle plus d'une fois, elle échoue au test.

Certes, cela a toujours un problème que les algorithmes Oracle ont souvent: un humain peut regarder la mise en œuvre du test et de l'oracle réussi et trouver la réponse en déterminant quel oracle est implémenté. Cela peut être contré en randomisant le choix d'oracle, comme l'a suggéré DaftWullie.

Mariia Mykhailova
la source
1

Je pense que cette ahelwerréponse touche à certaines façons dont nous pensons à la complexité des algorithmes. Cependant - étant donné que nous n'avons pas littéralement d '"oracles" dans le monde réel que nous souhaitons interroger, vous vous demandez peut-être pourquoi nous nous soucions de la complexité des requêtes ou de l'idée d'oracles. J'essaierai de donner une certaine perspective à ce sujet, et en particulier de décrire comment vous pourriez essayer de penser à des façons de construire un "oracle Deutsch-Josza" d'une manière que vous n'avez pas l'impression de tricher.

(Comme le fait Norbert Schuchremarquer, pour le problème Deutsch qui est le cas élémentaire de Deutsch – Josza, il n'y a pas beaucoup de place pour des idées, mais je m'attends à ce que votre question sur les oracles s'applique également de manière plus générale. C'est de cela que je parlerai ici.)

Une intuition sur les oracles

Le concept d'oracle est un moyen de nous permettre de simplifier la façon dont nous parlons des problèmes de calcul.

L'application originale du concept d'oracle était de considérer hypothétiquement ce que nous pourrions faire si nous pouvions résoudre des problèmes difficiles, voire des problèmes impossibles, sans nous engager sur la façon de le faire, même en principe. Mais dans la complexité informatique de nos jours - en particulier dans le calcul quantique, par exemple  dans les cas de Deutsch – Josza, Bernstein – Vazirani et d'autres problèmes d'oracle - la situation est différente: l'oracle décrit une fonction qui est la base du problème. Le fait qu'il s'agisse d'un «oracle» est un moyen de structurer la façon dont nous décrivons la fonction qui est au centre du problème: non pas que nous ne devons jamais envisager comment la fonction est calculée, mais que cette information n'est tout simplement pas fournie dans le cadre du problème, et que nous ne sommes pas concernés par le temps ou toute autre complexité associée à cette fonction.

Lorsque nous adoptons cette approche, nous pouvons réellement obtenir des réponses liées à des questions très difficiles en calcul. Par exemple, vous savez peut - être que nous ne savons pas comment prouver soit P  ≠  NP ou P  =  NP , mais que nous peut montrer qu'il ya Oracles A ce que nous pouvons montrer que P A  ≠  NP A . L'oracle A n'aide pas ici un ordinateur (plus précisément une machine de Turing déterministe ou une machine de Turing non déterministe) à résoudre un problème - il représente le problème que l'ordinateur doit résoudre. Le fait que nous pouvons montrer dans certains cas que P A ≠  NP A , ne signifie pas que P est vraiment différent de NP : cela signifie simplement que l'utilisation du non-déterminisme est vraiment une ressource importante pour un modèle de calcul - il vous permet de résoudre certains problèmes efficacement, et il n'y a aucun moyen génériquement pour simuler efficacement le non-déterminisme sur un ordinateur déterministe. Donc, si vous voulez résoudre le problème lié à ce que A calcule, vous aurez absolument besoin d'informations sur la structure de toute fonction qui pourrait calculer A efficacement .

C'est l'un des principaux objectifs des oracles: ils vous permettent de parler des façons dont les modèles de calcul peuvent ou ne peuvent pas résoudre les problèmes, lorsque vous disposez d'informations limitées sur le problème.

Utilisation d'algorithmes Oracle pour résoudre des problèmes non oracle

L'algorithme de Deutsch – Josza, ou l'algorithme de Bernstein – Vazirani, ne sont en principe pas des algorithmes que l'on exécute pour eux-mêmes. (Eh bien, pas vraiment - voir la section suivante.) Ils représentent des moyens de résoudre un problème . Quels problèmes résolvent-ils? Ils vous permettent de découvrir certaines caractéristiques d'une fonction qui vous intéresse - si elle est constante / équilibrée, ou quel vecteur est associé dans une fonction linéaire à valeur scalaire sur des vecteurs.

Sur quelles fonctions les exécutez-vous? - Vous les exécutez sur n'importe quelle fonction pour laquelle vous êtes intéressé par la réponse.

La description de ces algorithmes basés sur Oracle n'est pas pertinente. Les problèmes oracle vous permettent essentiellement de savoir qu'avec un ordinateur quantique idéal, vous pouvez résoudre le problème même si vous en savez très peu sur la fonction , à condition que vous puissiez réellement évaluer la fonction efficacement dans la pratique. Pour évaluer réellement une telle fonction, bien sûr, vous aurez besoin d'une description de la façon de le faire, et donc vous avez plus d' informations que dans le paramètre oracle; mais cela ne vous empêche pas d'utiliser le même algorithme.

Ce qui se passe lorsque vous avez plus d' informations que dans le cadre d'Oracle, c'est que soudainement, il existe d' autres moyens de résoudre le problème. Plus précisément, il pourrait devenir possible de résoudre le problème de manière efficace de manière classique . (C'est la même observation qu'avec P A  ≠  NP A : cela prouve qu'il y a des problèmes qui sont dans NP , que tout algorithme déterministe efficace nécessiterait au moins des informations structurelles réelles pour être en mesure de résoudre - de sorte que lorsque vous fournissez une description d'une fonction efficacement calculable plutôt que d'un «oracle», il est possible que le problème soitP. ) Cela signifie que l'algorithme quantique pourrait ne pas avoir le même avantage que les algorithmes classiques pour résoudre le problème particulier que vous présentez - et en fait il se peut que l'approche classique soit meilleure (en particulier avec les appareils que nous avons en ce moment).

En fin de compte, ce n'est pas parce que vous avez un algorithme quantique pour résoudre quelque chose que c'est nécessairement la meilleure façon de résoudre quelque chose. Cela est certainement vrai de l'algorithme Deutsch – Josza: même dans le contexte oracle, l'utilisation de l'aléatoire est presque aussi bonne, et c'est beaucoup mieux étant donné que nous n'avons pas encore de gros ordinateurs quantiques fiables! Mais encore une fois...

"Implémenter" un oracle

Le but de l'implémentation de l'algorithme Deutsch – Josza est le même que l'implémentation de « Hello, World! » - non pas pour résoudre un problème pressant non résolu, mais pour s'exercer à utiliser un outil qui, selon vous, sera utile pour faire d'autres choses.

Pour pratiquer le codage, vous devez vous sentir absolument détendu et à l'aise avec l' idée de mettre en œuvre un oracle, et avec l'idée que l'ordinateur évalue l'oracle. En principe, c'est le but de ce que vous voulez faire. Même si vous utilisez un émulateur classique, dans lequel l'ordinateur classique évalue réellement toutes les branches de la superposition et trouve ainsi explicitement la réponse à un problème afin de prétendre qu'il s'agit d'un ordinateur quantique agissant de manière légèrement plus détournée, donc que ce soit - vous vous entraînez à utiliser un outil qui peut être utile pour d'autres choses, et qui un jour ne sera pas exécuté sur un ordinateur classique.

Alors, comment devez-vous procéder pour implémenter votre oracle?

(i) Si vous êtes vraiment attaché à l'idée que vous venez de vous entraîner, vous n'avez pas à prétendre que vous faites quelque chose de magique. Trouvez n'importe quel moyen pour implémenter la fonction oracle, même s'il est évident pour l'observateur occasionnel que le résultat soit constant ou équilibré. Vous essayez juste de pratiquer la réalisation d'un algorithme - ne vous inquiétez pas que quelqu'un vous accusera d'être un imposteur, que vous prétendez guérir le cancer mais que vous jouez avec Lego. Vous n'étiez feignant de guérir le cancer, et vous êtes jouer avec Lego par choix délibéré. Embrassez cela et faites-le.

F(X)=g(X,r)rg(X,r)Xr, et où il n'est pas évident de savoir comment le résoudre de manière classique, n'est pas trivial.

  • g(X,r)=XrX,r{0,1}ng(X,r)F(X)F(X)r0

  • Il est concevable que la construction ci-dessus puisse être élaborée / obscurcie quelque peu, pour obtenir une construction qui est garantie d'évaluer soit une fonction constante soit une fonction équilibrée, et où lequel de ces deux se produit n'est pas évident ni même difficile - mais je peux '' t pense à comment, en ce moment.

Gardez à l'esprit que cela est en fait très difficile à faire - mais si vous pouvez voir un moyen de le faire, cela pourrait être très utile: Bravyi, Gossett et Koening ont fait quelque chose comme ça pour le problème Bernstein – Vazirani, et cela leur a permis pour montrer une séparation petite mais inconditionnelle entre la complexité quantique et classique, qui était l'une des choses les plus intéressantes à se produire dans la complexité quantique au cours des dernières années.

TL; DR

  • Ne vous inquiétez pas du fait que vous «évaluez» un oracle.

  • Si vous transpirez, craignez seulement qu'une description réelle de la fonction permette de résoudre facilement le même problème sans ordinateur quantique.

  • Si votre motivation est uniquement de vous entraîner avec la programmation quantique, ne vous inquiétez même pas. Enregistrez votre inquiétude pour des problèmes plus importants, comme le réchauffement climatique. En attendant, profitez de jouer avec Legos pendant que vous construisez quelque chose de plus.

Niel de Beaudrap
la source