Como acompanhar os emaranhados ao emular a computação quântica?

9

Estou tentando construir uma biblioteca de computação quântica como meu projeto universitário. Ainda estou aprendendo todos os aspectos do campo da computação quântica. Eu sei que já existem bibliotecas eficientes para emulação quântica. Eu só quero fazer o meu próprio, o que me ajudará a entender alguns dos principais conceitos da Computação Quântica.

Eu sei que qubits podem ser armazenados com uma matriz complexa de elementos. Além disso, um gate qubit é um array 2D 2D. Então, a seguir estão minhas dúvidas (principalmente relacionadas ao emaranhamento):2 n n 2 n × 2 nn2nn2n×2n

  1. Quando preciso encontrar o produto tensorial dos portões (como , para um sistema de qubit)? É sempre necessário calcular o produto tensorial da ordem , mesmo que os qubits não estejam emaranhados?3 2 n × 2 nIHI32n×2n

  2. Com apenas uma matriz de elementos (que eu armazeno os coeficientes), posso realmente calcular de alguma forma quais qubits estão entrelaçados? Ou preciso criar outra estrutura de dados para armazenar as informações de emaranhamento dos meus qubits (sobre quais qubits estão emaranhados)? n2nn

  3. Minha segunda pergunta é realmente relevante? Preciso acompanhar as informações de emaranhamento? Quero dizer, não sei se multiplicar portas com coeficientes é suficiente (mesmo que o sistema esteja emaranhado). Talvez seja relevante apenas no momento da medição.

Midhun XDA
fonte
11
Depende de se a otimização para acompanhar o padrão de emaranhamento é prematura ou não. Se você tiver apenas 3 qubits, não estará ganhando muito se dedicar esse esforço, pois seria "otimização prematura". Então, pergunte a si mesmo: quão escalável você realmente precisa que isso seja. n
AHusain
11
@MidhunXDA "Eu sei o que está acontecendo fisicamente, mas não consigo converter isso para a forma matemática". Até onde eu sei, existem vários processos físicos que levam à computação quântica. Eu acho que seria uma boa idéia se você descrever com precisão um desses processos físicos que deseja imitar (ou todos eles, se você acha que ainda estaria no escopo da pergunta). Penso que especificar isso torna a pergunta mais clara e fácil de responder.
Lagarto discreto
11
Divida-o em várias perguntas - vejo pelo menos três perguntas distintas.
heather
3
@ heather Eu concordo com o pôster de que essas são realmente todas as questões que são aspectos diferentes da mesma coisa. Realmente não vejo como melhorar a pergunta, mas acredito que a entendo bem o suficiente para dar uma resposta.
DaftWullie
2
@heather Eu recomendo fortemente aos moderadores que não deixem as perguntas em espera por eles mesmos, exceto em casos extremos (leia-se: descaradamente fora de tópico ou spam). Esta pergunta, embora um pouco ampla, pode ser razoavelmente respondida em um único post. FWIW, existem basicamente duas perguntas aqui: 1) Quando calcular produtos tensores de portas? 2) Como levar em consideração o efeito do emaranhado ao fazê-lo?
Sanchayan Dutta 01/05/19

Respostas:

5

Certamente é suficiente sempre calcular a matriz unitária completa e aplicá-la ao vetor de estado de entrada . Se é isso que você escolhe fazer, é tudo o que você precisa fazer, pois todas as informações de emaranhamento estão contidas nesse vetor. Uma maneira rápida e fácil de verificar se um determinado qubit está emaranhado é seguir o rastreio parcial do seu vetor de estado (puro) sobre todos os outros qubits. Se a matriz resultante é de classificação 1, esse qubit está em um estado separável, caso contrário, está emaranhado.2 n2n×2n2n

Suponho que o ponto de sua pergunta seja realmente "Como esse enorme custo computacional pode ser evitado?". Em geral, não pode - se você estiver usando toda a potência do computador quântico, sempre precisará do vetor de estado de entrada . No entanto, existem vários truques que reduzem o custo computacional, como atrasar a necessidade de um vetor de estado tão grande, mantendo o controle do emaranhado.2n

Melhorias na eficiência

A maior economia que você pode fazer em comparação com a implementação ingênua acima é evitar as matrizes unitárias . Por exemplo, se você estiver usando apenas portas de 1 ou 2 qubit, simplesmente usar a escassez de matrizes significa que você só precisa de armazenamento de vez de . O ( 2 n ) O ( 2 2 n )2n×2nO(2n)O(22n)

