Skip to main content
IBM Quantum Platform

키스킷 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 객체의 명령을 무시할 수 있었습니다. 하지만 이제 펄스 게이트를 사용하면 지연만 예약할 수 있고 지연 자체를 포함하지 않으면 지연이 제거되는 상황이 있습니다.

  • 이제 사용자 지정 게이트 보정이 있는 회로는 각 회로 보정 기간을 명시적으로 제공하지 않고도 트랜스파일러로 예약할 수 있습니다.

  • 그리고 BasisTranslatorUnroller 패스는 경우에 따라 트랜스필레이션 중인 회로의 전역 위상을 보존하지 못했습니다. 이 문제점이 수정되었습니다.

  • 의 버그 qiskit.pulse.builder.frequency_offset() 에서 compensate_phase 설정 시 2π2\pi 인수가 추가 단계에서 누락되는 버그가 발견되었습니다.

  • 메서드 출력의 전역 위상을 수정합니다 QuantumCircuit 메서드 repeat(). 전역 위상이 있는 회로가 다른 회로에 추가되면 현재 전역 위상은 전파되지 않습니다. 그렇지 않으면 위상이 여러 번 적용되기 때문에 시뮬레이터는 이에 의존합니다. 의 전역 위상을 0으로 설정한 후 반복 회로를 추가합니다 repeat() 를 0으로 설정한 후 기존 위상에 반복 횟수를 곱하는 대신 반복 회로를 추가합니다.

  • 버그 수정 SparsePauliOpPython 의 특정 Numpy 스칼라 유형으로 곱하면 잘못된 값이 반환되던 버그가 수정되었습니다. 수정 #5408

  • 헬러 충실도의 정의가 이전 정의( 1H(P,Q)1-H(P,Q) )에서 [1H(P,Q)2]2[1-H(P,Q)^2]^2 으로 수정되어 대각선 밀도 행렬로서의 양자 상태 충실도 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 의 표준 라이브러리 정의와 일치하도록 수정되었습니다.
  • 퀀텀 채널의 빼기 버그 수정 ABA - B 여기서 BBOperator 객체입니다. 연산자 표현의 행렬에 음수가 적용되고 있었는데, 이는 양자 채널 표현의 음수와 동일하지 않습니다.
  • 여러 레지스터가 있는 명령어의 경우를 처리하기 위해 _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 세부 사항의 분석 함수에 맞추는 기능도 제공합니다.

중요 문제

  • QAOAinitial_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_infoassembler 모듈과 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)

    를 사용하면 QuantumCircuitQuantumRegister 의 큐비트를 생성하고 RGate 각 큐비트의 x축과 ϕ=2π3\phi = \frac{2\pi}{3} 의 각도를 이루는 블로흐 구체의 xy 평면의 축에 대해 θ=π3\theta = \frac{\pi}{3} 의 각도를 수행합니다.

  • 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 함수에 style kwarg에 {'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.schemasqobj_schema.json JSON 스키마 파일은 QASM Qobj에 대한 선택적 구성 속성으로 rep_delay 을 포함하도록 업데이트되었습니다.

  • qiskit.schemasbackend_configuration_schema.json JSON 스키마 파일은 dynamic_reprate_enabled, rep_delay_rangedefault_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_method qiskit.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)에 큐비트 진폭에 선형 함수를 (부분적으로) 매핑하기 위한 새로운 클래스가 추가되었습니다,

Fx0=1f(x)x0+f(x)x1F|x\rangle |0\rangle = \sqrt{1 - f(x)}|x\rangle |0\rangle + \sqrt{f(x)}|x\rangle |1\rangle

매핑은 제어된 폴리 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_level 1, 2, 3의 기본 패스 관리자는 기본 세트에 u1, u2, 또는 u3 이 포함되지 않은 경우 이 새 패스를 사용하도록 업데이트되었습니다.

  • 이제 OneQubitEulerDecomposer 는 이제 'PSX''U' 두 가지 새로운 기준을 지원합니다. 생성자에서 basis kwarg를 사용하여 지정할 수 있습니다. 이렇게 하면 매트릭스가 PGateSXGate'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_typeqiskit.visualization.plot_bloch_vector(). 이 kwarg를 사용하면 생성된 시각화에서 블로흐 구체에서 벡터의 위치를 설명하는 입력 파라미터에 사용되는 좌표계를 변경할 수 있습니다. 이 새로운 kwarg에는 'cartesian' (기본값)과 'spherical' 의 두 가지 값이 지원됩니다. coord_type kwarg가 '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'))

