量子計算をエミュレートするときにエンタングルメントを追跡する方法は?


9

私は大学のプロジェクトとして量子計算ライブラリを構築しようとしています。私はまだ量子コンピューティング分野のすべての側面を学んでいます。量子エミュレーション用の効率的なライブラリがすでにあることは知っています。Quantum Computingのコアコンセプトのいくつかを理解するのに役立つ、自分で作成したいだけです。

キュビットは要素の複素数配列で格納できることを知っています。また、キュービットゲートは 2D配列です。だから、以下は私の疑念です(主に絡み合いに関連しています):2 n n 2 n × 2 nn2nn2n×2n

  1. ゲートのテンソル積を見つける必要があるのはいつですか(キュービットシステムの場合、など)。キュービットが絡まっていなくても、常に次のテンソル積を計算する必要がありますか?3 2 N × 2 NIHI32n×2n

  2. のみで(Iは、係数を格納する)素子アレイ、私は実際に何とか量子ビットをもつれされて計算することができますか?それとも、キュビットの絡み合い情報(どのキュビットが絡み合っているか)を格納するために、別のデータ構造を作成する必要がありますか? n2nn

  3. 私の2番目の質問は実際に関連していますか?エンタングルメント情報を追跡する必要はありますか?つまり、ゲートを係数で乗算するだけで十分かどうかはわかりません(システムが絡まっていても)。多分それは測定時のみに関連します。


1
エンタングルメントパターンを追跡するための最適化が時期尚早かどうかは、に依存します。量子ビットが3つしかない場合は、その努力を注ぐことであまり利益が得られないため、「時期尚早の最適化」になります。ですから、実際にこれを実現するために必要なスケーラビリティを自問してください。n
AHusain

1
@MidhunXDA「私は物理的に何が起こっているのか知っていますが、それを数学的形式に変換することはできません。」私の知る限りでは、量子計算につながる複数の物理プロセスがあります。エミュレートしたい物理プロセスの1つ(または、それでも問題の範囲内にあると思われる場合は、それらすべて)を正確に説明することは、良い考えだと思います。これを指定することで、質問がより明確になり、答えやすくなると思います。
離散トカゲ

1
これを複数の質問に分割してください-少なくとも3つの異なる質問があります。
ヘザー

3
@ヘザー私はポスターに同意します。これらはすべて同じことの異なる側面であるすべての質問です。質問を改善する方法は本当にわかりませんが、答えを出すには十分理解していると思います。
DaftWullie

2
@ヘザー私は、極端な場合を除いて、モデレーターが自分で質問を保留しないことを強くお勧めします(読む:明らかに話題外またはスパム)。この質問は少し広いですが、単一の投稿で合理的に回答できます。FWIWここでは基本的に2つの質問があります。1)ゲートのテンソル積をいつ計算するか?2)その際、絡み合いの影響をどのように考慮するのですか?
Sanchayan Dutta

回答:


5

常に完全なユニタリ行列を計算し、それをエントリの状態ベクトルに適用するだけで十分です。それはあなたがすることを選択したものだならば、それはだ、すべてあなたがすべての絡み合い情報がそのベクトルに含まれているとしなければなりません。特定のキュビットが絡まっているかどうかをすばやく簡単に確認する方法は、他のすべてのキュビットに対して(純粋な)状態ベクトルの部分的なトレースを取ることです。結果の行列がランク1の場合、そのキュビットは分離可能な状態にあり、それ以外の場合はもつれます。2 n2n×2n2n

私はあなたの質問のポイントが本当に「この莫大な計算コストをどのようにして避けることができるか」であると思います。一般に、それはできません。量子コンピュータの能力をフルに活用している場合は、常にエントリの状態ベクトルが必要になります。ただし、エンタングルメントを追跡することによってそのような大きな状態ベクトルの必要性を遅らせるなど、計算コストを削減するさまざまなトリックがあります。2n

効率の改善

上記の単純な実装と比較してできる最大の節約は、ユニタリ行列を回避することです。たとえば、1または2キュービットゲートのみを使用している場合、行列のスパース性を使用するだけで、ではなくストレージのみが必要になります。 O 2 nO 2 2 n2n×2nO(2n)O(22n)

