cirq について
Cirq は、Python で量子回路を設計する開発者や研究者向けのスキルです。シミュレーション、ノイズモデル、コンパイル、ハードウェア実行に加え、複数プロバイダーとの連携や実験手順も扱います。
主な機能
- 01パラメーター付き量子回路の構築
- 02正確なシミュレーションとノイズシミュレーション
- 03回路の変換、最適化、コンパイル
- 04複数の量子ハードウェアプロバイダーとの連携
- 05パラメータースイープと量子実験の設計
活用シーン
- 01シミュレーターでの回路テスト
- 02回路に対するノイズの影響調査
- 03対象デバイス向けの回路コンパイル
- 04量子実験の実行と結果分析
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ k-dense-ai/ scientific-agent-skills --skill cirqインストール後、Claude Code で/cirqを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
references/building.mdexperiments.mdhardware.mdnoise.mdreview.mdsimulation.mdtransformation.md詳細
Cirq - Python による量子コンピューティング
Cirq は、Google Quantum AI によるオープンソースのフレームワークで、量子回路を設計し、シミュレーションし、量子コンピューターおよびシミュレーター上で実行するためのものです。
このスキルを使用する場面
次のような場合にこのスキルを使用します:
- Python で NISQ 回路を構築、シミュレーション、最適化する場合
- Google Quantum AI プロセッサー(
cirq-google経由)またはパートナーのバックエンド(IonQ、Azure Quantum、AQT、Pasqal)でジョブを実行する場合 - ノイズをモデリングしたり、ハードウェアのゲートセットにコンパイルしたり、特性評価実験を設計したりする場合
- パラメータースイープ、トランスフォーマー、または ReCirq の実験パターンを使用する場合
IBM のハードウェアには qiskit を、自動微分を用いた量子 ML には pennylane を、物理シミュレーションには qutip を使用してください。
インストール
例は Python 3.11+ 上の Cirq 1.7.0 を対象としています。Cirq のベンダーパッケージは対応するリリースに揃えてください。Azure Quantum のように独立してバージョン管理される統合機能は、個別に互換性を確認する必要があります。
uv pip install "cirq-core==1.7.0"
# Optional OpenQASM import dependency
uv pip install ply
ハードウェア統合の場合(再現性のために一致するバージョンを固定してください):
# Google Quantum Engine (requires approved GCP project access)
uv pip install "cirq-google==1.7.0"
# IonQ
uv pip install "cirq-ionq==1.7.0"
# AQT (Alpine Quantum Technologies)
uv pip install "cirq-aqt==1.7.0"
# Pasqal
uv pip install "cirq-pasqal==1.7.0"
# Azure: use a SEPARATE environment; its current extras require Cirq <1.7.
uv pip install "qdk[azure,cirq]==1.32.3" "azure-quantum==3.13.0"
環境内のすべての cirq-* パッケージを同じリリースに固定してください。Azure
の例は、それがサポートする Cirq 1.6.1 スタックを別途対象としています。そこに Cirq 1.7.0
を強制的に導入しないでください。Cirq 1.7.0 では IonQ アダプターが API v0.4 に更新されています。
ローカルの例は合成回路で確認されています。ハードウェアの例は 説明用であり、クラウドジョブを投入することなく、リリース済みのソースとプロバイダーのドキュメントに 照らして確認されています。レビューの証拠を参照してください。
クイックスタート
基本的な回路
import cirq
import numpy as np
# Create qubits
q0, q1 = cirq.LineQubit.range(2)
# Build circuit
circuit = cirq.Circuit(
cirq.H(q0), # Hadamard on q0
cirq.CNOT(q0, q1), # CNOT with q0 control, q1 target
cirq.measure(q0, q1, key='result')
)
print(circuit)
# Simulate
simulator = cirq.Simulator(seed=42)
result = simulator.run(circuit, repetitions=1000)
# Display results
print(result.histogram(key='result'))
パラメーター化された回路
import sympy
# Define symbolic parameter
theta = sympy.Symbol('theta')
# Create parameterized circuit
circuit = cirq.Circuit(
cirq.ry(theta)(q0),
cirq.measure(q0, key='m')
)
# Sweep over parameter values
sweep = cirq.Linspace('theta', start=0, stop=2*np.pi, length=20)
results = simulator.run_sweep(circuit, params=sweep, repetitions=1000)
# Process results
for params, result in zip(sweep, results):
theta_val = params['theta']
counts = result.histogram(key='m')
print(f"θ={theta_val:.2f}: {counts}")
主な機能
回路の構築
量子回路の構築に関する包括的な情報(量子ビット、ゲート、操作、カスタムゲート、回路パターンなど)については、次を参照してください:
- references/building.md - 回路構築の完全ガイド
一般的なトピック:
- 量子ビットの種類(GridQubit、LineQubit、NamedQubit)
- 単一量子ビットゲートおよび 2 量子ビットゲート
- パラメーター化されたゲートと操作
- カスタムゲートの分解
- モーメントによる回路の構成
- 標準的な回路パターン(Bell 状態、GHZ、QFT)
- インポート / エクスポート(OpenQASM、JSON)
- qudit とオブザーバブルの扱い
シミュレーション
量子回路のシミュレーションに関する詳細な情報(厳密シミュレーション、ノイズを含むシミュレーション、パラメータースイープ、Quantum Virtual Machine など)については、次を参照してください:
- references/simulation.md - 量子シミュレーションの完全ガイド
一般的なトピック:
- 厳密シミュレーション(状態ベクトル、密度行列)
- サンプリングと測定
- パラメータースイープ(単一パラメーターおよび複数パラメーター)
- ノイズを含むシミュレーション
- 状態ヒストグラムと可視化
- Quantum Virtual Machine(QVM)
- 期待値とオブザーバブル
- パフォーマンスの最適化
回路の変換
量子回路の最適化、コンパイル、操作に関する情報については、次を参照してください:
- references/transformation.md - 回路変換の完全ガイド
一般的なトピック:
- トランスフォーマーフレームワーク
- ゲートの分解
- 回路の最適化(ゲートのマージ、Z ゲートの排出、無視できる操作の削除)
- ハードウェア向けの回路コンパイル
- 量子ビットのルーティングと SWAP の挿入
- カスタムトランスフォーマー
- 変換パイプライン
ハードウェア統合
さまざまなプロバイダーの実量子ハードウェア上で回路を実行する方法については、以下を参照してください。
- references/hardware.md - ハードウェア統合に関する完全ガイド
対応プロバイダー:
- Google Quantum AI (
cirq-google) — Quantum Engine を介して割り当てられたプロセッサ。承認されたプロジェクトから ID を確認してください。バンドルされている仮想プロセッサ名は、ライブアクセスの証明にはなりません。 - IonQ (
cirq-ionq) — トラップイオン方式の QPU とシミュレーター - Azure Quantum (
qdk[azure,cirq]) — ワークスペース内の Cirq 互換ターゲットを、専用のサポート対象環境で検出します - AQT (
cirq-aqt) — Alpine Quantum Technologies - Pasqal (
cirq-pasqal) — ローカルデバイスのモデリング。レガシーのリモートサンプラーは、検証済みの現在の Pasqal Cloud 統合ではありません
トピックには、デバイスの表現、量子ビットの選択、認証、ジョブ管理、ハードウェア向けの回路最適化が含まれます。Google Cloud のセットアップについては、アクセスと認証を参照してください。
ノイズモデリング
ノイズのモデリング、ノイズを含むシミュレーション、特性評価、エラー軽減の方法については、以下を参照してください。
- references/noise.md - ノイズモデリングに関する完全ガイド
よくあるトピック:
- ノイズチャネル(脱分極、振幅減衰、位相減衰)
- ノイズモデル(定数、ゲート固有、量子ビット固有、熱)
- 回路へのノイズの追加
- 読み出しノイズ
- ノイズの特性評価(ランダム化ベンチマーク、XEB)
- ノイズの可視化(ヒートマップ)
- エラー軽減手法
量子実験
実験の設計、パラメータースイープ、データ収集、および ReCirq フレームワークの使用については、以下を参照してください。
- references/experiments.md - 量子実験に関する完全ガイド
よくあるトピック:
- 実験設計のパターン
- パラメータースイープとデータ収集
- ReCirq フレームワークの構造
- 一般的なアルゴリズム(VQE、QAOA、QPE)
- データ分析と可視化
- 統計分析と忠実度の推定
- 並列データ収集
一般的なパターン
変分アルゴリズムのテンプレート
import scipy.optimize
def variational_algorithm(ansatz, cost_function, initial_params):
"""Template for variational quantum algorithms."""
def objective(params):
circuit = ansatz(params)
simulator = cirq.Simulator()
result = simulator.simulate(circuit)
return cost_function(result)
# Optimize
result = scipy.optimize.minimize(
objective,
initial_params,
method='COBYLA'
)
return result
# Define ansatz
def my_ansatz(params):
q = cirq.LineQubit(0)
return cirq.Circuit(
cirq.ry(params[0])(q),
cirq.rz(params[1])(q)
)
# Define cost function
def my_cost(result):
state = result.final_state_vector
# Single-qubit Pauli-Z expectation; invariant to global phase.
return float(abs(state[0])**2 - abs(state[1])**2)
# Run optimization
result = variational_algorithm(my_ansatz, my_cost, [0.0, 0.0])
ハードウェア実行のテンプレート
例示用: プロバイダーの認証情報、割り当てられたプロセッサ ID、および現在の プロバイダーのターゲット名が必要です。ローカルシミュレーションの例は、QPU へのアクセスを検証するものではありません。
import cirq
def run_on_hardware(circuit, sampler, device, repetitions=1000):
"""Submit an already routed/compiled circuit to an explicitly chosen sampler."""
device.validate_circuit(circuit)
return sampler.run(circuit, repetitions=repetitions)
hardware.md を使用して、プロバイダー固有のサンプラーを構成します。 ターゲットを明示的に選択してください。コンパイル自体は、接続されていない 量子ビットをルーティングしたり、ハードウェアへのアクセスを保証したりするものではありません。
ノイズ研究のテンプレート
def noise_comparison_study(circuit, noise_levels):
"""Compare circuit performance at different noise levels."""
results = {}
for noise_level in noise_levels:
# Create noisy circuit
noisy_circuit = circuit.with_noise(cirq.depolarize(p=noise_level))
# Simulate
simulator = cirq.DensityMatrixSimulator()
result = simulator.run(noisy_circuit, repetitions=1000)
# Analyze
results[noise_level] = {
'histogram': result.histogram(key='result'),
'dominant_state': max(
result.histogram(key='result').items(),
key=lambda x: x[1]
)
}
return results
# Run study on a Bell circuit with the measurement key expected above.
q0, q1 = cirq.LineQubit.range(2)
circuit = cirq.Circuit(cirq.H(q0), cirq.CNOT(q0, q1),
cirq.measure(q0, q1, key="result"))
noise_levels = [0.0, 0.001, 0.01, 0.05, 0.1]
results = noise_comparison_study(circuit, noise_levels)
ベストプラクティス
-
回路設計
- トポロジーに適した量子ビットタイプを使用する
- 回路をモジュール化して再利用可能に保つ
- 測定には説明的なキーを付ける
- 実行前にデバイスの制約に対して回路を検証する
-
シミュレーション
- 純粋状態には状態ベクトルシミュレーションを使用する(より効率的)
- 密度行列シミュレーションは必要な場合(混合状態、ノイズ)にのみ使用する
- 個別の実行ではなくパラメータースイープを活用する
- 大規模システムではメモリ使用量を監視する(2^n は急速に増大する)
-
ハードウェア実行
- 常にまずシミュレーターでテストする
- キャリブレーションデータを使用して最適な量子ビットを選択する
- 対象ハードウェアのゲートセットに合わせて回路を最適化する
- 緩和策はホールドアウトされたキャリブレーションと不確実性に対して検証する
- 高コストなハードウェア結果は即座に保存する
-
回路の最適化
- まず高レベルの組み込みトランスフォーマーから始める
- 複数の最適化を順に連鎖させる
- 深さとゲート数の削減を追跡する
- 変換後に正確性を検証する
-
ノイズモデリング
- キャリブレーションデータから得た現実的なノイズモデルを使用する
- モデルがどのゲート、アイドル、デコヒーレンス、読み出し効果を含むかを明示する
- 緩和の前に特性評価を行う
- ノイズの蓄積を最小限にするため回路を浅く保つ
-
実験
- 明確な分離(データ生成、収集、分析)で実験を構造化する
- 再現性のために ReCirq パターンを使用する
- 中間結果を頻繁に保存する
- 独立したタスクを並列化する
- メタデータとともに徹底的に文書化する
追加リソース
- 公式ドキュメント: https://quantumai.google/cirq
- API リファレンス: https://quantumai.google/reference/python/cirq
- チュートリアル: https://quantumai.google/cirq/tutorials
- 例: https://github.com/quantumlib/Cirq/tree/main/examples
- バージョンポリシー: https://quantumai.google/cirq/dev/versions
- ReCirq: https://github.com/quantumlib/ReCirq
よくある問題
回路がハードウェアに対して深すぎる:
- 回路最適化トランスフォーマーを使用して深さを削減する
- 最適化手法については
transformation.mdを参照してください
シミュレーションでのメモリ問題:
- 適切なチャネルには、状態ベクトルのトラジェクトリを使用し、十分な数の独立した実行を平均してください。単一のトラジェクトリは混合状態の密度行列ではありません
- 量子ビット数を減らすか、クリフォード回路にはスタビライザーシミュレーターを使用してください
デバイス検証エラー:
- device.metadata.nx_graph で量子ビットの接続性を確認してください
- ゲートをデバイスネイティブのゲートセットに分解してください
- デバイス固有のコンパイルについては
hardware.mdを参照してください
ノイズありシミュレーションが遅すぎる:
- 密度行列シミュレーションは O(2^2n) です - 量子ビット数の削減を検討してください
- ノイズモデルは重要な操作にのみ選択的に使用してください
- パフォーマンス最適化については
simulation.mdを参照してください
Scientific Agent Skills の引用
このスキルは K-Dense による Scientific Agent Skills の一部です。これが原稿、レポート、プレゼン テーション、またはコードリリースに実質的に貢献した場合は、参考文献またはソフトウェアセクションに 論文を追加し、そうしたことをユーザーに伝えてください:
Kassis, T., Agarwal, V., He, Y., Patel, D., & Brueckner, A. M. (2026). Scientific Agent Skills: A Library of Procedural Knowledge for Research Agents. arXiv:2609.00065. https://doi.org/10.48550/arXiv.2609.00065
常に最新バージョンを引用してください。DOI と https://arxiv.org/abs/2609.00065 は最新の arXiv
バージョンに解決されるため、v1 のようなバージョン接尾辞を決して付けないでください。ネットワーク
アクセスが利用可能な場合は、参考文献を書く前に https://arxiv.org/abs/2609.00065(または
http://export.arxiv.org/api/query?id_list=2609.00065)を取得し、そのレコードから著者リスト、年、
バージョンを取得してください。レコードにジャーナル参考文献または出版社 DOI が記載されている場合は、
代わりに公開版を引用してください。