업그레이드 주의사항

  • 클래스와 서브클래스에 대한 생성자의 params kwarg에 대한 타입 검사가 변경되었습니다 Gate 클래스와 그 서브클래스의 생성자가 변경되었습니다. 이전에는 모든 Gate 매개변수는 클래스에서 정의된 허용된 유형 집합에 있어야 했습니다 Instruction 클래스에 정의된 유형 집합이어야 했습니다. 이제 새로운 메서드 validate_parameter() 를 사용하여 매개변수 유형이 유효한지 여부를 확인합니다. 하위 클래스에서 이 메서드의 정의는 부모 클래스보다 우선합니다. 예를 들어 UnitaryGatenumpy.ndarray 유형의 매개 변수를 허용하고, 해당 매개 변수가 numpy.ndarray 인 경우 반환하는 사용자 지정 validate_parameter() 메서드를 정의합니다. 이것은 부모 클래스에 정의된 함수보다 우선합니다 Gate. UnitaryGate 을 새 클래스의 부모로 사용하는 경우, 새 자식 클래스에서 자체 메서드를 정의하지 않는 한 이 validate_parameter 메서드가 사용됩니다.

  • 이전에 사용되지 않는 메서드, 인수 및 n_qubitsnumberofqubits 이라는 이름의 속성이 제거되었습니다. 이는 0.13.0 릴리스에서 더 이상 사용되지 않습니다. 전체 변경 사항은 다음과 같습니다:

    클래스
    이전
    새로 작성
    QuantumCircuitn_qubitsnum_qubits
    Paulinumberofqubitsnum_qubits
    함수
    이전 인수
    새 인수
    qiskit.circuit.random.random_circuit()n_qubitsnum_qubits
    qiskit.circuit.library.MSGaten_qubitsnum_qubits
  • 매개변수화된 Gate 인스턴스를 삽입하면 QuantumCircuit 에 삽입하면 이제 회로에 사용되는 해당 게이트의 복사본이 생성됩니다. 회로에 삽입된 인스턴스가 변경되면 더 이상 회로의 게이트에 반영되지 않습니다. 이 변경 사항은 매개변수화된 단일 객체를 여러 회로에 삽입할 때 발생하는 문제를 해결하기 위해 Gate 객체를 여러 회로에 삽입할 때 발생하는 문제를 해결했습니다.

  • 함수 qiskit.result.marginal_counts() 함수는 이제 기본적으로 인스턴스 매개변수인 qiskit.result.Result 인스턴스 파라미터를 수정하지 않습니다. 이전에는 Result 객체가 항상 제자리에서 수정되었습니다. 새로운 kwarg inplace 이 추가되었습니다 marginal_counts() 를 추가하여 inplace=True 설정 시 이전 동작을 사용할 수 있도록 했습니다.

  • 정의가 U3Gate 정의가 변경되었습니다 UGate 클래스로 변경되었습니다. 클래스는 UGate 클래스에는 정의가 없습니다. 따라서 더 이상 U3 및 CX 측면에서 모든 회로를 풀 수는 없습니다. 대신 모든 회로에 U와 CX를 사용할 수 있습니다.

  • 더 이상 사용되지 않는 키스킷 테라 실행 지원( Python 3.5 )이 제거되었습니다. 이번 릴리스부터 키스킷 테라를 사용하려면 이제 최소 Python 3.6 을 사용해야 합니다. Python 3.5 을 사용하는 경우 마지막으로 작동하는 버전은 키스킷 테라 0.15.2 입니다.

  • 에서 PulseBackendConfigurationhamiltonian 속성에서 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() 를 대신 사용할 수 있습니다.

