Qiskit으로 W상태의 폰 노먼 엔트로피를 계산하고 상간성, 얽히고설킨 상호 정보량을 생성한다.

할 일:

  • W 상태에 대해 제목의 물리량을 Qiskit으로 계산
  • 하지 않는 일:

  • 각자의 물리량의 의미, 구분 사용
  • W 상태의 의미
  • 회로의 제작 방법
  • 층 분석상
  • 설치 및 import

    !pip install qiskit
    !pip install qiskit-aer-gpu
    
    import qiskit
    # Needed for functions
    import numpy as np
    import time
    from copy import deepcopy
    
    # Import Qiskit classes
    import qiskit
    from qiskit import QuantumRegister, QuantumCircuit, ClassicalRegister, Aer
    from qiskit.quantum_info import state_fidelity, process_fidelity
    from qiskit.providers.aer import noise
    from qiskit.compiler import assemble
    
    # Tomography functions
    from qiskit.ignis.verification.tomography import state_tomography_circuits, StateTomographyFitter
    from qiskit.ignis.verification.tomography import process_tomography_circuits, ProcessTomographyFitter
    from qiskit.ignis.verification.tomography import gateset_tomography_circuits, GatesetTomographyFitter
    import qiskit.ignis.mitigation.measurement as mc
    
    # Auxiliary methods
    from qiskit.quantum_info import Choi, Kraus
    from qiskit.extensions import HGate, XGate
    

    컨디션


    Google colab에서 실행
    !Python -V
    # 3.6.9
    
    qiskit.__version__
    # 0.16.0
    
    qiskit.__qiskit_version__
    #{'qiskit': None,
    # 'qiskit-aer': '0.7.0',
    # 'qiskit-aqua': '0.8.0',
    # 'qiskit-ibmq-provider': '0.11.0',
    # 'qiskit-ignis': '0.5.0',
    # 'qiskit-terra': '0.16.0'}
    

    제조 W 상태


    나는 매우 깔끔하게 쓴 W 상태 제작 자료를 찾았는데, 여기에 인용한다.
    https://github.com/qiskit-community/qiskit-community-tutorials/blob/master/awards/teach_me_qiskit_2018/w_state/W%20State%201%20-%20Multi-Qubit%20Systems.ipynb
    지원 함수 정의
    # Here, two useful routine
    # Define a F_gate
    def F_gate(circ,q,i,j,n,k) :
      theta = np.arccos(np.sqrt(1/(n-k+1)))
      circ.ry(-theta,q[j])       
      circ.cz(q[i],q[j])
      circ.ry(theta,q[j])
      circ.barrier(q[i])
    # Define the cxrv gate which uses reverse CNOT instead of CNOT
    def  cxrv(circ,q,i,j) :
      circ.h(q[i])
      circ.h(q[j])
      circ.cx(q[j],q[i])
      circ.h(q[i])
      circ.h(q[j])
      circ.barrier(q[i],q[j])
    
    3 - qubit의 상황을 고려해 보세요.
    # 3-qubit W state
    flag_qx2 = True
    
    n = 3
    q_w = QuantumRegister(n) 
    
    W_states = QuantumCircuit(q_w) 
    
    W_states.x(q_w[2]) #start is |100>
    F_gate(W_states,q_w,2,1,3,1) # Applying F12
    F_gate(W_states,q_w,1,0,3,2) # Applying F23
    
    if flag_qx2 : # option ibmqx2 
        W_states.cx(q_w[1],q_w[2]) # cNOT 21
        W_states.cx(q_w[0],q_w[1]) # cNOT 32
    
    else :        # option ibmqx4  
        cxrv(W_states,q_w,1,2)
        cxrv(W_states,q_w,0,1)
    print(W_states)
    
    상술한 코드의 회로는 다음과 같다.

    단층 촬영.


    각 물리량을 계산하기 위해서는 두 개의 양자 비트의 밀도 행렬이 필요하기 때문에 층분해 영상 측정을 한다.
    그때state_tomography_circuitsStateTomographyFitter를 이용한다.
    우선, W 상태의 상태 벡터를 준비합니다.
    backend = Aer.get_backend('statevector_simulator')
    # backend_options = {"method": "statevector_gpu"}
    backend_options = {"method": "statevector"}
    job = execute(W_states, backend)
    result = job.result()
    outputstate = result.get_statevector(W_states, decimals=3)
    
    이어 2량자 비트 3개를 제작한다.세 개의 양자 비트에서 두 개의 양자 비트까지의 제작 방법은 세 가지가 있다.
    for iis in [[0,1], [0,2], [1,2]]:
      print(iis)
      qst_w = state_tomography_circuits(W_states, [q_w[iis[0]],q_w[iis[1]]])
      job = qiskit.execute(qst_w, Aer.get_backend('qasm_simulator'), shots=5000)
    
      tomo_w = StateTomographyFitter(job.result(), qst_w)
      rho_w = tomo_w.fit()
      print(" entropy: {0:1.2f}".format(entropy(rho_w)))
      print(" concurrence: {0:1.2f}".format(concurrence(rho_w)))
      print(" entanglemment_of_formation: {0:1.2f}".format(entanglement_of_formation(rho_w)))
      print(" mutual_infomation: {0:1.2f}".format(mutual_information(rho_w)))
    

    결실


    Tomog\W state
    VN entropy
    concurrence
    entanglement_of_formation
    mutual_information
    [0,1]
    0.91
    0.67
    0.55
    0.93
    [0,2]
    0.91
    0.66
    0.54
    0.93
    [1,2]
    0.94
    0.65
    0.53
    0.89

    백엔드options를 사용할 수 없습니다.


    참조: https://zenn.dev/nucl_quantum/articles/5312ddd558793572919c

    좋은 웹페이지 즐겨찾기