Come tenere traccia degli intrecci durante l'emulazione del calcolo quantistico?


9

Sto cercando di costruire una biblioteca di calcolo quantistico come mio progetto universitario. Sto ancora imparando tutti gli aspetti del campo dell'informatica quantistica. So che ci sono già librerie efficienti per l'emulazione quantistica. Voglio solo crearne uno mio, che mi aiuterà a cogliere alcuni dei concetti chiave del calcolo quantistico.

So che qubit può essere memorizzato con un array complesso di elementi . Inoltre, un gate qubit è un array 2D . Quindi, i seguenti sono i miei dubbi (principalmente legati all'entanglement):n2nn2n×2n

  1. Quando devo trovare il prodotto tensore delle porte (come , per un sistema a qubit)? È sempre necessario calcolare il prodotto tensore dell'ordine , anche se i qubit non sono intrecciati?ioHio32n×2n

  2. Con solo un array di elementi (che memorizzo i coefficienti), posso effettivamente calcolare in qualche modo quali qubit sono aggrovigliati? O devo creare un'altra struttura di dati per memorizzare le informazioni di entanglement dei miei qubit (su quali qubit sono intrecciati)?2nn

  3. La mia seconda domanda è effettivamente pertinente? Devo tenere traccia delle informazioni sull'entanglement? Voglio dire, non so se moltiplicare le porte con i coefficienti sia sufficiente (anche se il sistema è impigliato). Forse è rilevante solo al momento della misurazione.


1
Dipende da se l'ottimizzazione per tenere traccia del modello di entanglement sia prematura o meno. Se hai solo 3 qubit, allora non stai guadagnando molto mettendo questo sforzo in modo che sarebbe "ottimizzazione prematura". Quindi chiediti, quanto è realmente necessario che sia scalabile. n
AHusain,

1
@MidhunXDA "So cosa sta accadendo fisicamente, ma non sono in grado di convertirlo in forma matematica". Per quanto ne so, ci sono più processi fisici che portano al calcolo quantistico. Penso che sarebbe una buona idea se descrivi con precisione uno di quei processi fisici che vuoi emulare (o tutti, se pensi che sarebbero ancora nell'ambito della domanda). Penso che specificare questo rende la domanda più chiara e più facile da rispondere.
Lucertola discreta,

1
Per favore, suddividilo in più domande: ne vedo almeno tre distinte.
erica

3
@heather Sono d'accordo con il poster che queste sono davvero tutte domande che sono aspetti diversi della stessa cosa. Non vedo davvero come migliorare la domanda, ma credo di averlo capito abbastanza bene da dare una risposta.
DaftWullie,

2
@heather Consiglio vivamente ai moderatori di non mettere in discussione le domande da soli, tranne in casi estremi (leggi: palesemente off-topic o spam). Questa domanda, sebbene leggermente ampia, può essere ragionevolmente risolta in un singolo post. FWIW ci sono fondamentalmente due domande qui: 1) Quando calcolare i prodotti tensore delle porte? 2) Come tenere conto dell'effetto dell'entanglement nel farlo?
Sanchayan Dutta,

Risposte:


5

È certamente sufficiente calcolare sempre l'intera matrice unitaria , quindi applicarla al vettore di stato -entry. Se è quello che scegli di fare, è tutto ciò che devi fare poiché tutte le informazioni sull'entanglement sono contenute in quel vettore. Un modo semplice e veloce per vedere se un particolare qubit è impigliato è quello di prendere la traccia parziale del tuo vettore di stato (puro) su tutti gli altri qubit. Se la matrice risultante è di grado 1, quel qubit è in uno stato separabile, altrimenti è impigliato.2 n2n×2n2n

Suppongo che il punto della tua domanda sia davvero "Come si può evitare questo enorme costo computazionale?". In generale, non può - se stai usando tutta la potenza del computer quantistico, avrai sempre bisogno del vettore di stato -entry. Tuttavia, ci sono vari trucchi che riducono il costo computazionale, come ritardare la necessità di un vettore di stato così grande tenendo traccia dell'entanglement.2n

Miglioramenti dell'efficienza

Il più grande risparmio che puoi fare rispetto all'implementazione ingenua sopra è evitare le matrici unitarie . Ad esempio, se stai usando solo porte a 1 o 2 qubit, semplicemente usando la scarsità di matrici significa che hai solo bisogno di memoria O ( 2 n ) invece di O ( 2 2 n ) .2n×2nO(2n)O(22n)

