Comment suivre les enchevêtrements lors de l'émulation du calcul quantique?

9

J'essaie de construire une bibliothèque de calcul quantique comme projet universitaire. J'apprends toujours tous les aspects du domaine de l'informatique quantique. Je sais qu'il existe déjà des bibliothèques efficaces pour l'émulation quantique. Je veux juste créer le mien, ce qui m'aidera à saisir certains des concepts fondamentaux de l'informatique quantique.

Je sais que qubits peuvent être stockés avec un tableau complexe à 2 éléments n . En outre, une porte n qubit est un réseau 2D 2 n × 2 n . Donc, voici mes doutes (principalement liés à l'intrication):n2nn2n×2n

  1. Quand dois-je trouver le produit tensoriel des portes (comme , pour un système à 3 qubits)? Est-il toujours nécessaire de calculer le produit tensoriel d'ordre 2 n × 2 n , même si les qubits ne sont pas enchevêtrés?IHI32n×2n

  2. Avec seulement un tableau d'éléments à (dont je stocke les coefficients), puis-je réellement calculer les qubits enchevêtrés? Ou dois-je créer une autre structure de données pour stocker les informations d'enchevêtrement de mes n qubits (sur quels qubits sont enchevêtrés)?2nn

  3. Ma 2e question est-elle réellement pertinente? Dois-je garder une trace des informations sur l'enchevêtrement? Je veux dire, je ne sais pas si multiplier les portes avec des coefficients est suffisant (même si le système est enchevêtré). Peut-être que cela n'est pertinent qu'au moment de la mesure.

Midhun XDA
la source
1
Cela dépend de si l'optimisation pour garder une trace du motif d'enchevêtrement est prématurée ou non. Si vous n'avez que 3 qubits, vous ne gagnez pas grand-chose en mettant cet effort, ce serait donc une "optimisation prématurée". Alors demandez-vous, dans quelle mesure avez-vous réellement besoin de cette évolutivité. n
AHusain
1
@MidhunXDA "Je sais ce qui se passe physiquement, mais je ne suis pas en mesure de le convertir en forme mathématique". Pour autant que je sache, il existe plusieurs processus physiques qui conduisent au calcul quantique. Je pense que ce serait une bonne idée si vous décrivez précisément l' un de ces processus physiques que vous souhaitez imiter (ou tous, si vous pensez que cela serait toujours dans le cadre de la question). Je pense que le préciser rend la question plus claire et plus facile à répondre.
Lézard discret
1
Veuillez diviser cela en plusieurs questions - j'en vois au moins trois distinctes.
bruyère
3
@heather je suis d'accord avec l'affiche que ce sont vraiment toutes des questions qui sont différents aspects de la même chose. Je ne vois pas vraiment comment améliorer la question, mais je pense que je la comprends assez bien pour donner une réponse.
DaftWullie
2
@heather Je recommande fortement aux modérateurs de ne pas mettre les questions en attente, sauf dans les cas extrêmes (lire: manifestement hors sujet ou spam). Cette question, bien que légèrement large, peut recevoir une réponse raisonnable dans un seul message. FWIW il y a fondamentalement deux questions ici: 1) Quand calculer les produits tensoriels des portes? 2) Comment prendre en compte l'effet d'enchevêtrement?
Sanchayan Dutta

Réponses:

5

2n×2n2n

2n

Améliorations de l'efficacité

2n×2nO(2n)O(22n)

Uij|x1,2,ni,j|yi,jx{0,1}n2y{0,1}24×4UxU

J'imagine qu'il existe d'autres stratégies que l'on pourrait trouver. Celui qui se suggérait à partir de la question d'origine était le suivi de l'intrication. Cela permet d'améliorer la mémoire et la vitesse au début d'un calcul, mais finit par être équivalent car (vraisemblablement) tout ce qui se trouve dans l'ordinateur quantique finira par être emmêlé.

Suivi de l'intrication

n|0nnUii|ψiU|ψi

VijV|ψi|ψjUi|ψi,jUI|ψi,jjk(i,j)kI

2n

Voici un pseudo-code très grossier qui peut aider à transmettre ma signification:

#initialise variables
entangled_blocks={{1},{2},{3},...,{n}}
quantum_states={{1,0},{1,0},...,{1,0}}

#apply action of each gate
for each gate
   for each gate_target
       target_block=entangled_blocks entry containing gate_target
   next gate_target
   if all target_blocks equal then
      apply gate on target_block (pad with identity on other qubits)
   else
      new_entangled_block=union(target_blocks)
      new_state_vec=tensor_product(quantum_states for each target block)
      apply gate on new_state_vec (pad with identity on other qubits)
      replace all target_blocks in entangled_blocks with new_entangled_block
      replace all quantum_states(all target blocks) with new_state_vec
   end if
next gate

Autres options

(En aucun cas exhaustif)

Vous pourriez être intéressé à lire sur les états des produits matriciels qui sont un bon moyen d'encapsuler les informations sur les états pas trop enchevêtrés, et qui peuvent vous fournir un itinéraire alternatif, selon exactement ce que vous essayez d'atteindre.

DaftWullie
la source
Ce que j'essaie d'atteindre, c'est bien sûr l'efficacité. Aussi, je veux savoir exactement comment tous ces processus fonctionnent (car je suis un noobie). Donc, dans une pratique, le meilleur choix est simplement de stocker tous les coefficients qubits ensemble dans un seul tableau (enregistrement), non? Merci d'avoir répondu.
Midhun XDA
2n×2n2n
@MidhunXDA En termes d'efficacité, tout est essentiellement équivalent car un ordinateur quantique finira par tout emmêler. Pour savoir ce qui se passe, vous feriez probablement mieux de commencer avec le tableau unique correspondant au vecteur d'état. Mais, en utilisant le suivi de l'intrication, vous pouvez gagner en vitesse et en mémoire, ce qui devrait permettre des simulations légèrement plus longues.
DaftWullie
@NorbertSchuch J'ai dit que c'était "suffisant" pour cela, ce qui est vrai. J'ai ajouté quelques détails supplémentaires sur la façon de l'éviter. Vous connaissez probablement d'autres tactiques meilleures.
DaftWullie