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.
algorithm
simulation
deutsch-jozsa-algorithm
oracles
Jack Ceroni
la source
la source
Réponses:
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
IsBlackBoxConstant
qui 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 #:À 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 de2n - 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
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:
Il s'avère que, pour toute entrée que vous pourriez donner:
Donc nous avons:
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.
la source
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.
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).
la source
La page IBM Q Experience contient deux exemples concernant l'algorithme . Ils montrent un exemple de fonction. Cela pourrait vous inspirer pour vos simulations j'espère.
la source
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.
la source
Je pense que cette
ahelwer
ré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 Schuch
remarquer, 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.
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.
la source