무작위 회로
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큐비트 게이트 상호작용 집합입니다.
이 함수는 qiskit.circuit.library.standard_gates 의 표준 게이트 세트에서 1Q 및 2Q 게이트를 임의로 선택하여 무작위 회로를 생성합니다. 사용자는 특정 에지에 대한 에지 가중치를 나타내는 숫자 값을 그래프의 에지에 메타데이터로 첨부할 수 있으며, 이러한 에지 가중치는 에지가 선택될 확률로 정규화됩니다. 모든 에지 가중치가 None으로 전달되면 각 큐비트 쌍이 선택될 확률은 1/N 으로 설정되며, 여기서 N 은 전달된 상호작용_그래프의 에지 수, 즉 각 에지가 균일하게 그려집니다. 에지의 가중치가 0으로 설정된 경우, 해당 특정 에지는 출력 회로에 포함되지 않습니다.
제어 큐비트, 목표 큐비트 및 관련 확률의 튜플 목록을 전달하는 것도 상호작용 그래프를 지정하는 방법으로 허용됩니다.
숫자 값이 확률로 존재하지만 일부/모두가 없음이거나 음수인 경우 max_operands=2 을 입력하면 ValueError 이 생성됩니다.
최대_피연산자가 1로 설정된 경우 2Q 연산이 없으므로 가장자리를 처리할 필요가 없으며, 이 경우 함수는 최대_피연산자를 1로 전달할 random_circuit 함수의 회로를 반환합니다.
최대_피연산자를 2로 설정하면 모든 동안 반복에서 2Q 게이트가 무작위로 선택되며, 입력 상호작용 그래프에 존재하는 큐비트 쌍도 큐비트 쌍에 부여된 확률에 따라 무작위로 선택됩니다. 그런 다음 특정 반복 내에서 가능한 한 빨리 모든 큐비트 쌍에서 2Q 카운트에서 min_2q_gate_per_edge 기준에 도달하는 것을 목표로 무작위로 선택된 큐비트 쌍에 2Q 게이트가 적용됩니다. 이제 특정 반복에 대해 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인 경우, 중간 리셋을 삽입합니다. (선택 사항, 기본값: False)
- seed (int) – 임의의 시드 값을 설정합니다. (지정하지 않으면 임의의 시드가 선택됩니다) (선택 사항)
- insert_1q_oper (bool) – 회로에 ‘ 1Q ’ 연산을 삽입합니다. (선택 사항, 기본값: True)
- prob_conditional (float) – 1.0 보다 작은 확률로, 이는 회로 내 조건문의 발생을 제어하는 데 사용됩니다. (선택 사항, 기본값: 0.1 )
- prob_reset (float) – 1.0 보다 작은 확률로, 이는 회로에서 리셋 발생을 제어하는 데 사용됩니다. (선택 사항, 기본값: 0.1 )
리턴
구성된 회로
리턴 유형
올리기
- CircuitError - 최대_연산값이 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) – 무작위 시드/제너레이터를 설정합니다(선택 사항).
리턴
구성된 회로
리턴 유형