양자 회로 및 Schedule

10197 단어 IBMQQISKITPULSE

개시하다


Qiskit에서는 제작된 양자회로를 실기로 실행하면 뒷면에 교정된 펄스를 사용한다.펄스 모듈을 사용하면 자신이 좋아하는 방식으로 펄스를 맞춤형으로 만들 수 있다.본고는 양자 회로와 펄스 모듈의 조합을 소개하고자 한다.
먼저 Qiskit Pulse를 이동하기 위해 필요한 기술을 요약합니다.
import numpy as np
from qiskit import QuantumCircuit, transpile, Aer, IBMQ
from qiskit.visualization import *
from qiskit.circuit import Gate

IBMQ.load_account()

provider = IBMQ.get_provider(hub='ibm-q', group='open', project='main')
backend = provider.get_backend('ibmq_armonk')
backend_defaults = backend.defaults()
backend_config = backend.configuration()

사용자 정의 갑문에 자체 펄스 연결


기본 절차는 다음과 같다.
  • 맞춤형 문 창설
  • 1로 만든 맞춤형 울타리를 포함하는 양자 회로 만들기
  • 자신이 만들 펄스에 대한 정의를 설명하는 schedule 클래스 만들기
  • add_calibration()를 이용하여 3에서 만든 클래스를 2에서 정의한 문에 연결
  • 다음은 샘플 코드를 보고 싶습니다.
    from qiskit import pulse
    
    GHz = 1.0e9 # Gigahertz
    qubit=0
    freq_GHz=4.95
    freq=freq_GHz*GHz
    drive_sigma_sec = 0.075e-6
    drive_duration_sec = drive_sigma_sec * 8
    drive_amp = 0.3
    
    # 1. カスタムゲート作成
    x_pulse = Gate('x_pulse', num_qubits=1, params=[])
    
    # 2. 1で作成したカスタムゲートを含む量子回路を作成
    sample = QuantumCircuit(1, 1)
    sample.append(x_pulse, [0])
    sample.measure(0, 0)
    
    #3. 自分が作成したいパルスの定義を記述したscheduleクラスを作成
    with pulse.build(backend) as x_schedule:
        pulse.set_frequency(freq, pulse.drive_channel(qubit))
        pulse.play(pulse.Gaussian(duration=16 * int(pulse.seconds_to_samples(drive_duration_sec) / 16),
                                  amp=drive_amp,
                                  sigma=pulse.seconds_to_samples(drive_sigma_sec),
                                  name="x_schedule"), pulse.drive_channel(qubit))
    
    #4. 3で作成したクラスを2で定義したゲートにバインド
    sample.add_calibration(x_pulse, (0, ), schedule=x_schedule)
    
    
    sample.draw(output='mpl')
    
  • 맞춤형 문 생성
    스스로 정의한 통일문을 만들 수 있다.
    https://qiskit.org/documentation/stubs/qiskit.circuit.Gate.html
  • 1로 만든 맞춤형 문을 포함하는 양자 회로 만들기
    사용자 정의 문을 포함하는 양자 회로를 만듭니다.여기서 우리는 양자 비트의 사용자 정의 문을 만드는 양자 회로를 만들었다.
  • 자신이 만들 펄스에 대한 정의를 설명하는 schedule 클래스를 만듭니다
    이전에 설명한 Builder 구문을 사용하여 펄스를 정의합니다.여기에 펄스 모듈이 제공하는 방법seconds_to_samples()을 사용합니다.이 방법은 매개 변수를 초 단위로 주면 활동 백엔드에서 초 단위로 지나간 견본 수를 얻을 수 있다.
    https://qiskit.org/documentation/stubs/qiskit.pulse.builder.seconds_to_samples.html
  • 3에서 만든 클래스를 2로 정의된 울타리로 귀속
    자신이 만든 펄스와 울타리를 묶는다.
  • 제작된 양자 회로의 펄스를 확인하다


    자신이 만든 양자 회로가 어떤 펄스 구성인지 확인할 수 있다.
    sample_sx = QuantumCircuit(1, 1)
    sample_sx.sx(0)
    sample_sx.measure(0, 0)
    
    sample_sx.draw(output='mpl')
    
    from qiskit import schedule as build_schedule
    
    # 1. scheduleを定義
    schedule = build_schedule(sample_sx,backend)
    
    schedule.draw(backend=backend)
    
  • 정의 schedule
    자신이 정의한 양자 회로와 백엔드를 정의하고 schedule을 만들면 펄스의 상황을 알 수 있다.
  • 총결산


    이 글은 양자 회로와 schedule을 소개했다.자신이 정의한 양자 회로가 어떤 펄스로 집행되는지 보는 것도 재미있다.

    좋은 웹페이지 즐겨찾기