Circuit visualize#
このドキュメントでは scikit-qulacs に用意されている量子回路を可視化します。 scikitqulacsには現在、以下のような量子回路を用意しています。
create_qcl_ansatz(n_qubit: int, c_depth: int, time_step: float, seed=None): arXiv:1803.00745
create_farhi_neven_ansatz(n_qubit: int, c_depth: int, seed: Optional[int] = None): arXiv:1802.06002
create_ibm_embedding_circuit(n_qubit: int): arXiv:1804.11326
create_shirai_ansatz(n_qubit: int, c_depth: int = 5, seed: int = 0): arXiv:2111.02951 注:微妙に細部が異なる可能性あり
create_npqcd_ansatz(n_qubit: int, c_depth: int, c: float = 0.1): arXiv:2108.01039
create_yzcx_ansatz(n_qubit: int, c_depth: int = 4, c: float = 0.1, seed: int = 9):arXiv:2108.01039 create_qcnn_ansatz(n_qubit: int, seed: int = 0):Creates circuit used in https://www.tensorflow.org/quantum/tutorials/qcnn?hl=en, Section 1.
回路を見やすくするために、パラメータの値を通常より小さくしています。
量子回路の可視化にはqulacs-visualizerを使用しています。 qulacs-visualizerはpipを使ってインストールできます。
pip install qulacsvis
qcl_ansatz#
create_qcl_ansatz( n_qubit: int, c_depth: int, time_step: float = 0.5, seed: Optional[int] = None )
from skqulacs.circuit.pre_defined import create_qcl_ansatz
from qulacsvis import circuit_drawer
n_qubit = 4
c_depth = 2
time_step = 1.
ansatz = create_qcl_ansatz(n_qubit, c_depth, time_step)
circuit_drawer(ansatz._circuit,"latex")
farhi_neven_ansatz#
create_farhi_neven_ansatz( n_qubit: int, c_depth: int, seed: Optional[int] = None )
from skqulacs.circuit.pre_defined import create_farhi_neven_ansatz
n_qubit = 4
c_depth = 2
ansatz = create_farhi_neven_ansatz(n_qubit, c_depth)
circuit_drawer(ansatz._circuit,"latex")
farhi_neven_watle_ansatz#
farhi_neven_ansatzを @WATLE さんが改良したもの
create_farhi_neven_watle_ansatz( n_qubit: int, c_depth: int, seed: Optional[int] = None )
from skqulacs.circuit.pre_defined import create_farhi_neven_watle_ansatz
n_qubit = 4
c_depth = 2
ansatz = create_farhi_neven_watle_ansatz(n_qubit, c_depth)
circuit_drawer(ansatz._circuit,"latex")
create_farhi_neven_ansatz()とcreate_farhi_neven_watle_ansatz()の違いは、入力データをembeddingする回路の係数です。 create_farhi_neven_ansatz()の場合は、量子回路のどのビット位置のインプットデータを埋め込む回転ゲートの係数も同じ値を使用します。 create_farhi_neven_watle_ansatz()の場合は、ビット位置によって係数を変化させます。 量子回路のビット位置が小さい側は係数式(y=x^2)を使用し、大きい側は係数式(y=2x-x^2)を使用します。
ibm_embedding_circuit#
create_ibm_embedding_circuit(n_qubit: int)
from skqulacs.circuit.pre_defined import create_ibm_embedding_circuit
n_qubit = 4
circuit = create_ibm_embedding_circuit(n_qubit)
circuit_drawer(circuit._circuit,"latex")
shirai_ansatz#
create_shirai_ansatz( n_qubit: int, c_depth: int = 5, seed: int = 0 )
from skqulacs.circuit.pre_defined import create_shirai_ansatz
n_qubit = 4
c_depth = 2
ansatz = create_shirai_ansatz(n_qubit, c_depth)
circuit_drawer(ansatz._circuit,"latex")
npqcd_ansatz#
create_npqcd_ansatz( n_qubit: int, c_depth: int, c: float = 0.1 )
from skqulacs.circuit.pre_defined import create_npqc_ansatz
n_qubit = 4
c_depth = 2
ansatz = create_npqc_ansatz(n_qubit, c_depth)
circuit_drawer(ansatz._circuit,"latex")
yzcx_ansatz#
create_yzcx_ansatz( n_qubit: int, c_depth: int = 4, c: float = 0.1, seed: int = 9 )
from skqulacs.circuit.pre_defined import create_yzcx_ansatz
n_qubit = 4
c_depth = 2
ansatz = create_yzcx_ansatz(n_qubit, c_depth)
circuit_drawer(ansatz._circuit,"latex")
qcnn_ansatz#
create_qcnn_ansatz(n_qubit: int, seed: int = 0)
Creates circuit used in https://www.tensorflow.org/quantum/tutorials/qcnn?hl=en, Section 1.
from skqulacs.circuit.pre_defined import create_qcnn_ansatz
n_qubit = 8
ansatz = create_qcnn_ansatz(n_qubit)
circuit_drawer(ansatz._circuit,"latex")