Builder 구문

11457 단어 IBMQQISKITPULSE

개시하다


Qiskit에 펄스 처리 모듈이 있습니다.그 모듈은 최근에 컴파일러 디자인 모델을 가져왔다.나는 이 보도에서 그 새로운 프로그램의 작법을 소개하고 싶다.
먼저 Qiskit Pulse를 이동하기 위해 필요한 기술을 요약합니다.
import numpy as np
from qiskit import QuantumCircuit, transpile, Aer, IBMQ
from qiskit.visualization import *

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()

이전의 서법


우선 나는 이전의 작법을 보고 싶다.대상은 양자 비트다.펄스를 정의하려면 Schedule 클래스를 생성해야 합니다.
from qiskit import pulse
from qiskit.pulse import DriveChannel
from qiskit.pulse import Play
from qiskit.pulse import Schedule

qubit=0

# 1 パルスの定義
drive_pulse = pulse.Gaussian(duration=300,
                             sigma=80,
                             amp=1.0,
                             name='sample gaussian')
# 2 チャネルの指定
drive_chan = pulse.DriveChannel(qubit)

# 3 測定パルスの定義 
inst_sched_map = backend_defaults.instruction_schedule_map
measure = inst_sched_map.get('measure', qubits=backend_config.meas_map[0])

# 4 スケジュールを作成
schedule = pulse.Schedule(name='Sample')
schedule += Play(drive_pulse, drive_chan)
schedule += measure << schedule.duration
  • 펄스의 정의
    실험에 사용할 펄스를 정의합니다.여기에 고스틴 펄스의 구동 펄스를 정의했다.
  • 채널 지정
    펄스를 적용할 채널을 지정합니다.이 예에서 드라이버 채널을 정의했는데 이것은 양자 비트의 ID에 따라 인덱스된 것이다.
  • 펄스 측정의 정의
    스스로 정의할 수 있지만, 백엔드의 기본 명령 시간표에서 교정된 펄스를 얻을 수 있습니다.
  • 일정 작성
    Schedule 클래스 생성을 정의하고 Play를 사용하여 드라이버 채널에서 드라이버 펄스를 이동합니다.이후 시간표의 시작 시간을 일정 시간<<만 이동하고 플레이가 정의한 펄스만 이동하여 measure의 실행을 정의합니다.
  • 새 형식(Builder 구문)


    기존의 문법에 따라 위에서 말한 << 펄스의 순서 정의 등 직접 처리 프로그램 문법으로 펄스의 흐름을 기술한다.이렇게 하면 프로그램 표현(데이터)은 프로그래밍 문법(코드)에서 분리할 수 없다.
    새로운 작법은 파이톤의 with 문법을 이용하여 그 과제를 해결하는 것이다.
    from qiskit import pulse
    
    GHz = 1.0e9 # Gigahertz
    mem_slot=0
    freq_GHz=4.95
    freq=freq_GHz*GHz
    
    # 1 Builder構文の定義
    with pulse.build(backend) as sample_sched:
        # 2 フローの定義
        with pulse.align_sequential():
            # 3 周波数の定義
            pulse.set_frequency(freq, pulse.drive_channel(qubit))
            pulse.play(pulse.Gaussian(duration=320,
                                      amp=1.0,
                                      sigma=80,
                                      name='sample gaussian'),
                       pulse.drive_channel(qubit))
            # 4 測定パルスの定義
            pulse.measure(qubits=[qubit], registers=[pulse.MemorySlot(mem_slot)])
    

  • Builder 구문 정의
    Pythhon의 with 구문을 사용하여 Builder를 정의합니다.펄스 프로그래밍을 시작하려면 먼저 구축기 문법을 build()으로 초기화해야 한다.
    https://qiskit.org/documentation/stubs/qiskit.pulse.builder.build.html#qiskit.pulse.builder.build

  • 정의 흐름
    이 성명은 align_sequential() 순서로 펄스를 집행하는 시간표를 이용한다.만약 이런 상황align_sequential()이 없다면 후속적인 고스틴 펄스와 measure 펄스가 동시에 실행될 것이다.기타 제공align_left(),align_right(), 자유 조합을 통해 풍부하고 다채로운 펄스 흐름을 설정할 수 있다.또한 아래와 같은 값default_alignment의 값sequential도 같은 설정이다.
    with pulse.build(backend=backend, default_alignment='sequential', name='sample') as sample_sched:
    
  • 주파수의 정의
    사용set_frequency() 주파수를 정의합니다.
  • 펄스 측정의 정의
    이전의 쓰기 방법은 백엔드의 기본 명령 시간표에서 교정된 측정 펄스를 얻어서 이 예처럼 쓸 수도 있었다.측량 활동의 구축 문법 중의 양자 비트.펄스 레벨에서 측정은 펄스와 지시 시스템 측정 단원에서 데이터를 얻어 처리하는 획득 지령 두 가지로 구성된다.measure()는 자동화 과정을 위해 제공되지만 필요에 따라 acquire()play()를 사용하여 완전히 제어할 수 있다.
  • 편리한 기능 소개


  • 펄스 스케줄링 가시화draw()는 자신이 정의한 펄스 흐름을 시각화하는 데 사용할 수 있다.
    sample_sched.draw(backend=backend)
    

  • 가로축은 시간을 나타내고 세로축은 펄스 D0은 구동 펄스를 나타내며 M0은 측정 펄스를 나타낸다.(0이 첫 번째) 우선 주파수가 설정된 후 절차에 따라 고스틴 펄스와 measure 펄스가 실행되는 일정이다.여기 draw()backend를 주는데 어떤 backend를 쓸지 몰라서 필요해요.만약 아무것도 지정하지 않았다면dt 내부 데이터의 값을 이용하여 펄스를 나타낸다.

  • 펄스 설정 디스플레이instructions를 사용하면 상술한 관점과 다른 관점으로 자신이 정의한 절차를 확인할 수 있다.자신이 지정한 내용을 한눈에 볼 수 있어 편리하다.
    sample_sched.instructions
    

  • 총결산


    이 글은 Builder의 글 구조를 소개했다.또 각양각색의 새로운 기능을 제공하였으니 소개하고 싶습니다.

    좋은 웹페이지 즐겨찾기