Depois, existem outras táticas que você pode empregar. Por exemplo, imagine que você deseja aplicar o de dois qubits unitária portão em qubits e . Você pode pegar conjuntos de 4 elementos do seu vetor de estado ( para fixo utilizando todos os ) diferentes e apenas aplicando o unitário nesse vetor de 4 elementos. Repetir isso para cada retornará no vetor de estado original.Uij|x1,2,ni,j|yi,jx{0,1}n2y{0,1}24×4UxU

Eu imagino que existem outras estratégias que alguém poderia inventar. O que se sugeriu a partir da pergunta original foi o rastreamento de emaranhamento. Isso fornece melhorias de memória e velocidade no início de uma computação, mas acaba sendo equivalente, porque (presumivelmente) tudo no computador quântico acaba entrelaçado.

Rastreamento de emaranhamento

Vamos supor que seu cálculo consiste apenas em evolução e medição unitárias no conjunto de qubits, ou seja, não há decoerência, mapas probabilísticos etc. Vamos supor ainda que você comece de um estado totalmente separável, como . Nesse ponto, todo qubit é separável e é suficiente manter registros diferentes, cada um transmitindo o estado de um qubit separável. Se o seu primeiro gate for apenas uma operação de qubit único no qubit , basta atualizar o estado armazenado no qubit como e você não precisará tocar em nada outro.n|0nnUii|ψiU|ψi

Se você quer fazer um de dois qubits portão entre qubits e , digamos, então você tem que combinar os estados em ambos os locais. Portanto, você substitui dois registros, cada um da dimensão 2, por um registro da dimensão 4, contendo o estado . O problema é que agora você não pode dividir esse estado novamente, portanto, é necessário manter esses dois qubits em um registro para sempre. Obviamente, se você tiver um gate 1 qubit para aplicar no qubit , agora precisará aplicar . Então, da próxima vez que você quer um portão 2-qubit entre, digamos, ei J V | ψ i| ψ jU i | ψ i , jU I | ψ i , jj k ( i , j ) k IVijV|ψi|ψjUi|ψi,jUI|ψi,jjk, você terá que combinar os espaços para e . Esses espaços continuarão crescendo, mas se um portão estiver localizado em apenas um espaço, você só precisará aplicá-lo lá (usando os operadores para preenchê-lo no restante dos qubits), e você não precisará faça qualquer coisa para os outros espaços.(i,j)kI

Se você estiver fazendo algo assim, não terá (pelo menos nos primeiros passos do seu algoritmo) um único registro de elemento . Você precisará ter vários registros diferentes e acompanhar quais qubits são descritos por quais registradores em uma matriz separada. Cada vez que você combina os espaços de alguns qubits, atualiza essa matriz extra.2n

Aqui estão alguns pseudocódigos muito grosseiros que podem ajudar a transmitir meu significado:

#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

Outras opções

(De modo algum exaustivo)

Você pode estar interessado em ler sobre os Estados dos produtos da matriz, que são uma boa maneira de encapsular as informações sobre estados não muito entrelaçados e que podem fornecer uma rota alternativa para você, dependendo exatamente do que você está tentando alcançar.

DaftWullie
fonte
O que estou tentando alcançar é obviamente a eficiência. Além disso, quero saber exatamente como todos esses processos estão funcionando (porque sou um noobie). Então, em uma prática, a melhor escolha é apenas armazenar todos os coeficientes de qubits juntos em uma única matriz (registro), certo? Obrigado por responder.
Midhun XDA
@DaftWullie Sua primeira frase dá a impressão de que, em geral, seria necessário armazenar unitário completo , em vez de apenas o vetor . 2 n2n×2n2n
Norbert Schuch
@MidhunXDA Em termos de eficiência, tudo é essencialmente equivalente, porque um computador quântico acabará fazendo com que tudo fique emaranhado. Para saber o que está acontecendo, provavelmente é melhor começar com a única matriz correspondente ao vetor de estado. Porém, usando o rastreamento de emaranhamento, você pode obter algumas melhorias de velocidade e memória que devem permitir simulações um pouco mais longas.
DaftWullie
@ NorbertSchuch eu disse que era "suficiente" para fazer isso, o que é verdade. Adicionei mais alguns detalhes sobre como evitá-lo. Você provavelmente conhece outras táticas melhores.
DaftWullie