次に、あなたが採用できる他の戦術があります。たとえば、量子ビットおよび 2量子ビットのユニタリゲートを適用するとします。状態ベクトルから4つの要素のセットを取得できます( for fixedは、すべての異なる)を取り、その4要素ベクトルにユニタリを適用するだけです。すべてのについてこれを繰り返すと、元の状態ベクトルに制定されたが返されます。Uij|x1,2,ni,j|yi,jx{0,1}n2y{0,1}24×4UxU

思いつく他の戦略があると思います。元の質問から示唆されたのは、エンタングルメント追跡でした。これにより、計算の開始時にメモリと速度が向上しますが、最終的には(おそらく)量子コンピューター内のすべてが絡み合うため、同等になります。

エンタングルメントトラッキング

あなたの計算がキュービットのセットのユニタリ進化と測定のみで構成されていると仮定しましょう。つまり、デコヒーレンス、確率マップなどはありません。ような完全に分離可能な状態から始めると仮定しましょう。。この時点で、すべての量子ビットは分離可能であり、それぞれが分離可能な量子ビットの状態を伝える異なるレジスタを保持することで十分です。あなたの最初のゲートは1つだけ量子ビット操作の場合は量子ビットのは、あなただけの量子ビットに保存されている状態を更新として、あなたはタッチ何にもありません。そうしないと。n|0nnUii|ψiU|ψi

たとえば、量子ビットと間で2量子ビットゲートを実行する場合、両方のサイトの状態を組み合わせる必要があります。したがって、状態を含む、それぞれ次元2の2つのレジスターを次元4の1つのレジスターに置き換えます。問題は、この状態を再び分割できないことです。そのため、これらの2つのキュービットをレジスタに永久に保持する必要があります。もちろん、量子ビットに適用する1量子ビットゲートがある場合は、を適用する必要があります。次に、たとえばと間に2キュービットゲートが必要になったときi j V | ψ | ψ jのU I | ψ I JU I | ψ I JJ K I J k個のIVijV|ψi|ψjUi|ψi,jUI|ψi,jjk、とのスペースを組み合わせる必要があります。これらのスペースは成長し続けますが、ゲートが1つのスペースのみにローカライズされている場合は、そこに適用するだけで(演算子を使用して、残りのキュービットにパディングします)、その必要はありません。他のスペースには何でもします。(i,j)kI

このようなことをしている場合、(少なくともアルゴリズムの最初のいくつかのステップでは)単一の要素レジスタはありません。さまざまなレジスターの束を用意し、どのキュビットが別の配列のどのレジスターによって記述されているかを追跡する必要があります。いくつかのキュービットのスペースを組み合わせるたびに、その追加の配列を更新します。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

別のオプション

(決して網羅的ではありません)

もつれすぎていない状態に関する情報をカプセル化する優れた方法であるMatrix Product Statesに興味があるかもしれません。これは、達成しようとしている内容に応じて、代替ルートを提供する可能性があります。


私が達成しようとしているのは、もちろん効率です。また、私はこれらすべてのプロセスがどのように機能するかを正確に知りたいと思っています(私はnoobieです)。それで、実用的には、すべてのキュービット係数を1つの配列(レコード)に一緒に格納するだけの方が適切です。答えてくれてありがとう。
Midhun XDA

@DaftWullie最初の文は、一般にベクトルだけでなく、の完全なユニタリを格納する必要があるという印象を与えます。2 n2n×2n2n
Norbert Schuch、2018年

@MidhunXDA効率の点では、量子コンピュータが最終的にすべてを絡ませるため、すべてが本質的に同等です。何が起こっているのかを知るには、おそらく状態ベクトルに対応する単一の配列から始める方がよいでしょう。ただし、エンタングルメントトラッキングを使用することで、速度とメモリが改善され、わずかに長いシミュレーションが可能になります。
DaftWullie、

@NorbertSchuch私はそれを行うには「十分」であると言った、それは本当です。それを回避する方法についてさらに詳細を追加しました。あなたはおそらく他のより良い戦術を知っています。
DaftWullie、
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.