지원 중단 노트

  • 클래스 및 서브클래스의 생성자에 대한 params kwarg의 파라미터에 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 속성의 PiecewiseLinearPauliRotationsPolynomialPauliRotations 클래스의 속성은 더 이상 사용되지 않으며 향후 릴리스에서 제거될 예정입니다. 대신 속성 num_ancillas 를 대신 사용해야 합니다. 이것은 일관성을 유지하기 위해 QuantumCircuit 메서드 num_ancillas().

  • 클래스는 더 이상 사용되지 않습니다 qiskit.circuit.library.MSGate 클래스는 더 이상 사용되지 않지만 이전 작업의 로드를 허용하기 위해 그대로 유지됩니다. 대신 사용해야 하는 qiskit.circuit.library.GMS 클래스로 대체되었습니다.

  • MSBasisDecomposer 트랜스파일러 패스는 더 이상 사용되지 않으며 향후 릴리스에서 제거될 예정입니다. 대신 qiskit.transpiler.passes.BasisTranslator 패스를 대신 사용할 수 있습니다.

  • 메서드 QuantumCircuit 메서드 u1, u2u3 는 이제 더 이상 사용되지 않습니다. 대신 다음과 같은 대체품을 사용할 수 있습니다.

    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, U2GateU3Gate 는 그대로 유지되어 이전 작업을 로드할 수 있습니다.

버그 수정

  • 클래스의 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() 함수가 backendpass_manager kwarg를 동시에 지정하는 것을 잘못 허용했습니다. execute() 으로의 통화에서 backendpass_manager 을 함께 사용할 수 있도록 수정되었습니다. 수정 #5037
  • 메서드의 QuantumCircuit 메서드 unitary() 메서드가 qarg 인수에 단일 정수를 허용하도록 수정되었습니다(1쿼비트 단위를 추가할 때). qargs 인수에 허용되는 유형은 이제 int, Qubit또는 정수 목록입니다. 수정 #4944
  • 이전에는 내부 데이터 속성이 아직 채워지지 않은 경우 BlueprintCircuit 객체에서 inverse() 호출이 실패할 수 있었습니다. inverse() 호출이 회로의 역을 생성하기 전에 내부 데이터를 채우도록 수정되었습니다. 수정 #5140
  • 빈 데이터 사전에서 객체를 만들 때 발생하는 qiskit.result.Counts 객체를 생성할 때 발생하는 문제를 수정했습니다. 이제 빈 Counts 객체가 생성됩니다. 메서드도 most_frequent() 메서드도 객체가 비어 있을 때 더 자세한 설명이 포함된 예외를 발생하도록 업데이트되었습니다. 수정 #5017
  • UnitaryGatectrl_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.UGateQasmSimulatorStatevectorSimulator, UnitarySimulator, 그리고 "statevector", "density_matrix", "matrix_product_state", "extended_stabilizer" 메서드에 추가합니다.

  • 위상 게이트에 대한 기본 게이트 지원을 추가합니다 qiskit.circuit.library.PhaseGateStatevectorSimulator, StatevectorSimulator, UnitarySimulator, 그리고 QasmSimulator"statevector", "density_matrix", "matrix_product_state", "extended_stabilizer" 메서드에 추가합니다.

  • 제어 위상 게이트에 대한 기본 게이트 지원을 추가합니다 qiskit.circuit.library.CPhaseGateQasmSimulatorStatevectorSimulator, StatevectorSimulator, UnitarySimulator, 그리고 "statevector", "density_matrix", "matrix_product_state" 메서드에 추가합니다.

  • 다중 제어 위상 게이트에 대한 지원을 추가합니다 qiskit.circuit.library.MCPhaseGateStatevectorSimulator, UnitarySimulator, 그리고 "statevector"QasmSimulator 메서드에 추가합니다.

  • (X)\sqrt(X) 게이트에 대한 지원을 추가합니다 qiskit.circuit.library.SXGateStatevectorSimulator, UnitarySimulator, QasmSimulator 에 추가합니다.

  • 1 및 2-큐비트 키스킷 회로 라이브러리 로테이션 게이트에 대한 지원 추가 RXGate, RYGate, RZGate, RGate, RXXGate, RYYGate, RZZGate, RZXGateStatevectorSimulator, UnitarySimulator, 그리고 "statevector""density_matrix"QasmSimulator.

  • QasmSimulatorStatevectorSimulator, UnitarySimulator, "statevector" 방식에 다중 제어 회전 게이트 "mcr", "mcrx", "mcry", "mcrz" 에 대한 지원을 추가합니다.

  • 시뮬레이터 백엔드를 구성할 수 있도록 합니다. 이를 통해 각 시뮬레이터 백엔드 오브젝트에 대해 시뮬레이션 방법 및 노이즈 모델과 같은 영구 옵션을 설정할 수 있습니다.

    QasmSimulatorPulseSimulatorIBMQBackend 백엔드 객체에서 :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 입니다.

  • 게이트 퓨전 기본 임계값을 업데이트하여 StatevectorSimulatorQasmSimulator 에서 상태 벡터 시뮬레이션을 위한 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" 중 하나에 노이즈를 정의하는 것입니다.
  • 스냅샷 지침의 variance kwarg는 더 이상 사용되지 않습니다. 이 함수는 측정 통계로 인한 분산이 아니라 노이즈 모델 샘플링으로 인한 스냅샷의 샘플 분산을 계산하기 때문에 종종 잘못 사용되는 경우가 있었습니다. 노이즈 모델링 분산이 필요한 경우 단일 샷 스냅샷을 사용하여 포스트 프로세싱에서 수동으로 분산을 계산할 수 있도록 해야 합니다.

