문제 생성기
qiskit_addon_utils.problem_generators
문제 생성을 위한 유틸리티 방법.
generate_xyz_hamiltonian
generate_xyz_hamiltonian(coupling, *, coupling_constants=(1.0, 1.0, 1.0), ext_magnetic_field=(0.0, 0.0, 0.0), pauli_order_strategy=PauliOrderStrategy.ColorThenInteraction, coloring=None)
양자 XYZ 유형 모델을 나타내는 연결 인식 큐비트 연산자를 생성합니다.
이 함수는 다음과 같은 해밀턴을 구현합니다:
여기서 G(V,E)는 제공된 coupling 지도의 그래프입니다.
이 방정식의 합계에 계수가 포함되는 경우가 많습니다. 이 요소는 내부적으로 적용되지 않으므로 coupling_constants 및 ext_magnetic_field 입력에 고려해야 합니다.
>>> from qiskit.transpiler import CouplingMap
>>> from qiskit_addon_utils.problem_generators import generate_xyz_hamiltonian
>>> coupling_map = CouplingMap.from_line(10)
>>> hamiltonian = generate_xyz_hamiltonian(
... coupling_map,
... coupling_constants=(0.4, 0.4, 0.0),
... ext_magnetic_field=(0.0, 0.0, 0.6),
... )
>>> print(hamiltonian)
SparsePauliOp(['IIIIIIIXXI', 'IIIIIIIYYI', 'IIIIIXXIII', 'IIIIIYYIII',
'IIIXXIIIII', 'IIIYYIIIII', 'IXXIIIIIII', 'IYYIIIIIII',
'IIIIIIIIXX', 'IIIIIIIIYY', 'IIIIIIXXII', 'IIIIIIYYII',
'IIIIXXIIII', 'IIIIYYIIII', 'IIXXIIIIII', 'IIYYIIIIII',
'XXIIIIIIII', 'YYIIIIIIII', 'IIIIIIIIIZ', 'IIIIIIIIZI',
'IIIIIIIZII', 'IIIIIIZIII', 'IIIIIZIIII', 'IIIIZIIIII',
'IIIZIIIIII', 'IIZIIIIIII', 'IZIIIIIIII', 'ZIIIIIIIII'],
coeffs=[0.4+0.j, 0.4+0.j, 0.4+0.j, 0.4+0.j, 0.4+0.j, 0.4+0.j, 0.4+0.j, 0.4+0.j,
0.4+0.j, 0.4+0.j, 0.4+0.j, 0.4+0.j, 0.4+0.j, 0.4+0.j, 0.4+0.j, 0.4+0.j,
0.4+0.j, 0.4+0.j, 0.6+0.j, 0.6+0.j, 0.6+0.j, 0.6+0.j, 0.6+0.j, 0.6+0.j,
0.6+0.j, 0.6+0.j, 0.6+0.j, 0.6+0.j])매개변수
- coupling (CouplingMap |PyGraph |PyDiGraph) – 해밀턴을 매핑할 큐비트 하위 그래프입니다. 그래프 에지의 방향성은 무시되며, 연산자를 생성하는 동안 평행 에지는 단일 에지로 처리됩니다.
- coupling_constants (Sequence[float]) – 각 데카르트 축의 실수값 결합 상수 입니다.
- ext_magnetic_field (Sequence[float]) – 계수 는 각 데카르트 축을 따라 자기장을 나타냅니다.
- pauli_order_strategy (PauliOrderStrategy) – 폴리 용어가 생성될 반복 전략을 나타냅니다. 참조
PauliOrderStrategy를 참조하세요. - coloring (dict[tuple[int, int], int] | None) – 해밀턴 용어를 정렬하는 데 사용되는 그래프 색상을 인코딩하는 선택적 사전입니다. 이 사전은 에지 레이블(정수 쌍 형태)을 색상 값(단순 정수)에 매핑합니다. 해밀턴 상호작용 조건은 색상 값을 증가시킴으로써 추가됩니다. 각 색상 내에서 가장자리가 정렬되어 물리적으로 아무것도 변경되지 않지만 결과를 더 쉽게 읽을 수 있습니다.
리턴
양자 XYZ형 모델을 설명하는 큐비트 연산자입니다. 연산자의 i-번째 큐비트는 커플링 맵의 i 인덱스에 있는 노드에 해당합니다.
레이즈
- ValueError - 연결 상수는 부동 소수점 값의 length-3 시퀀스로 지정해야 합니다.
- ValueError - 외부 자기장은 부동 소수점 값의 length-3 시퀀스로 지정해야 합니다.
리턴 유형
generate_time_evolution_circuit
generate_time_evolution_circuit(operator, *, synthesis=None, time=1.0)
작업자의 시간 변화를 모델링합니다.
>>> from qiskit.quantum_info import SparsePauliOp
>>> from qiskit.synthesis import SuzukiTrotter
>>> from qiskit.transpiler import CouplingMap
>>> from qiskit_addon_utils.problem_generators import (
... PauliOrderStrategy,
... generate_xyz_hamiltonian,
... generate_time_evolution_circuit,
... )>>> coupling_map = CouplingMap.from_line(6)
>>> hamiltonian = generate_xyz_hamiltonian(
... coupling_map,
... coupling_constants=(0.4, 0.4, 0.0),
... ext_magnetic_field=(0.0, 0.0, 0.6),
... pauli_order_strategy=PauliOrderStrategy.InteractionThenColorZigZag,
... )>>> circ = generate_time_evolution_circuit(
... hamiltonian, synthesis=SuzukiTrotter(order=2, reps=2), time=2.0
... )
>>> _ = circ.draw("mpl", fold=-1)
매개변수
- operator (SparsePauliOp) – 시간 진화를 모델링할 연산자입니다.
- synthesis (EvolutionSynthesis | None) – 합성 전략.
None이면 기본 합성은 한 번 반복되는 거짓말 트로터 제품 공식입니다. - time (float) – 진화 시간입니다.
리턴
A QuantumCircuit 시간 진화 연산자를 구현합니다.
리턴 유형
PauliOrderStrategy
class PauliOrderStrategy(value)
베이스: Enum
다양한 폴리 순서의 열거입니다.
색상이 지정된 가장자리 집합에 해밀턴을 구성할 때 생성된 폴리 항을 다양한 방식으로 정렬할 수 있습니다. 해밀턴의 이러한 용어 순서는 시간이 진화하는 동안 유지되므로 결과물인 양자 회로에 직접적인 영향을 미칩니다.
ColorThenInteraction
기본값: 1
이 전략은 먼저 모든 가장자리(색상 값으로 정렬)를 반복한 다음 상호 작용( X, Y, Z 로 정렬)을 반복합니다.
InteractionThenColor
기본값: 2
이 전략은 ColorThenInteraction 과 반대되는 전략입니다. 먼저 상호 작용( X, Y, Z 로 정렬)을 반복한 다음 모든 가장자리(색상 값으로 정렬)를 반복합니다.
InteractionThenColorZigZag
기본값: 3
이 전략은 InteractionThenColor 전략과 유사합니다. 그러나 한 인터랙션에서 다음 인터랙션으로 이동할 때 색상 값을 증가 및 감소시켜 가장자리를 반복하는 방식을 번갈아 사용합니다. 예를 들어 X 및 Y 상호 작용만 포함되고 세 가지 색상 값({1, 2, 3})이 사용되는 경우 다음과 같은 순서가 됩니다: ["X on 1", "X on 2", "X on 3", "Y on 3", "Y on 2", "Y on 1"].