양자 계산을 에뮬레이션 할 때 얽힘을 추적하는 방법은 무엇입니까?


9

대학 프로젝트로 양자 계산 라이브러리를 만들려고합니다. 저는 여전히 Quantum Computing 필드의 모든 측면을 배우고 있습니다. 양자 에뮬레이션을위한 효율적인 라이브러리가 이미 있다는 것을 알고 있습니다. 난 그냥 내 자신을 만들고 싶습니다. Quantum Computing의 핵심 개념을 이해하는 데 도움이됩니다.

알아 n 큐빗은 2n요소 복합 배열. 또한n 큐빗 게이트는 2n×2n2D 어레이. 따라서 다음은 내 의심입니다 (주로 얽힘과 관련이 있음).

  1. 게이트의 텐서 곱을 언제 찾아야합니까 (예 : IHI에 대한 3큐빗 시스템)? 주문의 텐서 곱을 항상 계산해야합니까?2n×2n큐빗이 얽 히지 않더라도?

  2. 와 함께 2n요소 배열 (계수를 저장), 실제로 어떤 퀀트가 얽혀 있는지 계산할 수 있습니까? 아니면 내 얽힘 정보를 저장하기 위해 다른 데이터 구조를 만들어야합니까?n 큐빗 (어떤 큐빗이 얽혀 있는지)?

  3. 내 두 번째 질문은 실제로 관련이 있습니까? 얽힘 정보를 전혀 추적해야합니까? 내 말은, 계수를 가진 게이트를 곱하는 것만으로도 충분하지 않다는 것입니다 (시스템이 얽혀 있어도). 측정시에만 관련이있을 수 있습니다.


1
그것은에 달려있다 n얽힘 패턴을 추적하도록 최적화하는 것이 조기에 수행되는지 여부 만약 당신이 3 큐 비트를 가지고 있다면, 당신은 그 노력을 기울여서 많은 것을 얻지 못하므로 "조기 최적화"가됩니다. 따라서 실제로 얼마나 확장 성이 필요한지 자문 해보십시오.
AHusain

1
@MidhunXDA "물리적으로 일어나는 일을 알고 있지만이를 수학적 형태로 변환 할 수 없습니다". 내가 아는 한 양자 계산으로 이어지는 여러 물리적 프로세스가 있습니다. 에뮬레이션하려는 물리적 프로세스 중 하나 (또는 ​​여전히 질문의 범위에 있다고 생각되면 모든 프로세스)를 정확하게 설명 하면 좋은 생각 이라고 생각합니다. 이것을 지정하면 질문이 더 명확하고 대답하기 쉽다고 생각합니다.
이산 도마뱀

1
이 질문을 여러 개의 질문으로 나누십시오. 적어도 세 가지 다른 질문이 있습니다.
헤더

3
@heather 나는 이것들이 실제로 같은 문제의 다른 측면 인 모든 질문이라는 포스터에 동의합니다. 나는 질문을 개선하는 방법을 실제로 보지 못하지만 대답을하기에 충분히 이해한다고 생각합니다.
DaftWullie

2
@heather 나는 중재자가 극단적 인 경우를 제외하고는 스스로 질문 을 하지 말 것을 강력히 권합니다 . 이 질문은 약간 광범위하지만 단일 게시물에서 합리적으로 대답 할 수 있습니다. FWIW 기본적으로 여기에는 두 가지 질문이 있습니다. 1) 게이트의 텐서 곱을 언제 계산합니까? 2) 얽힘 효과를 고려하는 방법은 무엇입니까?
Sanchayan Dutta

답변:


5

항상 전체를 계산하는 것으로 충분합니다. 2n×2n 유니 타리 행렬을 적용한 후 2n항목 상태 벡터. 당신이해야 할 선택이 그 무엇의 경우, 그건 모두 당신은 모든 얽힘 정보는 그 벡터에 포함 된대로해야한다. 특정 큐 비트가 얽혀 있는지 확인하는 빠르고 쉬운 방법은 다른 모든 큐 비트에 대해 (순수한) 상태 벡터의 부분 트레이스를 취하는 것입니다. 결과 행렬의 순위가 1이면 해당 큐 비트가 분리 가능한 상태에 있고 그렇지 않으면 얽힌 상태입니다.

귀하의 질문의 요점은 실제로 "이러한 계산 비용을 어떻게 피할 수 있습니까?"라고 가정합니다. 일반적으로, 그것은 할 수 없습니다-만약 당신이 양자 컴퓨터의 모든 힘을 사용한다면, 당신은 항상2n항목 상태 벡터. 그러나, 얽힘을 추적함으로써 그러한 큰 상태 벡터에 대한 요구를 지연시키는 것과 같이 계산 비용을 감소시키는 다양한 트릭이있다.

효율성 개선

위의 순진한 구현과 비교할 때 가장 큰 절약은 2n×2n단일 행렬. 예를 들어 1 또는 2 큐 비트 게이트 만 사용하는 경우 행렬 희소성을 사용하면 필요한 것만O(2n) 대신 저장 O(22n).

