Fermion
qiskit_addon_sqd.fermion
페르미온 시스템 연구를 위한 기능입니다.
SCIState
class SCIState(amplitudes, ci_strs_a, ci_strs_b, norb, nelec)
베이스: object
양자 상태를 설명하는 진폭과 결정 인자입니다.
매개변수
amplitudes
유형: ndarray
len(ci_strs_a) 및 = len(ci_strs_b)인 배열. amplitudes[i][j] 는 결정자 쌍(ci_strs_a[i], ci_strs_b[j])의 진폭입니다.
각 진폭의 부호는 PySCF 가 가정하는 관례에 따르며, 이 관례에 따르면 행렬식은 생성 연산자를 정렬할 때 모든 스핀-알파 연산자를 스핀-베타 연산자보다 먼저 배치합니다. rdm() 그리고 진폭 값을 PySCF, 로 spin_square() 전달하므로, 진폭 값의 순서를 다르게 정렬하는 솔버는 이 필드를 채우기 전에 순서 재정렬 단계를 수행해야 합니다. 그렇지 않으면 해당 메서드들은 아무런 오류 메시지 없이 잘못된 값을 반환하지만, 에너지와 진폭의 크기는 여전히 올바르게 보입니다.
ci_strs_a
유형: ndarray
알파 결정 요인.
ci_strs_b
유형: ndarray
베타 결정 요인.
load
nelec
norb
유형: int
공간 궤도의 수입니다.
orbital_occupancies
rdm
save
spin_square
SCIResult
class SCIResult(energy, sci_state, orbital_occupancies, rdm1=None, rdm2=None, carryover=None)
베이스: object
SCI 계산 결과.
매개변수
- energy (float)
- sci_state (SCIState | None)
- orbital_occupancies (tuple[ndarray, ndarray])
- rdm1 (ndarray | None)
- rdm2 (ndarray | None)
- carryover (tuple[ndarray, ndarray] | None)
carryover
유형: tuple[ndarray, ndarray] | None
기본값: None
솔버가 선택한, 다음 반복 단계로 이월될 CI 문자열들.
스핀-알파 및 스핀-베타 CI 문자열로 구성된 두 개의 배열로 (strings_a, strings_b) , 각각은 한계 가중치가 내림차순으로 정렬되어 있습니다. 이는 부분공간과 같은 형태인데, 바로 그 부분공간을 구성하는 데 끈이 사용되기 때문이다.
이 옵션은 솔버가 행렬식을 직접 순위 매기고 선택할 때 설정해야 하며, 자체 부분공간을 정리하는 고유값 솔버가 이를 수행하기에 적합합니다. 일 때 None, 는 평소와 마찬가지로 carryover_threshold 인수를 사용하여 sci_state 에서 이월값을 diagonalize_fermionic_hamiltonian() 선택합니다.
다음 부분공간은 두 배열의 카르테시안 곱 에 의해 생성되므로, 일반적으로 순위가 매겨진 구성의 집합보다 더 크다는 점에 유의하십시오. 부분공간에서 가중치가 가장 높은 150개의 구성을 선정하는 데는 일반적으로 150개에 가까운 서로 다른 스핀-알파 문자열과 150개에 가까운 서로 다른 스핀-베타 문자열이 필요하며, 이들의 곱은 대략 22,500개의 구성을 포괄합니다. 의 max_dim 인수를 사용하여 결과의 상한을 diagonalize_fermionic_hamiltonian() 구하십시오.
energy
유형: float
SCI 에너지.
orbital_occupancies
rdm1
rdm2
sci_state
SubspacePolicy
class SubspacePolicy(*args, **kwargs)
베이스: Protocol
한 번의 구성 복구 반복에 대한 일정.
정책은 반복 과정이 주어진 대각화 작업을 어떻게 활용할지 결정합니다. 즉, 샘플링된 구성이 어떻게 부분공간으로 변환되는지, 한 차례의 대각화 결과가 다음 단계로 정제되는지, 반복 과정이 어떤 결과를 보고하는지, 그리고 다음 반복 과정의 시드로 어떤 CI 문자열이 사용되는지를 결정합니다.
의 policy 인수로 구현체를 전달합니다 diagonalize_fermionic_hamiltonian(). 기본값인, StandardPolicy는 하위 표본 추출된 배치들을 대각선화하고 가장 좋은 결과를 유지합니다. TrimPolicy 배치를 선별하고, 선별된 생존자들을 병합한 후 대각화합니다.
정책은 부분공간에 어떤 문자열이 포함될지를 결정합니다. 부분 공간의 형상에 대한 제약 조건은 호출자에게 속하므로, 루프는 정책이 반환하는 모든 결과에 이를 적용합니다. 즉, 요청된 구성들은 모든 부분 공간에 포함되며 include_configurations , 요청된 경우 스핀 대칭화가 적용되고, 각 스핀 섹터는 로 잘립니다 max_dim. 정책은 이를 수신하지도 않으며, 이를 재정의할 수도 없습니다.
정책은 데이터만을 생성합니다. 이 함수는 절대 값을 반환하지 않으며 sci_solver , 자체적으로 대각화 작업을 수행하지도 않습니다. 는 대각화할 부분공간을 반환하며 refine() , 루프에서 이 부분공간들을 사용하여 솔버를 호출합니다.
이는 다중 프로세스 실행 환경에서 중요한 사항입니다. 모든 프로세스가 함께 진입하는 와 달리 sci_solver, 정책은 제어 프로세스에서만 실행되며 그 반환 값은 다른 프로세스들에 브로드캐스트되므로, 해당 반환 값은 피클링 가능해야 합니다. 따라서 정책은 qiskit_addon_sqd.processes.broadcast(), barrier(), 또는 그 밖의 어떤 집합 연산도 호출해서는 안 됩니다. 다른 프로세스들이 이를 실행하고 있지 않기 때문에, 호출이 발생하면 프로그램이 멈춰 버릴 것입니다.
prepare_subspaces
prepare_subspaces(request)
먼저 대각화할 부분공간을 구성하십시오.
매개변수
request (SubspaceRequest) – 생성할 비트 문자열, 이월 문자열 및 배치 크기.
리턴
각 부분공간마다 한 (strings_a, strings_b) 쌍씩이며, 각 쌍은 두 배열의 직교 곱을 생성합니다.
리턴 유형
refine
refine(results, round_index)
해당 라운드의 결과가 다음 라운드로 이어지는지 여부를 결정하십시오.
매개변수
- results (list[SCIResult]) – 방금 종료된 라운드의 결과로, 각 부분공간당 하나씩입니다.
- round_index (int) – 해당 라운드의 인덱스(0부터 시작).
리턴
다음 라운드를 진행하거나, None 중지하고 이번 라운드의 결과를 보고하려면 여기를 클릭하세요. 매 호출 시 부분 공간을 반환하면, 라운드 제한에 도달하면 한 번씩 ValueError 발생합니다.
리턴 유형
select_carryover
select_carryover(result, *, symmetrize_spin=False)
다음 반복에 사용될 시드 값이 될 CI 문자열을 선택하십시오.
매개변수
- result (SCIResult) – 가 선택한 결과
select_result(). - symmetrize_spin (bool) – 두 스핀 섹터가 하나의 문자열 목록을 공유하는지 여부. 의 경우와 마찬가지로
SubspaceRequest.symmetrize_spin, 이 매개변수는 순위를 매기기 전에 섹터들이 병합되기 때문에 전달되며, 따라서 순위를 매긴 후에는 적용할 수 없습니다.
리턴
스핀-알파 및 스핀-베타 문자열을 가중치 내림차순으로 나열한 것으로, 이는 로 잘라낼 때 max_dim 유지되는 순서이기 때문이다.
리턴 유형
select_result
select_result(results)
반복이 보고하는 결과 중에서, 해당 반복의 마지막 라운드에서 나온 결과 중 하나를 선택하십시오.
선택된 결과는 수렴 여부를 판단하는 기준이 되며, 그 에너지가 관측된 값 중 가장 낮을 경우 반환되는 결과가 되고, 이를 select_carryover() 수신하게 됩니다.
매개변수
리턴 유형
SubspaceRequest
class SubspaceRequest(bitstrings, probabilities, carryover_strings_a, carryover_strings_b, norb, nelec, samples_per_batch, num_batches, rng, iteration, symmetrize_spin)
베이스: object
a는 반복 과정의 부분공간을 SubspacePolicy 구성하는 입력값입니다.
매개변수
- bitstrings (ndarray)
- probabilities (ndarray)
- carryover_strings_a (ndarray)
- carryover_strings_b (ndarray)
- norb (int)
- nelec (tuple[int, int])
- samples_per_batch (int)
- num_batches (int)
- rng (Generator)
- iteration (int)
- symmetrize_spin (bool)
bitstrings
유형: ndarray
선택되거나 복구된 비트스트링은 행마다 하나의 비트스트링이 bool 포함되고, 알파 부분이 오른쪽에 연결된 2D 배열의 형태로 다음과 같이 표현됩니다: [b_N, ..., b_0, a_N, ..., a_0].
carryover_strings_a
유형: ndarray
이전 반복 단계에서 이어받은 스핀-알파 CI 문자열을, 가중치 내림차순으로 나열한 것입니다. 첫 번째 반복에서는 비어 있습니다.
carryover_strings_b
유형: ndarray
이전 반복 단계에서 이어받은 스핀-베타 CI 문자열. 스핀 대칭화가 요구되었을 carryover_strings_a 때와 같다.
iteration
유형: int
현재 구성 복구 반복의 인덱스로, 0부터 시작하여 계산됩니다.
nelec
norb
유형: int
공간 궤도의 수입니다.
num_batches
유형: int
빌드할 배치 수.
probabilities
유형: ndarray
각 비트열에 대한 확률.
rng
유형: Generator
루프의 난수 생성기.
다른 생성기를 새로 만들지 말고 이 생성기에서 값을 추출하되, 시드 값을 다시 설정하지 마십시오. 의 seed 인수가 실행 결과를 재현 가능하게 diagonalize_fermionic_hamiltonian() 하며, 이 생성기만을 제어합니다.
samples_per_batch
유형: int
각 배치에 포함될 비트스트링의 개수.
symmetrize_spin
유형: bool
두 스핀 섹터가 하나의 CI 문자열 목록을 공유하는지 여부.
이는 부분 공간의 형태에 대한 제약 조건으로, 루프는 정책이 반환하는 모든 결과에 대해 이 제약 조건을 적용합니다. 이 부분이 언급된 이유는 섹터 병합이 나중에 적용할 수 있는 작업이 아니기 때문입니다. 병합은 문자열의 순위가 매겨지기 전에 이루어지므로, 두 섹터에 대한 순위가 한 번에 결정되며, 별도로 순위가 매겨진 두 목록을 연결하면 순서가 달라지게 됩니다. 따라서 문자열을 순서대로 정렬하는 정책은 이 점을 고려해야 합니다. batch_to_ci_strings() 같은 이유로 그렇게 받아들인다.
StandardPolicy
class StandardPolicy(*, carryover_threshold=0.0001)
베이스: object
기본 설정 SubspacePolicy: 배치 데이터를 대각화한 후, 가장 좋은 결과를 선택합니다.
각 반복 단계에서 개의 samples_per_batch 비트열 num_batches 배치에 대해 부분 표본 추출을 수행하고, 각각을 대각선화한 뒤 그중에서 에너지가 가장 낮은 값을 보고합니다. 그 결과 중에서 진폭이 를 초과하는 성분들이 다음 반복의 초기값으로 carryover_threshold 사용됩니다.
이는 가 지정되지 policy 않았을 diagonalize_fermionic_hamiltonian() 때의 동작이며, 인스턴스를 명시적으로 전달하는 것은 이를 생략하는 것과 동일합니다.
정책을 초기화합니다.
매개변수
carryover_threshold (float) – CI 가중치가 큰 비트스트링을 이월하기 위한 임계값. 이 값보다 진폭이 큰 CI 문자열은 그대로 유지됩니다.
prepare_subspaces
prepare_subspaces(request)
배치를 각각 독립적으로 부분 표본 추출하고, 각 배치로부터 부분 공간을 구성한다.
매개변수
request (SubspaceRequest)
리턴 유형
refine
refine(results, round_index)
모든 배치를 대각선화한 첫 번째 라운드 후에 중단하십시오.
이 스케줄은 두 번째 라운드를 요청하지 않기 때문에 해당 인수는 사용되지 않으며, 이는 인터페이스의 SubspacePolicy 일부입니다.
매개변수
리턴 유형
select_carryover
select_result
batch_to_ci_strings
batch_to_ci_strings(batch, norb, carryover_strings_a=None, carryover_strings_b=None, *, symmetrize_spin=False)
일괄 처리된 비트 문자열을 스핀별 CI 문자열 배열 한 쌍으로 변환합니다.
각 스핀 섹터의 문자열은 샘플링된 횟수 순서대로 내림차순으로 반환되며, 이월된 문자열이 있는 경우 해당 문자열이 그 앞에 위치합니다. 그 순서는 나중에 최대 차원으로 잘라낼 때 유지되는 것이므로, 중요합니다.
이 단계는 부분공간 정책이 부분 표본 추출된 비트열을 부분공간으로 변환하기 위해 필요한 단계이며, 정책이 이를 다시 구현할 필요가 없도록 공개되어 있습니다.
매개변수
- batch (ndarray) –
bool비트스트링으로 구성된 2D 배열로, 각 행마다 하나의 비트스트링이 포함되며, 알파 부분이 다음과 같이 오른쪽에 연결되어 있습니다:[b_N, ..., b_0, a_N, ..., a_0]. - norb (int) – 공간 궤도의 개수.
- carryover_strings_a (ndarray | None) – 샘플링된 문자열 앞에 배치할 스핀-알파 CI 문자열로, 유지해야 할 순서대로 나열합니다. 기본값은 none입니다.
- carryover_strings_b (ndarray | None) – 스핀 베타도 마찬가지입니다. 이 설정되어 있을
symmetrize_spin경우, 두 섹터에 동일한 문자열이 저장되어 있으므로 이 설정은 무시됩니다. - symmetrize_spin (bool) – 두 스핀 섹터를 하나의 문자열 목록으로 병합할지 여부. 병합된 목록은 두 섹터 모두에 사용됩니다. 병합은 문자열의 순위가 매겨지기 전에 이루어지므로, 순위 지정은 각 섹터 내에서가 아니라 두 섹터 전체에 대해 한 번에 이루어집니다.
리턴
스핀-알파 및 스핀-베타 CI 문자열 배열. symmetrize_spin 가 설정되면, 이 둘은 동일한 배열이 됩니다.
리턴 유형
bitstring_matrix_to_ci_strs
bitstring_matrix_to_ci_strs(bitstring_matrix, open_shell=False)
bitstring_matrix 의 비트 문자열(행)을 행렬식의 정수 표현으로 변환합니다.
이 함수는 bitstring_matrix 의 각 비트 문자열을 반으로 분리하여 정수 표현으로 변환한 다음 마지막으로 각각의 (스핀업 또는 스핀다운) 목록에 추가합니다. 이러한 목록은 이 함수에서 정렬되어 출력됩니다.
매개변수
- bitstring_matrix (ndarray) – 각 행이 단일 비트 문자열을 나타내는 비트 값의
bool표현의 2D 배열입니다 - open_shell (bool) – 비트열의 왼쪽 절반과 오른쪽 절반에서 나온 고유한 구성을 별도로 유지할지 여부를 지정하는 플래그입니다. 이 경우
False, 비트열의 좌측 절반과 우측 절반에 해당하는 구성들이 하나의 고유한 구성 집합으로 통합됩니다. 해당 결합된 세트는 왼쪽 및 오른쪽 비트열 모두에 대해 반환됩니다.
리턴
비트 문자열의 오른쪽(스핀업) 및 왼쪽(스핀다운) 절반을 각각 나타내는 결정자 목록의 length-2 튜플입니다.
리턴 유형
diagonalize_fermionic_hamiltonian
diagonalize_fermionic_hamiltonian(one_body_tensor, two_body_tensor, bit_array, samples_per_batch, norb, nelec, *, num_batches=1, energy_tol=1e-08, occupancies_tol=1e-05, max_iterations=100, sci_solver=None, policy=None, symmetrize_spin=False, max_dim=None, include_configurations=None, initial_occupancies=None, carryover_threshold=None, callback=None, seed=None)
샘플 기반 양자 대각선화(SQD) 알고리즘을 실행합니다.
매개변수
-
one_body_tensor (ndarray) – 해밀턴의 일체 텐서입니다.
-
two_body_tensor (ndarray) – 해밀턴의 2체 텐서입니다.
-
bit_array (BitArray |ndarray) – 샘플링된 비트스트링의 배열로, Qiskit
BitArray또는 2차원 NumPy 부울 배열 형태로 제공됩니다. 각 비트 문자열은 알파 부분과 베타 부분이 함께 연결되어야 하며, 알파 부분은 다음과 같이 오른쪽에 연결되어야 합니다:[b_N, ..., b_0, a_N, ..., a_0]. -
samples_per_batch (int) – 각 하위 표본 추출된 비트스트링 배치에 포함될 비트스트링의 개수.
-
norb (int) – 공간 궤도의 개수.
-
num_batches (int) – 각 구성 복원 반복에서 하위 표본 추출할 배치 수. 이 논증은 대각화 부분공간의 차원을 간접적으로 결정한다. 값이 클수록 부분 공간의 차원이 더 커집니다.
-
energy_tol (float) – 에너지 수렴을 위한 수치적 허용오차. 반복 계산 간 에너지 변화가 이 값보다 작고, 점유율도 수렴한 경우(
argumentoccupancies_tol참조), 구성 복원 루프가 종료됩니다. -
occupancies_tol (float) – 평균 궤도 점유율의 수렴을 위한 수치적 허용 오차. 반복 계산 간 궤도의 평균 점유율의 절대값에 대한 최대 변화량이 이 값보다 작고, 에너지가 수렴한 경우(
argumentenergy_tol참조), 구성 복구 루프가 종료됩니다. -
max_iterations (int) – 구성 복구 반복 횟수의 상한값.
-
sci_solver (Callable[[list[tuple[ndarray, ndarray]], ndarray, ndarray, int, tuple[int, int]], list[SCIResult]] | None) –
선택한 구성 인터랙션 솔버 기능.
고려사항:
- 대각화 작업을 수행할 부분 공간의 기저를 이루는, 스핀-알파 CI 문자열 배열과 스핀-베타 CI 문자열 배열의 쌍 (strings_a, strings_b) 목록. 반복 연산의 모든 부분공간은 단일 호출로 전달되므로, 솔버는 이를 차례대로 처리하는 대신 동시에 대각화할 수 있습니다.
- 해밀턴의 일체 텐서.
- 해밀턴의 2체 텐서.
- 공간 궤도의 수입니다.
- 알파와 베타 전자의 수를 나타내는 쌍(n_알파, n_베타)입니다.
출력: 전달된 각 부분공간에 대해 하나씩 포함된 목록
SCIResult. 이 함수가 반환하는 모든 고유벡터는 에 명시된 부호 규칙을 따라야 합니다SCIState.amplitudes.자신만의 이월 CI 문자열을 선택하는 솔버는 이를 로 반환할 수 있으며
SCIResult.carryover, 이 경우 해당 문자열은 이 함수가 를 사용하여 선택할 문자열 대신 사용됩니다carryover_threshold. 이러한 해법기는 를 로SCIResult.sci_state남겨둘 수 있으므로None, 고유벡터를 반환할 필요가 전혀 없습니다.TrimPolicy둘 다 합니다.해법기는 주어진 부분공간 수보다 적은 수의 결과를 반환할 수도 있는데, 이는 부분공간을 병합하는 해법기가 해당 부분공간들에 대해 수행한 단일 대각화 결과를 보고하는 방식입니다.
이 함수가 여러 프로세스에서 동시에 호출될 때 적용되는 의미론에 대해서는 아래의 참고 사항을 참조하십시오.
-
policy (SubspacePolicy | None) –
각 반복 단계의 일정: 표본 추출된 구성들이 어떻게 부분공간이 되는지, 한 번의 대각화 과정이 다음 단계로 이어지는지, 반복 과정이 어떤 결과를 보고하는지, 그리고 어떤 CI 문자열이 다음 반복의 시드로 사용되는지.
SubspacePolicy의 내용을 참조하십시오.기본값은 이며
StandardPolicy, 이는 부분 표본 추출된 배치들을 대각화한 뒤 최상의 결과를 유지합니다.TrimPolicy대신 배치들을 선별하고, 통합된 생존자 집합을 대각화합니다.정책은 부분공간을 반환하며, 이 함수는 해당 부분공간을 사용하여
sci_solver호출됩니다. 이 두 가지는 서로 독립적이므로, 어떤 정책이든 어떤 솔버와도 호환됩니다. -
symmetrize_spin (bool) – 스핀 알파와 스핀 베타 CI 문자열을 항상 하나의 리스트로 병합할지 여부. 이를 통해 스핀 알파와 스핀 베타의 교환에 대해 대각화 부분공간이 불변이 되도록 한다. 이를 위해서는 알파 전자와 베타 전자의 개수가 같아야 할 뿐만 아니라, 두 스핀 부문이
max_dim공유하는 단일 스핀이 있어야 하며, 그렇지 않을 경우 오류가 발생합니다. 이 불변성은 반환된 상태가 짝수 및 홀수 총 스핀 성분을 혼합하지 않도록 보장하지만, 해당 상태가 총 스핀 연산자 의 고유벡터임을 보장하지는 않는다. 두 목록을 병합하면 각 스핀 부문의 CI 문자열 수가 최대 2배까지 증가하므로, 대각화 부분공간의 차원은 최대 4배까지 늘어날 수 있다(목록이 중복되는 경우, 이는 일반적인 경우이다, 그 증가는 더 적다). 이러한 성장은, 만약 한도가 설정되어 있다면, 여전히 그max_dim한도의 적용을 받습니다. -
max_dim (int |tuple[int, int] | None) –
SCI 하위 공간의 스핀 섹터 차원에 대한 제한입니다. 이는 다음 중 하나가 될 수 있습니다.
- 스핀-알파 섹터와 스핀-베타 섹터에 대해 별도의 한계를 제공하는 정수의 튜플
(max_dim_a, max_dim_b)입니다. 이 경우 SCI 하위 공간의 크기는max_dim_a * max_dim_b을 초과하지 않습니다. - 스핀-알파 및 스핀-베타 섹터에 모두 사용할 제한을 지정하는 단일 정수입니다. 이 경우 SCI 하위 공간의 크기는
max_dim**2을 초과하지 않습니다. None로 설정할 수 있으며, 이 경우 제한이 설정되지 않습니다.
차원 제한은 스핀 섹터에 설정되며, SCI 하위 공간의 전체 차원은 개별 스핀 섹터의 차원의 곱이라는 점에 유의하세요.
- 스핀-알파 섹터와 스핀-베타 섹터에 대해 별도의 한계를 제공하는 정수의 튜플
-
include_configurations (list[int] | tuple[list[int], list[int]] | ndarray | None) – 대각화 부분공간에 항상 포함해야 하는 구성들. 두 스핀 영역 모두에 사용할 단일 스핀 문자열로 구성된 단일 목록을 지정하거나, 각 스핀마다 하나씩 총 두 개의 단일 스핀 문자열 목록으로 구성된 쌍 (alpha_strings, beta_strings)을 지정할 수 있습니다.
-
initial_occupancies (tuple[ndarray, ndarray] | None) – 궤도의 평균 점유도에 대한 초기 추정값.
-
carryover_threshold (float | None) –
구성 복구 과정의 한 반복 단계에서 다음 단계로 CI 가중치가 큰 비트스트링을 이월하기 위한 임계값. 계수의 절대값이 이 임계값보다 큰 구성과 관련된 모든 단일 스핀 CI 벡터는 다음 반복을 위한 대각화 부분공간에 포함됩니다. 임계값을 작게 설정하면 더 많은 구성값이 유지되어 부분공간이 커지게 되며, 결과적으로 대각화 비용이 더 많이 들게 됩니다. 기본값은
1e-4.입니다.이는 진폭에 임계값을 적용하여 이월을 결정하는 기본 정책 설정입니다. 다른 정책은 자체적인 방식으로 이를 선택하므로, 이 값과 모두를 전달하면 가 증가합니다
policy``ValueError. 명시적으로 임계값을 설정하는 경우에는 대신StandardPolicy로 임계값을 전달하십시오. -
callback (Callable[[list[SCIResult]], None] | None) – 각 구성 복구 반복이 끝난 후 호출될 콜백 함수. 이 함수에는 sci_solver 함수의 출력값이 전달되는데, 이는 (에너지, sci_state, 점유율) 3원조로 구성된 리스트이며, 각 3원조에는 대각화 결과가 포함되어 있습니다.
리턴
에너지 추정치 및 해당 에너지가 포함된 SCI 상태입니다.
리턴 유형
이 함수는 MPI를 이용한 집합적 다중 프로세스(SPMD) 실행을 지원하며, 각 프로세스(MPI_THREAD_FUNNELED 또는 그 이하)는 단일 스레드가 제어합니다. 모든 프로세스에서 일괄적으로 호출될 경우, 인수는 모든 프로세스에서 일치해야 하며, 다음의 의미론이 적용됩니다:
- 이
sci_solver단계는 유일한 집합적 연산입니다. 모든 프로세스가 이에 참여하므로, 구현sci_solver시 모든 프로세스에 작업을 분배할 수 있습니다. 구성-복구 루프의 나머지 단계들(CI 문자열 준비, 대각화 결과 처리, 수렴성 확인)은 분산 구현이 되어 있지 않으며, 제어 프로세스에서 단독으로 수행됩니다. callback(해당 기능이 제공되는 경우)는 제어 프로세스에서만 호출됩니다.- 반환 값은 모든 프로세스에서 동일합니다. 최종 결과는 제어 프로세스에서 모든 랭크로 브로드캐스트됩니다.
- 집합체가 제어 프로세스에 대해 반환하는
sci_solver결과만 사용되며, 다른 프로세스에 대해 반환하는 결과는 완전히 무시되므로 의미가 있을 필요는 없습니다. 이를 통해 솔버는 각 대각화 과정에서 산출된 에너지, 상태 및 점유율을 모든 순위에 일괄적으로 모으는 대신, 이를 계산한 프로세스에 그대로 남겨둘 수 있습니다. 이러한 작업을 수행하는 솔버는 여전히 제어 프로세스가 모든 부분 공간에 대한 결과를 수신할 수 있도록 보장해야 하며, 부분 공간을 여러 프로세스 그룹에 분산시킨 경우에는 해당 그룹들을 통합하여 결과를 수집해야 한다.
호출 프로그램이 MPI 환경에서 실행되어야 하는지는 사용 중인 sci_solver MPI 구현에 따라 달라집니다. 앞서 설명한 바와 같이 sci_solver, 컬렉티브는 프로그램이 모든 프로세스에 걸쳐 공동으로 실행되기를 기대합니다. 다른 구현 방식의 경우, 호출 프로그램이 MPI/SPMD 환경 외부에서 단일 프로세스로 실행되어야 합니다. 이러한 구현 중 일부는, 예를 들어 스스로를 mpirun 실행하는 등의 방식으로 내부적으로 병렬 처리를 관리할 수도 있습니다. 기본값은 분포를 sci_solver 따르지 않으며, 후자의 범주에 속합니다.
집합적 sci_solver 구현은 오류가 발생했을 때 단일 프로세스에서 예외를 발생시킬 필요가 없으며, 대신 실행 컨텍스트 전체에 대해 ‘실패 시 중지(fail-stop)’ 세미언틱을 따르며 모든 프로세스를 일괄적으로 중단할 수 있다. (이는 해당 구현체가 수행할 수 있는 작업을 설명한 것이지, 기본값의 동작을 설명한 것이 아닙니다 sci_solver.)
반복 연산의 각 부분공간은 한 sci_solver 번의 호출로 처리되므로, 집단 처리 구현에서는 모든 부분공간에 모든 프로세스를 차례로 할당하는 대신, 프로세스를 여러 그룹으로 나누어 부분공간 하나당 한 그룹씩, 여러 부분공간을 동시에 대각선화할 수 있다. 이를 어떻게 구현할지는 해당 구현체의 몫입니다. 이 패키지는 프로세스를 구분하지 않으며, 인터페이스 내 어디에도 프로세스에 대한 설명이 없습니다. 이를 구분하는 구현 방식은 해당 대각화 작업을 수행하는 그룹 내에서만 집합 연산을 제한해야 하며, 이 목적을 위해 qiskit_addon_sqd.processes.barrier() qiskit_addon_sqd.processes.broadcast() 또는 을 사용해서는 안 됩니다. 왜냐하면 이 연산들은 그룹이 아닌 모든 프로세스에 대해 수행되기 때문입니다.
이터레이션당 솔버가 호출되는 횟수와 사용되는 부분공간의 개수는 에 의해 결정됩니다 policy. 예를 들어 TrimPolicy, 의 경우 이 함수는 두 번 호출됩니다. 한 번은 각 배치마다, 다른 한 번은 병합된 단일 부분공간에 대해 호출됩니다. 따라서 프로세스를 분할하는 솔버는 이러한 분할을 단 한 번만 수행하면 되며, 매번 새로 구축하는 대신 첫 번째 호출 시에 이를 구축해 두고 재사용할 수 있습니다. 또한, 솔버가 호출되기 전에 서브스페이스가 브로드캐스트되므로 모든 프로세스에서 서브스페이스의 개수는 동일하다는 점에 유의하십시오. 이 점이 중요한 이유는, 프로세스를 분할하는 것 자체가 집단적인 작업이기 때문입니다. 모든 프로세스가 참여하여 분할 방식에 대해 합의해야 합니다. 해법기는 자신이 받은 부분공간 수를 바탕으로 해당 결정을 안전하게 내릴 수 있지만, 프로세스 간에 차이가 있을 수 있는 요소는 근거로 삼아서는 안 됩니다.
enlarge_batch_from_transitions
enlarge_batch_from_transitions(bitstring_matrix, transition_operators)
bitstring_matrix 에 표시된 구성에 전환 연산자 집합을 적용합니다.
매개변수
- bitstring_matrix (ndarray) – 각 행이 단일 비트 문자열을 나타내는 비트 값의
bool표현의 2D 배열입니다. - transition_operators (ndarray) – 1D 또는 2D 배열
I,+,-,n문자열은 ID, 생성, 소멸 또는 숫자 연산자의 동작을 나타냅니다. 각 행은 전환 연산자를 나타냅니다.
리턴
여기 연산자를 적용한 후 증강된 전자 구성 집합을 나타내는 비트 문자열 행렬입니다.
리턴 유형
solve_fermion
solve_fermion(bitstring_matrix, /, hcore, eri, *, open_shell=False, spin_sq=None, shift=0.1, **kwargs)
분자 적분과 일련의 전자 구성이 주어진 접지 상태의 근사치를 구합니다.
매개변수
-
bitstring_matrix (tuple[ndarray, ndarray] | ndarray) –
해밀턴이 투영되고 대각선화될 하위 공간을 정의하는 구성 집합입니다.
이는 두 가지 방법으로 지정할 수 있습니다:
- 비트 문자열 행렬:
bool값의 2Dnumpy.ndarray행으로, 각 행은 비트스트링을 나타냅니다. 스핀업 구성은 열 인덱스(N, N/2]를 사용해야 하고, 스핀다운 구성은 열 인덱스(N/2, 0]를 사용해야 하며, 여기서N는 큐비트 수입니다. - CI 문자열: 스핀업 및 스핀다운 결정자의 정수 표현을 각각 포함하는 두 시퀀스의 튜플입니다. 예상 형식은
([a_str_0, ..., a_str_N], [b_str_0, ..., b_str_M])입니다.
- 비트 문자열 행렬:
-
hcore (ndarray) – 단일 전자 적분을 나타내는 핵심 해밀턴 행렬
-
eri (ndarray) – 2전자 적분을 나타내는 전자 반발 적분
-
open_shell (bool) – 비트열의 왼쪽 절반과 오른쪽 절반에 해당하는 구성을 별도로 유지할지 여부를 지정하는 플래그입니다. 만약
False, 비트열의 좌측 및 우측 절반에 해당하는 CI 문자열을 하나의 고유한 구성 집합으로 결합하여 알파 및 베타 부분공간 모두에 사용한다면. -
spin_sq (float | None) – 기저 상태의 총 스핀 제곱에 대한 목표값, . 일 경우
None, 스핀이 부여되지 않습니다. -
shift (float) – 스핀이 다른 상태에 대한 레벨 변환.
-
**kwargs - 전달할 키워드 인자 pyscf.fci.selected_ci.kernel_fixed_space
리턴
- SCI 계산의 최소 에너지
- SCI 접지 상태
- 스핀업 및 스핀다운 궤도에 대한 궤도 점유를 포함하는 튜플입니다. 형식은 다음과 같습니다:
(array([occ_a_0, ..., occ_a_N]), array([occ_b_0, ..., occ_b_N])) - 스핀 제곱의 기대값
리턴 유형
solve_sci
solve_sci(ci_strings, one_body_tensor, two_body_tensor, norb, nelec, *, spin_sq=None, **kwargs)
CI 문자열로 정의된 하위 공간에서 해밀턴을 대각선화합니다.
매개변수
-
ci_strings (tuple[ndarray, ndarray]) – 스핀-알파 CI 문자열 배열과 스핀-베타 CI 문자열 배열의 짝 (strings_a, strings_b)으로, 이들의 직교 곱은 대각화 연산을 수행할 부분 공간의 기저를 이룹니다.
-
one_body_tensor (ndarray) – 해밀턴의 일체 텐서입니다.
-
two_body_tensor (ndarray) – 해밀턴의 2체 텐서입니다.
-
norb (int) – 공간 궤도의 개수.
-
spin_sq (float | None) – 기저 상태의 총 스핀 제곱에 대한 목표값. 만약 그렇다면
None, 스핀이 가해지지 않습니다. -
**kwargs -
전달할 키워드 인수 pyscf.fci.selected_ci.kernel_fixed_space
리턴
대각선화 결과입니다.
리턴 유형
solve_sci_batch
solve_sci_batch(ci_strings, one_body_tensor, two_body_tensor, norb, nelec, *, spin_sq=None, **kwargs)
하위 공간에서 해밀턴을 대각선화합니다.
매개변수
-
ci_strings (list[tuple[ndarray, ndarray]]) – 스핀-알파 CI 문자열과 스핀-베타 CI 문자열의 배열 쌍 (strings_a, strings_b)으로 구성된 목록으로, 이들의 직교 곱은 대각화 연산을 수행할 부분 공간의 기저를 이룬다.
-
one_body_tensor (ndarray) – 해밀턴의 일체 텐서입니다.
-
two_body_tensor (ndarray) – 해밀턴의 2체 텐서입니다.
-
norb (int) – 공간 궤도의 개수.
-
spin_sq (float | None) – 기저 상태의 총 스핀 제곱에 대한 목표값. 만약 그렇다면
None, 스핀이 가해지지 않습니다. -
**kwargs -
전달할 키워드 인수 pyscf.fci.selected_ci.kernel_fixed_space
리턴
Ci_strings로 지정된 하위 공간의 대각선화 결과입니다.
리턴 유형
optimize_orbitals
optimize_orbitals(bitstring_matrix, /, hcore, eri, k_flat, *, open_shell=False, spin_sq=0.0, num_iters=10, num_steps_grad=10000, learning_rate=0.01, **kwargs)
궤도를 최적화하여 최소한의 접지 상태를 생성합니다.
이 프로세스에는 3단계 이상의 반복이 포함됩니다:
** num_iters 반복의 경우:**
- 매개변수를 기준으로 적분을 회전합니다,
k_flat - 기저 상태 에너지 및 파동 함수 진폭 대각선화 및 근사치 구하기
- 2단계에서 찾은 그라데이션 하강과 파동 함수 진폭을 사용하여
k_flat최적화하기
다음을 참조하세요 Sec. 이 궤도 최적화 기법에 대한 자세한 내용은 을 참조하세요.
이 함수는 qiskit-addon-sqd 0.13.0 버전부터 더 이상 사용되지 않습니다 qiskit_addon_sqd.fermion.optimize_orbitals() . v0.15.0 이전에는 삭제되지 않을 것입니다. 이제 ffsim 패키지에서 궤도 최적화 기능이 지원됩니다. ffsim을 사용하여 해밀토니안 기저를 최적화하는 방법에 대한 안내서는 /addons/qiskit-addon-sqd/guides /opt imize-orbitals에서 확인하십시오.
매개변수
-
bitstring_matrix (tuple[ndarray, ndarray] | ndarray) –
해밀턴이 투영되고 대각선화될 하위 공간을 정의하는 구성 집합입니다.
이는 두 가지 방법으로 지정할 수 있습니다:
- 비트 문자열 행렬:
bool값의 2Dnumpy.ndarray행으로, 각 행은 비트스트링을 나타냅니다. 스핀업 구성은 열 인덱스(N, N/2]를 사용해야 하고, 스핀다운 구성은 열 인덱스(N/2, 0]를 사용해야 하며, 여기서N는 큐비트 수입니다. - CI 문자열: 스핀업 및 스핀다운 결정자의 정수 표현을 각각 포함하는 두 시퀀스의 튜플입니다. 예상 형식은
([a_str_0, ..., a_str_N], [b_str_0, ..., b_str_M])입니다.
- 비트 문자열 행렬:
-
hcore (ndarray) – 단일 전자 적분을 나타내는 핵심 해밀턴 행렬
-
eri (ndarray) – 2전자 적분을 나타내는 전자 반발 적분
-
k_flat (ndarray) – 1D 궤도 변환을 정의하는 배열,
K. 배열은 대각선을 제외한 대칭 변환 연산자의 위쪽 삼각형을 행 대소문자 순서로 지정해야 합니다. -
open_shell (bool) – 비트열의 왼쪽 절반과 오른쪽 절반에 해당하는 구성을 별도로 유지할지 여부를 지정하는 플래그입니다. 만약
False, 비트열의 좌측 및 우측 절반에 해당하는 CI 문자열을 하나의 고유한 구성 집합으로 결합하여 알파 및 베타 부분공간 모두에 사용한다면. -
spin_sq (float) – 기저 상태의 총 스핀 제곱에 대한 목표값
-
num_iters (int) – 수행할 궤도 최적화의 반복 횟수
-
num_steps_grad (int) – 각 최적화 반복 과정에서 수행할 경사 하강법의 단계 수
-
learning_rate (float) – 경사 하강법 수행 시 사용할 학습률
-
**kwargs -
전달할 키워드 인수 pyscf.fci.selected_ci.kernel_fixed_space
리턴
- 마지막 최적화 반복 중에 발견된 기저 상태 에너지
- 궤도 변환을 정의하는 최적화된 1D 배열
- 스핀업 및 스핀다운 궤도에 대한 궤도 점유를 포함하는 튜플입니다. 형식은 다음과 같습니다:
(array([occ_a_0, ..., occ_a_N]), array([occ_b_0, ..., occ_b_N]))
리턴 유형
rotate_integrals
rotate_integrals(hcore, eri, k_flat)
적분에서 유사도 변환을 수행합니다.
변환은 다음과 같이 설명됩니다:
k_flat 에서 및 을 생성하고 1체 및 2체 적분에 적용하는 방법에 대한 자세한 내용은 초를 참조하세요. II A 4.
이 함수는 qiskit-addon-sqd 0.13.0 버전부터 더 이상 사용되지 않습니다 qiskit_addon_sqd.fermion.rotate_integrals() . v0.15.0 이전에는 삭제되지 않을 것입니다. 이제 ffsim 패키지에서 궤도 최적화 기능이 지원됩니다. ffsim을 사용하여 해밀토니안 기저를 최적화하는 방법에 대한 안내서는 /addons/qiskit-addon-sqd/guides /opt imize-orbitals에서 확인하십시오.
매개변수
- hcore (ndarray) – 단일 전자 적분을 나타내는 핵심 해밀턴 행렬
- eri (ndarray) – 2전자 적분을 나타내는 전자 반발 적분
- k_flat (ndarray) – 1D 궤도 변환을 정의하는 배열,
K. 배열은 대각선을 제외한 대칭 변환 연산자의 위쪽 삼각형을 행 대소문자 순서로 지정해야 합니다.
리턴
- 회전된 코어 해밀턴 행렬
- 회전된 ERI 매트릭스
리턴 유형