키스킷 0.23 릴리즈 노트
0.23.6
테라 0.16.4
변경 없음
에어 0.7.5
Prelude
이 릴리스는 버그 수정 릴리스로, 미리 컴파일된 바이너리 휠 패키지와 넘피 버전 < 1.20.0 과의 호환성을 수정합니다. 이전 릴리스( 0.7.4 )에서는 numpy( 1.20.0 )가 필요한 방식으로 바이너리를 빌드했지만 이제 이 문제가 해결되었으므로 미리 컴파일된 바이너리 휠 패키지는 모든 numpy 호환 버전에서 작동합니다.
이그니스 0.5.2
변경 없음
아쿠아 0.8.2
변경 없음
IBM Q 제공자 0.11.1
변경 없음
0.23.5
테라 0.16.4
Prelude
이번 릴리스는 주로 numpy와의 호환성을 수정하는 버그 수정 릴리스입니다 1.20.0. 이번 넘피 릴리스에서는 Python 의 숫자 유형에 대한 로컬 별칭이 사용되지 않습니다(np.int -> int, np.float -> float 등) 이 별칭을 키스킷에서 사용하면서 많은 수의 사용 중단 경고가 발생했습니다. 이번 릴리스에서는 이 문제를 수정하여 이러한 사용 중단 경고 없이 numpy 1.20.0 를 사용하여 키스킷을 실행할 수 있습니다.
에어 0.7.4
버그 수정
Numpy와의 호환성 수정 1.20.0. 이번 넘피 릴리스에서는 Python 의 숫자 유형에 대한 로컬 별칭이 사용되지 않습니다(np.int -> int, np.float -> float 등) 키스킷 에어에서 이러한 별칭을 사용하면서 많은 수의 사용 중단 경고가 발생했습니다. 이번 릴리스에서는 이 문제를 수정하여 사용 중단 경고 없이 numpy 1.20.0 를 사용하여 키스킷 에어를 실행할 수 있습니다.
이그니스 0.5.2
Prelude
이번 릴리스는 주로 numpy와의 호환성을 수정하는 버그 수정 릴리스입니다 1.20.0. 또한 Python 3.9 에 대한 지원을 포함하는 첫 번째 릴리스입니다. 이전 릴리스( 0.5.0 및 0.5.1 )는 Python 3.9 과 함께 작동했지만 패키지 메타데이터에 이를 표시하지 않았으며 해당 릴리스에 대한 업스트림 테스트가 없었습니다. 이 릴리스는 이 문제를 해결하고 Python 3.9 ( 3.6, 3.7, 3.8 )에서 테스트되었습니다.
버그 수정
- networkx는 이제 명시적으로 종속성으로 나열됩니다. 이전에는
qiskit.ignis.verification.topological_codes모듈에 필요하기 때문에 암시적 종속성이었지만, qiskit-terra에도 networkx가 필요하고 무시스의 종속성이기도 하므로 실제로는 항상 설치되기 때문에 종속성으로 올바르게 나열되지 않았습니다. 그러나 향후 출시되는 키스킷-테라 릴리스에는 네트워크엑스가 필요하지 않으므로 이를 요구사항으로 나열할 필요가 있습니다. 또한 향후 버전 요구 사항 간의 호환성 문제가 발생할 경우를 대비하여 ignis의 종속성을 정확하게 나열하는 것도 중요합니다.
아쿠아 0.8.2
IBM Q 제공자 0.11.1
변경 없음
0.23.4
테라 0.16.3
버그 수정
- 1큐비트 게이트와 비게이트 명령어만 작동하는 일련의 회로에서 실행할 때 오류를 일으키는 0.16.2 에 도입된 문제를 수정했습니다
transpile()를 일련의 1큐비트 게이트와 1큐비트에서만 작동하는 비게이트 명령어(예:Reset)가 있는 회로에서 실행할 때 오류가 발생하는 문제를 수정했습니다. 수정 #5736
에어 0.7.3
변경 없음
이그니스 0.5.1
변경 없음
아쿠아 0.8.1
변경 없음
IBM Q 제공자 0.11.1
변경 없음
0.23.3
테라 0.16.2
새 기능
- Python 3.9 지원이 이번 릴리스에 추가되었습니다. 이제 Python 3.9 을 사용하여 키스킷 테라를 실행할 수 있습니다.
업그레이드 주의사항
- 이제
MCXGrayCode클래스는num_ctrl_qubits이 3이면C3XGate을 생성하고num_ctrl_qubits이 4이면C4XGate을 생성합니다. 이는 :class:' qiskit.library.standard_gates.x.MCXGate\의 모드 중 하나에 대해num_ctrl_bits이 1이면CXGate이 생성되고, 2이면CCXGate` 이 생성되는 이전 기능에 추가된 기능입니다.
버그 수정
-
펄스
Delay인스트럭션은 이제 명시적으로 어셈블된PulseQobjInstruction객체에 포함된PulseQobj출력에 포함된 객체로assemble().이전에는
Delay명령어를Schedule의 일부로assemble()에 명시되어 있었기 때문에PulseQobj객체의 명령을 무시할 수 있었습니다. 하지만 이제 펄스 게이트를 사용하면 지연만 예약할 수 있고 지연 자체를 포함하지 않으면 지연이 제거되는 상황이 있습니다. -
이제 사용자 지정 게이트 보정이 있는 회로는 각 회로 보정 기간을 명시적으로 제공하지 않고도 트랜스파일러로 예약할 수 있습니다.
-
그리고
BasisTranslator및Unroller패스는 경우에 따라 트랜스필레이션 중인 회로의 전역 위상을 보존하지 못했습니다. 이 문제점이 수정되었습니다. -
의 버그
qiskit.pulse.builder.frequency_offset()에서compensate_phase설정 시 인수가 추가 단계에서 누락되는 버그가 발견되었습니다. -
메서드 출력의 전역 위상을 수정합니다
QuantumCircuit메서드repeat(). 전역 위상이 있는 회로가 다른 회로에 추가되면 현재 전역 위상은 전파되지 않습니다. 그렇지 않으면 위상이 여러 번 적용되기 때문에 시뮬레이터는 이에 의존합니다. 의 전역 위상을 0으로 설정한 후 반복 회로를 추가합니다repeat()를 0으로 설정한 후 기존 위상에 반복 횟수를 곱하는 대신 반복 회로를 추가합니다. -
버그 수정
SparsePauliOpPython 의 특정 Numpy 스칼라 유형으로 곱하면 잘못된 값이 반환되던 버그가 수정되었습니다. 수정 #5408 -
헬러 충실도의 정의가 이전 정의( )에서 으로 수정되어 대각선 밀도 행렬로서의 양자 상태 충실도 P, Q와 동일해졌습니다.
-
3 제어 X 게이트의 분해에서 CX 게이트의 수를 줄입니다,
C3XGate. U CX 기준으로 컴파일 및 최적화되어 이제 각각 20개와 22개가 아닌 14개의 CX 게이트와 16개의 U 게이트만 사용됩니다. -
주피터 백엔드 위젯을 사용하거나
qiskit.tools.backend_monitor()백엔드의 기본 게이트가 기존 u1, u2, u3 을 포함하지 않는 경우 실패하는 문제를 수정했습니다. -
단일 요소의 회로 목록에서
qiskit.compiler.transpile()함수를 실행하면 목록 대신 회로를 반환하는 데 사용됩니다. 이제 목록과 함께qiskit.compiler.transpile()를 목록과 함께 호출하면 목록에 요소가 하나만 있어도 목록을 반환합니다. 5260번을 참조하세요.from qiskit import * qc = QuantumCircuit(2) qc.h(0) qc.cx(0, 1) qc.measure_all() transpiled = transpile([qc]) print(type(transpiled), len(transpiled))<class 'list'> 1
에어 0.7.3
새 기능
- Python 3.9 지원이 이번 릴리스에 추가되었습니다. 이제 소스에서 빌드하지 않고 Python 3.9 을 사용하여 키스킷 에어를 실행할 수 있습니다.
버그 수정
"method"및"noise_model"옵션을 함께 사용하거나from_backend()을 사용하여 구축된 시뮬레이터와 함께 사용할 때QasmSimulator기준 게이트 설정 관련 문제를 수정했습니다. 이제 나열된 기준 게이트는 백엔드 구성, 시뮬레이션 방법 및 노이즈 모델 기준 게이트가 지원하는 게이트의 교차점이 됩니다. 노이즈 모델 기준 게이트와 시뮬레이터 기준 게이트의 교집합이 비어 있으면 경고가 기록됩니다.- 조건부 레지스터의 폭이 64보다 클 때 c_if가 작동하지 않던 버그를 수정했습니다. 1077번을 참조하세요.
- 기본 게이트가 설정된 IBMQ 장치에 대해
basis_gates가 잘못 설정된from_backend()및from_backend()의 버그 수정['id', 'rz', 'sx', 'x', 'cx']. 이제 노이즈 모델에 오류가 있는지 여부에 관계없이 백엔드 베이시스 게이트와 항상 동일한 베이시스 게이트를 갖게 됩니다. - QasmSimulator 의 행렬 곱 상태 메서드에서 잘림을 적용할 때 발생하는 버그를 수정했습니다.
이그니스 0.5.1
변경 없음
아쿠아 0.8.1
변경 없음
IBM Q 제공자 0.11.1
변경 없음
0.23.2
테라 0.16.1
변경 없음
에어 0.7.2
새 기능
- CMake 플래그
DISABLE_CONAN(기본값=``OFF``)를 추가합니다. 소스에서 설치하는 경우ON으로 설정하면 시스템에 이미 설치된 라이브러리를 찾기 위해 Conan 패키지 관리자를 우회할 수 있습니다. 이는 환경 변수DISABLE_CONAN로도 사용할 수 있으며, CMake 플래그보다 우선합니다. 이것은 AER을 구축하는 공식 절차가 아닙니다. 따라서 사용자는 필요한 모든 라이브러리와 해당 파일을 CMake에서 찾을 수 있도록 제공해야 할 책임이 있습니다.
버그 수정
- 중첩된 OpenMP 플래그가 참으로 설정되어서는 안 되는 경우 참으로 설정되던 버그를 수정했습니다.
이그니스 0.5.1
변경 없음
아쿠아 0.8.1
변경 없음
IBM Q 제공자 0.11.1
변경 없음
0.23.1
테라 0.16.1
버그 수정
- 지연으로 빌드된 유효한 회로에 대해 실행 시 오류가 발생하던 문제를 수정했습니다.
- qelib1.inc 의 ‘c4x’ 의 QASM 정의가 C4XGate 의 표준 라이브러리 정의와 일치하도록 수정되었습니다.
- 퀀텀 채널의 빼기 버그 수정 여기서 은
Operator객체입니다. 연산자 표현의 행렬에 음수가 적용되고 있었는데, 이는 양자 채널 표현의 음수와 동일하지 않습니다. - 여러 레지스터가 있는 명령어의 경우를 처리하기 위해
_evolve_instruction()의 큐비트 액세스 방식을 변경합니다.
에어 0.7.1
업그레이드 주의사항
- Qiskit-aer를 빌드하기 위한 최소 cmake 버전이 3.6 에서 3.8 로 증가했습니다. 이 변경은 AVX2 명령어가 없는 x86_64 CPU에서 실행을 지원하는 GPU 버전 빌드를 수정하기 위해 필요했습니다.
버그 수정
- 이제 GPU를 지원하는 qiskit-aer는 AVX2 명령어가 없는 x86_64 CPU를 사용하는 시스템에서 작동합니다. 이전에는 AVX2 지침을 사용할 수 있는 경우에만 GPU 패키지가 실행되었습니다. 수정 #1023
set_options()을 사용하여 반환된 백엔드에 설정된 옵션이 공급자에 저장되어 이후 동일한 이름의 백엔드에 대한get_backend()호출 시 지속되는 버그(AerProvider)를 수정했습니다. 이제backends()으로 호출할 때마다 구성할 수 있는 시뮬레이터 백엔드의 새 인스턴스가 반환됩니다.- 회로에 지원되지 않는 시뮬레이터 명령어가 포함된 경우 반환되는 오류 메시지의 버그를 수정했습니다. 이전에는 일부 지원되는 지침도 지원되지 않는 지침과 함께 오류 메시지에 나열되었습니다.
- "sx"` gate
SXGate가 matrix_product_state.hp 의 StateOpSet 에서 C++ 코드에 지원되는 게이트로 나열되지 않는 버그 수정. "csx","cu2","cu3"이"density_matrix"메소드의 지원되는 베이시스 게이트로 잘못 나열되던 버그 수정QasmSimulator.- MPS에서 apply_kraus는 내부 큐비트 대신 매개변수 큐비트의 입력 비트에서 직접 작동했습니다. MPS 알고리즘에서는 큐비트가 지속적으로 이동하므로 모든 연산은 내부 큐비트에 적용되어야 합니다.
- MPS::sample_measure를 호출할 때, qasm_controller.This 에서 이동_all_쿼비트_to_sorted_ordering 메서드를 호출하여 수행한다고 가정하므로 먼저 큐비트를 기본 순서로 정렬해야 합니다. 샘플_측정_사용_적용_측정에서는 정확했지만 샘플_측정_사용_확률에서는 누락되었습니다.
이그니스 0.5.1
버그 수정
TomographyFitter,StateTomographyFitter,ProcessTomographyFitter의"auto"메서드를 수정하여 CVXPY가 설치되어 있고 SCS가 아닌 타사 SDP 솔버를 사용할 수 있는 경우에만"cvx"을 사용하도록 합니다. 이는 SCS 솔버가 다른 솔버 방법보다 정확도가 낮고, 완전 양수가 아닌 밀도 행렬이나 최 행렬을 반환하는 경우가 많아서qiskit.quantum_info.state_fidelity()또는qiskit.quantum_info.process_fidelity()함수.
아쿠아 0.8.1
0.8.1
새 기능
- 새로운 알고리즘이 추가되었습니다: 분자의 다양한 자유도를 따라 포텐셜 에너지 표면을 계산하기 위한 본 오픈하이머 포텐셜 에너지 표면입니다. 이 알고리즘은
BOPESSampler이라고 합니다. 또한 전위 에너지 표면을 미리 정의된 potentials.some 세부 사항의 분석 함수에 맞추는 기능도 제공합니다.
중요 문제
QAOA의initial_state매개 변수는 버그 수정으로 인해 이제 구현이 달라졌습니다. 이전 구현에서는 사용자가 제공한initial_state을 Hadamard 게이트와 잘못 혼용했습니다. 이 문제는 이제 해결되었습니다. 코드에서 사용자가 제공한initial_state매개 변수를 사용하지 않는 경우 주의할 필요가 없습니다.
버그 수정
- 최적화_svm 메서드가 때때로 실패하여 다음과 같은 오류가 발생합니다. ValueError: 크기 1의 배열을 모양(200,1)으로 재형성할 수 없음 이 문제는 L2 표준 매개 변수인 lambda2 를 추가하여 해결되며, 기본값은 0.001 이지만 필요에 따라 QSVM 알고리즘을 통해 변경하여 수렴을 용이하게 할 수 있습니다.
- DOCplex의 최신 빌드에서
VarType메서드one_letter_symbol가 제거되어 Aqua가 이 버전과 호환되지 않습니다. 따라서 이 방법을 사용하는 대신 변수 유형에 대한 명시적 유형 검사가 Aqua 최적화 모듈에 도입되었습니다. - :meth`~qiskit.aqua.operators.state_fns.DictStateFn.sample()`은 실제 진폭만 처리할 수 있었지만 복잡한 진폭을 처리하도록 수정되었습니다. 자세한 내용은 #1311 <https://github.com/qiskit-community/qiskit-aqua/issues/1311> 을 참조하세요.
- 트로터 클래스가 생성자에서 reps 인수를 사용하지 않았습니다. 자세한 내용은 #1317 <https://github.com/qiskit-community/qiskit-aqua/issues/1317> 을 참조하세요.
- :class`qiskit.aqua.operators.converters.CircuitSampler` 이 빈 연산자를 샘플링하면 AquaError 을 발생시킵니다. 자세한 내용은 #1321 <https://github.com/qiskit-community/qiskit-aqua/issues/1321> 을 참조하세요.
to_opflow()는 계수가 복소수인 경우 올바른 연산자를 반환합니다. 자세한 내용은 #1381 <https://github.com/qiskit-community/qiskit-aqua/issues/1381> 을 참조하세요.- 백엔드 시뮬레이터가 QuantumInstance 에서 Aer로만 제한하는 대신 NoiseModel 지원을 검증하도록 합니다.
- QuantumInstance
transpile메소드가 있는 경우 해당run메소드를 호출하여 PassManager 를 올바르게 처리합니다. QAOA에서 사용자 정의initial_state와 Hadamard 게이트를 혼합하는 버그가 수정되었습니다. 사용자가 초기_state를 제공하지 않으면 QAOA의 기능이 변경되지 않습니다. 최적화 결과가 다를 수 있으므로 구현에서initial_state매개 변수와 함께 QAOA를 사용하는 경우 주의해야 합니다.- 이전에는 QuantumInstance 에서 seed_simulator=0 을 설정해도 시드가 설정되지 않았습니다. 이는 0 값에만 영향을 미쳤습니다. 이 문제점이 수정되었습니다.
IBM Q 제공자 0.11.1
새 기능
qiskit.providers.ibmq.experiment.Experiment에는 이제 실험을 만드는 데 사용된 공급자를 식별하는 허브, 그룹, 프로젝트의 세 가지 추가 속성이 있습니다.- 이제
qiskit.providers.ibmq.experiment.ExperimentService.experiments()및qiskit.providers.ibmq.experiment.ExperimentService.analysis_results()메서드에서 반환되는 실험 및 분석 결과의 수를 제한할 수 있는limit매개 변수를 지원합니다.
업그레이드 주의사항
- 이제
qiskit.providers.ibmq.experiment.ExperimentService.experiments()및qiskit.providers.ibmq.experiment.ExperimentService.analysis_results()메서드 모두에 새로운 매개 변수limit가 첫 번째 매개 변수로 추가됩니다. 이limit의 기본값은 10으로, 청각 장애가 있는 경우 10개의 실험 및 분석 결과만 반환됩니다.
버그 수정
- 작업 제출이 중간에 실패할 경우 작업이
CREATING상태로 남아있을 수 있는 문제를 수정했습니다. IBMQRandomService인스턴스를 하위 프로세스에 전달할 때 발생하는 무한 루프를 수정합니다.
0.23.0
테라 0.16.0
Prelude
0.16.0 릴리스에는 몇 가지 새로운 기능과 버그 수정이 포함되어 있습니다. 이번 릴리스의 주요 기능은 다음과 같습니다:
- 지연을 사용하여 회로의 작업 타이밍과 정렬을 제어할 수 있는 예약 회로를 소개합니다.
- 오라클과 같은 고전적인 함수에서 양자 회로를 컴파일합니다.
- 위상 + 제곱근(X) 기저뿐만 아니라 다양한 오일러 기저에 대한 단일 큐비트 회전을 컴파일하고 최적화할 수 있습니다(예:
['p', 'sx']), 이전 IBM 퀀텀 기반['u1', 'u2', 'u3']을 대체할 것입니다. - 추적
global_phase()의QuantumCircuit클래스를 통해 확장되었습니다transpiler,quantum_info및assembler모듈과 BasicAer 및 Aer 시뮬레이터를 통해 확장되었습니다. 이제 유니타리 및 상태 벡터 시뮬레이션은 전역 위상 보정 유니타리 행렬과 상태 벡터를 반환합니다.
이번 릴리스에서 특히 중요한 것은 Python 3.5 이 더 이상 지원되지 않는다는 점입니다. 키스킷 테라를 Python 3.5 과 함께 사용하는 경우 0.15.2 릴리스가 마지막으로 작동하는 버전입니다.
새 기능
-
글로벌 R 게이트가
qiskit.circuit.library. 여기에는 글로벌 R 게이트(GR), 글로벌 Rx(GRX) 및 글로벌 Ry(GRY) 게이트에서 파생된GR게이트, 그리고 글로벌 Rz(GRZ)와 비슷한 방식으로 정의되는 글로벌 Rz(GR게이트. 글로벌 R 게이트는 여러 큐비트에 동시에 정의되며, 각 큐비트에서 R 게이트의 직접적인 합으로 작동합니다.예를 들어,
from qiskit import QuantumCircuit, QuantumRegister import numpy as np num_qubits = 3 qr = QuantumRegister(num_qubits) qc = QuantumCircuit(qr) qc.compose(GR(num_qubits, theta=np.pi/3, phi=2*np.pi/3), inplace=True)를 사용하면
QuantumCircuit에QuantumRegister의 큐비트를 생성하고RGate각 큐비트의 x축과 의 각도를 이루는 블로흐 구체의 xy 평면의 축에 대해 의 각도를 수행합니다. -
mpl백엔드에 회로 서랍의 새로운 색 구성표(iqx)가 추가되었습니다qiskit.visualization.circuit_drawer()와qiskit.circuit.QuantumCircuit.draw(). 여기에는 IBM Quantum 체험 웹사이트의 Circuit Composer와 동일한 색 구성표가 사용됩니다. 이제default,iqx,bw의 3가지 색 구성표를 사용할 수 있습니다.색 구성표를 선택하는 방법에는 두 가지가 있습니다. 첫 번째는 기본적으로
~/.qiskit디렉토리에 있는 사용자 구성 파일을 사용하는 것으로,[Default]제목 아래의settings.conf파일에서 사용자는circuit_mpl_style = iqx을 입력하여iqx색 구성표를 선택할 수 있습니다.두 번째 방법은
QuantumCircuit.draw메서드 또는circuit_drawer함수에stylekwarg에{'name': 'iqx'}를 추가하는 것입니다. 두 번째 방법은 settings.conf 파일의 설정을 재정의합니다. 예를 들어,from qiskit.circuit import QuantumCircuit circuit = QuantumCircuit(2) circuit.h(0) circuit.cx(0, 1) circuit.measure_all() circuit.draw('mpl', style={'name': 'iqx'}) -
style에서 회로 서랍에 대해qiskit.visualization.circuit_drawer()및qiskit.circuit.QuantumCircuit.draw()mpl백엔드가 있는displaycolor필드에서 이제 각 게이트 유형에 대한 게이트 색상과 텍스트 색상을(gate_color, text_color)형식으로 모두 입력할 수 있습니다. 이를 통해 대비되는 텍스트 색상과 함께 밝고 어두운 게이트 색상을 사용할 수 있습니다. 사용자는 여전히 게이트 색상만 설정할 수 있으며, 이 경우gatetextcolor필드가 사용됩니다. 게이트 색상은style딕셔너리에서 하나부터 전체displaycolor딕셔너리까지 원하는 수만큼 게이트 유형을 설정할 수 있습니다. 예를 들어,from qiskit.circuit import QuantumCircuit circuit = QuantumCircuit(1) circuit.h(0) style_dict = {'displaycolor': {'h': ('#FA74A6', '#000000')}} circuit.draw('mpl', style=style_dict)또는
style_dict = {'displaycolor': {'h': '#FA74A6'}} circuit.draw('mpl', style=style_dict) -
펄스 빌더에 두 개의 정렬 컨텍스트가 추가되어(
qiskit.pulse.builder)를 추가하여 지연이 있는 반복 펄스 시퀀스를 쉽게 작성할 수 있습니다.qiskit.pulse.builder.align_equispaced()는 컨텍스트 내에서 펄스 스케줄 사이에 동일한 길이의 지연을 삽입합니다.qiskit.pulse.builder.align_func()펄스 위치의 고급 제어 기능을 제공합니다. 이 컨텍스트는 i 번째 펄스의 분수 좌표를 계산하고 컨텍스트 내에서 펄스를 정렬하는 콜러블을 취합니다. 이를 통해 동적 디커플링을 쉽게 코딩할 수 있습니다.
-
rep_delay매개 변수가 실행 구성의QasmQobj클래스에 추가되었습니다,QasmQobjConfig. 이 매개변수는 프로그램 실행 사이의 시간을 나타내는 데 사용됩니다. 백엔드 범위에서 선택해야 합니다BackendConfiguration메서드rep_delay_range(). 값을 제공하지 않으면 백엔드 기본값인qiskit.providers.models.BackendConfiguration.default_rep_delay이 사용됩니다.rep_delay는 동적 반복 시간을 허용하는 백엔드에서만 작동합니다. 이것은BackendConfiguration속성dynamic_reprate_enabled으로 확인할 수 있습니다. -
qiskit.schemas의qobj_schema.jsonJSON 스키마 파일은 QASM Qobj에 대한 선택적 구성 속성으로rep_delay을 포함하도록 업데이트되었습니다. -
qiskit.schemas의backend_configuration_schema.jsonJSON 스키마 파일은dynamic_reprate_enabled,rep_delay_range및default_rep_delay를 QASM 백엔드 구성 페이로드의 선택적 속성으로 포함하도록 업데이트되었습니다. -
새로운 최적화 패스
qiskit.transpiler.passes.TemplateOptimization가 트랜스파일러에 추가되었습니다. 이 패스는 템플릿 매칭 알고리즘을 적용합니다 arXiv:1909.05270 에 설명된 템플릿 매칭 알고리즘을 적용하여 회로에서 호환되는 모든 최대 일치 항목을 대체합니다.이 새로운 트랜스파일러 패스를 구현하기 위해 새 모듈인
template_circuits이 회로 라이브러리에 추가되었습니다(qiskit.circuit.library). 이 새 모듈에는 모든 토폴리 회로 템플릿이 포함되어 있습니다TemplateOptimization.이 새로운 패스는 현재 사전 설정된 패스 관리자에 포함되어 있지 않습니다.
qiskit.transpiler.preset_passmanagers), 사용하려면 사용자 정의를 만들어야 합니다.PassManager. -
새 버전의 공급자 인터페이스가 추가되었습니다. 에서 찾을 수 있는 이 새로운 인터페이스는
qiskit.providers에서 찾을 수 있으며, 시간이 지남에 따라 호환되는 방식으로 인터페이스가 변경될 수 있도록 하는 새로운 버전 관리 메커니즘을 제공합니다. 새 인터페이스는 명시적인 버전 관리를 제외하고는 대부분 동일하므로 기존 제공업체를 쉽게 마이그레이션할 수 있습니다.명시적으로 버전이 지정된 추상 클래스 외에도 새로운 인터페이스의 주요 변경 사항은 다음과 같습니다
BackendV1메서드run()메서드가 이제QuantumCircuit또는ScheduleQobj객체를 입력으로 받을 수 있다는 것입니다. 이제 옵션이 백엔드 클래스의 일부가 되어 사용자가 회로로 실행할 때 런타임 옵션을 구성할 수 있습니다. 마지막 변경 사항은qiskit.providers.JobV1는 이제 동기식 또는 비동기식일 수 있으며, 이를 구성하는 정확한 구성과 방법은 공급자에게 달려 있지만JobV1추상 클래스에는 작업이 어떤 실행 모델에서 실행되고 있는지를 명시하기 위한 인터페이스 후크 포인트가 있습니다. -
새로운 kwarg,
inplace, 함수에 추가되었습니다qiskit.result.marginal_counts(). 이 kwarg는 콘텐츠가 제자리에서 한계 처리되는지 아니면 새 복사본이 반환되는지 제어하는 데 사용됩니다Result객체 입력에 대해 제어합니다. 이 매개변수는 입력dict또는Counts객체에는 영향을 미치지 않습니다. -
클래식 함수 컴파일러의 초기 버전인
qiskit.circuit.classicalfunction이 추가되었습니다. 이를 통해 유형화된 파이썬 함수(현재Int1유형의 비트에서만 작동)를 컴파일하여QuantumCircuit객체로 컴파일할 수 있습니다. 예를 들어,from qiskit.circuit import classical_function, Int1 @classical_function def grover_oracle(a: Int1, b: Int1, c: Int1, d: Int1) -> Int1: x = not a and b y = d and not c z = not x or y return z quantum_circuit = grover_oracle.synth() quantum_circuit.draw()메서드의
registerless=False파라미터는qiskit.circuit.classicalfunction.ClassicalFunction메서드synth()는 매개변수 이름을 참조하는 레지스터가 있는 회로를 생성합니다. 예를 들어,quantum_circuit = grover_oracle.synth(registerless=False) quantum_circuit.draw()장식된 클래식 함수는 회로에 추가할 때 다른 양자 게이트와 동일한 방식으로 사용할 수 있습니다.
circuit = QuantumCircuit(5) circuit.append(grover_oracle, range(5)) circuit.draw()GROVER_ORACLE게이트는 분해가 필요할 때 합성됩니다.circuit.decompose().draw()이 기능을 사용하려면 양자 회로 합성을 위한 라이브러리인
tweedledum이 필요하며,pip install tweedledum을 통해 pip로 설치할 수 있습니다. -
새로운 클래스
qiskit.circuit.Delay클래스가 추가되었습니다. 새로운 방법delay()를 사용하여 회로에 지연을 쉽게 추가할 수 있습니다. 이를 통해 타이밍에 민감한 실험(예: T1/T2 실험)을 회로 수준에서 설명할 수 있습니다.from qiskit import QuantumCircuit qc = QuantumCircuit(1, 1) qc.delay(500, 0, unit='ns') qc.measure(0, 0) qc.draw() -
에 대한 새로운 인수
scheduling_methodqiskit.compiler.transpile()인수가 추가되었습니다. 지연이 있는 회로를 트랜스파일링할 때 필요합니다.scheduling_method을 지정하면 트랜스파일러는 모든 유휴 시간에 지연이 추가되도록 예약된 회로를 반환합니다(즉, 각 명령의 시작 시간이 고유하게 결정됨). 이렇게 하면 예약된 명령어(게이트)가 회로 수준에서 어떻게 보이는지 확인할 수 있습니다.from qiskit import QuantumCircuit, transpile from qiskit.test.mock.backends import FakeAthens qc = QuantumCircuit(2) qc.h(0) qc.cx(0, 1) scheduled_circuit = transpile(qc, backend=FakeAthens(), scheduling_method="alap") print("Duration in dt:", scheduled_circuit.duration) scheduled_circuit.draw(idle_wires=False)또한
timeline_drawer()를 참조하세요. -
새로운 함수
qiskit.compiler.sequence()도 추가되어 예약 회로를 펄스 지원 백엔드에서 실행할 수 있도록Schedule로 변환하여 펄스 지원 백엔드에서 실행 가능하게 만들 수 있습니다.from qiskit.compiler import sequence sched = sequence(scheduled_circuit, pulse_enabled_backend) -
의
schedule()가 지연이 있는 회로를 예약할 수 있도록 업데이트되었습니다. 이제 지연이 있는 회로를 예약하는 두 가지 경로가 있습니다:qc = QuantumCircuit(1, 1) qc.h(0) qc.delay(500, 0, unit='ns') qc.h(0) qc.measure(0, 0) sched_path1 = schedule(qc.decompose(), backend) sched_path2 = sequence(transpile(qc, backend, scheduling_method='alap'), backend) assert pad(sched_path1) == sched_path2에 대한 릴리스 노트 및 설명서를 참조하세요
transpile()및sequence()다른 경로에 대한 자세한 내용은 를 참조하세요. -
회로 라이브러리에
GroverOperator를 회로 라이브러리(qiskit.circuit.library)에 그로버 연산자를 추가하여 그로버의 검색 알고리즘과 양자 진폭 증폭/추정에 사용되는 그로버 연산자를 구성했습니다. 회로 형태의 오라클이 제공되면GroverOperator은 교과서적인 Grover 연산자를 생성합니다. 이를 진폭 증폭에 일반화하고 상태 준비로 하다마드 게이트 대신 일반 연산자를 사용하려면state_in인수를 사용할 수 있습니다. -
메서드의
InstructionScheduleMap메서드get()와pop()메서드는 이제ParameterExpression인스턴스를 스케줄 생성기 매개변수의 숫자 값에 추가합니다. 제너레이터가 함수인 경우 함수 호출 전 또는 함수 호출 내에서 표현식을 바인딩할 수 있습니다. 생성기가ParametrizedSchedule인 경우 일정 자체가 바인딩/호출되기 전에 표현식을 바인딩해야 합니다. -
새로운 클래스
LinearAmplitudeFunction가 회로 라이브러리에 추가되었습니다(qiskit.circuit.library)에 큐비트 진폭에 선형 함수를 (부분적으로) 매핑하기 위한 새로운 클래스가 추가되었습니다,
매핑은 제어된 폴리 Y 회전과 테일러 근사치를 기반으로 합니다 https://arxiv.org/abs/1806.06893. 이 회로는 양자 진폭 추정 알고리즘을 사용하여 선형 함수의 기대값을 계산하는 데 사용할 수 있습니다.
-
새로운 주피터 매직(
monospaced_output)이qiskit.tools.jupyter모듈에 추가되었습니다. 이 마법은 가능한 경우, Jupyter 노트북 출력 글꼴을 "Courier New"로 설정합니다. 이 글꼴을 사용하면 더 잘 정렬된 텍스트 회로도를 반환합니다.import qiskit.tools.jupyter %monospaced_output -
새로운 트랜스파일러 패스
Optimize1qGatesDecomposition가 추가되었습니다. 이 트랜스파일러 패스는 기존 트랜스파일러 패스의 대안으로Optimize1qGates클래스를 사용하는OneQubitEulerDecomposer클래스를 사용하여 단일 큐비트 게이트 체인을 분해하고 단순화합니다. 이 메서드는 모든 베이스 세트와 호환되지만Optimize1qGates는 u1, u2, u3 에서만 작동합니다.optimization_level1, 2, 3의 기본 패스 관리자는 기본 세트에 u1, u2, 또는 u3 이 포함되지 않은 경우 이 새 패스를 사용하도록 업데이트되었습니다. -
이제
OneQubitEulerDecomposer는 이제'PSX'와'U'두 가지 새로운 기준을 지원합니다. 생성자에서basiskwarg를 사용하여 지정할 수 있습니다. 이렇게 하면 매트릭스가PGate및SXGate를'PSX'로, 그리고UGate'U'를 사용하여 행렬을 분해합니다. -
새로운 메서드
remove()메서드가qiskit.transpiler.PassManager클래스에 새로운 메서드가 추가되었습니다. 이 메서드를 사용하면 인스턴스에서 패스를 제거할 수 있습니다PassManager인스턴스에서 패스를 제거할 수 있습니다. 와 유사한 인덱스에서 작동합니다replace(). 예를 들어, 최적화 레벨 1에 사용되는 패스 관리자에서RemoveResetInZeroState패스를 제거하려면 최적화 레벨 1에서 사용되는 패스 관리자를 제거합니다:from qiskit.transpiler.preset_passmanagers import level_1_pass_manager from qiskit.transpiler.passmanager_config import PassManagerConfig pm = level_1_pass_manager(PassManagerConfig()) pm.draw()[0] FlowLinear: UnrollCustomDefinitions, BasisTranslator [1] FlowLinear: RemoveResetInZeroState [2] DoWhile: Depth, FixedPoint, Optimize1qGates, CXCancellation[1]와RemoveResetInZeroState스테이지를 다음과 같이 제거할 수 있습니다:pass_manager.remove(1) pass_manager.draw()[0] FlowLinear: UnrollCustomDefinitions, BasisTranslator [1] DoWhile: Depth, FixedPoint, Optimize1qGates, CXCancellation -
확률 분포를 큐비트 진폭에 로드하는 여러 클래스;
UniformDistribution,NormalDistribution,LogNormalDistribution가 회로 라이브러리에 추가되었습니다(qiskit.circuit.library). 정규 분포와 로그 정규 분포는 단변량 분포와 다변량 분포를 모두 지원합니다. 이러한 회로는 양자 진폭 추정이 사용되는 금융 분야 애플리케이션의 핵심입니다. -
펄스 게이트에 대한 지원이
QuantumCircuit클래스에 지원이 추가되었습니다. 이를 통해QuantumCircuit의 정의를 재정의(베이시스 게이트의 경우)하거나 지정(표준 및 사용자 지정 게이트의 경우)할 수 있습니다Gate연산의 정의를 재정의하거나(표준 및 커스텀 게이트) 지정할 수 있습니다. 즉, 펄스 수준의 사용자 지정 게이트 보정 옵션을 제공할 수 있습니다.회로는 이전과 똑같이 만들어졌습니다. 예를 들어,
from qiskit import pulse from qiskit.circuit import QuantumCircuit, Gate class RxGate(Gate): def __init__(self, theta): super().__init__('rxtheta', 1, [theta]) circ = QuantumCircuit(1) circ.h(0) circ.append(RxGate(3.14), [0])그런 다음 게이트에 대한 캘리브레이션은
QuantumCircuit메서드add_calibration()메서드를 사용하여 게이트에 대한 캘리브레이션을 등록할 수 있습니다Schedule정의와 정의된 큐비트 및 파라미터를 사용하는 방법을 사용하여 게이트에 대한 캘리브레이션을 등록할 수 있습니다:# Define the gate implementation as a schedule with pulse.build() as custom_h_schedule: pulse.play(pulse.library.Drag(...), pulse.DriveChannel(0)) with pulse.build() as q1_x180: pulse.play(pulse.library.Gaussian(...), pulse.DriveChannel(1)) # Register the schedule to the gate circ.add_calibration('h', [0], custom_h_schedule) # or gate.name string to register circ.add_calibration(RxGate(3.14), [0], q1_x180) # Can accept gate이전에는 이 기능을 완전한 펄스 스케줄을 통해서만 사용할 수 있었습니다. 또한 이제 사용자 정의 정의를 사용하여 회로를 백엔드에 제출할 수 있습니다(백엔드 지원에 따라 다름).
펄스 게이트가 있는 회로는 펄스 게이트를 사용하여
Schedule로 낮출 수 있습니다schedule()함수를 사용하면 됩니다.보정된 게이트는 일반 트랜스파일링 프로세스를 사용하여 트랜스파일링할 수도 있습니다:
transpiled_circuit = transpile(circ, backend)트랜스파일된 회로는 보정된 게이트를 원래 회로와 동일한 큐비트에 남겨두고 기본 게이트로 언롤링하지 않습니다.
-
객체 분해 지원이
PulseQobj객체 분해 지원이qiskit.assembler.disassemble()함수에 추가되었습니다. 예를 들어,from qiskit import pulse from qiskit.assembler.disassemble import disassemble from qiskit.compiler.assemble import assemble from qiskit.test.mock import FakeOpenPulse2Q backend = FakeOpenPulse2Q() d0 = pulse.DriveChannel(0) d1 = pulse.DriveChannel(1) with pulse.build(backend) as sched: with pulse.align_right(): pulse.play(pulse.library.Constant(10, 1.0), d0) pulse.shift_phase(3.11, d0) pulse.measure_all() qobj = assemble(sched, backend=backend, shots=512) scheds, run_config, header = disassemble(qobj) -
새로운 kwarg,
coord_type가qiskit.visualization.plot_bloch_vector(). 이 kwarg를 사용하면 생성된 시각화에서 블로흐 구체에서 벡터의 위치를 설명하는 입력 파라미터에 사용되는 좌표계를 변경할 수 있습니다. 이 새로운 kwarg에는'cartesian'(기본값)과'spherical'의 두 가지 값이 지원됩니다.coord_typekwarg가'spherical'로 설정된 경우 입력되는 파라미터 목록은[r, theta, phi]형식이며, 여기서r은 반경,theta은 +z 방향의 경사도,phi은 +x 방향의 방위각입니다. 예를 들어,from numpy import pi from qiskit.visualization import plot_bloch_vector x = 0 y = 0 z = 1 r = 1 theta = pi phi = 0 # Cartesian coordinates, where (x,y,z) are cartesian coordinates # for bloch vector plot_bloch_vector([x,y,z])plot_bloch_vector([x,y,z], coord_type="cartesian") # Same as line above# Spherical coordinates, where (r,theta,phi) are spherical coordinates # for bloch vector plot_bloch_vector([r, theta, phi], coord_type="spherical") -
펄스
Schedule객체는 이제 매개 변수에ParameterExpression객체를 사용할 수 있습니다.예를 들어,
from qiskit.circuit import Parameter from qiskit import pulse alpha = Parameter('⍺') phi = Parameter('ϕ') qubit = Parameter('q') amp = Parameter('amp') schedule = pulse.Schedule() schedule += SetFrequency(alpha, DriveChannel(qubit)) schedule += ShiftPhase(phi, DriveChannel(qubit)) schedule += Play(Gaussian(duration=128, sigma=4, amp=amp), DriveChannel(qubit)) schedule += ShiftPhase(-phi, DriveChannel(qubit))매개변수 할당은
assign_parameters()메서드를 통해 이루어집니다:schedule.assign_parameters({alpha: 4.5e9, phi: 1.57, qubit: 0, amp: 0.2})표현식 및 부분 할당도 작동합니다:
beta = Parameter('b') schedule += SetFrequency(alpha + beta, DriveChannel(0)) schedule.assign_parameters({alpha: 4.5e9}) schedule.assign_parameters({beta: phi / 6.28}) -
새로운 시각화 기능
timeline_drawer()이 모듈에 추가되었습니다qiskit.visualization모듈에 새로운 시각화 함수가 추가되었습니다.예를 들어,
from qiskit.visualization import timeline_drawer from qiskit import QuantumCircuit, transpile from qiskit.test.mock import FakeAthens qc = QuantumCircuit(2) qc.h(0) qc.cx(0,1) timeline_drawer(transpile(qc, FakeAthens(), scheduling_method='alap'))
업그레이드 주의사항
-
클래스와 서브클래스에 대한 생성자의
paramskwarg에 대한 타입 검사가 변경되었습니다Gate클래스와 그 서브클래스의 생성자가 변경되었습니다. 이전에는 모든Gate매개변수는 클래스에서 정의된 허용된 유형 집합에 있어야 했습니다Instruction클래스에 정의된 유형 집합이어야 했습니다. 이제 새로운 메서드validate_parameter()를 사용하여 매개변수 유형이 유효한지 여부를 확인합니다. 하위 클래스에서 이 메서드의 정의는 부모 클래스보다 우선합니다. 예를 들어UnitaryGate는numpy.ndarray유형의 매개 변수를 허용하고, 해당 매개 변수가numpy.ndarray인 경우 반환하는 사용자 지정validate_parameter()메서드를 정의합니다. 이것은 부모 클래스에 정의된 함수보다 우선합니다Gate.UnitaryGate을 새 클래스의 부모로 사용하는 경우, 새 자식 클래스에서 자체 메서드를 정의하지 않는 한 이validate_parameter메서드가 사용됩니다. -
이전에 사용되지 않는 메서드, 인수 및
n_qubits및numberofqubits이라는 이름의 속성이 제거되었습니다. 이는 0.13.0 릴리스에서 더 이상 사용되지 않습니다. 전체 변경 사항은 다음과 같습니다:클래스이전새로 작성QuantumCircuitn_qubitsnum_qubitsPaulinumberofqubitsnum_qubits함수이전 인수새 인수qiskit.circuit.random.random_circuit()n_qubitsnum_qubitsqiskit.circuit.library.MSGaten_qubitsnum_qubits -
매개변수화된
Gate인스턴스를 삽입하면QuantumCircuit에 삽입하면 이제 회로에 사용되는 해당 게이트의 복사본이 생성됩니다. 회로에 삽입된 인스턴스가 변경되면 더 이상 회로의 게이트에 반영되지 않습니다. 이 변경 사항은 매개변수화된 단일 객체를 여러 회로에 삽입할 때 발생하는 문제를 해결하기 위해Gate객체를 여러 회로에 삽입할 때 발생하는 문제를 해결했습니다. -
함수
qiskit.result.marginal_counts()함수는 이제 기본적으로 인스턴스 매개변수인qiskit.result.Result인스턴스 파라미터를 수정하지 않습니다. 이전에는Result객체가 항상 제자리에서 수정되었습니다. 새로운 kwarginplace이 추가되었습니다marginal_counts()를 추가하여inplace=True설정 시 이전 동작을 사용할 수 있도록 했습니다. -
정의가
U3Gate정의가 변경되었습니다UGate클래스로 변경되었습니다. 클래스는UGate클래스에는 정의가 없습니다. 따라서 더 이상 U3 및 CX 측면에서 모든 회로를 풀 수는 없습니다. 대신 모든 회로에 U와 CX를 사용할 수 있습니다. -
더 이상 사용되지 않는 키스킷 테라 실행 지원( Python 3.5 )이 제거되었습니다. 이번 릴리스부터 키스킷 테라를 사용하려면 이제 최소 Python 3.6 을 사용해야 합니다. Python 3.5 을 사용하는 경우 마지막으로 작동하는 버전은 키스킷 테라 0.15.2 입니다.
-
에서
PulseBackendConfiguration의hamiltonian속성에서vars필드는 이제 이전에 사용된 GHz 대신 Hz 단위로 반환됩니다. 이 변경은 클래스의 다른 속성과 함께 사용되는 단위와 일관성을 유지하기 위해 이루어졌습니다. -
의 첫 번째 위치 인수로 사전을 전달하는 기능은 이전에 더 이상 지원되지 않았습니다
DAGNode생성자의 첫 번째 위치 인자로 사전을 전달하던 이전 지원이 제거되었습니다. 첫 번째 위치 인수에 사전을 사용하는 것은 0.13.0 릴리스에서 더 이상 사용되지 않습니다. 객체를 생성하려면DAGNode객체를 생성하려면 이제 생성자에서 어트리뷰트를 kwarg로 직접 전달해야 합니다. -
회로 게이트 메서드의 키워드 인자(예:
qiskit.circuit.QuantumCircuit.cx)q,ctl*,tgt*는 0.12.0 릴리스에서 더 이상 사용되지 않으며 제거되었습니다. 대신qubit,control_qubit*및target_qubit*만 이러한 메서드의 명명된 인수로 사용할 수 있습니다. -
이전에 사용되지 않는 모듈
qiskit.extensions.standard이 제거되었습니다. 이 모듈은 0.14.0 릴리스 이후 더 이상 사용되지 않습니다. 대신qiskit.circuit.library를 대신 사용할 수 있습니다. 또한 이전에qiskit.extensions.standard에 있던 모든 게이트 클래스는 여전히qiskit.extensions. -
이전에 사용되지 않는 모듈의 게이트
qiskit.extensions.quantum_initializer:DiagGate, UCG`,UCPauliRotGate,UCRot,UCRXGate,UCX,UCRYGate,UCY,UCRZGate,UCZ가 제거되었습니다. 이들은 모두 0.14.0 릴리스에서 사용되지 않으며 회로 라이브러리에서 대체 기능을 사용할 수 있습니다(qiskit.circuit.library). -
이전에 사용되지 않던
qiskit.circuit.QuantumCircuit게이트 메서드iden()가 제거되었습니다. 이 기능은 0.13.0 릴리스에서 더 이상 사용되지 않으며i()또는id()를 대신 사용할 수 있습니다.
지원 중단 노트
-
클래스 및 서브클래스의 생성자에 대한
paramskwarg의 파라미터에numpy.ndarray사용은 더 이상 사용되지 않습니다Gate클래스 및 서브클래스의 생성자에 대한 매개변수 사용은 더 이상 사용되지 않으며 향후 릴리스에서 제거될 예정입니다. 이는parms유형 검사가 처리되는 방식에 대한 리팩터링의 일부로 수행되었습니다Gate클래스에 대해 처리하는 방식에 대한 것입니다. 의 서브클래스인 사용자 정의 게이트 클래스가 있는 경우, 직접(또는 계층 구조의 다른 부모를 통해)Gate의 하위 클래스인 사용자 정의 게이트 클래스가 있는 경우(또는 계층 구조의 다른 부모를 통해)ndarray매개 변수를 허용하는 경우, 허용되는 매개 변수 유형을 반환하는 클래스의 사용자 정의validate_parameter()메서드를 정의하여 허용된 매개변수 유형을 반환해야 합니다. 예를 들어,def validate_parameter(self, parameter): """Custom gate parameter has to be an ndarray.""" if isinstance(parameter, numpy.ndarray): return parameter else: raise CircuitError("invalid param type {0} in gate " "{1}".format(type(parameter), self.name)) -
속성
num_ancilla_qubits속성의PiecewiseLinearPauliRotations및PolynomialPauliRotations클래스의 속성은 더 이상 사용되지 않으며 향후 릴리스에서 제거될 예정입니다. 대신 속성num_ancillas를 대신 사용해야 합니다. 이것은 일관성을 유지하기 위해QuantumCircuit메서드num_ancillas(). -
클래스는 더 이상 사용되지 않습니다
qiskit.circuit.library.MSGate클래스는 더 이상 사용되지 않지만 이전 작업의 로드를 허용하기 위해 그대로 유지됩니다. 대신 사용해야 하는qiskit.circuit.library.GMS클래스로 대체되었습니다. -
MSBasisDecomposer트랜스파일러 패스는 더 이상 사용되지 않으며 향후 릴리스에서 제거될 예정입니다. 대신qiskit.transpiler.passes.BasisTranslator패스를 대신 사용할 수 있습니다. -
메서드
QuantumCircuit메서드u1,u2및u3는 이제 더 이상 사용되지 않습니다. 대신 다음과 같은 대체품을 사용할 수 있습니다.u1(theta) = p(theta) = u(0, 0, theta) u2(phi, lam) = u(pi/2, phi, lam) = p(pi/2 + phi) sx p(pi/2 lam) u3(theta, phi, lam) = u(theta, phi, lam) = p(phi + pi) sx p(theta + pi) sx p(lam)게이트 클래스 자체,
U1Gate,U2Gate와U3Gate는 그대로 유지되어 이전 작업을 로드할 수 있습니다.
버그 수정
- 클래스의
Result클래스의 메서드data(),get_memory(),get_counts(),get_unitary()를 사용하여 결과를 가져오려고 시도할 때get_statevector ` will now emit a warning when the ``experiment`()kwarg가 지정됩니다QuantumCircuit또는Schedule인스턴스 이름과 일치하는 항목이Result객체에 두 개 이상 있을 때 지정됩니다. 이 이름과 일치하는 첫 번째 항목만 반환된다는 점에 유의하세요. 3207 수정 - 메서드의
qiskit.circuit.QuantumCircuit메서드append()를 사용하여 하나의 파라미터화된 게이트 인스턴스를 여러 회로에 삽입할 수 있습니다. 이렇게 하면 매개변수화된 단일 객체를 여러 회로에 삽입하면Gate객체를 여러 회로에 삽입하면 한 회로에 매개변수가 할당된 경우 오류가 발생했던 이전 문제를 해결했습니다. 수정 #4697 - 이전에는
qiskit.execute.execute()함수가backend및pass_managerkwarg를 동시에 지정하는 것을 잘못 허용했습니다.execute()으로의 통화에서backend과pass_manager을 함께 사용할 수 있도록 수정되었습니다. 수정 #5037 - 메서드의
QuantumCircuit메서드unitary()메서드가qarg인수에 단일 정수를 허용하도록 수정되었습니다(1쿼비트 단위를 추가할 때).qargs인수에 허용되는 유형은 이제int,Qubit또는 정수 목록입니다. 수정 #4944 - 이전에는 내부 데이터 속성이 아직 채워지지 않은 경우
BlueprintCircuit객체에서inverse()호출이 실패할 수 있었습니다.inverse()호출이 회로의 역을 생성하기 전에 내부 데이터를 채우도록 수정되었습니다. 수정 #5140 - 빈 데이터 사전에서 객체를 만들 때 발생하는
qiskit.result.Counts객체를 생성할 때 발생하는 문제를 수정했습니다. 이제 빈Counts객체가 생성됩니다. 메서드도most_frequent()메서드도 객체가 비어 있을 때 더 자세한 설명이 포함된 예외를 발생하도록 업데이트되었습니다. 수정 #5017 UnitaryGate의ctrl_state설정이 두 번 적용되던 버그를 수정했습니다; 제어된 유니티의 행렬을 생성할 때 한 번, 그리고 제어된 유니티의definition()메서드를 호출할 때 한 번, 그리고qiskit.circuit.ControlledGate클래스의 메서드를 호출할 때 한 번. 이렇게 하면ctrl_state설정이 아무런 효과가 없는 것처럼 보일 수 있습니다.- 이전에는
ControlledGate메서드inverse()메서드는 경우에 따라ctrl_state매개 변수를 보존하지 못했습니다. 호출하면inverse()을 호출하면 출력에ctrl_state값이 유지되도록 수정되었습니다. - 회로 서랍의
mpl출력 백엔드에서 버그를 수정했습니다qiskit.circuit.QuantumCircuit.draw()및qiskit.visualization.circuit_drawer()style가 문자열로 설정된 경우 서랍이 실패할 수 있는 버그를 수정했습니다. 올바른 동작은 해당 문자열을 시각화에 대한 스타일 시트가 포함된 JSON 파일의 경로로 취급하는 것입니다. 이 문제가 수정되었으며 스타일 시트의 JSON 파일을 로드할 수 없는 경우 경고가 표시됩니다. - 를 통해 QASM 파일을 로드할 때 발생하는 오류 수정
from_qasm_file()또는from_qasm_str()u,phase(p),sx, 또는sxdg게이트가 QASM 파일에 있는 경우 로드에 실패하는 오류를 수정했습니다. 수정 #5156 - 단 한 번의 2쿼비트 연산으로 정의된 게이트를 언롤링/분해할 때 레지스터가 잘못 매핑될 수 있는 버그를 수정했습니다.
에어 0.7.0
Prelude
이번 0.7.0 릴리스에는 다양한 성능 개선과 시뮬레이터 인터페이스의 대폭적인 개선이 포함되어 있으며 Python 3.5 에 대한 지원이 중단됩니다. 주요 인터페이스 변경 사항은 구성 가능한 시뮬레이터 백엔드 및 IBMQ 백엔드에서 사전 구성된 시뮬레이터를 구성하는 것입니다. 1 및 2 큐비트 회전 게이트에 대한 새로운 지원을 포함하여 대부분의 키스킷 회로 라이브러리 표준 게이트에 대한 노이즈 모델 기반 게이트 지원도 확장되었습니다. 성능 개선 사항에는 밀도 행렬 및 단일 시뮬레이션 방법에 SIMD 지원 추가, 상태 벡터 및 밀도 행렬 스냅샷을 사용하여 메모리 사용량 감소 및 회로 성능 개선, 게이트 융합 회로 최적화에 크라우스 명령어 지원을 추가하여 노이즈가 많은 상태 벡터 시뮬레이션의 성능을 크게 개선하는 것 등이 있습니다.
새 기능
-
에 대한 기본 게이트 지원을 추가합니다
qiskit.circuit.Delay인스트럭션에 대한 지원을 추가합니다.StatevectorSimulator,UnitarySimulator,QasmSimulator. 이 게이트는 시뮬레이션 중에 아이덴티티 게이트로 취급되며 지연 길이 파라미터는 무시됩니다. -
단일 큐비트 게이트에 대한 베이스 게이트 지원을 추가합니다
qiskit.circuit.library.UGateQasmSimulator를StatevectorSimulator,UnitarySimulator, 그리고"statevector","density_matrix","matrix_product_state","extended_stabilizer"메서드에 추가합니다. -
위상 게이트에 대한 기본 게이트 지원을 추가합니다
qiskit.circuit.library.PhaseGate를StatevectorSimulator,StatevectorSimulator,UnitarySimulator, 그리고QasmSimulator의"statevector","density_matrix","matrix_product_state","extended_stabilizer"메서드에 추가합니다. -
제어 위상 게이트에 대한 기본 게이트 지원을 추가합니다
qiskit.circuit.library.CPhaseGateQasmSimulator를StatevectorSimulator,StatevectorSimulator,UnitarySimulator, 그리고"statevector","density_matrix","matrix_product_state"메서드에 추가합니다. -
다중 제어 위상 게이트에 대한 지원을 추가합니다
qiskit.circuit.library.MCPhaseGate를StatevectorSimulator,UnitarySimulator, 그리고"statevector"의QasmSimulator메서드에 추가합니다. -
게이트에 대한 지원을 추가합니다
qiskit.circuit.library.SXGate를StatevectorSimulator,UnitarySimulator,QasmSimulator에 추가합니다. -
1 및 2-큐비트 키스킷 회로 라이브러리 로테이션 게이트에 대한 지원 추가
RXGate,RYGate,RZGate,RGate,RXXGate,RYYGate,RZZGate,RZXGate의StatevectorSimulator,UnitarySimulator, 그리고"statevector"및"density_matrix"의QasmSimulator. -
QasmSimulator의StatevectorSimulator,UnitarySimulator,"statevector"방식에 다중 제어 회전 게이트"mcr","mcrx","mcry","mcrz"에 대한 지원을 추가합니다. -
시뮬레이터 백엔드를 구성할 수 있도록 합니다. 이를 통해 각 시뮬레이터 백엔드 오브젝트에 대해 시뮬레이션 방법 및 노이즈 모델과 같은 영구 옵션을 설정할 수 있습니다.
QasmSimulator및PulseSimulator은IBMQBackend백엔드 객체에서 :meth:`~qiskit.providers.aer.QasmSimulator.from_backend 메서드를 사용하여 구성할 수도 있습니다.QasmSimulator의 경우 백엔드 구성 및 속성을 기반으로 커플링 맵, 기준 게이트 및 기본 디바이스 노이즈 모델을 구성합니다.PulseSimulator의 경우 백엔드 구성, 속성 및 기본값에서 시스템 모델과 기본값이 자동으로 구성됩니다.예를 들어 노이즈 밀도 행렬 시뮬레이터 백엔드는
QasmSimulator(method='density_matrix', noise_model=noise_model)으로, 이상적인 행렬 제품 상태 시뮬레이터는QasmSimulator(method='matrix_product_state')으로 구성할 수 있습니다.백엔드에서 구성된
PulseSimulator인스턴스는 원래 백엔드를 대체하는 드롭인 역할을 하므로 실제 백엔드를 사용하기 전에 시뮬레이터에서 코드를 테스트할 때와 같이 시뮬레이터와 실제 백엔드를 쉽게 교체할 수 있다는 이점이 있습니다. 예를 들어, 다음 코드 블록에서는FakeArmonk()백엔드에서PulseSimulator을 인스턴스화합니다. 모든 구성 및 기본 데이터는 시뮬레이터 인스턴스에 복사되므로assemble에 인수로 전달되면 원래 백엔드가 제공된 것처럼 작동합니다(예:FakeArmonk의 기본값이assemble에 존재하고 사용됨).armonk_sim = qiskit.providers.aer.PulseSimulator.from_backend(FakeArmonk()) pulse_qobj = assemble(schedules, backend=armonk_sim) armonk_sim.run(pulse_qobj)위의 예는 작은 예시이지만, 백엔드 속성을 사용하여 보정 실험을 구성하는 경우와 같이 더 복잡한 워크플로우에서 '드롭인 교체' 동작을 통해 사용성을 크게 개선할 수 있습니다.
-
StatevectorSimulator,UnitarySimulator,QasmSimulator의 상태 벡터 메서드에 qobj 전역 단계에 대한 지원을 추가합니다. -
일반적인 크라우스 노이즈가 있는 노이즈 상태 벡터 시뮬레이션에 게이트 융합을 적용할 수 있는 크라우스 방법을 게이트 융합 회로 최적화에 추가하여 일반적인 노이즈 상태 벡터 시뮬레이션 성능을 개선합니다.
-
상태 벡터 및 밀도 행렬 스냅샷에 이동 시맨틱을 사용하여
QasmSimulator의 "statevector" 및 "density_matrix" 메서드가 회로의 최종 명령어인 경우 해당 메서드에 대한 이동 시맨틱을 사용하세요. 이렇게 하면 시뮬레이터의 메모리 사용량이 줄어들고 결과에서 큰 배열을 복사하지 않아도 되므로 성능이 향상됩니다. -
NoiseModel의"matrix_product_state"메서드에서QasmSimulator의 일반 크라우스QauntumError게이트 오류에 대한 지원을 추가합니다. -
QasmSimulator의"matrix_product_state"메서드에 밀도 매트릭스 스냅샷 명령qiskit.providers.aer.extensions.SnapshotDensityMatrix에 대한 지원을 추가합니다. -
상태 벡터 시뮬레이션 방법의 SIMD 벡터화를 유니타리 행렬, 슈퍼 연산자 행렬 및 밀도 행렬 시뮬레이션 방법으로 확장합니다.
UnitarySimulator,"density_matrix", 게이트 퓨전 및 노이즈 시뮬레이션의QasmSimulator방법을 사용하여 대략 2x 성능 향상 일반 시뮬레이션을 제공합니다. -
Pybind11 와 더 잘 통합되는 사용자 정의 벡터 클래스를 C++ 코드에 추가합니다. 이는 최종 시뮬레이터 상태의 Python 바인딩 중에 메모리 복사를 피함으로써
StatevectorSimulator의 메모리 요구 사항을 충족합니다.
업그레이드 주의사항
-
이제 AER은 일부 행렬 관련 계산을 수행하기 위해 Lapack을 사용합니다. OpenBlas ( Linux 및 Macos 일반 OpenBlas 배포판에서 이미 사용 가능, Windows 버전은 AER과 함께 배포됨) 또는 MacOS 의 가속 프레임워크와 함께 번들로 제공되는 Lapack 라이브러리를 사용합니다.
-
더 이상 사용되지 않는 qiskit-aer 실행 지원( Python 3.5 )이 제거되었습니다. Qiskit-aer >= 0.7.0 를 사용하려면 이제 Python 3.6 이상이 필요합니다. Python 3.5 을 사용하는 경우 마지막으로 작동하는 버전은 qiskit-aer 0.6.x 입니다.
-
게이트 퓨전 기본 임계값을 업데이트하여
StatevectorSimulator및QasmSimulator에서 상태 벡터 시뮬레이션을 위한 14 큐비트 이상의 회로에 게이트 퓨전이 적용되도록 합니다.QasmSimulator의"density_matrix"방법과UnitarySimulator의 경우 7 큐비트 이상의 회로에 게이트 융합이 적용됩니다.사용자 지정 큐비트 임계값은
fusion_threshold백엔드 옵션을 사용하여 설정할 수 있습니다backend.set_options(fusion_threshold=10) -
OpenMP 쿼비트 임계값 매개변수의 동작과 일치하도록
fusion_threshold백엔드 옵션을 변경하여 쿼비트 수가 임계값과 같거나 임계값을 초과할 때 융합을 적용하도록 변경합니다.
지원 중단 노트
qiskit.providers.aer.noise.NoiseModel.set_x90_single_qubit_gates()는 사용자 지정 기준 게이트로 언롤링하는 기능이 키스킷 트랜스파일러에 추가되었으므로 더 이상 사용되지 않습니다. X90 기반 노이즈 모델을 사용하는 올바른 방법은 노이즈 모델에서 Sqrt(X)"sx"또는"rx"게이트와 단일 큐비트 위상 게이트"u1","rx"또는"p"중 하나에 노이즈를 정의하는 것입니다.- 스냅샷 지침의
variancekwarg는 더 이상 사용되지 않습니다. 이 함수는 측정 통계로 인한 분산이 아니라 노이즈 모델 샘플링으로 인한 스냅샷의 샘플 분산을 계산하기 때문에 종종 잘못 사용되는 경우가 있었습니다. 노이즈 모델링 분산이 필요한 경우 단일 샷 스냅샷을 사용하여 포스트 프로세싱에서 수동으로 분산을 계산할 수 있도록 해야 합니다.
버그 수정
StatevectorSimulator의 버그를 수정하여 AVX2 이 있는 시스템에서도 SIMD/AVX2 지원 없이 항상 더블 정밀도의 CPU로 실행되거나 백엔드 옵션에 단일 정밀도 또는 GPU 방식이 지정된 경우 항상 더블 정밀도로 실행되는 문제를 해결했습니다.- 컨테이너 요소의 참조가 아닌 복사본을 반복하던 C++ 코드의 일부 포루프를 수정했습니다.
- 스냅샷 데이터가 가능한 경우 이동되지 않고 항상 C++에서 Python 로 복사되던 버그가 수정되었습니다. 이렇게 하면 대용량 상태 벡터 또는 밀도 행렬 스냅샷을 사용할 때 메모리 사용량이 절반으로 줄어들고 시뮬레이션 시간이 개선됩니다.
- 스태빌라이저 시뮬레이터에서 올바른 Y 기대값을 반환하도록 State::snapshot_pauli_expval을 수정했습니다. 자세한 내용은 895번 <https://github.com/Qiskit/qiskit-aer/issues/895> 을 참조하세요.
- 컨트롤러_execute 래퍼가 자유 함수가 아닌 함수(객체)로 조정되었습니다. 무엇보다도 multiprocessing.pool.map 호출에서 사용할 수 있습니다.
StatevectorSimulator및UnitarySimulator에 대해 누락된 사용 가능한 메모리 검사를 추가합니다. 회로의 큐비트 수를 시뮬레이션하는 데 필요한 메모리가 시스템의 사용 가능한 메모리를 초과하는 경우 예외가 발생합니다.
이그니스 0.5.0
Prelude
이번 릴리스에는 기대값 측정 오류 완화를 위한 새로운 모듈, 양자 체적 실험을 위한 향상된 플로팅 기능, 몇 가지 버그 수정 및 Python 3.5 에 대한 드롭 지원이 포함되어 있습니다.
새 기능
-
qiskit.ignis.verification.randomized_benchmarking.randomized_benchmarking_seq()함수를 사용하면 게이트 오브젝트를 인터리브된_엘렘으로 선택적으로 입력할 수 있습니다. 또한 CNOT-Dihedral 클래스qiskit.ignis.verification.randomized_benchmarking.CNOTDihedral에는 새로운 메서드_instruction이 추가되었으며, 기존의 from_circuit 메서드에는 ( QuantumCircuit 외에) Instruction을 선택적으로 입력할 수 있습니다. -
이제
qiskit.ignis.verification.randomized_benchmarking.CNOTDihedral에 다음과 같은 새로운 기능이 추가되었습니다. 다양한 유형의 객체에서 초기화: CNOTDihedral, ScalarOp, QuantumCircuit, 인스트럭션 및 폴리. To_matrix를 사용하여 행렬로 변환하고 to_operator를 사용하여 연산자로 변환합니다. 텐서 프로덕트 메서드 텐서 및 확장. 접속사, 활용사, 전치사 메서드를 사용하여 접속사, 활용사, 전치사를 계산합니다. Is_cnotdihedral 메서드를 사용하여 요소가 CNOTDihedral인지 확인합니다. CNOTDihedral 요소를 회로로 _circuit로 분해하는 방법이 decompose_cnotdihedral_일반 함수에 따라 원하는 수의 큐비트를 허용하도록 확장되었습니다. -
완화 모듈에 기대값 측정 오류 완화를 추가합니다. 카운트 사전에서 대각선 연산자의 기대값을 계산할 때 완전한 N-큐비트 할당 행렬, 단일 큐비트 텐서드 할당 행렬 또는 연속 시간 마르코프 프로세스(CTMP) [1] 측정 오류 완화를 사용할 수 있도록 지원합니다. 기대값은
qiskit.ignis.mitigation.expectation_value()함수를 사용하여 계산합니다.측정 오류 완화기를 보정하기 위한 보정 회로는
qiskit.ignis.mitigation.expval_meas_mitigator_circuits()함수를 사용하여 생성하고,qiskit.ignis.mitigation.ExpvalMeasMitigatorFitter클래스를 사용하여 결과를 장착합니다. 피터는 완화를 적용하기 위해expectation_value()함수에 인자로 제공할 수 있는 완화자 객체를 반환합니다.[1] S 브라비, S 셸던, A 칸달라, DC 맥케이, JM 감베타,
멀티쿼비트 실험에서 측정 오류 완화하기, arXiv:2006.14044 [quant-ph].
예:
다음 예는
'tensored'방법을 사용하여 5-큐비트 기대값 측정 오류 완화기를 보정하는 방법을 보여줍니다.from qiskit import execute from qiskit.test.mock import FakeVigo import qiskit.ignis.mitigation as mit backend = FakeVigo() num_qubits = backend.configuration().num_qubits # Generate calibration circuits circuits, metadata = mit.expval_meas_mitigator_circuits( num_qubits, method='tensored') result = execute(circuits, backend, shots=8192).result() # Fit mitigator mitigator = mit.ExpvalMeasMitigatorFitter(result, metadata).fit() # Plot fitted N-qubit assignment matrix mitigator.plot_assignment_matrix()다음은 위의 완화기를 사용하여 측정 오류 완화를 기대값 계산에 적용하는 방법을 보여줍니다
from qiskit import QuantumCircuit # Test Circuit with expectation value -1. qc = QuantumCircuit(num_qubits) qc.x(range(num_qubits)) qc.measure_all() # Execute shots = 8192 seed_simulator = 1999 result = execute(qc, backend, shots=8192, seed_simulator=1999).result() counts = result.get_counts(0) # Expectation value of Z^N without mitigation expval_nomit, error_nomit = mit.expectation_value(counts) print('Expval (no mitigation): {:.2f} \u00B1 {:.2f}'.format( expval_nomit, error_nomit)) # Expectation value of Z^N with mitigation expval_mit, error_mit = mit.expectation_value(counts, meas_mitigator=mitigator) print('Expval (with mitigation): {:.2f} \u00B1 {:.2f}'.format( expval_mit, error_mit)) -
Numba를 선택적 종속성으로 추가합니다. Numba는 CTMP 방식으로 기대값 측정 오류 완화에 사용되는
qiskit.ignis.mitigation.CTMPExpvalMeasMitigator클래스의 성능을 크게 향상시키는 데 사용됩니다. -
qiskit.ignis.verification.quantum_volume.QVFitter에 두 가지 메서드를 추가합니다.qiskit.ignis.verification.quantum_volume.QVFitter.calc_z_value()를 클릭하여 평균 및 표준 편차 시그마를 사용하여 표준 정규 분포의 z 값을 계산합니다. 시그마가 0이면 경고를 발생시키고 시그마에 작은 값( 1e-10 )을 할당하여 코드가 계속 실행되도록 합니다.qiskit.ignis.verification.quantum_volume.QVFitter.calc_confidence_level()를 클릭하여 z 값을 사용하여 신뢰 수준을 계산합니다.
-
Hmean < 2/3인 경우에도 신뢰 수준을 저장합니다
qiskit.ignis.verification.quantum_volume.QVFitter.qv_success(). -
qiskit.ignis.verification.quantum_volume.QVFitter.calc_statistics()에 이항 분포에 기반한 통계 계산 방법에 대한 설명을 추가합니다. -
plot_qv_data()메서드matplotlib.Figure객체를 반환하도록qiskit.ignis.verification.QVFitter메서드가 업데이트되었습니다. 이전에는 아무것도 반환하지 않았습니다. 수치를 반환하면 더 큰matplotlib워크플로우에 시각화를 더 쉽게 통합할 수 있습니다. -
qiskit.ignis.verification.QVFitter방법(qiskit.ignis.verification.QVFitter.plot_qv_data())으로 생성된 그림의 오차 막대는 2 시그마 신뢰 구간을 나타내도록 업데이트되었습니다. 이전에는 오차 막대가 1 시그마 신뢰 구간을 나타냅니다. 퀀텀 볼륨 벤치마킹의 성공 기준은 일방적인 2 시그마 신뢰도( ~97.7 %)로 2/3 이상의 높은 출력 확률을 요구합니다. 오차 막대를 2 시그마 신뢰 구간을 나타내도록 변경하면 그림에서 성공 여부를 쉽게 식별할 수 있습니다. -
qiskit.ignis.verification.QVFitter메서드qiskit.ignis.verification.QVFitter.plot_qv_data()에 새로운 kwarg,figsize가 추가되었습니다. 이 kwarg는(x, y)형식의 튜플을 가져옵니다. 여기서x및y은 생성된 플롯을 만들기 위한 인치 단위의 치수입니다. -
퀀텀 볼륨 64 논문의 그림 2a 과 유사한 무거운 출력 확률(HOP) 대 시도 횟수 그래프에
qiskit.ignis.verification.quantum_volume.QVFitter.plot_hop_accumulative()방법이 추가되었습니다( arXiv:2008.08571 ). 개별 트라이얼의 HOP는 스캐터로 표시하고 누적 HOP는 빨간색 선으로 표시합니다. 2 시그마 신뢰 구간은 음영 영역으로 표시되고 2/3 성공 임계값은 점선으로 표시됩니다. -
qiskit.ignis.verification.quantum_volume.QVFitter.plot_qv_trial()메서드가 추가되어 키스킷 테라의 메서드인qiskit.visualization.plot_histogram()메서드를 활용합니다. 비트 문자열 수는 이상적인(비어 있는) 값과 실험적인(채워진) 값에 대해 겹치는 히스토그램으로 표시됩니다. 실험적인 헤비 출력 확률은 범례에 표시되어 있습니다. 중앙값 확률은 빨간색 점선으로 표시됩니다.
업그레이드 주의사항
- 더 이상 사용되지 않는 qiskit-ignis 실행 지원( Python 3.5 )이 제거되었습니다. Qiskit-ignis >= 0.5.0 를 사용하려면 이제 최소한 Python 3.6 이 필요합니다. Python 3.5 을 사용하는 경우 마지막으로 작동하는 버전은 qiskit-ignis 0.4.x 이다.
버그 수정
- 종료 횟수가 5회를 초과하는 요소에 대한
qiskit.ignis.verification.randomized_benchmarking.CNOTDihedral클래스의 버그 수정. - QV 논문 알고리즘 1에 정의된 대로 z = 2에 해당하는
qiskit.ignis.verification.quantum_volume.QVFitter.qv_success()에 대한 신뢰 수준 임계값을 0.977 으로 수정합니다. qiskit.ignis.verification.randomized_benchmarking.randomized_benchmarking_seq()에서 함수에 'rand_seed' 파라미터가 주어졌을 때 주어진 rb_패턴에서 같은 크기의 모든 서브시스템이 같은 게이트를 갖도록 하는 버그를 수정했습니다.
아쿠아 0.8.0
Prelude
이번 릴리스에서는 보소닉 문제에 대해 사용 가능한 방법을 실행할 수 있는 인터페이스를 도입합니다. 특히 진동 구조 계산을 실행하기 위한 전체 인터페이스를 도입했습니다.
이번 릴리스에서는 여기 상태 계산을 위한 인터페이스가 도입되었습니다. 이제 사용자가 일반적인 여기 상태 계산을 더 쉽게 만들 수 있습니다. 이 계산은 분자에 대한 관련 정보를 제공하는 드라이버, 문제를 큐비트 해밀턴으로 매핑하는 정보를 제공하는 변환, 그리고 마지막으로 솔버를 기반으로 합니다. 솔버는 여기 상태 계산이 수행되는 구체적인 방법(알고리즘)입니다. 이 구조는 접지 상태 계산 중 하나를 따릅니다. 결과는 단일 값이 아닌 기대값 목록을 사용하도록 수정됩니다. QEOM 및 NumpyEigensolver 은 새로운 구조에 맞게 조정되었습니다. 특정 필터를 사용하여 특정 대칭의 상태를 대상으로 하는 넘피 아이겐솔버를 실행하기 위해 팩토리가 도입되었습니다.
이제 Aer qasm_simulator를 사용한 VQE 기대치 계산은 기본적으로 예상 샷 노이즈 동작이 있는 계산을 사용합니다.
새 기능
-
다른 옵션을 조정해도 도움이 되지 않을 때 사용해야 하는 warm_start 옵션이 도입되었습니다. 이 옵션을 활성화하면 풀기 방법에서 반복 프로세스를 시작하기 전에 완화된 문제(모든 변수가 연속)를 먼저 풀고 그 해를 사용하여 최적화기의 상태를 초기화합니다.
-
이제 진폭 추정 알고리즘은
QuantumCircuit개체를 입력으로 사용하여 A 및 Q 연산자를 지정합니다. 이 변경 사항은 회로 라이브러리에GroverOperator을 도입하여 다양한 Q 연산자를 직관적이고 빠르게 구성할 수 있게 되었습니다. 예를 들어, 베르누이 실험은 이제 다음과 같이 구성할 수 있습니다import numpy as np from qiskit import QuantumCircuit from qiskit.aqua.algorithms import AmplitudeEstimation probability = 0.5 angle = 2 * np.sqrt(np.arcsin(probability)) a_operator = QuantumCircuit(1) a_operator.ry(angle, 0) # construct directly q_operator = QuantumCircuit(1) q_operator.ry(2 * angle, 0) # construct via Grover operator from qiskit.circuit.library import GroverOperator oracle = QuantumCircuit(1) oracle.z(0) # good state = the qubit is in state |1> q_operator = GroverOperator(oracle, state_preparation=a_operator) # use default construction in QAE q_operator = None ae = AmplitudeEstimation(a_operator, q_operator) -
조건부 위험 가치 ( CVaR ) 기대값을 계산할 수 있는 기능을 추가합니다.
최적화 문제의 목적 함수에 해당하는 대각선 관측 가능 H가 주어질 때, 우리는 종종 관측된 측정값의 평균 에너지를 최소화하는 데는 관심이 없습니다. 이러한 맥락에서 측정 결과 중 적어도 일부가 낮은 에너지를 달성하면 만족합니다. (화학 문제에는 절대 해당되지 않습니다).
이를 위해 변형 최적화 중에 가장 잘 관찰된 샘플을 비용 함수로 사용하는 것을 고려할 수 있습니다. 여기서 문제는 최적화 표면이 매끄럽지 않을 수 있다는 점입니다. 이 문제를 해결하기 위해 가장 잘 관찰된 샘플이 아니라 가장 잘 관찰된 샘플의 일부에 대한 평균을 사용하여 최적화 표면을 매끄럽게 만들 수 있습니다. 이것이 바로 CVaR 추정기가 수행하는 작업입니다 [1].
에서 을 실수로 지정하여 목적 함수를 계산하는 데 사용되는 가장 잘 관찰된 샘플의 비율을 지정합니다. , CVaR 이 표준 기대값과 동일한지 확인합니다. 마찬가지로 이면 CVaR 은 가장 잘 관찰된 샘플을 사용하는 것에 해당합니다. 의 중간 값은 이 두 목적 함수 사이를 보간합니다.
CVaR 을 사용하는 기능은 OperatorStateFn 의 새로운 하위 클래스 CVaRMeasurement 를 통해 오퍼레이터 흐름에 포함됩니다. 이 새로운 StateFn 객체는 OperatorMeasurement 객체와 동일한 방식으로 인스턴스화되지만, 알파 매개변수도 허용하고 is_measurement 속성을 True로 자동 적용한다는 점을 제외하면 다릅니다. CVaRStateFn 이 측정값이 아니라면 무엇을 나타내는지 불분명하다는 점에 유의하세요.
예:
qc = QuantumCircuit(1) qc.h(0) op = CVaRMeasurement(Z, alpha=0.5) @ CircuitStateFn(primitive=qc, coeff=1.0) result = op.eval()마찬가지로 표준 기대값에 해당하는 연산자는 CVaRExpectation 변환기를 사용하여 CVaR 기대값으로 변환할 수 있습니다.
예:
qc = QuantumCircuit(1) qc.h(0) op = ~StateFn(Z) @ CircuitStateFn(primitive=qc, coeff=1.0) cvar_expecation = CVaRExpectation(alpha=0.1).convert(op) result = cvar_expecation.eval()이 기법과 경험적 성능에 대한 자세한 내용은 [1을] 참조하세요.
참조 자료:
[1] : Barkoutsos, P. K., 난니치니, G., 로버트, A., 타베르넬리, I., 그리고 워너, S.,
" CVaR” 을 이용한 가변 양자 최적화 개선 arXiv:1907.04769
-
아이젠솔버 알고리즘을 위한 새로운 인터페이스
Eigensolver. -
화학 모듈에 여기 상태 계산을 위한 인터페이스가 추가되었습니다. 이제 사용자가 일반적인 여기 상태 계산을 더 쉽게 만들 수 있습니다. 이 계산은 분자에 대한 관련 정보를 제공하는
Driver, 문제를 큐비트 해밀턴으로 매핑하는 정보를 제공하는Transformation, 그리고 마지막으로 솔버를 기반으로 합니다. 솔버는 여기 상태 계산이 수행되는 구체적인 방법(알고리즘)입니다. 이 구조는 접지 상태 계산 중 하나를 따릅니다. 결과는 단일 값이 아닌 기대값 목록을 사용하도록 수정됩니다.QEOM및NumpyEigensolver은 새로운 구조에 맞게 조정되었습니다. 특정 필터를 사용하여 특정 대칭의 상태를 대상으로 하는 넘피 아이겐솔버를 실행하기 위해 팩토리가 도입되었습니다. -
페르미온 문제 해결을 위한 워크플로 외에도 보소닉 기저 및 여기 상태 계산을 위한 인터페이스가 추가되었습니다. 특히 진동 구조 계산을 실행하기 위한 전체 인터페이스를 도입했습니다.
-
화학 모듈에 새로운 접지 상태 솔버로
OrbitalOptimizationVQE가 추가되었습니다. 이 솔버를 사용하면 변화 매개변수와 분자의 궤도를 시뮬레이션으로 최적화할 수 있습니다. 이 알고리즘은 소콜로프 외...에 소개되어 있습니다, 화학 물리학 저널 152 (12). -
새로운 알고리즘이 추가되었습니다: 분자의 다양한 자유도를 따라 포텐셜 에너지 표면을 계산하기 위한 본 오픈하이머 포텐셜 에너지 표면입니다. 이 알고리즘은
BOPESSampler이라고 합니다. 또한 포텐셜 에너지 표면을 미리 정의된 포텐셜의 분석 함수에 맞추는 기능도 제공합니다. -
얻은 솔루션의 타당성 검사가 최적화 스택의 모든 옵티마이저에 추가되었습니다.
QuadraticProgram에 두 가지 새로운 메서드를 추가하여 구현했습니다: *get_feasibility_info(self, x: Union[List[float], np.ndarray])은 배열을 받아 이 솔루션이 실행 가능한지 여부와 위반된 변수 목록(위반된 바운드) 및 위반된 제약 조건 목록을 반환합니다. *is_feasible(self, x: Union[List[float], np.ndarray])는 배열을 받아 이 솔루션이 실행 가능한지 여부를 반환합니다. -
FixedIncomeExpectedValue,EuropeanCallDelta,GaussianConditionalIndependenceModel및EuropeanCallExpectedValue의 회로 기반 버전을qiskit.finance.applications에 추가합니다. -
그라데이션 프레임워크.
qiskit.operators.gradients양자 상태 또는 양자 상태를 나타내는 연산자가 주어집니다. 기대값인 그라데이션 프레임워크를 사용하면 그라데이션, 자연 그라데이션, 헤시안, 퀀텀 피셔 정보 등을 평가할 수 있습니다.입력 상태 |ψ〉와 파라미터화된 양자 상태 〈ψ(θ)〉 = V(θ)|ψ〉, 파라미터화된 연산자 O(ω)가 있다고 가정해 보겠습니다.
그라데이션: 각각 각각 을 계산하려고 합니다.
마지막 경우는 그라데이션 w.r.t 에 해당합니다. ψ(θ)의 샘플링 확률입니다. 이러한 기울기는 매개변수 이동, 단수의 선형 조합, 유한차분 방법 등 다양한 방법으로 계산할 수 있습니다.
예:
x = Parameter('x') ham = x * X a = Parameter('a') q = QuantumRegister(1) qc = QuantumCircuit(q) qc.h(q) qc.p(params[0], q[0]) op = ~StateFn(ham) @ CircuitStateFn(primitive=qc, coeff=1.) value_dict = {x: 0.1, a: np.pi / 4} ham_grad = Gradient(grad_method='param_shift').convert(operator=op, params=[x]) ham_grad.assign_parameters(value_dict).eval() state_grad = Gradient(grad_method='lin_comb').convert(operator=op, params=[a]) state_grad.assign_parameters(value_dict).eval() prob_grad = Gradient(grad_method='fin_diff').convert(operator=CircuitStateFn(primitive=qc, coeff=1.), params=[a]) prob_grad.assign_parameters(value_dict).eval()Hessians: resp. resp. resp. 를 계산하려고 합니다.
마지막 경우는 헤센 w.r.t 에 해당합니다. ψ(θ)의 샘플링 확률입니다. 1차 기울기와 마찬가지로 헤시안도 매개변수 이동, 단위의 선형 조합, 유한 차분 방법 등 다양한 방법으로 평가할 수 있습니다. 매개 변수의 튜플이 주어지면
Hessian().convert(op, param_tuple)2차 도함수의 값을 반환합니다. 매개변수 목록이 주어진 경우Hessian().convert(op, param_list)은 주어진 매개변수 순서에 따라 주어진 모든 매개변수에 대한 전체 헤시안 값을 반환합니다.QFI: 양자 피셔 정보 QFI는 입력 상태 |ψ〉와 파라미터화된 앙사츠 V(θ)에 의해 생성된 파라미터화된 양자 상태 |ψ(θ)〉 = V(θ)|ψ〉의 표현 능력을 나타내는 메트릭 텐서입니다. 순수 상태에 대한 QFI의 항목은 입니다.
이전 파생 유형과 마찬가지로 QFI는 단위 구현의 선형 조합에 기반한 전체 표현, 블록-대각선 및 중첩 방법에 기반한 대각선 표현 등 다양한 방법을 사용하여 계산할 수 있습니다.
예:
q = QuantumRegister(1) qc = QuantumCircuit(q) qc.h(q) qc.p(params[0], q[0]) op = ~StateFn(ham) @ CircuitStateFn(primitive=qc, coeff=1.) value_dict = {x: 0.1, a: np.pi / 4} qfi = QFI('lin_comb_full').convert(operator=CircuitStateFn(primitive=qc, coeff=1.), params=[a]) qfi.assign_parameters(value_dict).eval()QFI와 그라데이션의 조합은 다음과 같은 특별한 형태의 그라데이션으로 이어집니다
NaturalGradients: 자연 그라데이션은 그라데이션의 크기를 다시 조정하는 특수 그라데이션 방법 w.r.t 입니다. 를 해당 양자 피셔 정보(QFI)의 역수인 상태 매개변수 로 변환합니다. 이를 통해 그라디언트뿐만 아니라 QFI 방법과 정규화 방법을 선택할 수 있으며, QFI의 정확한 반전 대신 최소 제곱 솔버와 함께 사용됩니다:
예:
op = ~StateFn(ham) @ CircuitStateFn(primitive=qc, coeff=1.) nat_grad = NaturalGradient(grad_method='lin_comb, qfi_method='lin_comb_full', \ regularization='ridge').convert(operator=op, params=params)그라데이션 프레임워크는 qiskit.aqua.components.optimizers 의 최적화 도구와도 호환됩니다. 파생 클래스에는 해당 콜러블을 반환하는 gradient_wrapper() 함수가 함께 제공됩니다.
-
문제 인스턴스의 페르미온 및 보소닉 변환에 대한
transformations을 소개합니다. 페르미온 연산자를 큐비트 연산자로 변환합니다. 변환에 대한 각 클래스는fermionic_transformation접지 상태 속성 계산을 위한 알고리즘ground_state_solvers에 소개되어 있습니다. 계산은MinimumEigensolver또는AdaptVQE다음을 사용하여 수행할 수 있습니다.chemistry/results여기서 고유 상태_결과와 전자_구조_결과도 알고리즘에 사용됩니다. 화학 전용 최소 아이겐솔버를 초기화할 수 있는 최소 아이겐솔버 팩토리(minimum_eigensolver_factories) 소개 화학 애플리케이션을 위한 접지 상태 솔버로 궤도 최적화 vqeoovqe소개 -
새로운 알고리즘 결과 클래스:
Grover메서드_run()반환 클래스GroverResult.AmplitudeEstimation메서드_run()반환 클래스AmplitudeEstimationResult.IterativeAmplitudeEstimation메서드_run()반환 클래스IterativeAmplitudeEstimationResult.MaximumLikelihoodAmplitudeEstimation메서드_run()반환 클래스MaximumLikelihoodAmplitudeEstimationResult.모든 새로운 결과 클래스는 이전 결과 사전과 역호환됩니다.
-
새로운 선형 솔버 결과 클래스:
HHL메서드_run()반환 클래스HHLResult.NumPyLSsolver메서드_run()반환 클래스NumPyLSsolverResult.모든 새로운 결과 클래스는 이전 결과 사전과 역호환됩니다.
-
MinimumEigenOptimizationResult이제samples및eigensolver_result속성을 노출합니다. 후자는 최적화 도구가 사용하는 기본 알고리즘에서 얻으며 알고리즘에 따라 다릅니다.RecursiveMinimumEigenOptimizer이제 결과 클래스RecursiveMinimumEigenOptimizationResult의 인스턴스를 반환하며, 여기에는 기본 알고리즘에서 얻은 중간 결과가 포함될 수 있습니다. 전용 결과 클래스는 이 옵티마이저와 관련된 속성replacements및history을 노출합니다. 기록의 깊이는 최적화 도구의history매개변수로 관리됩니다. -
GroverOptimizer는 이제GroverOptimizationResult의 인스턴스를 반환하고 이 결과 클래스는operation_counts,n_input_qubits,n_output_qubits속성을 직접 노출합니다. 이러한 속성은 더 이상raw_results사전에서 사용할 수 없습니다. -
SlsqpOptimizer는 이제SlsqpOptimizationResult의 인스턴스를 반환하며, 이 결과 클래스는 SLSQP 구현과 관련된 추가 속성을 노출합니다. -
QuantumGenerator에QuantumCircuit객체를 제너레이터 회로로 전달할 수 있도록 지원합니다. -
CircuitStateFn.from_vector의 실제 입력 벡터에 대한 제한을 제거합니다. 이 메서드는 extensions.Initialize 을 호출합니다. 후자는 API와 문서에서 복잡한 입력 벡터를 명시적으로 지원합니다. 따라서 이러한 제한은 불필요한 것으로 보입니다.
-
Retworkx의 그래프 채색 알고리즘을 사용하여 AbelianGrouper 을 단순화했습니다. 숫자 기반 채색 알고리즘보다 빠릅니다.
-
인수가 없는 상태 함수 객체에서 상태 함수의
VectorStateFn표현을 반환하는eval호출을 허용합니다. 이는 인수가 전달되지 않으면MatrixOp표현을 반환하는OperatorBase.eval과 일관된 동작입니다. -
알고리즘에서 수행되는 최대 반복 횟수를 제한할 수 있도록
VQEAdapt클래스에max_iterations을 추가합니다. -
이제 Aer qasm_simulator를 사용한 VQE 기대치 계산은 기본적으로 예상 샷 노이즈 동작이 있는 계산을 사용합니다. 상태 벡터 시뮬레이터와 유사한 이상적인 출력으로 훨씬 빠른 특수 Aer 스냅샷 기반 계산을 여전히 선택할 수 있지만 이전과 마찬가지로 이제 더 이상 기본값으로 설정되지 않고 선택할 수 있습니다( 0.7 ).
업그레이드 주의사항
- 기존의 분석적 양자 그라데이션 하강(AQGD) 클래식 옵티마이저를 에포크가 포함된 AQGD로 확장했습니다. 이제 AQGD는 모멘텀 항, 분석 그래디언트, 파라미터화된 양자 게이트에 대한 맞춤형 스텝 길이 스케줄을 추가하여 그래디언트 하강 최적화를 수행합니다. 그래디언트는 목적 함수를 평가할 때 양자 회로를 사용하여 '분석적으로' 계산됩니다.
- 더 이상 사용되지 않는 qiskit-aqua 실행 지원( Python 3.5 )이 제거되었습니다. Qiskit-aqua >= 0.8.0 를 사용하려면 이제 최소한 Python 3.6 이 필요합니다. Python 3.5 을 사용하는 경우 마지막으로 작동하는 버전은 qiskit-aqua 0.7.x 이다.
- 새 종속성으로 retworkx를 추가했습니다.
지원 중단 노트
-
진폭 추정 알고리즘의
i_objective인수가objective_qubits으로 이름이 변경되었습니다. -
TransformationType
-
QubitMappingType
-
CircuitFactory및 파생 유형을 더 이상 사용하지 않습니다.CircuitFactory은QuantumCircuit에서 애플리케이션에 필요한 일부 기능이 누락되어 임시 클래스로 도입되었습니다. 이제 회로에 필요한 모든 기능을 갖추었으므로 회로 팩토리를 제거할 수 있습니다. 대체 항목은 다음 표에 나와 있습니다.Circuit factory class | Replacement ------------------------------------+----------------------------------------------- CircuitFactory | use QuantumCircuit | UncertaintyModel | - UnivariateDistribution | - MultivariateDistribution | - NormalDistribution | qiskit.circuit.library.NormalDistribution MultivariateNormalDistribution | qiskit.circuit.library.NormalDistribution LogNormalDistribution | qiskit.circuit.library.LogNormalDistribution MultivariateLogNormalDistribution | qiskit.circuit.library.LogNormalDistribution UniformDistribution | qiskit.circuit.library.UniformDistribution MultivariateUniformDistribution | qiskit.circuit.library.UniformDistribution UnivariateVariationalDistribution | use parameterized QuantumCircuit MultivariateVariationalDistribution | use parameterized QuantumCircuit | UncertaintyProblem | - UnivariateProblem | - MultivariateProblem | - UnivariatePiecewiseLinearObjective | qiskit.circuit.library.LinearAmplitudeFunction -
qiskit.optimization.converters.QuadraticProgramToIsing및qiskit.optimization.converters.IsingToQuadraticProgram변환 클래스는 더 이상 사용되지 않으며 향후 릴리스에서 제거될 예정입니다. 대신qiskit.optimization.QuadraticProgram대신to_ising()및from_ising()방법을 사용해야 합니다. -
qiskit.circuit.library에서WeightedAdder으로 서킷 라이브러리로 포팅된WeightedSumOperator을 더 이상 사용하지 않습니다. -
Core HamiltonianFermionicTransformationChemistry Operatortranformationsminimum_eigen_solvers/vqe_adaptapplications/molecular_ground_state_energy클래스는 클래스는 클래스는 클래스는 클래스는 클래스는 클래스는 클래스는 클래스는 클래스는 클래스는 클래스는 클래스는 클래스는 클래스는 클래스는 클래스는 클래스는 클래스는 클래스는 클래스는 클래스는 클래스는 클래스는 클래스는 클래스는 클래스는 클래스도 더 이상 사용되지 않습니다ground_state_solver -
Optimizer.SupportLevel중첩 열거형은OptimizerSupportLevel로 대체되고Optimizer.SupportLevel은 제거되었습니다. 예를 들어Optimizer.SupportLevel.required대신OptimizerSupportLevel.required을 사용합니다. -
UnivariateVariationalDistribution및MultivariateVariationalDistribution을QuantumGenerator에 대한 입력으로 사용 중지합니다. 대신 일반QuantumCircuit개체를 사용할 수 있습니다. -
AbelianGrouper.group_subops의 빠른 및 사용_nx 옵션은 향후 릴리스에서 제거될 예정입니다.
-
GSLS 옵티마이저 클래스는
__init__매개 변수max_iter를maxiter로 대체하여 더 이상 사용되지 않습니다. SPSA 최적화 클래스에서__init__매개변수max_trials를maxiter로 대체하여 사용되지 않습니다. 최적화_svm 함수는max_iters매개 변수를maxiter으로 대체하여 더 이상 사용되지 않습니다. ADMMParameters 클래스는__init__매개 변수max_iter를maxiter로 대체하여 더 이상 사용되지 않습니다.
버그 수정
- 활성 공간이 활성_(un)점유 매개변수를 통해 UCSSD에 명시적으로 제공된 경우 단일 여기 및 이중 여기로 구성된 UCCSD 여기 목록이 올바르게 생성되지 않았습니다.
- 진폭 추정 알고리즘의 경우, 오라클 쿼리 횟수를 Q 연산자/그로버 연산자가 적용된 횟수로 정의합니다. 여기에는 촬영 횟수가 포함됩니다. 이 요소는 MLAE와 IQAE에는 포함되었지만 '표준' QAE에는 누락되었습니다.
is_measurement프로퍼티가 변환된 StateFns 로 전파되도록 CircuitSampler.convert를 수정합니다.- :meth`~qiskit.aqua.operators.VectorStateFn.to_circuit_op`에서 계수 이중 계산을 수정했습니다.
- ID의 스칼라 배수인 항을 포함하는 연산자에서 PauliTrotterEvolution.convert를 호출하면 스칼라 계수를 무시하는 잘못된 회로가 생성되었습니다. 이 수정 사항에는 회로의 글로벌_상 속성에 계수 효과가 포함됩니다.
- ListOp.num_qubits 목록의 모든 연산자가 동일한 num_qubits를 갖는지 확인 이전에는 ListOp 에서 첫 번째 연산자의 큐비트 수가 반환되었습니다. 이 변경으로 다른 모든 운영자도 동일한 수의 큐비트를 가지고 있는지 추가로 확인합니다.
- PauliOp.exp_i()가 다음과 같이 변경하여 올바른 행렬을 생성하도록 합니다. 1) 이전에 2승의 위상에 오류가 있었습니다. 2) 회로를 행렬로 변환할 때 전역 위상이 무시되었습니다. 가능한 경우 회로를 단일 행렬로 변환하는 데 일반적으로 유용한 qiskit.quantum_info.Operator 을 사용합니다.
- 에서 보고된 버그로 주기성 감지를 수정합니다 https://github.com/qiskit-community/qiskit-aqua/issues/1184.
IBM Q 제공자 0.11.0
업그레이드 주의사항
- Python 3.5 으로 qiskit-ibmq-provider를 실행하는 더 이상 사용되지 않는 지원이 제거되었습니다. Qiskit-ibmq-provider >= 0.11.0 를 사용하려면 이제 최소한 Python 3.6 이 필요하다. Python 3.5 을 사용하는 경우 마지막으로 작동하는 버전은 qiskit-ibmq-provider 0.10.x 이다.
- 이 릴리스 이전에는 Python 3.6 에
websockets7.0 이 사용되었습니다. 이 릴리스에서는 모든 Python 버전에websockets8.0 이상이 필요합니다. 이를 반영하여 패키지 요구 사항이 업데이트되었습니다.