버그 수정

  • 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 호출에서 사용할 수 있습니다.
  • StatevectorSimulatorUnitarySimulator 에 대해 누락된 사용 가능한 메모리 검사를 추가합니다. 회로의 큐비트 수를 시뮬레이션하는 데 필요한 메모리가 시스템의 사용 가능한 메모리를 초과하는 경우 예외가 발생합니다.

이그니스 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) 형식의 튜플을 가져옵니다. 여기서 xy 은 생성된 플롯을 만들기 위한 인치 단위의 치수입니다.

  • 퀀텀 볼륨 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].

    [0,1][0,1] 에서 α\alpha 을 실수로 지정하여 목적 함수를 계산하는 데 사용되는 가장 잘 관찰된 샘플의 비율을 지정합니다. α=1\alpha = 1, CVaR 이 표준 기대값과 동일한지 확인합니다. 마찬가지로 α=0\alpha = 0 이면 CVaR 은 가장 잘 관찰된 샘플을 사용하는 것에 해당합니다. α\alpha 의 중간 값은 이 두 목적 함수 사이를 보간합니다.

    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 , 그리고 마지막으로 솔버를 기반으로 합니다. 솔버는 여기 상태 계산이 수행되는 구체적인 방법(알고리즘)입니다. 이 구조는 접지 상태 계산 중 하나를 따릅니다. 결과는 단일 값이 아닌 기대값 목록을 사용하도록 수정됩니다. QEOMNumpyEigensolver 은 새로운 구조에 맞게 조정되었습니다. 특정 필터를 사용하여 특정 대칭의 상태를 대상으로 하는 넘피 아이겐솔버를 실행하기 위해 팩토리가 도입되었습니다.

  • 페르미온 문제 해결을 위한 워크플로 외에도 보소닉 기저 및 여기 상태 계산을 위한 인터페이스가 추가되었습니다. 특히 진동 구조 계산을 실행하기 위한 전체 인터페이스를 도입했습니다.

  • 화학 모듈에 새로운 접지 상태 솔버로 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, GaussianConditionalIndependenceModelEuropeanCallExpectedValue 의 회로 기반 버전을 qiskit.finance.applications 에 추가합니다.

  • 그라데이션 프레임워크. qiskit.operators.gradients 양자 상태 또는 양자 상태를 나타내는 연산자가 주어집니다. 기대값인 그라데이션 프레임워크를 사용하면 그라데이션, 자연 그라데이션, 헤시안, 퀀텀 피셔 정보 등을 평가할 수 있습니다.

    입력 상태 |ψ〉와 파라미터화된 양자 상태 〈ψ(θ)〉 = V(θ)|ψ〉, 파라미터화된 연산자 O(ω)가 있다고 가정해 보겠습니다.

    그라데이션: dψ(θ)O(ω)ψ(θ)/dωd⟨ψ(θ)|O(ω)|ψ(θ)〉/ dω 각각 dψ(θ)O(ω)ψ(θ)/dθd⟨ψ(θ)|O(ω)|ψ(θ)〉/ dθ 각각 dψ(θ)iiψ(θ)/dθd⟨ψ(θ)|i〉⟨i|ψ(θ)〉/ dθ 을 계산하려고 합니다.

    마지막 경우는 그라데이션 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: d2ψ(θ)O(ω)ψ(θ)/dω2d^2⟨ψ(θ)|O(ω)|ψ(θ)〉/ dω^2 resp. d2ψ(θ)O(ω)ψ(θ)/dθ2d^2⟨ψ(θ)|O(ω)|ψ(θ)〉/ dθ^2 resp. d2ψ(θ)O(ω)ψ(θ)/dθdωd^2⟨ψ(θ)|O(ω)|ψ(θ)〉/ dθdω resp. d2ψ(θ)iiψ(θ)/dθ2d^2⟨ψ(θ)|i〉⟨i|ψ(θ)〉/ dθ^2 를 계산하려고 합니다.

    마지막 경우는 헤센 w.r.t 에 해당합니다. ψ(θ)의 샘플링 확률입니다. 1차 기울기와 마찬가지로 헤시안도 매개변수 이동, 단위의 선형 조합, 유한 차분 방법 등 다양한 방법으로 평가할 수 있습니다. 매개 변수의 튜플이 주어지면 Hessian().convert(op, param_tuple) 2차 도함수의 값을 반환합니다. 매개변수 목록이 주어진 경우 Hessian().convert(op, param_list) 은 주어진 매개변수 순서에 따라 주어진 모든 매개변수에 대한 전체 헤시안 값을 반환합니다.

    QFI: 양자 피셔 정보 QFI는 입력 상태 |ψ〉와 파라미터화된 앙사츠 V(θ)에 의해 생성된 파라미터화된 양자 상태 |ψ(θ)〉 = V(θ)|ψ〉의 표현 능력을 나타내는 메트릭 텐서입니다. 순수 상태에 대한 QFI의 항목은 [QFI]kl=Re[kψlψkψψ〉〈ψlψ]4[QFI]kl= Re[〈∂kψ|∂lψ〉−〈∂kψ|ψ〉〈ψ|∂lψ〉] * 4 입니다.

    이전 파생 유형과 마찬가지로 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)의 역수인 상태 매개변수 QFI1dψ(θ)O(ω)ψ(θ)/dθQFI^-1 d⟨ψ(θ)|O(ω)|ψ(θ)〉/ dθ 로 변환합니다. 이를 통해 그라디언트뿐만 아니라 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 ) 소개 화학 애플리케이션을 위한 접지 상태 솔버로 궤도 최적화 vqe oovqe 소개

  • 새로운 알고리즘 결과 클래스:

    Grover 메서드 _run() 반환 클래스 GroverResult. AmplitudeEstimation 메서드 _run() 반환 클래스 AmplitudeEstimationResult. IterativeAmplitudeEstimation 메서드 _run() 반환 클래스 IterativeAmplitudeEstimationResult. MaximumLikelihoodAmplitudeEstimation 메서드 _run() 반환 클래스 MaximumLikelihoodAmplitudeEstimationResult.

    모든 새로운 결과 클래스는 이전 결과 사전과 역호환됩니다.

  • 새로운 선형 솔버 결과 클래스:

    HHL 메서드 _run() 반환 클래스 HHLResult. NumPyLSsolver 메서드 _run() 반환 클래스 NumPyLSsolverResult.

    모든 새로운 결과 클래스는 이전 결과 사전과 역호환됩니다.

  • MinimumEigenOptimizationResult 이제 sampleseigensolver_result 속성을 노출합니다. 후자는 최적화 도구가 사용하는 기본 알고리즘에서 얻으며 알고리즘에 따라 다릅니다. RecursiveMinimumEigenOptimizer 이제 결과 클래스 RecursiveMinimumEigenOptimizationResult 의 인스턴스를 반환하며, 여기에는 기본 알고리즘에서 얻은 중간 결과가 포함될 수 있습니다. 전용 결과 클래스는 이 옵티마이저와 관련된 속성 replacementshistory 을 노출합니다. 기록의 깊이는 최적화 도구의 history 매개변수로 관리됩니다.

  • GroverOptimizer 는 이제 GroverOptimizationResult 의 인스턴스를 반환하고 이 결과 클래스는 operation_counts, n_input_qubits, n_output_qubits 속성을 직접 노출합니다. 이러한 속성은 더 이상 raw_results 사전에서 사용할 수 없습니다.

  • SlsqpOptimizer 는 이제 SlsqpOptimizationResult 의 인스턴스를 반환하며, 이 결과 클래스는 SLSQP 구현과 관련된 추가 속성을 노출합니다.

  • QuantumGeneratorQuantumCircuit 객체를 제너레이터 회로로 전달할 수 있도록 지원합니다.

  • 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 및 파생 유형을 더 이상 사용하지 않습니다. CircuitFactoryQuantumCircuit 에서 애플리케이션에 필요한 일부 기능이 누락되어 임시 클래스로 도입되었습니다. 이제 회로에 필요한 모든 기능을 갖추었으므로 회로 팩토리를 제거할 수 있습니다. 대체 항목은 다음 표에 나와 있습니다.

    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.QuadraticProgramToIsingqiskit.optimization.converters.IsingToQuadraticProgram 변환 클래스는 더 이상 사용되지 않으며 향후 릴리스에서 제거될 예정입니다. 대신 qiskit.optimization.QuadraticProgram 대신 to_ising()from_ising() 방법을 사용해야 합니다.

  • qiskit.circuit.library 에서 WeightedAdder 으로 서킷 라이브러리로 포팅된 WeightedSumOperator 을 더 이상 사용하지 않습니다.

  • Core Hamiltonian FermionicTransformation Chemistry Operator tranformations minimum_eigen_solvers/vqe_adapt applications/molecular_ground_state_energy 클래스는 클래스는 클래스는 클래스는 클래스는 클래스는 클래스는 클래스는 클래스는 클래스는 클래스는 클래스는 클래스는 클래스는 클래스는 클래스는 클래스는 클래스는 클래스는 클래스는 클래스는 클래스는 클래스는 클래스는 클래스는 클래스는 클래스는 클래스도 더 이상 사용되지 않습니다 ground_state_solver

  • Optimizer.SupportLevel 중첩 열거형은 OptimizerSupportLevel 로 대체되고 Optimizer.SupportLevel 은 제거되었습니다. 예를 들어 Optimizer.SupportLevel.required 대신 OptimizerSupportLevel.required 을 사용합니다.

  • UnivariateVariationalDistributionMultivariateVariationalDistributionQuantumGenerator 에 대한 입력으로 사용 중지합니다. 대신 일반 QuantumCircuit 개체를 사용할 수 있습니다.

  • AbelianGrouper.group_subops의 빠른 및 사용_nx 옵션은 향후 릴리스에서 제거될 예정입니다.

  • GSLS 옵티마이저 클래스는 __init__ 매개 변수 max_itermaxiter 로 대체하여 더 이상 사용되지 않습니다. SPSA 최적화 클래스에서 __init__ 매개변수 max_trialsmaxiter 로 대체하여 사용되지 않습니다. 최적화_svm 함수는 max_iters 매개 변수를 maxiter 으로 대체하여 더 이상 사용되지 않습니다. ADMMParameters 클래스는 __init__ 매개 변수 max_itermaxiter 로 대체하여 더 이상 사용되지 않습니다.

버그 수정

  • 활성 공간이 활성_(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 에 websockets 7.0 이 사용되었습니다. 이 릴리스에서는 모든 Python 버전에 websockets 8.0 이상이 필요합니다. 이를 반영하여 패키지 요구 사항이 업데이트되었습니다.
이 페이지가 도움이 되었습니까?
GitHub에서 버그, 오타를 보고하거나 컨텐츠를 요청하십시오.