QDriftTrotterization
class QDriftTrotterization(num_terms, *, filter_trivial=False, rng=None)
기호: GenericPass[DAGCircuit, DAGCircuit]
qDRIFT 프로토콜을 통해 Evolution 게이트를 트로터화하는 트랜스파일레이션 단계.
이 패스는 각 게이트의 Evolution 정확한 진화 과정 을 무작위 곱 공식으로 대체합니다. 즉 groups, 해밀토니안의 항(또는 할당된 경우)에서 num_terms 표본을 추출하며, 각 항은 계수의 크기에 비례하는 확률로 표본 추출되고, 표본 하나당 하나의 Evolution 게이트를 생성합니다. 샘플링된 각 게이트는 동일한 시간 동안 (절대값이 1이고 부호가 보존되는) 항을 변화시킵니다
여기서 는 표본 추출된 항/그룹의 계수이다. 표본 추출된 진화 과정들의 순서된 곱은 을 정확히 재현하지는 않지만, 표본 추출에 대한 그 기대값은 정확한 진화 과정을 근사하며, 이 오차는 가 커짐에 num_terms 따라 줄어든다. 출력은 무작위 추출 결과에 따라 달라지므로, 고정된 값이 지정되지 rng 않는 한 실행마다 결과가 다릅니다.
qDRIFT 프로토콜은 arXiv:1811.08017 에서 처음 소개되었습니다.
이 트랜스파일러 단계를 초기화하려면 아래에 나열된 인수를 사용할 수 있습니다.
매개변수
- num_terms (int) – qDRIFT 트로터화(Trotterization)를 위해 샘플링할 항의 개수. 이는 입력 게이트당 방출되는
Evolution게이트의 수와 동일하며, 이 값이 클수록 회로 깊이가 증가하는 대가로 트로터화 오차가 줄어듭니다. - filter_trivial (bool) – 로 설정된 경우
True, 샘플링 루프는 점유된 것으로 알려진 모드와 비점유된 것으로 알려진 모드를 결합하지 않는 한 샘플링된 항을 거부합니다. 이 두 집합 중 하나에서만 작용하는 항은 점유 상태를 변경할 수 없으므로, 샘플링된 비트열에 아무런 영향을 미치지 않습니다. 따라서 재추첨을 통해 해당 항에 슬롯num_terms하나를 낭비하는 것을 피할 수 있습니다. 이를 위해서는 트로터화(Trotterization)될Evolution게이트들 앞에InitializeModes또는PrepareSlaterDeterminant게이트가 위치해야 합니다(초기 점유 및 비점유 모드 집합을 초기화하기 위함). 만약 해당 게이트가 없거나, 초기화된 모드 집합이 전적으로 점유 상태이거나 전적으로 비점유 상태인 경우, 해당 게이트에 대한 필터링은 건너뛰고 대신 가 출력됩니다UserWarning. 해당OrbitalRotation게이트 이전이나 그 사이에 위치한 다른Evolution게이트도 이 집합들을 업데이트합니다. 즉, 해당 게이트가 작용하는 모든 모드는 “불확실”한 상태가 됩니다(회전 작용으로 인해 접촉하는 다른 모드와 혼합될 수 있기 때문이며), 이는 허용된 qDRIFT 항에 의해 영향을 받는 모드와 마찬가지입니다.PrepareSlaterDeterminant게이트는 이러한 집합들을InitializeModes, 그 구성OrbitalRotation요소들이 순차적으로 적용될 때와 동일한 방식으로 업데이트합니다. 즉occupation, 먼저 자신의 에 기반하여 점유/비점유 집합에 초기값을 설정한 다음, 회전 작용으로 인해 자신이 작용하는 모든 모드를 즉시 “불확실”로 표시합니다. 정확한 허용 규칙은run()docstring을 참조하십시오. - rng (np.random.Generator | int | None) – 사용할 난수 생성기(RNG). 이 값이 일 경우
int, 내부 난수 생성기(RNG)는 로 초기화됩니다np.random.default_rng(seed=rng).
속성
MAX_SAMPLE_RETRIES
기본값: 1000000
가 run() 포기하고 를 발생시키기 전에 filter_trivial 허용하는 연속된 불합격 샘플의 최대 개수 RuntimeError. 이는 해밀토니안의 나머지 항들이 추적 대상인 점유/비점유 모드 집합들을 연결할 수 없을 때 — 예를 들어, 두 집합이 모두 작고 서로 겹치지 않는 경우(점유 또는 비점유로 표시된 모드가 소수에 불과하고, 아직 “불확실한” 상태가 된 모드가 없는 경우)이며, 나머지 항 중 어느 것의 지원 범위도 두 집합 모두에 닿지 않을 때 — 무한 루프가 발생하는 것을 방지합니다.
num_terms
qDRIFT 의 ‘Trotterization’에 포함될 용어의 수.
filter_trivial
샘플링된 비트열에 영향을 미칠 수 없는 샘플링된 항을 거부할지 여부(해당 filter_trivial 인자에 대한 클래스 문서 문자열 참조).
메소드
run
run(dag)
이 트랜스파일링 단계를 실행합니다.
각 Evolution 노드는 num_terms 샘플링된 단일 항 Evolution 게이트로 대체됩니다(클래스 문서 문자열 참조). Evolution 게이트가 아닌 노드는 변경 없이 출력으로 복사됩니다. 샘플링이 무작위로 이루어지기 때문에, 시드 값이 지정되지 rng 않은 경우 실행마다 결과가 달라집니다.
filter_trivial 이 설정되면, 이 메서드는 회로 내의 Evolution 게이트들 앞에 위치한 임의의 InitializeModes 게이트(들)에서 시드 값을 받아, 점유된 것으로 알려진 모드 집합과 비점유된 것으로 알려진 모드 집합을 추적합니다(예를 들어, 스핀 섹터당 하나씩 병렬로 배치된 여러 개의 해당 게이트에 대한 값은 함께 누적됩니다). 표본 추출된 용어는 그 지원 범위가 두 집합 모두와 교집합을 이루는 경우, 즉 알려진 점유 모드와 알려진 비점유 모드를 결합하는 경우에만 허용됩니다. 그렇지 않은 경우, 해당 용어는 표본 추출된 비트열에 영향을 미칠 수 없으므로 버려지고 다시 표본 추출됩니다. 한 용어가 승인되면, 해당 용어가 지원하는 모든 모드는 “불확실” 상태가 되어 두 집합 모두에 추가되며, 이로 인해 이후 샘플에서 두 역할 중 어느 쪽이든 수행할 수 있게 됩니다. 회로에서 발견되는 모든 OrbitalRotation 게이트는 동일한 방식으로 이 집합들을 업데이트합니다. 즉, 게이트가 작용하는 모든 모드 역시 “불확실”한 상태가 되는데, 이는 회전이 해당 모드를 그 지지 집합 내의 다른 어떤 모드와도 혼합시킬 수 있기 때문입니다. PrepareSlaterDeterminant 게이트는 그 및 InitializeModes OrbitalRotation 성분이 서로 반대 방향으로 적용된 것으로 간주된다. 즉, 먼저 occupation 성분이 점유/비점유 집합을 초기화하고, 그 후 이 게이트가 작용하는 모든 모드는 회전도 함께 수반되므로 즉시 “불확실”로 표시된다.
매개변수
dag (DAGCircuit) – 페르미온 기반 명령어를 사용하는 입력 회로. 해당 DAGOpNode FermionicGate 인스턴스만 지원됩니다 op .
리턴
여전히 페르미온 레지스터에 작용하고 있는 출력 회로.
인상
RuntimeError – 만약 filter_trivial 이고 True , 비사소 항을 찾아내지 못한 채 연속된 MAX_SAMPLE_RETRIES 개의 표본이 거부된다면.
리턴 유형
상속된 메소드
execute
execute(passmanager_ir, state, callback=None)
입력된 Qiskit IR에 대해 최적화 작업을 실행합니다.
매개변수
- passmanager_ir (IR) – 최적화할 Qiskit IR.
- state (PassManagerState) – 패스 관리자 자체에 의한 워크플로우 실행과 관련된 상태.
- callback (Callable[[Task, IR_OUT, PropertySet, float, int], None] | None) – 최적화 작업이 실행될 때마다 호출되는 콜백 함수입니다.
리턴
Qiskit IR 최적화 및 워크플로우 현황.
리턴 유형
튜플 [ IR_OUT, PassManagerState ]
name
update_status
update_status(state, run_state)
워크플로우 상태를 업데이트합니다.
매개변수
- state (PassManagerState) – 업데이트할 매니저 상태를 전달합니다.
- run_state (RunState) – 현재 작업의 완료 상태.
리턴
패스 관리자 상태를 업데이트했습니다.
리턴 유형