ランダム回路
qiskit.circuit.random
概要
この qiskit.circuit.random モジュールは、与えられたゲートの集合からランダムに選択されたゲートで任意の回路を生成するために使用できる関数を提供する。
これらの回路は、既存の量子ハードウェアのベンチマークや、量子回路トランスパイラやソフトウェア基盤の性能評価に利用できる。 以下の関数は、量子ビット数、回路の深さ、結合マップ、ゲートセットなど、様々な特性を尊重したオーダーメイドの量子回路を生成することができる。
任意の回路を生成する
random_circuit
qiskit.circuit.random.random_circuit(num_qubits, depth, max_operands=4, measure=False, conditional=False, reset=False, seed=None, num_operand_distribution=None)
任意のサイズと形式のランダムな回路を生成する。
この関数は、 qiskit.circuit.library.standard_gates の標準ゲートのセットからゲートをランダムに選択してランダムな回路を生成する。 例:
from qiskit.circuit.random import random_circuit
circ = random_circuit(2, 2, measure=True)
circ.draw(output='mpl')
パラメーター
- num_qubits (int) – 量子ワイヤー数
- depth (int) – 作業の階層(すなわち、クリティカルパスの長さ)
- max_operands (int) – 各ゲートの最大クビット演算数(1~4)
- measure (bool) – もしTrueなら、最後にすべての量子ビットを測定する
- conditional (bool) – Trueの場合、中間の測定値と条件文を挿入
- reset (bool) – Trueの場合、中間リセットを挿入
- seed (int) – ランダムシードを設定します(オプション)
- num_operand_distribution (dict) – ランダム回路における1量子ビット、2量子ビット、3量子ビット、……、n量子ビットのゲートの比率を指定するゲートの分布。 要求されたランダム回路のサイズに応じて、指定された比率から多少の乖離が生じる可能性があります。 (オプション)
戻り値
構築回路
戻りの型
上昇する
CircuitError - 無効なオプションが指定された場合
量子ビット結合を尊重した任意の回路の生成
random_circuit_from_graph
qiskit.circuit.random.random_circuit_from_graph(interaction_graph, min_2q_gate_per_edge=1, max_operands=2, measure=False, conditional=False, reset=False, seed=None, insert_1q_oper=True, prob_conditional=0.1, prob_reset=0.1)
引数として渡された相互作用グラフを厳密に尊重する、任意のサイズと形式のランダムな回路を生成する。 相互作用グラフはグラフG=(V, E)であり、Vは回路内の量子ビットであり、Eは回路内の2つの特定の量子ビット間の2量子ビットゲート相互作用の集合である。
この関数は、 qiskit.circuit.library.standard_gates の標準ゲートのセットから 1Q と 2Q のゲートをランダムに選択してランダムな回路を生成する。 このエッジの重みは、エッジが選択される確率に正規化される。 すべてのエッジの重みがNoneとして渡された場合、各クビットペアが選択される確率は 1/N、Nは渡されたinteraction_graphのエッジ数である。 エッジの重みが0に設定されている場合、そのエッジは出力回路に含まれない。
コントロール量子ビット、ターゲット量子ビット、関連する確率のタプルのリストを渡すことも、相互作用グラフを指定する方法として受け入れられる。
数値が確率として存在するが、そのうちのいくつかが「なし」または「負」の場合、 max_operands=2、 ValueError が発生する。
max_operandsが1に設定されている場合、 2Q 操作がないため、エッジをケアする必要がない。この場合、関数はrandom_circuit関数から回路を返し、その回路はmax_operandsを1として渡される。
max_operandsが2に設定されている場合、while-iterationごとに 2Q ゲートがランダムに選択され、入力相互作用グラフに存在するqubit-pairもqubit-pairに付けられた確率に基づいてランダムに選択される。 次に、 2Q ゲートがランダムに選ばれたqubit-pairに適用され、特定の反復内でできるだけ早く、任意のqubit-pair上の 2Q のカウントが min_2q_gate_per_edge 基準に達することを目指す。 2Q、 insert_1q_oper がTrueに設定されていれば、ランダムに選ばれた 1Q ゲートがそれらのアイドル量子ビットに適用される。
例:
from qiskit.circuit.random.utils import random_circuit_from_graph
import rustworkx as rx
pydi_graph = rx.PyDiGraph()
pydi_graph.add_nodes_from(range(7))
cp_map = [(0, 1, 0.18), (1, 2, 0.15), (2, 3, 0.15), (3, 4, 0.22), (4, 5, 0.13), (5, 6, 0.17)]
pydi_graph.add_edges_from(cp_map)
# cp_map can be passed in directly as interaction_graph
qc = random_circuit_from_graph(pydi_graph, min_2q_gate_per_edge=2, seed=12345)
qc.draw(output='mpl')
パラメーター
- interaction_graph (PyGraph | PyDiGraph | List[Tuple[int, int, float]]) – 交流グラフ
- min_2q_gate_per_edge (int) – ランダム回路において、各キュービット対が使用されなければならない最小回数。 (任意、 default:1 )
- max_operands (int) – 各ゲートの最大クビット演算数(1または2であるべき)(オプション、 default:2 )
- measure (bool) – Trueの場合、最後にすべての量子ビットを測定する。 (オプション、デフォルト:False)
- conditional (bool) – Trueの場合、中間値と条件式を挿入します。 (オプション、デフォルト:False)
- reset (bool) – Trueの場合、middleをリセットします。 (オプション、デフォルト:False)
- seed (int) – ランダムシードを設定します。 (指定がない場合は、乱数生成用のシードが選択されます)(任意)
- insert_1q_oper (bool) – 回路に 1Q の演算を追加します。 (オプション、デフォルト: True)
- prob_conditional (float) – 1.0 未満の確率。これは、回路内の条件分岐の発生を制御するために使用されます。 (オプション、デフォルト: 0.1 )
- prob_reset (float) – 1.0 未満の確率で、これは回路におけるリセットの発生を制御するために使用されます。 (オプション、デフォルト: 0.1 )
戻り値
構築回路
戻りの型
上昇する
- CircuitError - max_operandsが1または2でないとき。
- CircuitError - max_operandsが1に設定されているが、 insert_1q_oper をfalseに設定することにより、 1Q 操作が許可されない。
- CircuitError - 相互作用グラフにエッジがなく、回路で可能なのは 1Q ゲートのみだが、 insert_1q_oper はFalseに設定されている。
- CircuitError - 無効なインタラクショングラフオブジェクトが渡された場合。
- ValueError - max_operands=2 が与えられたとき、どの辺も確率が「なし」であるが、すべてが「なし」でないとき、または確率のどれかが負であるとき。
クリフォードゲートを用いた任意の回路の生成
random_clifford_circuit
qiskit.circuit.random.random_clifford_circuit(num_qubits, num_gates, gates='all', seed=None)
擬似ランダムクリフォード回路を生成する。
この関数は、 qiskit.circuit.library.standard_gates の標準ゲートの集合から、選択された量のクリフォードゲートをランダムに選択してクリフォード回路を生成する。 例:
from qiskit.circuit.random import random_clifford_circuit
circ = random_clifford_circuit(num_qubits=2, num_gates=6)
circ.draw(output='mpl')
パラメーター
- num_qubits (int) – 量子ワイヤーの数。
- num_gates (int) – 回路のゲート数。
- gates (list[str]) – ランダムにサンプリングするクリフォードゲート名のオプションリスト。
"all"(デフォルト)の場合、標準ライブラリにあるすべてのクリフォードゲートを使用する。 - seed (int | np.random.Generator) – ランダムシード/ジェネレータを設定します (オプション)。
戻り値
構築回路
戻りの型