그런 다음 사용할 수있는 다른 전술이 있습니다. 예를 들어, 2 큐빗 단위 게이트를 적용한다고 가정 해 봅시다.U 큐빗에 ij. 상태 벡터에서 4 개의 요소 집합을 가져올 수 있습니다 (|x1,2,ni,j|yi,j 고정 용 x{0,1}n2 다른 모든 것을 취함으로써 y{0,1}2) 그리고 그냥 적용 4×4 일원 U4 요소 벡터에 매번 이것을 반복x 돌아올 것이다 U 원래 상태 벡터에 제정되었습니다.

다른 전략이있을 것 같아요. 원래 질문에서 제안한 것은 얽힘 추적이었습니다. 이것은 계산을 시작할 때 메모리와 속도를 향상 시키지만 결국 양자 컴퓨터의 모든 것이 얽히게 될 것이기 때문에 결국 동등한 것으로 끝납니다.

엉킴 추적

계산 이 집합의 단일 진화 및 측정으로 구성되어 있다고 가정 해 봅시다.n 큐 비트, 즉 디코 히어 런스 (decoherence), 확률 적 맵 등이 없습니다. 다음과 같이 완전히 분리 가능한 상태에서 시작한다고 가정 해 봅시다. |0n. 이 시점에서, 모든 큐비 트는 분리 가능하며 유지하기에 충분합니다.n각각 분리 가능한 큐 비트의 상태를 전달하는 다른 레지스터. 첫 번째 게이트가 단일 큐빗 동작 인 경우U 큐빗 i그런 다음 qubit에 저장된 상태를 업데이트하면됩니다. i 같이 |ψiU|ψi, 다른 것을 만질 필요가 없습니다.

2 큐빗 게이트를하고 싶다면 V 큐빗 사이 ij예를 들어 두 사이트의 상태를 결합해야합니다. 따라서 각 차원 2의 두 레지스터를 상태가 포함 된 차원 4의 한 레지스터로 바꿉니다.V|ψi|ψj. 문제는 이제이 상태를 다시 분할 할 수 없으므로이 두 큐 비트를 레지스터에 영원히 유지해야한다는 것입니다. 물론 1 큐빗 게이트가 있다면U 큐빗에 적용 i, 이제 신청해야합니다 |ψi,jUI|ψi,j. 다음에 두 큐빗 게이트를 원할 때jk, 공백을 결합해야합니다. (i,j)k. 그 공간은 계속 커질 것이지만, 게이트가 한 공간에 국한되어 있다면 그곳에 적용해야합니다 (사용I 나머지 큐빗에 패드를 넣으려면 다른 공간에 아무것도 할 필요가 없습니다.

이와 같은 작업을 수행하는 경우 (최소한 알고리즘의 처음 몇 단계에 대해) 단일 항목이 없습니다. 2n요소 레지스터. 여러 개의 다른 레지스터가 있어야하며, 어떤 큐 비트가 어떤 레지스터에 의해 별도의 배열로 표시되는지 추적해야합니다. 일부 큐 비트 공간을 결합 할 때마다 추가 배열이 업데이트됩니다.

내 의미를 전달하는 데 도움이되는 매우 조잡한 의사 코드가 있습니다.

#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

다른 옵션

(완전한 것은 아닙니다)

너무 얽 히지 않은 상태에 대한 정보를 캡슐화하는 좋은 방법이며 달성하려는 목표에 따라 대체 경로를 제공 할 수있는 매트릭스 제품 상태에 대해 읽으십시오.


내가 달성하려고하는 것은 물론 효율성입니다. 또한이 모든 프로세스가 어떻게 작동하는지 정확하게 알고 싶습니다 (cus noobie입니다). 실제로 모든 큐 비트 계수를 단일 배열 (레코드)에 함께 저장하는 것이 더 나은 선택입니다. 답변 주셔서 감사합니다.
Midhun XDA

@DaftWullie 첫 번째 문장은 일반적으로 전체를 저장해야한다는 인상을줍니다. 2n×2n 단순한 것이 아니라 하나의 2n벡터.
Norbert Schuch

@MidhunXDA 효율성 측면에서, 양자 컴퓨터는 결국 모든 것이 뒤 얽히게하기 때문에 모든 것이 본질적으로 동일합니다. 무슨 일이 일어나고 있는지 배우려면 상태 벡터에 해당하는 단일 배열로 시작하는 것이 좋습니다. 그러나 얽힘 추적을 사용하면 약간 더 긴 시뮬레이션을 가능하게하는 속도와 메모리가 향상 될 수 있습니다.
DaftWullie

@NorbertSchuch 저는 그렇게하기에는 "충분하다"고 말했습니다. 이를 피하는 방법에 대한 자세한 내용을 추가했습니다. 아마 다른 더 나은 전술을 알고있을 것입니다.
DaftWullie
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.