자르기
qiskit_addon_sqd.trim
Trim SQD는 대각화 처리하는 것보다 더 많은 구성을 선별하는 스케줄입니다.
diagonalize_fermionic_hamiltonian() 각 서브샘플링된 배치에 대해 대각화 연산을 수행한 후, 가장 좋은 결과를 선택합니다. 반면 Trim SQD는 배치들을 선별 대상 후보로 간주합니다. 각 배치는 대각화 처리된 후, 가중치가 가장 큰 구성 요소들만 남도록 축소되며, 모든 배치에서 살아남은 요소들은 통합되어 함께 대각화 처리됩니다. 반복 계산은 그 병합된 대각화 결과의 에너지를 보고하며, 이 결과의 트리밍된 출력이 다음 반복 계산의 시드로 사용됩니다.
요점은 선별 검사가 대각화보다 비용이 적게 든다는 것입니다. 각 배치는 대략 병합된 부분공간과 같은 크기이므로, 해당 크기의 대각화를 몇 번 더 수행하는 비용만으로도, 허용 가능한 부분공간보다 몇 배 더 큰 후보 집합을 순위를 매길 수 있다.
이는 로 표현되므로 SubspacePolicy, 일정을 기술하며 대각화 과정 자체는 호출자가 sci_solver 전달하는 값에 따라 처리되도록 합니다.
TrimPolicy
class TrimPolicy(*, trim_ratio=0.1, carryover_threshold=0.0001, carryover_ratio=0.1, max_strings_per_trim=None, max_carryover=None)
베이스: object
A는 서로 겹치지 않는 배치들을 선별하는 SubspacePolicy 알고리즘이다.
각 반복 단계에서 모든 배치를 대각화한 뒤, 각 배치에서 가중치가 가장 높은 CI 문자열을 선별하여 이를 병합하고, 병합된 부분공간에 대해 한 번 더 대각화 작업을 수행합니다. 반복 계산은 그 대각화 과정의 에너지를 결과로 반환하며, 이 대각화 과정에서 생성된 트리밍된 CI 문자열이 다음 반복의 시드로 사용됩니다.
의 policy 인자로 인스턴스를 전달합니다 diagonalize_fermionic_hamiltonian():
result = diagonalize_fermionic_hamiltonian(
hcore,
eri,
bit_array,
samples_per_batch=300,
norb=norb,
nelec=nelec,
num_batches=5,
policy=TrimPolicy(trim_ratio=0.1),
)반복 한 번당 드는 비용은 가 아니라 개의 num_batches + 1 대각화이며 num_batches, 병합된 부분공간은 각 배치에서 유지되는 값들로 제한된다.
배치는 하나의 비트스트링 samples_per_batch * num_batches 풀로 구성되며, 이 풀이 각 배치에 분배되므로 어떤 비트스트링도 두 개 이상의 배치에 포함되지 않습니다. 스크리닝은 배치들 중에서 선별하는 과정이므로, 배치들 간의 차이가 클수록 그 유용성이 높아집니다. 서로 독립적으로 추출된 배치들은 상당 부분 중복될 수밖에 없는데, 이로 인해 고유한 후보군의 수가 줄어들게 되고, 여러 배치에 등장하는 비트스트링이 트리밍 과정을 통과할 기회를 여러 번 얻게 됩니다. 이는 이 일정의 작동 방식에서 자연스럽게 도출되는 것이므로, 별도로 설정할 필요가 없습니다.
이로 인해 서로 분리되는 것은 구성들입니다. 이들로부터 도출된 스핀별 CI 문자열 배열은, 두 구성 간에 절반 중 하나가 일치할 수 있기 때문에, 여전히 배치 간에 문자열을 공유할 수 있다.
여기서 부분공간은 스핀-알파와 스핀-베타 CI 문자열 배열의 카르테시안 곱에 의해 생성되므로, 주어진 수의 구성으로 잘라내면 각 스핀 부문에서 그 수에 가까운 문자열이 유지되며, 이들의 곱은 더 커진다. max_strings_per_trim 그리고 각 섹터별로 문자열을 max_carryover 묶으며, 의 max_dim 인수는 다음 반복 과정에서 이를 바탕으로 구축될 부분공간을 diagonalize_fermionic_hamiltonian() 제한합니다.
선별 검사가 결과를 개선하는지 여부는 시스템과 규모에 따라 달라집니다. 이를 적용하지 않은 실행 결과와 비교해 볼 가치가 있는데, 이것이 바로 ‘패싱’이 num_batches=1 의미하는 바입니다. 즉, 단일 배치에 대해 대각화, 트리밍, 다시 대각화 과정을 거치며, 배치 간 선택은 이루어지지 않습니다. 스크리닝은 표본으로 추출된 구성의 수가 한 번에 대각화할 수 있는 수를 훨씬 초과할 때 가장 큰 이점을 제공하며, 처리 가능한 크기의 부분공간만으로도 파동함수의 대부분을 이미 포착할 수 있을 때는 그 이점이 가장 적다.
정책을 초기화합니다.
이 정책은 두 가지 종류의 트림을 수행하며, 이 두 가지 트림은 각각 별도로 제한됩니다. 선별 트리밍은 1차 라운드의 각 배치를 한 번씩 축소하며, 이월 트리밍은 병합된 부분공간을 다음 반복의 시드 역할을 할 크기로 축소합니다. 이 이월 처리에서는 와 동일한 진폭 임계값을 적용한 뒤 StandardPolicy, 이를 통과한 신호의 일부만을 남깁니다.
매개변수
-
trim_ratio (float) – 스핀 섹터별로, 각 배치의 CI 문자열 중 선별 과정을 통과하여 병합된 부분공간으로 진입하는 비율. 다른 스핀 영역에 대한 진폭 제곱의 합을 기준으로 순위를 매김.
-
carryover_threshold (float) – 다음 반복을 시작하는 CI 문자열에 대한 진폭 컷오프 값으로, 에서
StandardPolicy적용하는 방식과 정확히 동일하게, 동일한 기본값을 사용하여 적용됩니다. 이는 유지되는 문자열의 개수가 아니라 버려지는 가중치의 상한을 제한합니다. -
carryover_ratio (float) – 다음 반복을 시작하는
carryover_threshold, 살아남은 문자열의 비율로, 다른 스핀 부문에 대한 진폭 제곱의 합계 순으로 정렬된 것. 컷오프가 먼저 적용되고, 분수는 남은 부분을 좁혀주므로, 이 둘은 서로 다른 것을 제한합니다. 컷오프는 제외된 가중치를, 분수는 개수를 제한합니다. -
max_strings_per_trim (int | None) –
하나의 스크리닝 트림이 스핀 섹터당 유지할 수 있는 CI 문자열의 수에 대한 상한선. 결속되는 부분에서는 유효 비율이 낮아지므로, 트림을 통해 각 구역의 현을
min(ceil(trim_ratio * len(strings)), max_strings_per_trim)일정하게 유지합니다. 기본값은 이며None, 가trim_ratio결정하도록 합니다.비율이 의도한 것보다 더 많이 유지될 때 이 옵션을 선택하세요: 두 스핀 섹터를 하나의 목록으로
symmetrize_spin병합하여 각 배치에서 제공하는 양을 대략 두 배로 늘려주며, ‘large’ 옵션도 마찬가지입니다samples_per_batch.이는 부분공간에 대한 상한이 아닙니다. 이 작업은 배치당 한 번 적용되며, 각 기여 결과가 병합되므로 병합된 부분공간은 섹터당 최대 배
num_batches많은 문자열을 담을 수 있습니다. 실제로는 배치들 간에 공통점이 거의 없기 때문에 실제 용량은 그 수치에 근접합니다. 의max_dim인수는 부분공간을 제한하는 것입니다diagonalize_fermionic_hamiltonian(). -
max_carryover (int | None) – 스핀 섹터별로 다음 반복을 시작하는 CI 문자열의 수에 대한 상한을, 살아남은 모든 항목의 한계 가중치 순위에
carryover_ratio와 함께 적용한다carryover_threshold. 이와 달리, 이는max_strings_per_trim병합된 부분공간에 대한 단일 트림을 제어하므로, 이월값 전체를 제한합니다.
두 상한 모두 carryover, 를 통해 자체 이월값을 선택하는 솔버에 제약을 가하지 않으며, 이 선택 결과는 주어진 대로 사용된다.
인상
ValueError – 비율이 범위를 벗어났거나 (0, 1], 상한값이 1보다 작습니다.
매개변수
- trim_ratio (float)
- carryover_threshold (float)
- carryover_ratio (float)
- max_strings_per_trim (int | None)
- max_carryover (int | None)
prepare_subspaces
prepare_subspaces(request)
하나의 비트스트링 집합을 여러 배치에 나누어, 서로 겹치지 않도록 하십시오.
매개변수
request (SubspaceRequest)
리턴 유형
refine
refine(results, round_index)
배치에서 보존된 값들을 병합한 다음, 대각화한 후 중단합니다.
선별 라운드의 결과는 가중치가 가장 높은 CI 문자열로 축소된 후 단일 부분 공간으로 병합되며, 루프는 이를 제2 라운드에서 대각화합니다.
매개변수
리턴 유형
select_carryover
select_carryover(result, *, symmetrize_spin=False)
병합 대각화 과정에서 가중치가 가장 높은 CI 문자열을 이월합니다.
진폭 컷오프는 에서 StandardPolicy 적용하는 방식과 정확히 동일하게, 동일한 기본값을 사용하여 적용되며, 와 carryover_ratio 는 max_carryover 컷오프만으로는 처리되지 않는 카운트 값을 제한합니다. 의 처리 방식도 마찬가지입니다 symmetrize_spin . 두 섹터를 병합하기 전에 함께 정렬합니다.
매개변수
리턴 유형