Rigettiの19キュービットチップとGoogleの72キュービットBristleConeチップの物理的に許可されたCNOTとは何ですか?


12

各IBM量子チップについて、jがCNOTの制御であると仮定して、各制御量子ビットjをその物理的に許可されたターゲットのリストにマッピングする辞書を作成できます。例えば、

ibmqx4_c_to_tars = {
    0: [],
    1: [0],
    2: [0, 1, 4],
    3: [2, 4],
    4: []}  # 6 edges

ibmqx4チップ用。

Googleの72量子ビットBristleconeチップの命令はどうなるでしょう。ディクテーションを理解として書くことができます。Rigettiの19キュービットチップにも同じ質問があります。


問題のチップの説明へのリンクを追加できますか?Regittiのチップ仕様が見つかりませんでした。
ネリミー

回答:


12

Bristleconeのネイティブ操作はCZであり、CNOTではありません。ただし、アダマールゲートを使用して2つの間を変換できるため、これは些細な違いです。

Bristleconeは、グリッド上のキュービットの任意の隣接ペア間でCZを実行できます。cirqをインストールしてBristleconeデバイスを印刷すると、グリッドを表示できます。

$ pip install cirq
$ python
>>> import cirq
>>> print(cirq.google.Bristlecone)
                                             (0, 5)────(0, 6)
                                             │         │
                                             │         │
                                    (1, 4)───(1, 5)────(1, 6)────(1, 7)
                                    │        │         │         │
                                    │        │         │         │
                           (2, 3)───(2, 4)───(2, 5)────(2, 6)────(2, 7)───(2, 8)
                           │        │        │         │         │        │
                           │        │        │         │         │        │
                  (3, 2)───(3, 3)───(3, 4)───(3, 5)────(3, 6)────(3, 7)───(3, 8)───(3, 9)
                  │        │        │        │         │         │        │        │
                  │        │        │        │         │         │        │        │
         (4, 1)───(4, 2)───(4, 3)───(4, 4)───(4, 5)────(4, 6)────(4, 7)───(4, 8)───(4, 9)───(4, 10)
         │        │        │        │        │         │         │        │        │        │
         │        │        │        │        │         │         │        │        │        │
(5, 0)───(5, 1)───(5, 2)───(5, 3)───(5, 4)───(5, 5)────(5, 6)────(5, 7)───(5, 8)───(5, 9)───(5, 10)───(5, 11)
         │        │        │        │        │         │         │        │        │        │
         │        │        │        │        │         │         │        │        │        │
         (6, 1)───(6, 2)───(6, 3)───(6, 4)───(6, 5)────(6, 6)────(6, 7)───(6, 8)───(6, 9)───(6, 10)
                  │        │        │        │         │         │        │        │
                  │        │        │        │         │         │        │        │
                  (7, 2)───(7, 3)───(7, 4)───(7, 5)────(7, 6)────(7, 7)───(7, 8)───(7, 9)
                           │        │        │         │         │        │
                           │        │        │         │         │        │
                           (8, 3)───(8, 4)───(8, 5)────(8, 6)────(8, 7)───(8, 8)
                                    │        │         │         │
                                    │        │         │         │
                                    (9, 4)───(9, 5)────(9, 6)────(9, 7)
                                             │         │
                                             │         │
                                             (10, 5)───(10, 6)

許可されたCZ操作を含むセットを取得する方法は次のとおりです。

qubits = cirq.google.Bristlecone.qubits
allowed = {cirq.CZ(a, b)
           for a in qubits
           for b in qubits
           if a.is_adjacent(b)}

セットには121個の要素があり、CZ(x、y)を取得するかCZ(y、x)を取得するかはランダムであるため、ここではセットの印刷を含めません。

留意すべき追加の制約は、2つのCZを同時に実行できないことです。CirqはBristleconeを対象とした回路を作成する際にこれを考慮します。例えば:

import cirq
device = cirq.google.Bristlecone
a, b, c, d, e = device.col(6)[:5]
circuit = cirq.Circuit.from_ops(
    cirq.CZ(a, b),
    cirq.CZ(c, d),
    cirq.CZ(a, b),
    cirq.CZ(d, e),
    device=device)
print(circuit)
# (0, 6): ───@───────@───
#            │       │
# (1, 6): ───@───────@───
# 
# (2, 6): ───────@───────
#                │
# (3, 6): ───────@───@───
#                    │
# (4, 6): ───────────@───

最初の2つの操作は隣接するCZであるためずらされていましたが、2つ目の操作はそうでないためではありませんでした。


APIの素晴らしい使用!あなたのソリューションは私よりも優れています!:)
Nelimee

Nelimee、あなたの解決策も正しい、そしてより簡潔です。Circは、長方形の配列を45度回転することを選択しましたが、これはやや
ひねりの

1
ああなるほど。彼らはアスキーの描画制限のためにそれをやった
rrtucci

Googleには量子コンピューターがありますか?
user1271772

@rrtucci ASCIIには、対角線(/、\)が含まれます。座標の選択は、量子ビット(a、b)が存在するかどうかの推測など、さまざまなタスクの難易度を最小限に抑えるという方向に沿っていました。これらのタスクの場合、ダイヤモンドの形は境界付近でのみトリッキーですが、チェッカーボードパターンは全体にわたってトリッキーです。
クレイグギ

9

Bristlecone量子チップを提示する元のブログ投稿から、チップの接続マップを以下に示します。

ブリストルコーン接続マップ

各クロスは、最近傍の接続性を持つキュービットを表します。キュービットに左から右、上から下に番号を付けると(英語の読み方と同じように)、0 次に、接続マップは次のようになります。

connectivity_map = {
    i : [i + offset
         for offset in (-6, -5, 5, 6) # values deduced by taking a qubit in the middle of
                                      # chip and computing the offsets between the choosen
                                      # qubit and it's 4 neighbours
         if ((0 <= i+offset < 72)             # the neighbour should be a valid qubit
             and ((i+offset) // 6 != i // 6)) # the neighbour should not be on the same line
    ]
    for i in range(72)
}

警告:上記の式は完全に未検証です。最初のキュービットで動作するように思えますが、私にとっては理にかなっていますが、マップが100%正しいことを確認するのはあなた次第です。

警告2:Googleのブログ投稿では、キュービット間の接続の方向については言及していません。上記の接続マップは、接続が双方向であることを前提としています。


3

PyQuilの現在のバージョンは、RigettiのQuantunプロセッサについて必要な情報を格納する「ISA」オブジェクトを提供しますが、要求どおりにフォーマットされていません。私は貧弱なPythonプログラマーなので、私のPythonでないことを言い訳する必要がありますがdevice_name、pyQuil ISAを使用して辞書の1つに再フォーマットするスニペットを以下に示します。

import pyquil.api as p

device_name = '19Q-Acorn'

isa = p.get_devices(as_dict=True)[device_name].isa
d = {}
for qubit in isa.qubits:
    l = []
    for edge in isa.edges:
        if qubit.id is edge.targets[0]:
            l += [edge.targets[1]]
        if qubit.id is edge.targets[1]:
            l += [edge.targets[0]]
    if not qubit.dead:
        d[qubit.id] = l

print(d)

Googleの場合のように、Rigetti量子プロセッサで通常利用できるネイティブ2キュービットゲートは、CZ(1)はCZ q0 q1同じ意味で双方向(†)でありCZ q1 q0、(2)は好みのいずれかに簡単に変換されるCNOTsターゲットをアダマールゲートで挟む。

† -の物理的な実装CZの超電導アーキテクチャのゲートがありますが、多くの場合、建築記述が含ま見る理由である、手渡しCZ q0 q1ではなくCZ q1 q0。結果(ノイズ効果を無視)がどちらの順序でも同じである場合でも、物理ビットのどの半分にどの量子ビットが関与しているかの略記法です。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.