Skip to main content
IBM Quantum Platform

QDriftTrotterization

class QDriftTrotterization(num_terms, *, filter_trivial=False, rng=None)

기호: GenericPass[DAGCircuit, DAGCircuit]

qDRIFT 프로토콜을 통해 Evolution 게이트를 트로터화하는 트랜스파일레이션 단계.

이 패스는 각 게이트의 Evolution 정확한 진화 과정 eitHe^{-i t H} 을 무작위 곱 공식으로 대체합니다. 즉 groups, 해밀토니안의 항(또는 할당된 경우)에서 num_terms 표본을 추출하며, 각 항은 계수의 크기에 비례하는 확률로 표본 추출되고, 표본 하나당 하나의 Evolution 게이트를 생성합니다. 샘플링된 각 게이트는 동일한 시간 동안 (절대값이 1이고 부호가 보존되는) 항을 변화시킵니다

δ=λtnum_terms,λ=jcj,\delta = \frac{\lambda t}{\texttt{num\_terms}}, \qquad \lambda = \sum_j |c_j|,

여기서 cjc_j 는 표본 추출된 항/그룹의 계수이다. 표본 추출된 진화 과정들의 순서된 곱은 eitHe^{-i t H} 을 정확히 재현하지는 않지만, 표본 추출에 대한 그 기대값은 정확한 진화 과정을 근사하며, 이 오차는 가 커짐에 num_terms 따라 줄어든다. 출력은 무작위 추출 결과에 따라 달라지므로, 고정된 값이 지정되지 rng 않는 한 실행마다 결과가 다릅니다.

힌트

직업-수 기저에서 대각선인 항(즉, 수 연산자의 곱)은 샘플링된 비트열에 아무런 영향을 미치지 않으므로, 이를 포함하면 샘플링 오버헤드만 증가시킬 뿐이다. - Evolution 게이트를 구성하기 전에 해밀토니안에서 filter_diagonal_terms() 이를 걸러내야 하며, 를 호출할 때마다 걸러내서는 안 됩니다 run(). 이 단계는 트랜스파일된 회로 하나당 한 번만 실행되므로, 상류 단계에서 필터링을 수행하면 동일한 해밀토니안에서 생성된 모든 회로에 대해 동일한 필터링 작업을 반복하는 것을 피할 수 있습니다.

관련 참조

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 개의 표본이 거부된다면.

리턴 유형

DAGCircuit

상속된 메소드

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

name()

고개 이름.

리턴 유형

str

update_status

update_status(state, run_state)

워크플로우 상태를 업데이트합니다.

매개변수

  • state (PassManagerState) – 업데이트할 매니저 상태를 전달합니다.
  • run_state (RunState) – 현재 작업의 완료 상태.

리턴

패스 관리자 상태를 업데이트했습니다.

리턴 유형

PassManagerState

이 페이지가 도움이 되었습니까?
GitHub에서 버그, 오타를 보고하거나 컨텐츠를 요청하십시오.