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 )

arXiv:1803.00745

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")
../_images/ed6adcfa915bdad5d5138b1a8ae7398ad0630e5c893446571b4d20c1ee6fe8c6.png

farhi_neven_ansatz#

create_farhi_neven_ansatz( n_qubit: int, c_depth: int, seed: Optional[int] = None )

arXiv:1802.06002

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")
../_images/86551c068f1536e61d17a14e68f09fd4d4a20870c33009292bdf7e654a3c6f94.png

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")
../_images/86551c068f1536e61d17a14e68f09fd4d4a20870c33009292bdf7e654a3c6f94.png

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)

arXiv:1802.06002

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")
../_images/fe78de5594cb507020aa6ab3a23db8eed88b493a242a0c7d6b0169bde05fa4bb.png

shirai_ansatz#

create_shirai_ansatz( n_qubit: int, c_depth: int = 5, seed: int = 0 )

arXiv:2111.02951

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")
../_images/fa25328d96782ba4d58b2780c92b60e032bd6078cb1f22e001e83fd6966d9f44.png

npqcd_ansatz#

create_npqcd_ansatz( n_qubit: int, c_depth: int, c: float = 0.1 )

arXiv:2108.01039

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")
../_images/8284018c22985bcabb61ac1bde3a7e011d085c24597dabacfa862274d5ea1c01.png

yzcx_ansatz#

create_yzcx_ansatz( n_qubit: int, c_depth: int = 4, c: float = 0.1, seed: int = 9 )

arXiv:2108.01039

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")
../_images/bbb0dfb6aa95db49815dcfc30afb7508938035734e0d6dd14459d7581918a6ce.png

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")
../_images/36766aaed7fcec1dab386163e05672ae28f84fbc3787984ab3e1d169d76d5274.png