Poi ci sono altre tattiche che puoi impiegare. Ad esempio, immagina di voler applicare il gate unitario a due qubit sui qubit i e j . Si può prendere set di 4 elementi dal vettore di stato ( | x 1 , 2 , ... n i , j | y i , j per fisso x { 0 , 1 } n - 2 prendendo tutte diverse y { 0 , 1 }Uioj|X1,2,...nio,j|yio,jX{0,1}n-2 ) e basta applicare la U unitaria 4 × 4 su quel vettore a 4 elementi. Ripetendo questo per ogni x si restituirà U enacted sul vettore di stato originale.y{0,1}24×4UXU

Immagino ci siano altre strategie che si potrebbero escogitare. Quello che si è suggerito dalla domanda originale era il monitoraggio dell'entanglement. Ciò fornisce miglioramenti della memoria e della velocità all'inizio di un calcolo, ma alla fine finisce per essere equivalente perché (presumibilmente) tutto nel computer quantistico rimarrà impigliato.

Tracciamento entanglement

Supponiamo che il tuo calcolo consista solo di evoluzione unitaria e misurazione sull'insieme di qubit, cioè che non vi siano decoerenze, mappe probabilistiche ecc. Supponiamo inoltre che inizi da uno stato completamente separabile come | 0 n . A questo punto, ogni qubit è separabile ed è sufficiente mantenere n registri diversi, ciascuno dei quali trasmette lo stato di un qubit separabile. Se il tuo primo gate è solo un'operazione a singolo qubit U su qubit , allora aggiorni lo stato memorizzato su qubit come e non devi toccare nulla altro.n|0nnUho | ψ iU | ψ iioio|ψioU|ψio

Se vuoi fare un gate a due qubit tra qubit e , diciamo, allora devi combinare gli stati in entrambi i siti. Pertanto, si sostituiscono due registri ciascuno della dimensione 2 con un registro della dimensione 4, contenente lo stato . Il problema è che ora non è possibile dividere nuovamente questo stato, quindi è necessario mantenere questi due qubit in un registro per sempre. Ovviamente, se hai mai un gate da 1 qubit da applicare su qubit , ora dovrai applicare . Quindi, la prossima volta che si desidera un cancello 2-qubit tra, diciamo, ei j V | ψ i| ψ jU i | ψ i , jU I | ψ i , jj k ( i , j ) k IViojV|ψio|ψjUio|ψi,jUI|ψi,jjk, dovrai combinare gli spazi per e . Questi spazi continueranno a crescere, ma se un gate è localizzato su un solo spazio, devi solo applicarlo lì (usando gli operatori per riempirlo con il resto dei qubit), e non devi fare qualsiasi cosa negli altri spazi.(i,j)kI

Se stai facendo cose del genere, non avrai (almeno per i primi passi del tuo algoritmo) un unico registro elemento. Dovrai avere un sacco di registri diversi e tenere traccia di quali qubit sono descritti da quale registro in un array separato. Ogni volta che combini gli spazi di alcuni qubit, aggiornerai quell'array aggiuntivo.2n

Ecco alcuni pseudo-codici molto rozzi che possono aiutare a trasmettere il mio significato:

#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

Altre opzioni

(Non esaustivo)

Potresti essere interessato a leggere gli Stati dei prodotti Matrix che sono un buon modo per incapsulare le informazioni sugli stati non troppo intricati e che potrebbero fornirti un percorso alternativo, a seconda di cosa esattamente stai cercando di raggiungere.


Quello che sto cercando di ottenere è ovviamente l'efficienza. Inoltre, voglio sapere esattamente come funzionano tutti questi processi (cus I am a noobie). Quindi, in pratica, la scelta migliore è semplicemente memorizzare tutti i coefficienti dei qubit in un unico array (record), giusto? Grazie per avermi risposto.
Midhun XDA

2n×2n2n

@MidhunXDA In termini di efficienza, tutto è essenzialmente equivalente perché un computer quantistico alla fine farà impigliare tutto. Per sapere cosa sta succedendo, probabilmente starai meglio con l'array singolo corrispondente al vettore di stato. Tuttavia, utilizzando il tracciamento entanglement è possibile ottenere alcuni miglioramenti di velocità e memoria che dovrebbero consentire simulazioni leggermente più lunghe.
DaftWullie,

@NorbertSchuch Ho detto che era "sufficiente" farlo, il che è vero. Ho aggiunto ulteriori dettagli su come evitarlo. Probabilmente conosci altre tattiche migliori.
DaftWullie,
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.